24 [
Attribute(
desc:
"Faction key that corresponds with the SCR_Faction set in FactionManager",
category:
"Asset")]
27 [
Attribute(defvalue:
"100",
desc:
"If the RANDOM_MULTIPLE option is selected, what's the percentage? ",
UIWidgets.Graph,
"0 100 1",
category:
"Children")]
30 [
Attribute(
desc:
"When enabled, it will repeatedly spawn childern according to other parameters set",
category:
"Children")]
33 [
Attribute(defvalue:
"-1",
desc:
"If Repeated Spawn is enabled, how many times can children be spawned? If set to -1, it is unlimited",
params:
"-1 inf 1",
category:
"Children")]
36 [
Attribute(defvalue:
"-1",
UIWidgets.Slider,
desc:
"If Repeated Spawn is enabled, how frequently it will spawn next wave of children? Value -1 means disabled, thus children won't be spawned by the elapsed time.",
params:
"-1 86400 1",
category:
"Children")]
48 [
Attribute(
desc:
"Conditions that will be checked upon init and based on the result it will let this to finish init or not",
category:
"Activation")]
57 [
Attribute(
desc:
"Should the dynamic Spawn/Despawn based on distance from observer cameras be enabled?",
category:
"Activation")]
60 [
Attribute(defvalue:
"750",
params:
"0 inf",
desc:
"How close at least one observer camera must be in order to trigger spawn",
category:
"Activation")]
71 ref array<SCR_ScenarioFrameworkLogic>
m_aLogic = {};
92 static const int SPAWN_DELAY = 200;
129 foreach (
string child : randomlySpawnedChildren)
165 if (factionName.IsEmpty())
166 return GetGame().GetPlayerManager().GetPlayerCount();
168 FactionManager factionManager =
GetGame().GetFactionManager();
173 array<int> aPlayerIDs = {};
175 GetGame().GetPlayerManager().GetPlayers(aPlayerIDs);
176 foreach (
int iPlayerID : aPlayerIDs)
179 if (!playerController)
201 return header.m_iPlayerCount;
228 void GetAllLayers(out notnull array<SCR_ScenarioFrameworkLayerBase> layers)
231 array<SCR_ScenarioFrameworkLayerBase> aSiblingLayers = {};
239 layers.Insert(layerBase);
241 layerBase.GetAllLayers(aSiblingLayers);
242 layers.InsertAll(aSiblingLayers);
256 array<SCR_ScenarioFrameworkLayerBase> aSiblingLayers = {};
264 if (layerBase.m_eActivationType == activationType)
265 layers.Insert(layerBase);
267 layerBase.GetAllLayers(aSiblingLayers, activationType);
268 layers.InsertAll(aSiblingLayers);
281 array<SCR_ScenarioFrameworkLayerTask> aSiblingLayerTasks = {};
282 SCR_ScenarioFrameworkLayerTask layerTask;
290 layerTask = SCR_ScenarioFrameworkLayerTask.Cast(layerBase);
292 layerTasks.Insert(layerTask);
294 layerBase.GetAllLayerTasks(aSiblingLayerTasks);
295 layerTasks.InsertAll(aSiblingLayerTasks);
308 array<SCR_ScenarioFrameworkSlotTask> aSiblingSlotTasks = {};
309 SCR_ScenarioFrameworkSlotTask slotTask;
317 slotTask = SCR_ScenarioFrameworkSlotTask.Cast(layerBase);
319 slotTasks.Insert(slotTask);
321 layerBase.GetAllSlotTasks(aSiblingSlotTasks);
322 slotTasks.InsertAll(aSiblingSlotTasks);
333 SCR_ScenarioFrameworkLayerTask
layer;
337 layer = SCR_ScenarioFrameworkLayerTask.Cast(entity.
FindComponent(SCR_ScenarioFrameworkLayerTask));
351 SCR_ScenarioFrameworkSlotTask
GetSlotTask(array<SCR_ScenarioFrameworkLayerBase> aLayers)
353 SCR_ScenarioFrameworkSlotTask slotTask;
357 slotTask = SCR_ScenarioFrameworkSlotTask.Cast(child.
FindComponent(SCR_ScenarioFrameworkSlotTask));
364 slotTask = SCR_ScenarioFrameworkSlotTask.Cast(child.
FindComponent(SCR_ScenarioFrameworkSlotTask));
404 SCR_FactionAliasComponent factionAliasComponent = SCR_FactionAliasComponent.GetFactionAliasComponentForWB();
405 if (!factionAliasComponent)
408 return factionAliasComponent.ResolveFactionAlias(
GetFactionKey());
419 FactionKey factionKey = parentLayer.GetParentFactionKeyRecursive();
443 return m_SpawnChildren;
544 array<SCR_ScenarioFrameworkLayerBase> suitableChildren = {};
547 if (child.GetDynamicDespawnEnabled())
550 suitableChildren.Insert(child);
553 return suitableChildren.GetRandomElement();
559 void GetChildren(out array<SCR_ScenarioFrameworkLayerBase> children)
563 array<string> childrenStringsReversed = {};
571 childrenReversed.Insert(layerBase.GetName(), layerBase);
572 childrenStringsReversed.Insert(layerBase.GetName());
578 childrenStringsReversed.Sort();
579 foreach (
string name : childrenStringsReversed)
581 layerBase = childrenReversed.Get(name);
584 children.Insert(layerBase);
595 array<string> childrenStringsReversed = {};
603 childrenReversed.Insert(layerBase.GetName(), layerBase);
604 childrenStringsReversed.Insert(layerBase.GetName());
610 childrenStringsReversed.Sort();
611 foreach (
string name : childrenStringsReversed)
613 layerBase = childrenReversed.Get(name);
615 if (layerBase && layerBase.m_eActivationType == activationType)
616 children.Insert(layerBase);
623 void GetLogics(out array<SCR_ScenarioFrameworkLogic> logics)
626 SCR_ScenarioFrameworkLogic logic;
629 logic = SCR_ScenarioFrameworkLogic.Cast(child);
630 if (logic && !logics.Contains(logic))
631 logics.Insert(logic);
716 if (previouslyRandomized)
720 if (child.GetDynamicDespawnEnabled())
723 int activationType = child.GetActivationType();
728 if (child.GetIsTerminated())
731 if (!child.InitActivationConditions())
734 if (child.GetIsInitiated())
744 if (child.GetDynamicDespawnEnabled())
747 int activationType = child.GetActivationType();
752 if (child.GetIsTerminated())
755 if (!child.InitActivationConditions())
758 if (child.GetIsInitiated())
771 if (!
layer &&
layer.GetDynamicDespawnEnabled())
791 if (child.GetDynamicDespawnEnabled())
794 int activationType = child.GetActivationType();
798 if (child.GetIsTerminated())
801 if (!child.InitActivationConditions())
804 if (child.GetIsInitiated())
825 previouslyRandomized =
true;
834 if (child.GetDynamicDespawnEnabled())
894 if (previouslyRandomized)
909 if (previouslyRandomized)
913 array<SCR_ScenarioFrameworkLayerBase> suitableChildren = {};
916 if (child.GetDynamicDespawnEnabled())
919 suitableChildren.Insert(child);
922 if (suitableChildren.IsEmpty())
932 child = suitableChildren.GetRandomElement();
935 suitableChildren.RemoveItem(child);
948 child.SetParentLayer(
this);
964 foreach (SCR_ScenarioFrameworkLogic logic :
m_aLogic)
975 void RestoreToDefault(
bool includeChildren =
false,
bool reinitAfterRestoration =
false,
bool affectRandomization =
true,
bool deleteSpawnedEntities =
true)
993 child.RestoreToDefault(includeChildren,
false);
998 if (affectRandomization)
1001 if (deleteSpawnedEntities)
1011 foreach (SCR_ScenarioFrameworkLogic logic :
m_aLogic)
1013 logic.RestoreToDefault();
1016 if (reinitAfterRestoration)
1041 if (!child.m_bDynamicDespawn)
1042 child.DynamicDespawn(
this);
1126 return conditionStatus;
1170 SCR_FactionAliasComponent factionAliasComponent = SCR_FactionAliasComponent.Cast(
GetGame().GetFactionManager().FindComponent(SCR_FactionAliasComponent));
1171 if (factionAliasComponent)
1263 super.EOnFrame(owner, timeSlice);
1273 super.OnPostInit(owner);
1282 BaseGameMode gameMode =
GetGame().GetGameMode();
1287 if (!scenarioFrameworkSystem)
1306 Shape dbgShape = null;
1310 dbgShape =
Shape.CreateSphere(
1325 activationAction.Init(owner);
1334 activationAction.RestoreToDefault();
1347 override int _WB_GetAfterWorldUpdateSpecs(
IEntity owner, IEntitySource src)
1349 return EEntityFrameUpdateSpecs.CALL_WHEN_ENTITY_VISIBLE;
1356 override void _WB_AfterWorldUpdate(
IEntity owner,
float timeSlice)
1365 override void _WB_OnCreate(
IEntity owner, IEntitySource src)
1367 RenameOwnerEntity(owner);
1372 RenameOwnerEntity(child);
1387 if (key ==
"m_bShowDebugShapesInWorkbench")
1396 void RenameOwnerEntity(
IEntity owner)
1398 GenericEntity genericEntity = GenericEntity.Cast(owner);
1401 if (!api.UndoOrRedoIsRestoring())
1402 api.RenameEntity(api.EntityToSource(owner), api.GenerateDefaultEntityName(api.EntityToSource(owner)));
1420 plugin.OnWBKeyChanged(
this);
ArmaReforgerScripted GetGame()
override string GetID(string fileName, string varName, array< BaseContainer > objects, array< int > indexes)
enum EAITargetInfoCategory m_Entity
enum SCR_ECompassType EntityEditorProps(category:"GameScripted/Gadgets", description:"Compass", color:"0 0 255 255")
Prefab data class for compass component.
override bool _WB_OnKeyChanged(IEntity owner, BaseContainer src, string key, BaseContainerList ownerContainers, IEntity parent)
Any property value has been changed. You can use editor API here and do some additional edit actions ...
SCR_EScenarioFrameworkLogicOperators
override void EOnFrame(IEntity owner, float timeSlice)
void SetEntity(IEntity entity)
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
SCR_ScenarioFrameworkEActivationType
bool m_bShowDebugShapesInWorkbench
float m_fRepeatedSpawnTimer
SCR_ScenarioFrameworkEActivationType m_eActivationTypeDefault
void SetRepeatedSpawnNumber(int number)
bool InitDynDespawnAndActivation(SCR_ScenarioFrameworkEActivationType activation)
void AddRandomlySpawnedChild(SCR_ScenarioFrameworkLayerBase child)
ref array< IEntity > m_aSpawnedEntities
void SpawnRandomMultipleChildren(bool previouslyRandomized=false)
array< IEntity > GetSpawnedEntities()
SCR_ScenarioFrameworkEActivationType m_eActivationType
void SetEnableRepeatedSpawn(bool value)
int GetDynamicDespawnRange()
bool m_bEnableRepeatedSpawn
void RepeatedSpawn()
Repetitive spawning with timer.
WorldTimestamp m_fRepeatSpawnTimeEnd
void GetChildren(out array< SCR_ScenarioFrameworkLayerBase > children)
SCR_EScenarioFrameworkSpawnChildrenType
void SetDynamicDespawnExcluded(bool excluded)
bool GetEnableRepeatedSpawn()
SCR_ScenarioFrameworkLayerBase GetRandomChildren()
int GetRepeatedSpawnNumber()
IEntity GetSpawnedEntity()
array< SCR_ScenarioFrameworkLogic > GetSpawnedLogics()
void GetLogics(out array< SCR_ScenarioFrameworkLogic > logics)
int m_iRepeatedSpawnNumber
ref array< ref SCR_ScenarioFrameworkActivationConditionBase > m_aActivationConditions
void SetDynamicDespawnEnabled(bool enabled)
void DynamicReinit()
Reinitializes this layer.
bool InitFactionSettings()
Handles inheritance of faction settings from parents.
bool GetDynamicDespawnEnabled()
int m_iCurrentlySpawnedChildren
ref array< SCR_ScenarioFrameworkLogic > m_aLogic
FactionKey GetFactionKey()
int m_iRepeatedSpawnNumberDefault
void SetParentLayer(SCR_ScenarioFrameworkLayerBase parentLayer)
void SpawnPreviouslyRandomizedChildren()
Spawns children with delay based on their index.
void InitChild(SCR_ScenarioFrameworkLayerBase child)
void SpawnChildren(bool previouslyRandomized=false)
void SetDynamicDespawnRange(int range)
ref array< SCR_ScenarioFrameworkLayerBase > m_aChildren
SCR_ScenarioFrameworkLayerBase GetParentLayer()
func ScriptInvokerScenarioFrameworkLayerMethod
void InvokeAllChildrenSpawned()
Spawns all children and triggers invoker on completion.
SCR_ScenarioFrameworkEActivationType GetActivationType()
SCR_ScenarioFrameworkLayerBase m_ParentLayer
bool GetDynamicDespawnExcluded()
array< ref SCR_ScenarioFrameworkActionBase > GetActivationActions()
ScriptInvokerScenarioFrameworkLayer GetOnAllChildrenSpawned()
void SpawnRandomOneChild(bool previouslyRandomized=false)
void FinishInitChildrenInsert()
For situations where some other logic is needed to be performed before or after this Insert.
SCR_EScenarioFrameworkLogicOperators m_eActivationConditionLogic
int m_iSupposedSpawnedChildren
bool m_bExcludeFromDynamicDespawn
void SetFactionKey(FactionKey factionKey)
FactionKey GetParentFactionKeyRecursive()
void FinishInit()
Initializes children, retrieves them, and spawns them.
SCR_ScenarioFrameworkArea GetParentArea()
SCR_EScenarioFrameworkSpawnChildrenType GetSpawnChildrenType()
bool m_bShowDebugShapesDuringRuntime
WorldTimestamp m_fRepeatSpawnTimeStart
ref array< SCR_ScenarioFrameworkLayerBase > m_aRandomlySpawnedChildren
void SetDebugShapeSize(float fSize)
void GetAllSlotTasks(out notnull array< SCR_ScenarioFrameworkSlotTask > slotTasks)
array< SCR_ScenarioFrameworkLayerBase > GetChildrenEntities()
void SetIsTerminated(bool state)
ref ScriptInvokerBase< ScriptInvokerScenarioFrameworkLayerMethod > m_OnAllChildrenSpawned
RANDOM_BASED_ON_PLAYERS_COUNT
void CheckAllChildrenSpawned(SCR_ScenarioFrameworkLayerBase layer=null)
void InitActivationActions()
void GetAllLayerTasks(out notnull array< SCR_ScenarioFrameworkLayerTask > layerTasks)
array< SCR_ScenarioFrameworkLayerBase > GetRandomlySpawnedChildren()
bool InitArea(SCR_ScenarioFrameworkArea area)
void AfterAllChildrenSpawned(SCR_ScenarioFrameworkLayerBase layer)
void SetActivationType(SCR_ScenarioFrameworkEActivationType activationType)
void CalculateSupposedSpawnedChildren(bool previouslyRandomized=false)
bool InitActivationConditions(bool calledFromInit=false)
void SCR_ScenarioFrameworkLayerBase(IEntityComponentSource src, IEntity ent, IEntity parent)
bool InitAlreadyHappened()
array< ref SCR_ScenarioFrameworkPlugin > GetSpawnedPlugins()
void DrawDebugShape(bool draw)
void ActivateLogic()
Initializes all logic components.
ref array< ref SCR_ScenarioFrameworkPlugin > m_aPlugins
int GetMaxPlayersForGameMode(FactionKey factionName="")
int m_iDynamicDespawnRange
void RepeatedSpawnCalled()
Repetitive spawning logic with countdown and condition checks.
SCR_ScenarioFrameworkLayerTask GetLayerTask()
void DynamicDespawn(SCR_ScenarioFrameworkLayerBase layer)
bool m_bDynamicallyDespawned
ref array< ref SCR_ScenarioFrameworkActionBase > m_aActivationActions
void SetRandomlySpawnedChildren(array< string > randomlySpawnedChildren)
bool InitOtherThings()
For situations where some other logic is to be appended in these checks and is to be performed before...
ScriptInvokerBase< ScriptInvokerScenarioFrameworkLayerMethod > ScriptInvokerScenarioFrameworkLayer
float m_fDebugShapeRadius
SCR_ScenarioFrameworkArea m_Area
void ~SCR_ScenarioFrameworkLayerBase()
Removes object in edit mode or despawns it if not in edit mode.
void GetAllLayers(out notnull array< SCR_ScenarioFrameworkLayerBase > layers)
void RestoreActionsToDefault()
SCR_ScenarioFrameworkSlotTask GetSlotTask()
void SCR_ScenarioFrameworkSlotBase(IEntityComponentSource src, IEntity ent, IEntity parent)
void SCR_ScenarioFrameworkSlotWaypoint(IEntityComponentSource src, IEntity ent, IEntity parent)
enum EVehicleType IEntity
proto external WorldEditorAPI _WB_GetEditorAPI()
This returns world editor API, which is safe to use from editor events bellow.
proto external Managed FindComponent(typename typeName)
proto external IEntity GetChildren()
proto external BaseWorld GetWorld()
proto external IEntity GetParent()
proto external string GetName()
proto external IEntity GetSibling()
static Faction GetLocalControlledEntityFaction()
static ScriptCallQueue GetCallQueueNonPausable()
static bool IsWorldLoadInit()
static ScriptCallQueue GetCallQueuePausable()
static SCR_ScenarioFrameworkSystem GetInstance()
void ManageLayerDebugShape(EntityID id, bool draw, float radius, bool runtime)
static bool IsEmptyOrWhiteSpace(string input)
Instance of created debug visualizer.
IEntity GetOwner()
Owner entity of the fuel tank.
SCR_FieldOfViewSettings Attribute
EntityEvent
Various entity events.
@ ALL
Everything except general switch.
proto external PlayerController GetPlayerController()
proto int ARGB(int a, int r, int g, int b)