Arma Reforger Explorer  1.1.0.42
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
SCR_CreateLayerWithSelectionContextAction.c
Go to the documentation of this file.
3 {
4  protected ref set<SCR_EditableEntityComponent> m_EntitiesToMove = new set<SCR_EditableEntityComponent>();
5  protected SCR_EditableEntityCore m_Core;
6  protected SCR_BaseEditableEntityFilter m_SelectionFilter;
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 
19  if (!m_SelectionFilter)
20  {
21  m_SelectionFilter = SCR_BaseEditableEntityFilter.GetInstance(EEditableEntityState.SELECTED);
22  if (!m_SelectionFilter)
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
103  protected void OnEditableParentChanged(SCR_EditableEntityComponent entity, SCR_EditableEntityComponent newParent, SCR_EditableEntityComponent prevParent)
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);
114  if (m_SelectionFilter)
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);
127  if (m_SelectionFilter)
128  m_SelectionFilter.GetOnChanged().Remove(OnSelectionChanged);
129  }
130 
131 };
EEditableEntityState
EEditableEntityState
Definition: EEditableEntityState.c:37
EEditableEntityFlag
EEditableEntityFlag
Unique flags of the entity.
Definition: EEditableEntityFlag.c:5
SCR_EditableEntityCore
Definition: SCR_EditableEntityCore.c:10
SCR_BaseContextAction
Definition: SCR_BaseContextAction.c:7
EEditableEntityType
EEditableEntityType
Defines type of SCR_EditableEntityComponent. Assigned automatically based on IEntity inheritance.
Definition: EEditableEntityType.c:5
SCR_CreateLayerWithSelectionContextAction
Definition: SCR_CreateLayerWithSelectionContextAction.c:2
SCR_BaseEditableEntityFilter
Definition: SCR_BaseEditableEntityFilter.c:13
SCR_EditableEntityComponent
Definition: SCR_EditableEntityComponent.c:13
index
SCR_DestructionSynchronizationComponentClass ScriptComponentClass int index
Definition: SCR_DestructionSynchronizationComponent.c:17
SCR_LayersEditorComponent
Definition: SCR_LayersEditorManager.c:11
SCR_EditableEntityInteraction
Definition: SCR_EditableEntityInteraction.c:2
SCR_BaseContainerCustomTitleUIInfo
void SCR_BaseContainerCustomTitleUIInfo(string propertyName, string format="%1")
Definition: Attributes.c:788
BaseContainerProps
SCR_AIGoalReaction_Follow BaseContainerProps
Handles insects that are supposed to be spawned around selected prefabs defined in prefab names array...
Definition: SCR_AIGoalReaction.c:468