DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
GeyserTrigger.c
См. документацию.
2{
3 const float MOUTH_ADJUST_RADIUS = 0.2; // maxium radius geyser effect can move when using randomized position adjustment
4 const string SOUND_BUBBLING = "Boiling_Done_SoundSet";
5 const string SOUND_ERUPTION = "pour_Water_Pot_SoundSet";
6 const string SOUND_ERUPTION_TALL = "pour_Water_WatterBottle_SoundSet";
7
8 protected bool m_bIsDormant;
9 protected bool m_bIsErupting;
10 protected bool m_bIsEruptingTall;
11 protected float m_AdjustedX;
12 protected float m_AdjustedY;
14 protected EGeyserState m_GeyserState = EGeyserState.DORMANT; // synchronized state
15
22
24 {
25 RegisterNetSyncVariableInt("m_GeyserState", 0, 32);
26 }
27
28 override void EEInit()
29 {
30 super.EEInit();
31
34
35 m_bIsDormant = false;
36 m_bIsErupting = false;
37 m_bIsEruptingTall = false;
38
40 }
41
42 override string GetDisplayName()
43 {
44 return "#STR_geyser";
45 }
46
47 override void EEDelete( EntityAI parent )
48 {
50
51 super.EEDelete(parent);
52 }
53
54 override void OnEnterServerEvent( TriggerInsider insider )
55 {
56 super.OnEnterServerEvent(insider);
57
58 if (insider && (m_GeyserState & EGeyserState.ERUPTING_PRIMARY))
59 {
60 EntityAI entity = EntityAI.Cast(insider.GetObject());
61 if (entity)
62 entity.ProcessDirectDamage(DamageType.CUSTOM, this, "", "HeatDamage", "0 0 0", 1000);
63 }
64 }
65
66 override void OnLeaveServerEvent( TriggerInsider insider )
67 {
68 super.OnLeaveServerEvent(insider);
69 }
70
71 override void OnEnterClientEvent( TriggerInsider insider )
72 {
73 super.OnEnterClientEvent(insider);
74 }
75
76 override void OnLeaveClientEvent( TriggerInsider insider )
77 {
78 super.OnLeaveClientEvent(insider);
79 }
80
82 {
83 super.OnVariablesSynchronized();
84
86 }
87
88 // Updated from OnVariablesSynchronized
89 protected void UpdateGeyserState()
90 {
91 if (m_GeyserState == EGeyserState.DORMANT && !m_bIsDormant)
92 {
93 if (IsSubmerged())
94 {
98 }
99
100 m_bIsDormant = true;
101 }
102 else if (m_GeyserState != EGeyserState.DORMANT && m_bIsDormant)
103 {
105 m_SoundBubbling.Stop();
106 m_bIsDormant = false;
107 }
108
109 if ((m_GeyserState & EGeyserState.ERUPTING_PRIMARY) && !m_bIsErupting)
110 {
111 vector posErupt = GetAdjustedPosition(3);
112 m_GeyserParticle = ParticleManager.GetInstance().PlayInWorld(ParticleList.GEYSER_NORMAL, posErupt);
113
115
116 m_bIsErupting = true;
117 }
118 else if (((m_GeyserState & EGeyserState.ERUPTING_PRIMARY) == 0) && m_bIsErupting)
119 {
120 m_GeyserParticle.StopParticle();
121 m_SoundEruption.Stop();
122 m_bIsErupting = false;
123 }
124
125 if ((m_GeyserState & EGeyserState.ERUPTING_SECONDARY) && !m_bIsEruptingTall)
126 {
127 vector posTall = GetAdjustedPosition(5);
128 m_GeyserTallParticle = ParticleManager.GetInstance().PlayInWorld(ParticleList.GEYSER_STRONG, posTall);
129
131
132 m_bIsEruptingTall = true;
133 }
134 else if (((m_GeyserState & EGeyserState.ERUPTING_SECONDARY) == 0) && m_bIsEruptingTall)
135 {
136 m_GeyserTallParticle.StopParticle();
138 m_bIsEruptingTall = false;
139 }
140 }
141
142 // Slightly adjust position of geyser particles between eruptions
148
149 protected vector GetAdjustedPosition(float height = 0)
150 {
152 pos[1] = pos[1] + height;
153
154 if (IsSubmerged())
155 {
156 pos[0] = m_AdjustedX;
157 pos[2] = m_AdjustedY;
158 }
159
160 return pos;
161 }
162
164 {
165 if (m_bIsDormant)
166 {
167 m_GeyserBubblesParticle.StopParticle();
168 m_SoundBubbling.Stop();
169 m_bIsDormant = false;
170 }
171
172 if (m_bIsErupting)
173 {
174 m_GeyserParticle.StopParticle();
175 m_SoundEruption.Stop();
176 m_bIsErupting = false;
177 }
178
180 {
181 m_GeyserTallParticle.StopParticle();
183 m_bIsEruptingTall = false;
184 }
185 }
186
188 {
189 m_GeyserState |= state;
190 SetSynchDirty();
191 }
192
194 {
195 m_GeyserState &= ~state;
196 SetSynchDirty();
197 }
198
200 {
201 return m_GeyserState;
202 }
203
204 // override for differences in logic between land & submerged geysers
206 {
207 return true;
208 }
209
210
211}
DamageType
exposed from C++ (do not change)
Определения DamageSystem.c:11
EGeyserState
Определения GeyserArea.c:2
void ParticleManager(ParticleManagerSettings settings)
Constructor (ctor)
Определения ParticleManager.c:88
proto native float SurfaceY(float x, float z)
Wrapper class for managing sound through SEffectManager.
Определения EffectSound.c:5
void EffectTrigger()
Определения EffectTrigger.c:20
Определения Building.c:6
override void OnVariablesSynchronized()
Определения GeyserTrigger.c:81
const string SOUND_ERUPTION_TALL
Определения GeyserTrigger.c:6
EffectSound m_SoundEruptionSecondary
Определения GeyserTrigger.c:21
override void EEInit()
Определения GeyserTrigger.c:28
ParticleSource m_GeyserParticle
Определения GeyserTrigger.c:17
ParticleSource m_GeyserTallParticle
Определения GeyserTrigger.c:18
override void OnLeaveServerEvent(TriggerInsider insider)
Определения GeyserTrigger.c:66
void RemoveGeyserState(EGeyserState state)
Определения GeyserTrigger.c:193
EffectSound m_SoundBubbling
Определения GeyserTrigger.c:19
override void OnLeaveClientEvent(TriggerInsider insider)
Определения GeyserTrigger.c:76
EGeyserState GetGeyserState()
Определения GeyserTrigger.c:199
vector GetAdjustedPosition(float height=0)
Определения GeyserTrigger.c:149
override void OnEnterClientEvent(TriggerInsider insider)
Определения GeyserTrigger.c:71
override void EEDelete(EntityAI parent)
Определения GeyserTrigger.c:47
bool IsSubmerged()
Определения GeyserTrigger.c:205
void StopEffects()
Определения GeyserTrigger.c:163
const float MOUTH_ADJUST_RADIUS
Определения GeyserTrigger.c:3
void UpdateGeyserState()
Определения GeyserTrigger.c:89
const string SOUND_ERUPTION
Определения GeyserTrigger.c:5
float m_AdjustedY
Определения GeyserTrigger.c:12
bool m_bIsDormant
Определения GeyserTrigger.c:8
bool m_bIsErupting
Определения GeyserTrigger.c:9
vector m_DefaultPosition
Определения GeyserTrigger.c:13
EffectSound m_SoundEruption
Определения GeyserTrigger.c:20
bool m_bIsEruptingTall
Определения GeyserTrigger.c:10
const string SOUND_BUBBLING
Определения GeyserTrigger.c:4
void AddGeyserState(EGeyserState state)
Определения GeyserTrigger.c:187
override void OnEnterServerEvent(TriggerInsider insider)
Определения GeyserTrigger.c:54
void RandomizeMouthPos()
Определения GeyserTrigger.c:143
ParticleSource m_GeyserBubblesParticle
Определения GeyserTrigger.c:16
void GeyserTrigger()
Определения GeyserTrigger.c:23
float m_AdjustedX
Определения GeyserTrigger.c:11
EGeyserState m_GeyserState
Определения GeyserTrigger.c:14
override string GetDisplayName()
Определения GeyserTrigger.c:42
Определения EnMath.c:7
static const int GEYSER_STRONG
Определения ParticleList.c:346
static const int GEYSER_BUBBLES
Определения ParticleList.c:347
static const int GEYSER_NORMAL
Определения ParticleList.c:345
Определения ParticleList.c:12
Entity which has the particle instance as an ObjectComponent.
Определения ParticleSource.c:124
static EffectSound PlaySound(string sound_set, vector position, float play_fade_in=0, float stop_fade_out=0, bool loop=false)
Create and play an EffectSound.
Определения EffectManager.c:169
Manager class for managing Effect (EffectParticle, EffectSound)
Определения EffectManager.c:6
Object GetObject()
Определения Trigger.c:28
The object which is in a trigger and its metadata.
Определения Trigger.c:3
Определения EnConvert.c:106
proto native CGame GetGame()
static proto float RandomFloat(float min, float max)
Returns a random float number between and min[inclusive] and max[exclusive].
class JsonUndergroundAreaTriggerData GetPosition
Определения UndergroundAreaLoader.c:9