5class SCR_RegionalDestructionManager : RegionalDestructionManager
10 override bool OnSave(notnull ScriptBitWriter writer)
17 writer.WriteBool(
false);
20 writer.WriteBool(
true);
21 boundingBox.OnSave(writer);
33 reader.ReadInt(count);
35 ref array<ref vector> boxesPositions = {};
36 SCR_DestructionManager manager = SCR_DestructionManager.GetDestructionManagerInstance();
40 bool exists = manager.m_RegionalManagerHandledBoxes.Find(
GetRplID(), boxesPositions);
43 boxesPositions =
new array<ref vector>;
44 manager.m_RegionalManagerHandledBoxes.Insert(
GetRplID(), boxesPositions);
48 for (
int i = 0; i < count; i++)
51 reader.ReadBool(hasBB);
56 boundingBox.OnLoad(reader);
59 if (boxesPositions && boxesPositions.Contains(boundingBox.m_vMatrix[3] + boundingBox.m_center))
63 boxesPositions.Insert(boundingBox.m_vMatrix[3] + boundingBox.m_center);
77 QueryEntities(boundingBox.m_vMin, boundingBox.m_vMax, boundingBox.m_vMatrix);
80 SCR_BuildingInteriorDeletinator.QueueDeletionsThisFrame();
89 boundingBox.SetBounds(mins, maxs);
90 boundingBox.m_center = center;
111 if (!e.GetPhysics() && !e.GetChildren())
116 foreach (
typename typeName : manager.GetExcludedQueryTypes())
122 SCR_EditorLinkComponent linkComp = SCR_EditorLinkComponent.Cast(e.FindComponent(SCR_EditorLinkComponent));
126 SCR_BuildingInteriorDeletinator.InsertEntitiesToDelete(e);
133 RplComponent rplComp = RplComponent.Cast(entity.FindComponent(RplComponent));
147 static DestructionManager GetDestructionManager(BaseWorld world)
149 ChimeraWorld chimeraWorld = ChimeraWorld.CastFrom(world);
151 return chimeraWorld.GetDestructionManager();
158 BaseRplComponent component = BaseRplComponent.Cast(FindComponent(BaseRplComponent));
161 return component.Id();
176 void OnSave(notnull ScriptBitWriter writer)
178 writer.WriteVector(m_vMatrix[0]);
179 writer.WriteVector(m_vMatrix[1]);
180 writer.WriteVector(m_vMatrix[2]);
181 writer.WriteVector(m_vMatrix[3]);
183 writer.WriteVector(m_vMin);
184 writer.WriteVector(m_vMax);
185 writer.WriteVector(m_center);
191 for (
int i = 0; i < 4; i++)
194 reader.ReadVector(value);
195 m_vMatrix[i] = value;
198 reader.ReadVector(m_vMin);
199 reader.ReadVector(m_vMax);
200 reader.ReadVector(m_center);
211class SCR_BuildingInteriorDeletinator
214 static const int MAX_DELETIONS_PER_FRAME = 30;
215 static bool s_bDeletionsQueued =
false;
217 static ref array<IEntity> s_aEntitiesToDelete = {};
220 static void InsertEntitiesToDelete(
IEntity entityToDelete)
222 s_aEntitiesToDelete.Insert(entityToDelete);
226 static void QueueDeletionsThisFrame()
228 if (s_bDeletionsQueued)
231 s_bDeletionsQueued =
true;
232 GetGame().GetCallqueue().CallLater(SCR_BuildingInteriorDeletinator.DeleteInteriorEntities);
237 static void DeleteInteriorEntities()
241 int lastElementIndex = s_aEntitiesToDelete.Count() -1;
242 int previousSize = s_aEntitiesToDelete.Count();
247 if (indexToDelete < 0)
250 entityToDelete = s_aEntitiesToDelete[indexToDelete];
256 RplComponent.DeleteRplEntity(entityToDelete,
false);
259 if (s_aEntitiesToDelete.Count() != previousSize)
261 Print(
"SCR_BuildingInteriorDeletinator::While deleting building interiors new entities where added to the array of entities to delete, this is a HUGE issue!",
LogLevel.ERROR);
262 s_bDeletionsQueued =
false;
263 QueueDeletionsThisFrame();
272 s_bDeletionsQueued =
false;
274 if (!s_aEntitiesToDelete.IsEmpty())
275 QueueDeletionsThisFrame();
ArmaReforgerScripted GetGame()
SCR_DestructionSynchronizationComponentClass ScriptComponentClass int index
void SCR_PowerPole(IEntitySource src, IEntity parent)
override bool OnLoad(notnull ScriptBitReader reader)
bool AddEntityCallback(notnull IEntity e)
Filters what entities should be handled.
bool QueryFilterCallback(notnull IEntity entity)
Used to filter out entities that are not meant to be handled in AddEntityCallback.
override bool OnSave(notnull ScriptBitWriter writer)
void QueryEntities(vector min, vector max, vector m_vMatrix[4])
SCR_RegionalDestructionManagerClass m_aInteriorBoxes
class SCR_DestructionInteriorBoundingBox s_iDeletionsThisFrame
void RegisterInteriorBoundingBox(vector m_vStartMatrix[4], vector mins, vector maxs, vector center)
void ProcessInteriorBoundingBoxes()
CGoes through the interior boxes registered in regional manager to query entities in them for destruc...
enum EVehicleType IEntity
proto external IEntity GetParent()
Replication item identifier.
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.