@@ -53,6 +53,13 @@ enum SecondarySyncUpdateType
5353 SecondarySyncUpdateType_Trailer = (1 << 2 ),
5454};
5555
56+ struct RemovedDefaultObject
57+ {
58+ unsigned ModelId;
59+ Vector3 pos;
60+ float radius;
61+ };
62+
5663struct Player final : public IPlayer, public PoolIDProvider, public NoCopy
5764{
5865 PlayerPool& pool_;
@@ -113,12 +120,14 @@ struct Player final : public IPlayer, public PoolIDProvider, public NoCopy
113120 PlayerSpectateData spectateData_;
114121 float gravity_;
115122 bool ghostMode_;
116- int defaultObjectsRemoved_;
123+ // int defaultObjectsRemoved_;
124+ DynamicArray<RemovedDefaultObject> defaultObjectsRemoved_;
117125 bool allowWeapons_;
118126 bool allowTeleport_;
119127 bool isUsingOfficialClient_;
120128 bool isUsingOmp_;
121129 bool leavingSpec_;
130+
122131
123132 PrimarySyncUpdateType primarySyncUpdateType_;
124133 int secondarySyncUpdateType_;
@@ -200,7 +209,7 @@ struct Player final : public IPlayer, public PoolIDProvider, public NoCopy
200209 spectateData_ = { false , INVALID_PLAYER_ID, PlayerSpectateData::ESpectateType::None };
201210 gravity_ = 0 .0f ;
202211 ghostMode_ = false ;
203- defaultObjectsRemoved_ = 0 ;
212+ defaultObjectsRemoved_. clear () ;
204213 primarySyncUpdateType_ = PrimarySyncUpdateType::None;
205214 secondarySyncUpdateType_ = 0 ;
206215 leavingSpec_ = false ;
@@ -258,7 +267,6 @@ struct Player final : public IPlayer, public PoolIDProvider, public NoCopy
258267 , spectateData_({ false , INVALID_PLAYER_ID, PlayerSpectateData::ESpectateType::None })
259268 , gravity_(0 .0f )
260269 , ghostMode_(false )
261- , defaultObjectsRemoved_(0 )
262270 , allowWeapons_(true )
263271 , allowTeleport_(false )
264272 , isUsingOfficialClient_(params.isUsingOfficialClient)
@@ -946,17 +954,35 @@ struct Player final : public IPlayer, public PoolIDProvider, public NoCopy
946954
947955 void removeDefaultObjects (unsigned model, Vector3 pos, float radius) override
948956 {
949- defaultObjectsRemoved_++;
957+ RemovedDefaultObject theObject;
958+ theObject.ModelId = model;
959+ theObject.pos = pos;
960+ theObject.radius = radius;
961+
962+ defaultObjectsRemoved_.push (theObject);
963+ // defaultObjectsRemoved_++;
950964 NetCode::RPC::RemoveBuildingForPlayer removeBuildingForPlayerRPC;
951965 removeBuildingForPlayerRPC.ModelID = model;
952966 removeBuildingForPlayerRPC.Position = pos;
953967 removeBuildingForPlayerRPC.Radius = radius;
954968 PacketHelper::send (removeBuildingForPlayerRPC, *this );
955969 }
956970
957- int getDefaultObjectsRemoved () const override
971+ int getDefaultObjectsRemovedCount () const override
958972 {
959- return defaultObjectsRemoved_;
973+ return defaultObjectsRemoved_.size ();
974+ }
975+
976+ bool isDefaultObjectRemoved (unsigned model, Vector3 pos, float radius) const override
977+ {
978+ for (const auto & object : defaultObjectsRemoved_)
979+ {
980+ if (model != object.ModelId ) continue ;
981+ if (pos != object.pos ) continue ;
982+ if (radius != object.radius ) continue ;
983+ return true ;
984+ }
985+ return false ;
960986 }
961987
962988 bool getKickStatus () const override
0 commit comments