DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
GeyserTrigger.c
См. документацию.
1//#define GEYSER_LOGGING
2
4{
5 const float MOUTH_ADJUST_RADIUS = 0.2; // maxium radius geyser effect can move when using randomized position adjustment
6 const string SOUND_BUBBLING = "Geyser_bubbling_loop_SoundSet";
7 const string SOUND_ERUPTION = "Geyser_eruption_loop_SoundSet";
8 const string SOUND_ERUPTION_START = "Geyser_eruption_start_SoundSet";
9 const string SOUND_ERUPTION_TALL = "Geyser_eruption_tall_loop_SoundSet";
10 const string SOUND_ERUPTION_TALL_START = "Geyser_eruption_tall_start_SoundSet";
11 const string SOUND_ERUPTION_TALL_END = "Geyser_eruption_tall_splash_SoundSet";
12
13 protected bool m_bIsDormant;
14 protected bool m_bIsEruptingSoon;
15 protected bool m_bIsErupting;
16 protected bool m_bIsEruptingTall;
17 protected float m_AdjustedX; //deprecated
18 protected float m_AdjustedY; //deprecated
20 protected EGeyserState m_GeyserState = EGeyserState.DORMANT; // synchronized state
21
32
34 {
35 RegisterNetSyncVariableInt("m_GeyserState", 0, 32);
36 }
37
38 override void DeferredInit()
39 {
40 super.DeferredInit();
41
43
44 if (IsSubmerged())
46
47 if (!g_Game.IsHeadlessOrDedicatedServer())
49 }
50
51 override string GetDisplayName()
52 {
53 return "#STR_geyser";
54 }
55
56 override void EEDelete( EntityAI parent )
57 {
59
60 super.EEDelete(parent);
61 }
62
63 override void OnEnterServerEvent( TriggerInsider insider )
64 {
65 super.OnEnterServerEvent(insider);
66
67 if (insider && (m_GeyserState & EGeyserState.ERUPTING_PRIMARY))
68 {
69 EntityAI entity = EntityAI.Cast(insider.GetObject());
70 if (entity)
71 entity.ProcessDirectDamage(DamageType.CUSTOM, this, "", "HeatDamage", "0 0 0", 1000);
72 }
73 }
74
75 override void OnLeaveServerEvent( TriggerInsider insider )
76 {
77 super.OnLeaveServerEvent(insider);
78 }
79
80 override void OnEnterClientEvent( TriggerInsider insider )
81 {
82 super.OnEnterClientEvent(insider);
83 }
84
85 override void OnLeaveClientEvent( TriggerInsider insider )
86 {
87 super.OnLeaveClientEvent(insider);
88 }
89
91 {
92 super.OnVariablesSynchronized();
93
94 if (IsInitialized())
96 }
97
98 // Updated from OnVariablesSynchronized
99 protected void UpdateGeyserState()
100 {
101 #ifdef ENABLE_LOGGING
102 #ifdef GEYSER_LOGGING
103 Debug.Log("UpdateGeyserState, state: " + m_GeyserState);
104 #endif
105 #endif
106
108 {
109 m_bIsDormant = true;
110 }
111 else if (!CheckGeyserState(EGeyserState.DORMANT) && m_bIsDormant)
112 {
113 m_bIsDormant = false;
114 }
115
116 if (CheckGeyserState(EGeyserState.ERUPTION_SOON) && !m_bIsEruptingSoon)
117 {
120
121 m_bIsEruptingSoon = true;
122 }
123 else if (!CheckGeyserState(EGeyserState.ERUPTION_SOON) && m_bIsEruptingSoon)
124 {
126 m_GeyserBubblesParticle.StopParticle();
127 if (m_SoundBubbling)
129
130 m_bIsEruptingSoon = false;
131 }
132
133 if (CheckGeyserState(EGeyserState.ERUPTING_PRIMARY) && !m_bIsErupting)
134 {
136
139
140 m_bIsErupting = true;
141 }
142 else if (!CheckGeyserState(EGeyserState.ERUPTING_PRIMARY) && m_bIsErupting)
143 {
145 m_GeyserParticle.StopParticle();
146
149 if (m_SoundEruption)
151
152 m_bIsErupting = false;
153 }
154
155 bool geyserStateEruptSecond = CheckGeyserState(EGeyserState.ERUPTING_SECONDARY);
156 if (geyserStateEruptSecond && !m_bIsEruptingTall)
157 {
159
162
163 m_bIsEruptingTall = true;
164 }
165 else if (!geyserStateEruptSecond && m_bIsEruptingTall)
166 {
169
170 StopEruption();
171 }
172 else if (geyserStateEruptSecond && m_bIsEruptingTall)
173 {
174 StopEruption();
175 }
176 }
177
189
190 // Slightly adjust position of geyser particles
200
201 // Get position on surface of water volume or terrain, add height offset
202 protected vector GetAdjustedPosition(float height = 0)
203 {
204 vector pos = GetPosition();
205 pos[1] = g_Game.SurfaceRoadY(pos[0], pos[2], RoadSurfaceDetection.UNDER) + height;
206
207 return pos;
208 }
209
211 {
213 {
215 m_GeyserBubblesParticle.StopParticle();
216 if (m_SoundBubbling)
218 m_bIsEruptingSoon = false;
219 }
220
221 if (m_bIsErupting)
222 {
224 m_GeyserParticle.StopParticle();
225 if (m_SoundEruption)
227 m_bIsErupting = false;
228 }
229
231 {
233 m_GeyserTallParticle.StopParticle();
236 m_bIsEruptingTall = false;
237 }
238 }
239
241 {
242 m_GeyserState |= state;
243 SetSynchDirty();
244 }
245
247 {
248 m_GeyserState &= ~state;
249 SetSynchDirty();
250 }
251
253 {
254 if (state == EGeyserState.DORMANT)
255 return (m_GeyserState == state);
256 else
257 return (m_GeyserState & state) != 0;
258 }
259
261 {
262 return m_GeyserState;
263 }
264
265 // override for differences in logic between land & submerged geysers
267 {
268 return true;
269 }
270}
override bool IsInitialized()
Определения CombinationLock.c:96
DamageType
exposed from C++ (do not change)
Определения DamageSystem.c:11
DayZGame g_Game
Определения DayZGame.c:4074
EGeyserState
Определения GeyserArea.c:4
void ParticleManager(ParticleManagerSettings settings)
Constructor (ctor)
Определения ParticleManager.c:88
static void Log(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Prints debug message with normal prio.
Определения 3_Game/DayZ/tools/Debug.c:183
Определения 3_Game/DayZ/tools/Debug.c:2
Wrapper class for managing sound through SEffectManager.
Определения EffectSound.c:5
void EffectTrigger()
Определения EffectTrigger.c:20
override void OnVariablesSynchronized()
Определения GeyserTrigger.c:90
const string SOUND_ERUPTION_TALL
Определения GeyserTrigger.c:9
EffectSound m_SoundEruptionSecondary
Определения GeyserTrigger.c:29
ParticleSource m_GeyserParticle
Определения GeyserTrigger.c:23
ParticleSource m_GeyserTallParticle
Определения GeyserTrigger.c:24
const string SOUND_ERUPTION_START
Определения GeyserTrigger.c:8
override void OnLeaveServerEvent(TriggerInsider insider)
Определения GeyserTrigger.c:75
void RemoveGeyserState(EGeyserState state)
Определения GeyserTrigger.c:246
EffectSound m_SoundBubbling
Определения GeyserTrigger.c:26
override void OnLeaveClientEvent(TriggerInsider insider)
Определения GeyserTrigger.c:85
EGeyserState GetGeyserState()
Определения GeyserTrigger.c:260
vector GetAdjustedPosition(float height=0)
Определения GeyserTrigger.c:202
bool CheckGeyserState(EGeyserState state)
Определения GeyserTrigger.c:252
EffectSound m_SoundEruptionSecondaryStart
Определения GeyserTrigger.c:30
const string SOUND_ERUPTION_TALL_START
Определения GeyserTrigger.c:10
override void OnEnterClientEvent(TriggerInsider insider)
Определения GeyserTrigger.c:80
override void EEDelete(EntityAI parent)
Определения GeyserTrigger.c:56
bool m_bIsEruptingSoon
Определения GeyserTrigger.c:14
bool IsSubmerged()
Определения GeyserTrigger.c:266
void StopEffects()
Определения GeyserTrigger.c:210
const float MOUTH_ADJUST_RADIUS
Определения GeyserTrigger.c:5
void UpdateGeyserState()
Определения GeyserTrigger.c:99
const string SOUND_ERUPTION
Определения GeyserTrigger.c:7
float m_AdjustedY
Определения GeyserTrigger.c:18
ParticleSource m_GeyserSplashParticle
Определения GeyserTrigger.c:25
void StopEruption()
Определения GeyserTrigger.c:178
bool m_bIsDormant
Определения GeyserTrigger.c:13
bool m_bIsErupting
Определения GeyserTrigger.c:15
vector m_DefaultPosition
Определения GeyserTrigger.c:19
EffectSound m_SoundEruption
Определения GeyserTrigger.c:27
bool m_bIsEruptingTall
Определения GeyserTrigger.c:16
const string SOUND_BUBBLING
Определения GeyserTrigger.c:6
const string SOUND_ERUPTION_TALL_END
Определения GeyserTrigger.c:11
void AddGeyserState(EGeyserState state)
Определения GeyserTrigger.c:240
override void DeferredInit()
Определения GeyserTrigger.c:38
override void OnEnterServerEvent(TriggerInsider insider)
Определения GeyserTrigger.c:63
void RandomizeMouthPos()
Определения GeyserTrigger.c:191
EffectSound m_SoundEruptionStart
Определения GeyserTrigger.c:28
ParticleSource m_GeyserBubblesParticle
Определения GeyserTrigger.c:22
EffectSound m_SoundEruptionSecondaryEnd
Определения GeyserTrigger.c:31
void GeyserTrigger()
Определения GeyserTrigger.c:33
float m_AdjustedX
Определения GeyserTrigger.c:17
EGeyserState m_GeyserState
Определения GeyserTrigger.c:20
override string GetDisplayName()
Определения GeyserTrigger.c:51
Определения EnMath.c:7
static const int GEYSER_STRONG
Определения ParticleList.c:364
static const int GEYSER_SPLASH
Определения ParticleList.c:365
static const int GEYSER_BUBBLES
Определения ParticleList.c:366
static const int GEYSER_NORMAL
Определения ParticleList.c:363
Определения ParticleList.c:12
Entity which has the particle instance as an ObjectComponent.
Определения ParticleSource.c:128
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:178
static void DestroyEffect(Effect effect)
Unregisters, stops and frees the Effect.
Определения EffectManager.c:280
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:119
static proto float RandomFloat(float min, float max)
Returns a random float number between and min[inclusive] and max[exclusive].
vector GetPosition()
Get the world position of the Effect.
Определения Effect.c:473