Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_CreateLayerWithSelectionContextAction.c
Go to the documentation of this file.
3{
4 protected ref set<SCR_EditableEntityComponent> m_EntitiesToMove = new set<SCR_EditableEntityComponent>();
7 protected bool m_bSelectionCanceled;
8
9
10 override bool CanBeShown(SCR_EditableEntityComponent hoveredEntity, notnull set<SCR_EditableEntityComponent> selectedEntities, vector cursorWorldPosition, int flags)
11 {
12 if (!m_Core)
13 {
15 if (!m_Core)
16 return false;
17 }
18
20 {
23 return false;
24 }
25
27 if (!layerManager || !layerManager.IsEditingLayersEnabled())
28 return false;
29
30 bool hasValidEntities = false;
31
33
34 foreach (SCR_EditableEntityComponent entity: selectedEntities)
35 {
36 if (entity)
37 {
38 parent = entity.GetParentEntity();
39 break;
40 }
41 }
42
43 EEditableEntityFlag newLayerFlags;
44 newLayerFlags |= EEditableEntityFlag.LAYER;
45 int count = selectedEntities.Count();
46
48 for (int i = 0; i < count; i++)
49 {
50 interaction = selectedEntities[i].GetEntityInteraction();
51 if (interaction && interaction.CanCreateParentFor(EEditableEntityType.GENERIC, newLayerFlags, parent, i == 0))
52 {
53 hasValidEntities = true;
54 break;
55 }
56 }
57
58
59 return hasValidEntities;
60 }
61
62 override bool CanBePerformed(SCR_EditableEntityComponent hoveredEntity, notnull set<SCR_EditableEntityComponent> selectedEntities, vector cursorWorldPosition, int flags)
63 {
64 return true;
65 }
66 override void Perform(SCR_EditableEntityComponent hoveredEntity, notnull set<SCR_EditableEntityComponent> selectedEntities, vector cursorWorldPosition,int flags, int param = -1)
67 {
69 if (!layerManager) return;
70
71
72 //If selected the current layer the user is in
73 if (selectedEntities.Contains(layerManager.GetCurrentLayer()))
74 {
75 selectedEntities.Clear();
76 selectedEntities.Insert(layerManager.GetCurrentLayer());
77 layerManager.SetCurrentLayer(layerManager.GetCurrentLayer().GetParentEntity());
78 }
79
80 EEditableEntityFlag newLayerFlags;
81 newLayerFlags |= EEditableEntityFlag.LAYER;
82 SCR_EditableEntityComponent parent = selectedEntities[0].GetParentEntity();
83 m_EntitiesToMove.Clear();
84 int count = selectedEntities.Count();
85
87 for (int i = 0; i < count; i++)
88 {
89 interaction = selectedEntities[i].GetEntityInteraction();
90 if (interaction && interaction.CanCreateParentFor(EEditableEntityType.GENERIC, newLayerFlags, parent, i == 0))
91 {
92 m_EntitiesToMove.Insert(selectedEntities[i]);
93 }
94 }
95
96 m_Core.Event_OnParentEntityChanged.Insert(OnEditableParentChanged);
97 m_SelectionFilter.GetOnChanged().Insert(OnSelectionChanged);
98
99 layerManager.CreateNewLayerWithSelected(m_EntitiesToMove, cursorWorldPosition);
100 }
101
102 //Parent was changed so set these as selected
104 {
105 int index = m_EntitiesToMove.Find(entity);
106 if (index > -1)
107 {
108 m_EntitiesToMove.Remove(index);
109
110 if (m_EntitiesToMove.IsEmpty())
111 {
112 if (m_Core)
113 m_Core.Event_OnParentEntityChanged.Remove(OnEditableParentChanged);
115 m_SelectionFilter.GetOnChanged().Remove(OnSelectionChanged);
116
117 m_SelectionFilter.Add(newParent, true);
118 }
119 }
120 }
121
122 //If any selection is changed Remove the events
123 protected void OnSelectionChanged(EEditableEntityState state, set<SCR_EditableEntityComponent> entitiesSelected, set<SCR_EditableEntityComponent> entitiesDeselected)
124 {
125 if (m_Core)
126 m_Core.Event_OnParentEntityChanged.Remove(OnEditableParentChanged);
128 m_SelectionFilter.GetOnChanged().Remove(OnSelectionChanged);
129 }
130
131};
SCR_EAIThreatSectorFlags flags
SCR_AIAnimation_Loitering BaseContainerProps
Commanding menu commanding element class.
class SCR_ArsenalGameModeUIDataHolder SCR_BaseContainerCustomTitleUIInfo("m_UIInfo")
SCR_DestructionSynchronizationComponentClass ScriptComponentClass int index
static SCR_BaseEditableEntityFilter GetInstance(EEditableEntityState state, bool showError=false)
override void Perform(SCR_EditableEntityComponent hoveredEntity, notnull set< SCR_EditableEntityComponent > selectedEntities, vector cursorWorldPosition, int flags, int param=-1)
override bool CanBePerformed(SCR_EditableEntityComponent hoveredEntity, notnull set< SCR_EditableEntityComponent > selectedEntities, vector cursorWorldPosition, int flags)
void OnEditableParentChanged(SCR_EditableEntityComponent entity, SCR_EditableEntityComponent newParent, SCR_EditableEntityComponent prevParent)
void OnSelectionChanged(EEditableEntityState state, set< SCR_EditableEntityComponent > entitiesSelected, set< SCR_EditableEntityComponent > entitiesDeselected)
override bool CanBeShown(SCR_EditableEntityComponent hoveredEntity, notnull set< SCR_EditableEntityComponent > selectedEntities, vector cursorWorldPosition, int flags)
SCR_EditableEntityComponent GetParentEntity()
bool CanCreateParentFor(EEditableEntityType newLayerType, EEditableEntityFlag newLayerFlags, SCR_EditableEntityComponent parentEntity, bool CheckParentEntity=true)
SCR_EditableEntityComponent GetCurrentLayer()
void CreateNewLayerWithSelected(notnull set< SCR_EditableEntityComponent > entities, vector worldPosition)
void SetCurrentLayer(SCR_EditableEntityComponent entity)
EEditableEntityType
Defines type of SCR_EditableEntityComponent. Assigned automatically based on IEntity inheritance.
EEditableEntityFlag
Unique flags of the entity.
EEditableEntityState