Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_ExplosionGenerator.c
Go to the documentation of this file.
1[EntityEditorProps(category: "GameScripted/Test", description: "This is used for explosion stress tests")]
2class SCR_ExplosionGeneratorClass: GenericEntityClass
3{
4};
5
6class SCR_ExplosionGenerator: GenericEntity
7{
8 [Attribute("", UIWidgets.ResourceAssignArray, "Generated explosions will loop through the projectiles on this array", "et")]
9 ref array<ResourceName> m_ProjectilesToTrigger;
10
11 //Initial values
12 [Attribute("0", UIWidgets.EditBox, "Number of explosions to create. 0 = until time ends")]
13 int m_NumExplosions;
14
15 [Attribute("0", UIWidgets.EditBox, "Time until this entity creates a new explosion.")]
16 float m_TimeBetweenExplosions;
17
18 [Attribute("0", UIWidgets.EditBox, "Time (in seconds) until no more explosions are generated. This is not needed if Num Explosions is different to 0")]
19 float m_TotalDuration;
20
21 // current values
22 ref array<ref Resource> m_LoadedPrefabs = new array<ref Resource>();
23
24 int m_RemainingExplosions = 0;
25 float m_TimeUntilNextExplosion = 0;
26 float m_RemainingDuration = 0;
27
28
29 //keeps track of what explosion prefab will be used
30 int m_CurrentExplosionPrefab = 0;
31
32
33 //------------------------------------------------------------------------------------------------
34 void SCR_ExplosionGenerator(IEntitySource src, IEntity parent)
35 {
37
38 for(int i = 0; i < m_ProjectilesToTrigger.Count(); i++)
39 {
40 if(m_ProjectilesToTrigger[i])
41 m_LoadedPrefabs.Insert(Resource.Load(m_ProjectilesToTrigger[i]));
42 }
43
44 m_RemainingExplosions = m_NumExplosions;
45 m_TimeUntilNextExplosion = m_TimeBetweenExplosions;
46 m_RemainingDuration = m_TotalDuration;
47 }
48
49 //------------------------------------------------------------------------------------------------
50 override protected void EOnFrame(IEntity owner, float timeSlice) //EntityEvent.FRAME
51 {
52 //end conditions, no need to keep updating the object
53 if (m_NumExplosions == 0 && m_RemainingDuration < 0 || m_NumExplosions != 0 && m_RemainingExplosions <= 0)
54 {
56 return;
57 }
58
59 m_TimeUntilNextExplosion -= timeSlice;
60 m_RemainingDuration -= timeSlice;
61
62 //no explosion
63 if (m_TimeUntilNextExplosion > 0)
64 return;
65
66 //added instead of assigned to ensure accuracy
67 m_TimeUntilNextExplosion += m_TimeBetweenExplosions;
68
69 CreateExplosion(owner);
70 }
71
72 protected void CreateExplosion(IEntity owner)
73 {
74 ref Resource prefab = m_LoadedPrefabs[m_CurrentExplosionPrefab];
75
77
78 m_RemainingExplosions--;
79
80 if (!prefab)
81 return;
82
83 ref EntitySpawnParams spawnParams = new EntitySpawnParams();
84
85 spawnParams.TransformMode = ETransformMode.WORLD;
86 owner.GetTransform(spawnParams.Transform);
87
88 IEntity spawnedProjectile = GetGame().SpawnEntityPrefab(prefab, owner.GetWorld(), spawnParams);
89 if (!spawnedProjectile)
90 return;
91
92 Managed managedComp = spawnedProjectile.FindComponent(BaseTriggerComponent);
93
94 BaseTriggerComponent comp = BaseTriggerComponent.Cast(managedComp);
95
96 if(comp)
97 comp.OnUserTrigger(spawnedProjectile);
98 }
99
100 //------------------------------------------------------------------------------------------------
101
102 protected void AdvanceExplosionPrefab()
103 {
104 ++m_CurrentExplosionPrefab;
105
106 if (m_CurrentExplosionPrefab >= m_LoadedPrefabs.Count())
107 m_CurrentExplosionPrefab = 0;
108 }
109
110 //------------------------------------------------------------------------------------------------
112 {
113 }
114};
115
ArmaReforgerScripted GetGame()
Definition game.c:1398
enum SCR_ECompassType EntityEditorProps(category:"GameScripted/Gadgets", description:"Compass", color:"0 0 255 255")
Prefab data class for compass component.
void IEntity(IEntitySource src, IEntity parent)
protected script Constructor
proto external EntityEvent SetEventMask(EntityEvent e)
proto external Managed FindComponent(typename typeName)
proto external EntityEvent ClearEventMask(EntityEvent e)
proto external BaseWorld GetWorld()
proto external void GetTransform(out vector mat[])
Object holding reference to resource. In destructor release the resource.
Definition Resource.c:25
void CreateExplosion(IEntity owner)
void EOnFrame(IEntity owner, float timeSlice)
void EntitySpawnParams()
Definition gameLib.c:130
SCR_FieldOfViewSettings Attribute
EntityEvent
Various entity events.
Definition EntityEvent.c:14