Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_CampaignBuildingTransformingEditorComponent.c
Go to the documentation of this file.
1[ComponentEditorProps(category: "GameScripted/Editor", description: "Entity transformation (moving and rotating). Works only with SCR_EditorBaseEntity!", icon: "WBData/ComponentEditorProps/componentEditor.png")]
6
9
10class SCR_CampaignBuildingTransformingEditorComponent : SCR_TransformingEditorComponent
11{
13 protected SCR_CampaignBuildingPlacingObstructionEditorComponent m_ObstructionComponent;
14 protected SCR_CampaignBuildingPlacingHQBaseEditorComponent m_HQBaseEditorComponent;
17
18 //------------------------------------------------------------------------------------------------
20 {
21 m_PreviewEntity = previewEnt;
23 m_PreviewManager.GetOnPreviewCreate().Remove(OnPreviewCreated);
24 }
25
26 //------------------------------------------------------------------------------------------------
28 {
29 m_PreviewManager.GetOnPreviewDelete().Remove(OnPreviewDeleted);
30 }
31 //------------------------------------------------------------------------------------------------
32 override void StartEditing(SCR_EditableEntityComponent pivot, notnull set<SCR_EditableEntityComponent> entities, vector transform[4])
33 {
34 if (!pivot || IsEditing(pivot) || m_LastRejectedPivot == pivot)
35 return;
36
37 SCR_CampaignBuildingCompositionComponent compositionComponent = SCR_CampaignBuildingCompositionComponent.Cast(pivot.GetOwner().FindComponent(SCR_CampaignBuildingCompositionComponent));
38 if (!compositionComponent)
39 return;
40
41 if (compositionComponent.IsInteractionLocked())
42 {
43 SCR_NotificationsComponent.SendLocal(ENotification.EDITOR_COMPOSITION_UNDER_CONSTRUCTION);
44 m_LastRejectedPivot = pivot;
45 return;
46 }
47
49
50 m_PreviewManager.GetOnPreviewCreate().Insert(OnPreviewCreated);
51 m_PreviewManager.GetOnPreviewDelete().Insert(OnPreviewDeleted);
52
53 super.StartEditing(pivot, entities, transform);
54 }
55
56 //------------------------------------------------------------------------------------------------
57 [RplRpc(RplChannel.Reliable, RplRcver.Server)]
58 override void StartEditingServer(int pivotId, array<int> entityIds, vector dummyVector, vector transform[4], bool isUnderwater, EEditorTransformVertical verticalMode)
59 {
60 super.StartEditingServer(pivotId, entityIds, dummyVector, transform, isUnderwater, verticalMode);
61
62 IEntity child = m_EditedPivot.GetOwner().GetChildren();
63 SCR_CampaignBuildingLayoutComponent layoutComponent;
64
65 while (child && !layoutComponent)
66 {
67 layoutComponent = SCR_CampaignBuildingLayoutComponent.Cast(child.FindComponent(SCR_CampaignBuildingLayoutComponent));
68
69 if (!layoutComponent)
70 child = child.GetSibling();
71 }
72
73 if (layoutComponent)
74 {
75 layoutComponent.LockCompositionInteraction();
76 layoutComponent.DeletePreview();
77 SCR_EntityHelper.DeleteEntityAndChildren(layoutComponent.GetOwner());
78 }
79 }
80
81 //------------------------------------------------------------------------------------------------
82 [RplRpc(RplChannel.Reliable, RplRcver.Owner)]
83 override void StartEditingOwner()
84 {
86 return;
87
88 //--- Transforming was meanwhile canceled, ignore
89 if (!m_StatesManager.SetIsWaiting(false) || m_StatesManager.GetState() != EEditorState.TRANSFORMING)
90 {
92 return;
93 }
94
95 IEntity owner = m_EditedPivot.GetOwner();
96 if (!owner)
97 return;
98
99 vector transform[4];
100 owner.GetWorldTransform(transform);
101
102 array<vector> offsets = {};
103 ResourceName resName = owner.GetPrefabData().GetPrefabName();
104 //--- Create preview
105 SCR_BasePreviewEntity previewEntity = m_PreviewManager.CreatePreview(resName, offsets, transform);
106
107 Event_OnTransformationStart.Invoke(m_aEditedEntities);
108
110 if (prefabData)
111 SCR_BaseEditorEffect.Activate(prefabData.GetEffectsTransforationStart(), this, entities: m_aEditedEntities);
112 }
113
114 //------------------------------------------------------------------------------------------------
115 override void EOnEditorActivate()
116 {
117 super.EOnEditorActivate();
118
120
121 m_ObstructionComponent = SCR_CampaignBuildingPlacingObstructionEditorComponent.Cast(FindEditorComponent(SCR_CampaignBuildingPlacingObstructionEditorComponent, true, true));
122 m_HQBaseEditorComponent = SCR_CampaignBuildingPlacingHQBaseEditorComponent.Cast(FindEditorComponent(SCR_CampaignBuildingPlacingHQBaseEditorComponent, true, true));
123 }
124
125 //------------------------------------------------------------------------------------------------
128 {
129 SCR_CampaignBuildingEditorComponent editorComponent = SCR_CampaignBuildingEditorComponent.Cast(SCR_CampaignBuildingEditorComponent.GetInstance(SCR_CampaignBuildingEditorComponent, true));
130 if (!editorComponent)
131 return false;
132
133 SCR_CampaignBuildingProviderComponent providerComponent = editorComponent.GetProviderComponent();
134 if (!providerComponent)
135 return false;
136
137 if (vector.Distance(previewOrigin, providerComponent.GetOwner().GetOrigin()) > providerComponent.GetBuildingRadius())
138 return false;
139 return true;
140 }
141
142 //------------------------------------------------------------------------------------------------
143 override bool ConfirmEditing()
144 {
145 vector transform[4];
146 m_PreviewManager.GetPreviewTransform(transform);
147
148 if (!m_ObstructionComponent.CanCreate() || !IsInBuildingRadiusVector(transform[3]) || m_HQBaseEditorComponent && !m_HQBaseEditorComponent.CanCreate())
149 {
151 return false;
152 }
153
154 super.ConfirmEditing();
155
156 return true;
157 }
158
159 //------------------------------------------------------------------------------------------------
162 {
163 m_LastRejectedPivot = null;
164 }
165
167 {
168 return m_EditedPivot;
169 }
170
171 //------------------------------------------------------------------------------------------------
172 [RplRpc(RplChannel.Reliable, RplRcver.Owner)]
174 {
175 IEntity composition = m_EditedPivot.GetOwner();
176
177 super.ConfirmEditingServer(params, playerID);
178
179 SCR_CampaignBuildingCompositionComponent compositionComponent = SCR_CampaignBuildingCompositionComponent.Cast(composition.FindComponent(SCR_CampaignBuildingCompositionComponent));
180 if (!compositionComponent)
181 return;
182
183 // m_EditedPivot can't be used as it's set to null after super. is called. However this code can't be call before.
185 if (!editableEntity)
186 return;
187
188 compositionComponent.SpawnCompositionLayout(compositionComponent.GetPrefabId(), editableEntity);
189 compositionComponent.SetInteractionLockServer(false);
190 }
191
192 //------------------------------------------------------------------------------------------------
193 [RplRpc(RplChannel.Reliable, RplRcver.Server)]
194 override void CancelEditingServer()
195 {
196 SCR_CampaignBuildingLayoutComponent layoutComponent;
197
198 if (m_EditedPivot)
199 {
200 IEntity composition = m_EditedPivot.GetOwner();
201 SCR_CampaignBuildingCompositionComponent compositionComponent = SCR_CampaignBuildingCompositionComponent.Cast(composition.FindComponent(SCR_CampaignBuildingCompositionComponent));
202 if (!compositionComponent)
203 return;
204
205 compositionComponent.SpawnCompositionLayout(compositionComponent.GetPrefabId(), m_EditedPivot);
206 compositionComponent.SetInteractionLockServer(false);
207 }
208
209 super.CancelEditingServer();
210 }
211}
ENotification
enum EAIGroupCombatMode ComponentEditorProps(category:"GameScripted/AI", description:"Component for utility AI system for groups")
void OnPreviewCreated(SCR_EditablePreviewEntity previewEnt)
Method called when the preview of prefab to build is created.
SCR_PreviewEntityEditorComponent m_PreviewManager
SCR_EditableEntityComponent GetEditedPivot()
void ReleaseLastRejectedPivot()
The variable has to be set to null if the editing was blocked because of the temporary move of the co...
SCR_CampaignBuildingPlacingHQBaseEditorComponent m_HQBaseEditorComponent
bool IsInBuildingRadiusVector(vector previewOrigin)
Test if the composition is moved out of the building mode and if so, deny the transfer.
SCR_PreviewEntityEditorComponent m_PreviewEntityEditorComponent
SCR_CampaignBuildingPlacingObstructionEditorComponent m_ObstructionComponent
IEntity m_PreviewEntity
SCR_RefPreviewEntityClass m_aEditedEntities
Reference entity used to position edited entities according to preview.
proto external Managed FindComponent(typename typeName)
proto external IEntity GetChildren()
proto external void GetWorldTransform(out vector mat[])
See IEntity::GetTransform.
proto external EntityPrefabData GetPrefabData()
proto external IEntity GetSibling()
EntityComponentPrefabData GetEditorComponentData()
SCR_BaseEditorComponent FindEditorComponent(typename type, bool showError=false, bool modeFirst=false)
Network packet of variables for entity placing and transformation.
void StartEditingServer(int pivotId, array< int > entityIds, vector dummyVector, vector transform[4], bool isUnderwater, EEditorTransformVertical verticalMode)
void StartEditing(SCR_EditableEntityComponent pivot, notnull set< SCR_EditableEntityComponent > entities, vector transform[4])
void ConfirmEditingServer(SCR_EditorPreviewParams params, int playerID)
SCR_CampaignBuildingTransformingEditorComponentClass m_LastRejectedPivot
EEditorTransformVertical
Vertical transformation mode.
EEditorState
Unique editor state.
Definition EEditorState.c:6
void RplRpc(RplChannel channel, RplRcver rcver, RplCondition condition=RplCondition.None, string customConditionName="")
Definition EnNetwork.c:95
RplRcver
Definition RplRcver.c:59
RplChannel
Communication channel. Reliable is guaranteed to be delivered. Unreliable not.
Definition RplChannel.c:14