1[
ComponentEditorProps(
category:
"GameScripted/Editor", description:
"Attribute for managing editable entities. Works only with SCR_EditorBaseEntity!", icon:
"WBData/ComponentEditorProps/componentEditor.png")]
18 private ref array<ref SCR_BaseEditableEntityFilter> m_aFilters;
20 private ref array<ref SCR_BaseEditableEntityFilter> m_aFiltersSorted =
new array<ref SCR_BaseEditableEntityFilter>();
21 private ref array<SCR_BaseEditableEntityFilter> m_aFiltersRoot =
new array<SCR_BaseEditableEntityFilter>();
25 private bool m_bSkipSuccessors;
37 if (m_FiltersMap.Find(state, filter))
58 if (m_Core) m_Core.GetAllEntities(entities);
64 if (m_FiltersMap.Find(state, filter)) filter.
GetEntities(entities);
71 if (m_bSkipSuccessors)
return;
73 array<SCR_BaseEditableEntityFilter> successors;
74 if (!m_Successors.Find(state, successors))
return;
80 successor.Set(entitiesInsert, entitiesRemove,
true);
85 successor.Set(null, entitiesRemove,
true);
96 filter.Add(entity,
false);
105 filter.Remove(entity,
true);
112 m_bSkipSuccessors =
true;
116 filter.Validate(entity);
118 filter.Remove(entity,
true);
120 m_bSkipSuccessors =
false;
139 int entityID, parentID;
153 debugTexts.Insert(
"\n--- Entity Arrays");
156 foreach (
auto filter: m_aFiltersSorted)
158 if (!filter)
continue;
159 debugTexts.Insert(
string.Format(
"%1: %2x", filter.GetStateName(), filter.GetEntitiesCount()));
164 foreach (
auto filter: m_aFiltersSorted)
166 if (!filter)
continue;
167 set<SCR_EditableEntityComponent> entities =
new set<SCR_EditableEntityComponent>;
168 filter.GetEntities(entities);
169 debugTexts.Insert(
string.Format(
"%1: %2x", filter.GetStateName(), entities.Count()));
172 debugTexts.Insert(
"\n");
178 foreach (
auto filter: m_aFiltersSorted)
180 if (filter) filter.OnFrameBase(timeSlice);
231 m_bSkipSuccessors =
true;
234 if (m_bSkipSuccessors)
239 m_bSkipSuccessors =
false;
259 for (
int i = indexStart; i < indexEnd; i++)
272 if (!m_aFilters)
return;
275 array<int> enumValues = {};
277 enumValues.InsertAt(0, 0);
281 while (!m_aFilters.IsEmpty())
289 Print(
string.Format(
"Error when loading entity filter on index %1!", i),
LogLevel.ERROR);
290 m_aFilters.Remove(i);
298 if (state == 0 || state == predecessorState || !enumValues.Contains(predecessorState))
301 m_aFilters.Remove(i);
305 if (predecessorState == 0)
308 m_aFiltersSorted.InsertAt(filter, 0);
309 m_aFiltersRoot.Insert(filter);
313 m_FiltersMap.Find(predecessorState, predecessor);
314 int predecessorID = m_aFiltersSorted.Find(predecessor);
315 if (predecessorID < 0)
318 i =
Math.Repeat(i + 1, m_aFilters.Count());
324 m_aFiltersSorted.InsertAt(filter, predecessorID + 1);
327 array<SCR_BaseEditableEntityFilter> predecessorSuccessors;
328 m_Successors.Find(predecessor.
GetState(), predecessorSuccessors);
329 predecessorSuccessors.Insert(filter);
334 m_FiltersMap.Insert(state, filter);
335 m_Successors.Insert(state,
new array<SCR_BaseEditableEntityFilter>);
337 m_aFilters.Remove(i);
EEditableEntityFilterAutoAdd
enum EAIGroupCombatMode ComponentEditorProps(category:"GameScripted/AI", description:"Component for utility AI system for groups")
proto external bool IsActive()
proto external int SetEventMask(notnull IEntity owner, int mask)
void Rpc(func method, void p0=NULL, void p1=NULL, void p2=NULL, void p3=NULL, void p4=NULL, void p5=NULL, void p6=NULL, void p7=NULL)
EEditableEntityState GetState()
EEditableEntityState GetPredecessorState()
void InitVariables(SCR_EntitiesManagerEditorComponent manager, SCR_BaseEditableEntityFilter predecessor)
int GetEntities(out set< SCR_EditableEntityComponent > entities, bool includeChildren=false, bool evaluate=true)
void SCR_BaseEditorComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
SCR_EditableEntityComponent SetParentEntity(SCR_EditableEntityComponent parentEntity, bool changedByUser=false)
bool IsReplicated(out RplId replicationID=-1)
override void EOnEditorActivate()
const int ASYNC_ENTITY_BATCH_SIZE
override void EOnEditorDeactivate()
override void EOnEditorDebug(array< string > debugTexts)
void OnEntityUnregistered(SCR_EditableEntityComponent entity)
override bool EOnEditorDeactivateAsync(int attempt)
override void EOnEditorInit()
void OnEntityRegistered(SCR_EditableEntityComponent entity)
SCR_BaseEditableEntityFilter GetFilter(EEditableEntityState state, bool showError=false)
void SetParentEntityServer(int entityID, int parentEntityID)
void SetInSuccessors(EEditableEntityState state, set< SCR_EditableEntityComponent > entitiesInsert, set< SCR_EditableEntityComponent > entitiesRemove)
void GetEntities(EEditableEntityState state, out set< SCR_EditableEntityComponent > entities)
override bool EOnEditorActivateAsync(int attempt)
void SetParentEntity(SCR_EditableEntityComponent entity, SCR_EditableEntityComponent parentEntity)
void OnParentEntityChanged(SCR_EditableEntityComponent entity, SCR_EditableEntityComponent parentEntity, SCR_EditableEntityComponent parentEntityPrev)
override void EOnFrame(IEntity owner, float timeSlice)
ref set< SCR_EditableEntityComponent > m_AsyncEntities
proto external GenericEntity GetOwner()
Get owner entity.
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.
SCR_FieldOfViewSettings Attribute
EntityEvent
Various entity events.
void RplRpc(RplChannel channel, RplRcver rcver, RplCondition condition=RplCondition.None, string customConditionName="")
RplChannel
Communication channel. Reliable is guaranteed to be delivered. Unreliable not.