8class SCR_ScenarioFrameworkTaskType
32 [
Attribute(defvalue:
"1",
UIWidgets.CheckBox,
desc:
"Activate the trigger once or everytime the activation condition is true?",
category:
"Trigger")]
35 [
Attribute(
desc:
"Actions that will be activated when Trigger gets activated",
category:
"OnActivation")]
36 ref array<ref SCR_ScenarioFrameworkActionBase> m_aTriggerActions;
38 SCR_BaseTriggerEntity m_Trigger;
43 string m_sItemDeliveryPointName;
44 SCR_ScenarioFrameworkLayerTask m_LayerTask;
45 SCR_ScenarioFrameworkSlotTask m_SlotTask;
47 ref array<ref Tuple3<SCR_ScenarioFrameworkLayerBase, vector, int>> m_aSpawnedLayers = {};
48 ref array<ref Tuple3<SCR_ScenarioFrameworkLayerBase, vector, int>> m_aDespawnedLayers = {};
66 void SetSlotTask(SCR_ScenarioFrameworkSlotTask slotTask)
68 m_SlotTask = slotTask;
80 void SetLayerTask(SCR_ScenarioFrameworkLayerTask layerTask)
82 m_LayerTask = layerTask;
87 string GetLayerTaskName()
89 return m_LayerTask.GetOwner().GetName();
96 return m_LayerTask.GetTaskType();
101 string GetDeliveryPointName()
103 return m_sItemDeliveryPointName;
109 void StoreDeliveryPoint(
string sDeliveryPointName)
111 m_sItemDeliveryPointName = sDeliveryPointName;
112 if (!SCR_TaskDeliver.Cast(m_Task))
115 SCR_TaskDeliver.Cast(m_Task).SetTriggerNameToDeliver(sDeliveryPointName);
129 SCR_ScenarioFrameworkLayerTask Create()
131 array<SCR_ScenarioFrameworkLayerBase> aSlotsOut = {};
133 if (aSlotsOut.IsEmpty())
140 return SCR_ScenarioFrameworkLayerTask.Cast(
layer);
149 array<SCR_ScenarioFrameworkLayerBase> aSlotsOut = {};
151 if (aSlotsOut.IsEmpty())
155 m_LayerTask = SCR_ScenarioFrameworkLayerTask.Cast(aSlotsOut.GetRandomElement());
166 void Create(SCR_ScenarioFrameworkLayerTask layerTask, SCR_ScenarioFrameworkSlotTask slotTask = null)
171 m_LayerTask = layerTask;
172 m_LayerTask.AddRandomlySpawnedChild(slotTask);
190 spawnParams.TransformMode = ETransformMode.WORLD;
198 m_Trigger.SetSphereRadius(m_fAreaRadius);
209 triggerAction.Init(m_Trigger);
229 array<SCR_ESFTaskType> aTaskTypes = {};
231 if (aTaskTypes.IsEmpty())
234 return aTaskTypes.Find(eTaskType) != -1;
242 array<SCR_ScenarioFrameworkLayerBase> aSlots = {};
245 SCR_ScenarioFrameworkLayerTask pos;
248 pos = SCR_ScenarioFrameworkLayerTask.Cast(
layer);
252 eType = pos.GetTaskType();
253 if (aTaskTypes.Find(eType) == -1)
254 aTaskTypes.Insert(eType);
265 array<SCR_ScenarioFrameworkLayerBase> aSlots = {};
267 SCR_ScenarioFrameworkLayerTask pos;
270 pos = SCR_ScenarioFrameworkLayerTask.Cast(
layer);
274 eType = pos.GetTaskType();
275 if (eTaskType == eType)
276 aSlotsOut.Insert(pos);
284 m_bAreaSelected = bSet;
291 return m_bAreaSelected;
298 if (m_OnTriggerActivated)
301 m_OnTriggerActivated.Clear();
305 m_Trigger.EnablePeriodicQueries(
false);
313 if (!m_OnTriggerActivated)
316 return m_OnTriggerActivated;
331 override void RestoreToDefault(
bool includeChildren =
false,
bool reinitAfterRestoration =
false,
bool affectRandomization =
true,
bool deleteSpawnedEntities =
true)
333 m_bAreaSelected =
false;
335 m_sItemDeliveryPointName =
"";
339 super.RestoreToDefault(includeChildren, reinitAfterRestoration, affectRandomization, deleteSpawnedEntities);
363 if (!child.m_bDynamicDespawn)
364 child.DynamicDespawn(
this);
386 PrintFormat(
"ScenarioFramework: Area %1 is set to %2 activation type, but area will always spawn on Init as default",
GetOwner().
GetName(), activation,
LogLevel.WARNING);
397 super.AfterAllChildrenSpawned(
layer);
408 layer.SetDynamicDespawnEnabled(
true);
409 layer.SetDynamicDespawnRange(despawnRange);
411 if (m_aDespawnedLayers.IsEmpty() && m_aSpawnedLayers.IsEmpty())
432 layer.SetDynamicDespawnEnabled(
false);
438 for (
int i = m_aDespawnedLayers.Count() - 1; i >= 0; i--)
441 if (
layer == layerInfo.param1)
442 m_aDespawnedLayers.Remove(i);
445 for (
int i = m_aSpawnedLayers.Count() - 1; i >= 0; i--)
448 if (
layer == layerInfo.param1)
449 m_aSpawnedLayers.Remove(i);
452 if (m_aDespawnedLayers.IsEmpty() && m_aSpawnedLayers.IsEmpty())
464 if (!scenarioFrameworkSystem)
479 if (!scenarioFrameworkSystem)
489 if (!scenarioFrameworkSystem)
501 for (
int i = m_aDespawnedLayers.Count() - 1; i >= 0; i--)
503 layerInfo = m_aDespawnedLayers[i];
504 if (!layerInfo.param1)
509 foreach (
vector observerPos : observers)
511 if (
vector.DistanceSqXZ(observerPos, layerInfo.param2) < layerInfo.param3)
513 layerInfo.param1.DynamicReinit();
514 m_aSpawnedLayers.Insert(layerInfo);
515 m_aDespawnedLayers.Remove(i);
527 for (
int i = m_aSpawnedLayers.Count() - 1; i >= 0; i--)
529 layerInfo = m_aSpawnedLayers[i];
530 if (!layerInfo.param1)
533 bool observerInRange;
534 foreach (
vector observerPos : observers)
536 if (
vector.DistanceSqXZ(observerPos, layerInfo.param2) < layerInfo.param3)
538 observerInRange =
true;
543 if (!observerInRange)
545 layerInfo.param1.DynamicDespawn(null);
546 m_aDespawnedLayers.Insert(layerInfo);
547 m_aSpawnedLayers.Remove(i);
562 if (scenarioFrameworkSystem)
565 array<SCR_ScenarioFrameworkLayerBase> children = {};
572 if (scenarioFrameworkSystem && scenarioFrameworkSystem.
IsMaster())
578 if (!child.GetDynamicDespawnEnabled())
581 int despawnRange = child.GetDynamicDespawnRange();
585 if (!m_aDespawnedLayers.IsEmpty())
595 super.OnPostInit(owner);
603 Shape dbgShape = null;
607 dbgShape =
Shape.CreateSphere(
614 if (m_sTriggerResource.IsEmpty())
617 Shape triggerdbgShape = null;
618 triggerdbgShape =
Shape.CreateSphere(
619 ARGB(100, 0x99, 0x10, 0xF2),
642 if (scenarioFrameworkSystem)
IEntity SpawnEntityPrefabEx(ResourceName prefab, bool randomizeEditableVariant, BaseWorld world=null, EntitySpawnParams params=null)
ArmaReforgerScripted GetGame()
SCR_BaseGameMode GetGameMode()
ScriptedGameTriggerEntity GetTrigger()
enum SCR_ECompassType EntityEditorProps(category:"GameScripted/Gadgets", description:"Compass", color:"0 0 255 255")
Prefab data class for compass component.
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
SCR_ScenarioFrameworkAreaClass SCR_ScenarioFrameworkLayerBaseClass BaseContainerProps()] class SCR_ScenarioFrameworkTaskType
SCR_ScenarioFrameworkEActivationType
SCR_ScenarioFrameworkEActivationType m_eActivationType
void GetChildren(out array< SCR_ScenarioFrameworkLayerBase > children)
ref array< SCR_ScenarioFrameworkLayerBase > m_aChildren
bool m_bExcludeFromDynamicDespawn
void SCR_ScenarioFrameworkLayerBase(IEntityComponentSource src, IEntity ent, IEntity parent)
int m_iDynamicDespawnRange
SCR_ScenarioFrameworkLayerTask GetLayerTask()
bool m_bDynamicallyDespawned
float m_fDebugShapeRadius
void GetAllLayers(out notnull array< SCR_ScenarioFrameworkLayerBase > layers)
SCR_ScenarioFrameworkSlotTask GetSlotTask()
SCR_ScenarioFrameworkTask GetTask()
SCR_ESFTaskType GetTaskType()
void SCR_Task(IEntitySource src, IEntity parent)
proto external void GetWorldTransform(out vector mat[])
See IEntity::GetTransform.
void SetupTrigger()
Spawns a trigger entity with specified resource, sets its radius, and attaches an activation event.
override void DynamicDespawn(SCR_ScenarioFrameworkLayerBase layer)
void SetAreaSelected(bool bSet)
void PrepareDynamicDespawn()
Prepares dynamic spawn/despawn for layers.
void RemoveDynamicDespawn()
Removes dynamic spawn/despawn for layers.
void RemoveLayerSpecificDynamicDespawn(SCR_ScenarioFrameworkLayerBase layer, bool staySpawned=false)
void SCR_ScenarioFrameworkArea(IEntityComponentSource src, IEntity ent, IEntity parent)
void GetSuitableLayersForTaskType(out notnull array< SCR_ScenarioFrameworkLayerBase > aSlotsOut, SCR_ESFTaskType eTaskType)
void DrawDebugShape(bool draw)
override void RestoreToDefault(bool includeChildren=false, bool reinitAfterRestoration=false, bool affectRandomization=true, bool deleteSpawnedEntities=true)
ScriptInvoker GetOnAreaInit()
override void Init(SCR_ScenarioFrameworkArea area=null, SCR_ScenarioFrameworkEActivationType activation=SCR_ScenarioFrameworkEActivationType.SAME_AS_PARENT)
override bool InitParentLayer()
void GetAvailableTaskTypes(out array< SCR_ESFTaskType > aTaskTypes)
void DynamicDespawnLayer(array< vector > observers)
Goes over spawned layers and checks whether or not said area should despawn.
ScriptInvoker GetOnAreaTriggerActivated()
override void EOnInit(IEntity owner)
void PrepareLayerSpecificDynamicDespawn(SCR_ScenarioFrameworkLayerBase layer, bool staySpawned=false, int despawnRange=0)
bool GetIsTaskSuitableForArea(SCR_ESFTaskType eTaskType)
void ~SCR_ScenarioFrameworkArea()
override void DynamicReinit()
Initializes dynamic reinitialization by calling Init() method.
void ExecuteDynamicDespawn(SCR_ScenarioFrameworkSystem scenarioFrameworkSystem)
Executes dynamic spawn/despawn for layers.
override void OnPostInit(IEntity owner)
void DynamicSpawnLayer(array< vector > observers)
Goes over despawned layers and checks whether or not said area should spawn.
void OnAreaTriggerActivated(IEntity entity)
override void AfterAllChildrenSpawned(SCR_ScenarioFrameworkLayerBase layer)
void MoveTaskIconToArea(notnull SCR_Task task)
static ScriptCallQueue GetCallQueuePausable()
ref array< vector > m_aObservers
static SCR_ScenarioFrameworkSystem GetInstance()
void UnregisterArea(SCR_ScenarioFrameworkArea area)
void RegisterArea(SCR_ScenarioFrameworkArea area)
void SetOnce(bool bOnce)
Sets if trigger can be finished just once.
Instance of created debug visualizer.
IEntity GetOwner()
Owner entity of the fuel tank.
LogLevel
Enum with severity of the logging message.
proto void PrintFormat(string fmt, void param1=NULL, void param2=NULL, void param3=NULL, void param4=NULL, void param5=NULL, void param6=NULL, void param7=NULL, void param8=NULL, void param9=NULL, LogLevel level=LogLevel.NORMAL)
SCR_FieldOfViewSettings Attribute
EntityEvent
Various entity events.
proto int ARGB(int a, int r, int g, int b)