DayZ 1.28
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
WeaponCharging.c
См. документацию.
5{
7 int m_actionType;
8
9 ref WeaponCharging_Start m_start;
10 ref WeaponCharging_CK m_onCK;
11 ref WeaponChamberFromAttMag_W4T m_chamber;
12 ref WeaponEjectAndChamberFromAttMag m_ejectChamber;
14
15 void WeaponCharging (Weapon_Base w = NULL, WeaponStateBase parent = NULL, WeaponActions action = WeaponActions.NONE, int actionType = -1)
16 {
17 m_action = action;
18 m_actionType = actionType;
19
20 // setup nested state machine
21 m_start = new WeaponCharging_Start(m_weapon, this, m_action, m_actionType);
22 m_onCK = new WeaponCharging_CK(m_weapon, this);
23 m_chamber = new WeaponChamberFromAttMag_W4T(m_weapon, this);
24 m_ejectChamber = new WeaponEjectAndChamberFromAttMag(m_weapon, this);
26
27 // events
28 WeaponEventBase __be_ = new WeaponEventAnimBulletEject;
29 WeaponEventBase __bh_ = new WeaponEventAnimBulletHide;
30 WeaponEventBase __ck_ = new WeaponEventAnimCocked;
31 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
32
33 m_fsm = new WeaponFSM(this); // @NOTE: set owner of the submachine fsm
34 // transitions
35 m_fsm.AddTransition(new WeaponTransition( m_start, __be_, m_ejectChamber, NULL, new WeaponGuardHasAmmo(m_weapon) ));
36 m_fsm.AddTransition(new WeaponTransition( m_start, __be_, m_eject ));
37 m_fsm.AddTransition(new WeaponTransition( m_start, _fin_, NULL ));
38
39 //m_fsm.AddTransition(new WeaponTransition( m_start, __ck_, m_eject, NULL, new GuardNot(new WeaponGuardCurrentChamberEmpty(m_weapon))));
40 m_fsm.AddTransition(new WeaponTransition( m_start, __ck_, m_chamber, NULL, new WeaponGuardHasAmmo(m_weapon))); // some anims do not send BE event
41 m_fsm.AddTransition(new WeaponTransition( m_start, __ck_, m_onCK)); // some anims do not send BE event
42
43 m_fsm.AddTransition(new WeaponTransition( m_ejectChamber, __ck_, m_onCK ));
44 m_fsm.AddTransition(new WeaponTransition( m_ejectChamber, _fin_, NULL ));
45 m_fsm.AddTransition(new WeaponTransition( m_eject, __ck_, m_onCK));
46 m_fsm.AddTransition(new WeaponTransition( m_eject, _fin_, NULL));
47
48 m_fsm.AddTransition(new WeaponTransition( m_onCK, _fin_, NULL));
49
50 m_fsm.AddTransition(new WeaponTransition(m_chamber, _fin_, NULL));
51
52 m_fsm.SetInitialState(m_start);
53 }
54};
55
56class WeaponCharging_Start extends WeaponStartAction
57{
58 override bool IsWaitingForActionFinish ()
59 {
60 return true;
61 }
62};
63
64class WeaponCharging_BE extends WeaponStateBase
65{
66};
67
68class WeaponCharging_CK extends WeaponStateBase
69{
70 override bool IsWaitingForActionFinish () { return true; }
71 override void OnEntry (WeaponEventBase e)
72 {
73 super.OnEntry(e);
74 m_weapon.SetCharged(true);
75 m_weapon.SetWeaponOpen(false);
76 }
77};
78
79class WeaponChargingOpenBolt_CK extends WeaponStateBase
80{
81 override bool IsWaitingForActionFinish () { return true; }
82 override void OnEntry (WeaponEventBase e)
83 {
84 super.OnEntry(e);
85 m_weapon.SetCharged(true);
86 m_weapon.SetWeaponOpen(true);
87 }
88};
89
90class WeaponEjectBullet_Cartridge extends WeaponStateBase
91{
92 Magazine m_dstMagazine;
93
94 override void OnEntry (WeaponEventBase e)
95 {
96 super.OnEntry(e);
97 if(e)
98 {
99 DayZPlayer p = e.m_player;
100 int mi = m_weapon.GetCurrentMuzzle();
101
103 }
104 }
105
106 override void OnAbort (WeaponEventBase e)
107 {
108 m_dstMagazine = NULL;
109 super.OnAbort(e);
110 }
111
112 override void OnExit (WeaponEventBase e)
113 {
114 m_dstMagazine = NULL;
115 super.OnExit(e);
116 }
117
119 {
120 if (!super.SaveCurrentFSMState(ctx))
121 return false;
122
123 if (!ctx.Write(m_dstMagazine))
124 {
125 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponEjectBullet_Cartridge.SaveCurrentFSMState: cannot write m_dstMagazine for weapon=" + m_weapon);
126 return false;
127 }
128 return true;
129 }
130
131 override bool LoadCurrentFSMState (ParamsReadContext ctx, int version)
132 {
133 if (!super.LoadCurrentFSMState(ctx, version))
134 return false;
135
136 if (!ctx.Read(m_dstMagazine))
137 {
138 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponEjectBullet_Cartridge.LoadCurrentFSMState: cannot read m_dstMagazine for weapon=" + m_weapon);
139 return false;
140 }
141 return true;
142 }
143
144};
145
147{
148 Magazine m_dstMagazine;
149
150 override void OnEntry (WeaponEventBase e)
151 {
152 super.OnEntry(e);
153 if(e)
154 {
155 DayZPlayer p = e.m_player;
156 for(int i = 0; i < m_weapon.GetMuzzleCount(); i++)
157 {
158 m_weapon.CreateRound(i);
160 m_weapon.EffectBulletHide(i);
161 m_weapon.HideBullet(i);
162 }
163 }
164 }
165
166 override void OnAbort (WeaponEventBase e)
167 {
168 m_dstMagazine = NULL;
169 super.OnAbort(e);
170 }
171
172 override void OnExit (WeaponEventBase e)
173 {
174 m_dstMagazine = NULL;
175 super.OnExit(e);
176 }
177
179 {
180 if (!super.SaveCurrentFSMState(ctx))
181 return false;
182
183 if (!ctx.Write(m_dstMagazine))
184 {
185 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponEjectBullet_Cartridge.SaveCurrentFSMState: cannot write m_dstMagazine for weapon=" + m_weapon);
186 return false;
187 }
188 return true;
189 }
190
191 override bool LoadCurrentFSMState (ParamsReadContext ctx, int version)
192 {
193 if (!super.LoadCurrentFSMState(ctx, version))
194 return false;
195
196 if (!ctx.Read(m_dstMagazine))
197 {
198 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponEjectBullet_Cartridge.LoadCurrentFSMState: cannot read m_dstMagazine for weapon=" + m_weapon);
199 return false;
200 }
201 return true;
202 }
203
204};
205
206class WeaponEjectBullet_Cartridge_W4T extends WeaponEjectBulletMultiMuzzle_Cartridge
207{
208 override bool IsWaitingForActionFinish () { return true; }
209};
210
211
215class WeaponChargingInnerMag extends WeaponStateBase
216{
218 int m_actionType;
219
220 ref WeaponCharging_Start m_start;
221 ref WeaponEjectBullet_Cartridge_W4T m_onBE;
222 ref WeaponEjectCasing_W4T m_onBEFireOut;
223 ref BulletHide_W4T m_hideB;
224 ref WeaponCharging_CK m_onCK;
225 ref WeaponChamberFromInnerMag_W4T m_chamber;
226
227 void WeaponChargingInnerMag (Weapon_Base w = NULL, WeaponStateBase parent = NULL, WeaponActions action = WeaponActions.NONE, int actionType = -1)
228 {
229 m_action = action;
230 m_actionType = actionType;
231
232 // setup nested state machine
233 m_start = new WeaponCharging_Start(m_weapon, this, m_action, m_actionType);
234 m_onBE = new WeaponEjectBullet_Cartridge_W4T(m_weapon, this);
235 m_onBEFireOut = new WeaponEjectCasing_W4T(m_weapon, this);
236 m_hideB = new BulletHide_W4T(m_weapon, this);
237 m_onCK = new WeaponCharging_CK(m_weapon, this);
238 m_chamber = new WeaponChamberFromInnerMag_W4T(m_weapon, this);
239
240 // events
241 WeaponEventBase __be_ = new WeaponEventAnimBulletEject;
242 WeaponEventBase __bh_ = new WeaponEventAnimBulletHide;
243 WeaponEventBase __ck_ = new WeaponEventAnimCocked;
244 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
245
246 m_fsm = new WeaponFSM(this); // @NOTE: set owner of the submachine fsm
247 // transitions
248 m_fsm.AddTransition(new WeaponTransition( m_start, __be_, m_onBEFireOut, NULL, new WeaponGuardCurrentChamberFiredOut(m_weapon)));
249 m_fsm.AddTransition(new WeaponTransition( m_start, __be_, m_onBE, NULL, new GuardNot(new WeaponGuardCurrentChamberEmpty(m_weapon))));
250 m_fsm.AddTransition(new WeaponTransition( m_onBE, __bh_, m_hideB));
251 m_fsm.AddTransition(new WeaponTransition( m_onBEFireOut, __bh_, m_hideB));
252
253 //TODO after inner magazine rework this events must load new bullet
254
255 m_fsm.AddTransition(new WeaponTransition( m_start, __ck_, m_onBEFireOut, NULL, new GuardAnd(new GuardNot(new WeaponGuardCurrentChamberEmpty(m_weapon)), new WeaponGuardCurrentChamberFiredOut(m_weapon))));
256 m_fsm.AddTransition(new WeaponTransition( m_start, __ck_, m_onBE, NULL, new GuardNot(new WeaponGuardCurrentChamberEmpty(m_weapon))));
257 m_fsm.AddTransition(new WeaponTransition( m_start, __ck_, m_chamber, NULL, new WeaponGuardHasAmmoInnerMagazine(m_weapon))); // some anims do not send BE event
258 m_fsm.AddTransition(new WeaponTransition( m_start, __ck_, m_onCK)); // some anims do not send BE event
259 m_fsm.AddTransition(new WeaponTransition( m_onBE, __ck_, m_chamber, NULL, new WeaponGuardHasAmmoInnerMagazine(m_weapon)));
260 m_fsm.AddTransition(new WeaponTransition( m_onBE, __ck_, m_onCK));
261 m_fsm.AddTransition(new WeaponTransition( m_onBEFireOut, __ck_, m_chamber, NULL, new WeaponGuardHasAmmoInnerMagazine(m_weapon)));
262 m_fsm.AddTransition(new WeaponTransition( m_onBEFireOut, __ck_, m_onCK));
263 m_fsm.AddTransition(new WeaponTransition( m_hideB, __ck_, m_chamber, NULL, new WeaponGuardHasAmmoInnerMagazine(m_weapon)));
264 m_fsm.AddTransition(new WeaponTransition( m_hideB, __ck_, m_onCK));
265
266 m_fsm.AddTransition(new WeaponTransition( m_start, _fin_, NULL ));
267 m_fsm.AddTransition(new WeaponTransition( m_onBEFireOut, _fin_, NULL));
268 m_fsm.AddTransition(new WeaponTransition( m_onBE, _fin_, NULL));
269 m_fsm.AddTransition(new WeaponTransition( m_hideB, _fin_, NULL));
270 m_fsm.AddTransition(new WeaponTransition( m_onCK, _fin_, NULL));
271 m_fsm.AddTransition(new WeaponTransition( m_chamber, _fin_, NULL));
272
273 m_fsm.SetInitialState(m_start);
274 }
275
276 override void OnEntry (WeaponEventBase e)
277 {
278 super.OnEntry(e);
279 }
280 override void OnExit (WeaponEventBase e)
281 {
282 super.OnExit(e);
283 }
284};
285
286
290class WeaponChargingMultiple extends WeaponStateBase
291{
293 int m_actionType;
294
295 ref WeaponCharging_Start m_start;
296 ref WeaponEjectBullet_Cartridge_W4T m_onBE;
297 ref WeaponEjectCasing_W4T m_onBEFireOut;
298 ref BulletHide_W4T m_hideB;
299 ref WeaponCharging_CK m_onCK;
300 ref WeaponChamberFromAttMag_W4T m_chamber;
301
302 void WeaponChargingMultiple (Weapon_Base w = NULL, WeaponStateBase parent = NULL, WeaponActions action = WeaponActions.NONE, int actionType = -1)
303 {
304 m_action = action;
305 m_actionType = actionType;
306
307 // setup nested state machine
308 m_start = new WeaponCharging_Start(m_weapon, this, m_action, m_actionType);
309 m_onBE = new WeaponEjectBullet_Cartridge_W4T(m_weapon, this);
310 m_onBEFireOut = new WeaponEjectCasing_W4T(m_weapon, this);
311 m_hideB = new BulletHide_W4T(m_weapon, this);
312 m_onCK = new WeaponCharging_CK(m_weapon, this);
313 m_chamber = new WeaponChamberFromAttMag_W4T(m_weapon, this);
314
315 // events
316 WeaponEventBase __be_ = new WeaponEventAnimBulletEject;
317 WeaponEventBase __bh_ = new WeaponEventAnimBulletHide;
318 WeaponEventBase __ck_ = new WeaponEventAnimCocked;
319 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
320
321 m_fsm = new WeaponFSM(this); // @NOTE: set owner of the submachine fsm
322 // transitions
323 m_fsm.AddTransition(new WeaponTransition( m_start, __be_, m_onBEFireOut, NULL, new WeaponGuardCurrentChamberFiredOut(m_weapon)));
324 m_fsm.AddTransition(new WeaponTransition( m_start, __be_, m_onBE, NULL, new GuardNot(new WeaponGuardCurrentChamberEmpty(m_weapon))));
325 m_fsm.AddTransition(new WeaponTransition( m_onBE, __bh_, m_hideB));
326 m_fsm.AddTransition(new WeaponTransition( m_onBEFireOut, __bh_, m_hideB));
327
328 m_fsm.AddTransition(new WeaponTransition( m_start, __ck_, m_onBE, NULL, new GuardNot(new WeaponGuardCurrentChamberEmpty(m_weapon))));
329 m_fsm.AddTransition(new WeaponTransition( m_start, __ck_, m_chamber, NULL, new WeaponGuardHasAmmo(m_weapon))); // some anims do not send BE event
330 m_fsm.AddTransition(new WeaponTransition( m_start, __ck_, m_onCK)); // some anims do not send BE event
331 m_fsm.AddTransition(new WeaponTransition( m_onBE, __ck_, m_chamber, NULL, new WeaponGuardHasAmmo(m_weapon)));
332 m_fsm.AddTransition(new WeaponTransition( m_onBE, __ck_, m_onCK));
333 m_fsm.AddTransition(new WeaponTransition( m_onBEFireOut, __ck_, m_chamber, NULL, new WeaponGuardHasAmmo(m_weapon)));
334 m_fsm.AddTransition(new WeaponTransition( m_onBEFireOut, __ck_, m_onCK));
335 m_fsm.AddTransition(new WeaponTransition( m_hideB, __ck_, m_chamber, NULL, new WeaponGuardHasAmmo(m_weapon)));
336 m_fsm.AddTransition(new WeaponTransition( m_hideB, __ck_, m_onCK));
337
338 m_fsm.AddTransition(new WeaponTransition( m_start, _fin_, NULL ));
339 m_fsm.AddTransition(new WeaponTransition( m_onBEFireOut, _fin_, NULL));
340 m_fsm.AddTransition(new WeaponTransition( m_onBE, _fin_, NULL));
341 m_fsm.AddTransition(new WeaponTransition( m_hideB, _fin_, NULL));
342 m_fsm.AddTransition(new WeaponTransition( m_onCK, _fin_, NULL));
343 m_fsm.AddTransition(new WeaponTransition(m_chamber, _fin_, NULL));
344
345 m_fsm.SetInitialState(m_start);
346 }
347
348 override void OnEntry (WeaponEventBase e)
349 {
350 super.OnEntry(e);
351 }
352 override void OnExit (WeaponEventBase e)
353 {
354 super.OnExit(e);
355 }
356};
357
361class WeaponChargingStretch extends WeaponStateBase
362{
364 int m_actionType;
365
366 ref WeaponCharging_Start m_start;
367 ref WeaponCharging_CK m_onCK;
368
369 void WeaponChargingStretch (Weapon_Base w = NULL, WeaponStateBase parent = NULL, WeaponActions action = WeaponActions.NONE, int actionType = -1)
370 {
371 m_action = action;
372 m_actionType = actionType;
373
374 // setup nested state machine
375 m_start = new WeaponCharging_Start(m_weapon, this, m_action, m_actionType);
376 m_onCK = new WeaponCharging_CK(m_weapon, this);
377
378 // events
379 WeaponEventBase __ck_ = new WeaponEventAnimCocked;
380 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
381
382 m_fsm = new WeaponFSM(this); // @NOTE: set owner of the submachine fsm
383 // transitions
384 m_fsm.AddTransition(new WeaponTransition( m_start, _fin_, NULL ));
385 m_fsm.AddTransition(new WeaponTransition( m_start, __ck_, m_onCK)); // some anims do not send BE event
386 m_fsm.AddTransition(new WeaponTransition( m_onCK, _fin_, NULL));
387
388 m_fsm.SetInitialState(m_start);
389 }
390};
391
void WeaponGuardHasAmmo(Weapon_Base w=NULL)
Определения Guards.c:99
enum FSMTransition WeaponTransition
ref WeaponStateBase m_start
Определения WeaponChambering.c:807
class WeaponEndAction extends WeaponStartAction m_action
ref WeaponChambering_Base m_chamber
Определения WeaponChambering.c:809
Определения ObjectTyped.c:2
proto bool Write(void value_out)
proto bool Read(void value_in)
shorthand
Определения BoltActionRifle_Base.c:6
charging of weapon without ammo to be chambered
override bool IsWaitingForActionFinish()
Определения WeaponCharging.c:208
DayZPlayer m_player
Определения Events.c:37
signalize mechanism manipulation
Определения Events.c:35
weapon finite state machine
override bool IsWaitingForActionFinish()
Определения WeaponCharging.c:58
simple class starting animation action specified by m_action and m_actionType
Определения WeaponChambering.c:3
ref BulletHide_W4T m_hideB
Определения RifleEjectCasing.c:8
ref WeaponEjectAndChamberFromAttMag m_ejectChamber
Определения WeaponCharging.c:12
int m_actionType
action to be played
Определения RifleChambering.c:4
Magazine m_dstMagazine
Определения RifleReChambering.c:5
ref WeaponCharging_CK m_onCK
Определения WeaponAttachMagazine.c:122
void WeaponStateBase(Weapon_Base w=NULL, WeaponStateBase parent=NULL)
internal state id used for load/restore
Определения WeaponStateBase.c:17
void WeaponChargingMultiple(Weapon_Base w=NULL, WeaponStateBase parent=NULL, WeaponActions action=WeaponActions.NONE, int actionType=-1)
Определения WeaponCharging.c:302
ref WeaponEjectBullet_Cartridge_W4T m_onBE
Определения WeaponCharging.c:221
ref WeaponFSM m_fsm
hierarchical parent state of this state (or null)
Определения WeaponStateBase.c:14
WeaponActions m_action
Определения RifleChambering.c:3
Weapon_Base m_weapon
Определения WeaponStateBase.c:12
ref WeaponChambering_Cartridge m_chamber
Определения RifleChambering.c:9
override bool IsWaitingForActionFinish()
Определения WeaponCharging.c:70
override void OnEntry(WeaponEventBase e)
Определения WeaponCharging.c:71
void WeaponChargingInnerMag(Weapon_Base w=NULL, WeaponStateBase parent=NULL, WeaponActions action=WeaponActions.NONE, int actionType=-1)
Определения WeaponCharging.c:227
ref WeaponStateBase m_start
source of the cartridge
Определения RifleChambering.c:7
override bool LoadCurrentFSMState(ParamsReadContext ctx, int version)
Определения WeaponCharging.c:131
ref WeaponEjectCasing m_eject
Определения RifleChambering.c:8
ref WeaponEjectCasing_W4T m_onBEFireOut
Определения WeaponCharging.c:222
void WeaponEjectAllMuzzles(Weapon_Base w=NULL, WeaponStateBase parent=NULL)
override void OnAbort(WeaponEventBase e)
Определения WeaponCharging.c:106
void WeaponChargingStretch(Weapon_Base w=NULL, WeaponStateBase parent=NULL, WeaponActions action=WeaponActions.NONE, int actionType=-1)
Определения WeaponCharging.c:369
void WeaponCharging(Weapon_Base w=NULL, WeaponStateBase parent=NULL, WeaponActions action=WeaponActions.NONE, int actionType=-1)
Определения WeaponCharging.c:15
override void OnExit(WeaponEventBase e)
Определения WeaponCharging.c:112
override bool SaveCurrentFSMState(ParamsWriteContext ctx)
Определения WeaponCharging.c:118
represent weapon state base
Определения BulletHide.c:2
Serializer ParamsReadContext
Определения gameplay.c:15
Serializer ParamsWriteContext
Определения gameplay.c:16
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90
WeaponActions
actions
Определения human.c:816
void ejectBulletAndStoreInMagazine(Weapon_Base weapon, int muzzleIndex, Magazine mag, DayZPlayer p)
Определения weapon_utils.c:58