DayZ 1.28
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
OpenBolt_Base.c
См. документацию.
2{
3 CLOSED = 0,
4 OPENED = 1,
5 JAMMED = 2,
6};
7
9{
10 UNKNOWN = 0,
11 OB_CLO_MA0 = 1,
12 OB_OPN_MA0 = 2,
13 OB_CLO_MA1 = 3,
14 OB_OPN_MA1 = 4,
16 OB_JAM_MA0 = 6,
17 OB_JAM_MA1 = 7
18}
19
20class OB_CLO_MA0 extends WeaponStableState
21{
22 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { close nomag"); } super.OnEntry(e); }
23 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } close nomag"); } }
24 override int GetCurrentStateID () { return OBStableStateID.OB_CLO_MA0; }
25 override bool HasBullet () { return false; }
26 override bool HasMagazine () { return false; }
27 override bool IsJammed () { return false; }
28 override bool IsBoltOpen () { return false; }
29 override bool IsRepairEnabled () { return true; }
30 override bool IsDischarged () { return true; }
31 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.E}; }
32};
33
34class OB_OPN_MA0 extends WeaponStableState
35{
36 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { open nomag"); } super.OnEntry(e); }
37 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } open nomag"); } }
38 override int GetCurrentStateID () { return OBStableStateID.OB_OPN_MA0; }
39 override bool HasBullet () { return false; }
40 override bool HasMagazine () { return false; }
41 override bool IsJammed () { return false; }
42 override bool IsBoltOpen () { return true; }
43 override bool IsRepairEnabled () { return true; }
44 override bool IsDischarged () { return false; }
45 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.E}; }
46};
47
48class OB_CLO_MA1 extends WeaponStableState
49{
50 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { close mag"); } super.OnEntry(e); }
51 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } close mag"); } }
52 override int GetCurrentStateID () { return OBStableStateID.OB_CLO_MA1; }
53 override bool HasBullet () { return false; }
54 override bool HasMagazine () { return true; }
55 override bool IsJammed () { return false; }
56 override bool IsBoltOpen () { return false; }
57 override bool IsDischarged () { return true; }
58 override bool IsRepairEnabled () { return true; }
59 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.E}; }
60};
61
62class OB_OPN_MA1 extends WeaponStableState
63{
64 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { open mag"); } super.OnEntry(e); }
65 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } open mag"); } }
66 override int GetCurrentStateID () { return OBStableStateID.OB_OPN_MA1; }
67 override bool HasBullet () { return true; }
68 override bool HasMagazine () { return true; }
69 override bool IsJammed () { return false; }
70 override bool IsBoltOpen () { return true; }
71 override bool IsDischarged () { return false; }
72 override bool IsRepairEnabled () { return true; }
73 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.L}; }
74};
75
77{
78 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { open mag empty"); } super.OnEntry(e); }
79 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } open mag empty"); } }
80 override int GetCurrentStateID () { return OBStableStateID.OB_OPN_MA1_EMPTY; }
81 override bool HasBullet () { return false; }
82 override bool HasMagazine () { return true; }
83 override bool IsJammed () { return false; }
84 override bool IsBoltOpen () { return true; }
85 override bool IsDischarged () { return false; }
86 override bool IsRepairEnabled () { return true; }
87 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.E}; }
88};
89
90class OB_JAM_MA0 extends WeaponStableState
91{
92 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { jammed nomag"); } m_weapon.SetWeaponOpen(true); super.OnEntry(e); }
93 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } jammed nomag"); } }
94 override int GetCurrentStateID () { return OBStableStateID.OB_JAM_MA0; }
95 override bool HasBullet () { return true; }
96 override bool HasMagazine () { return false; }
97 override bool IsJammed () { return true; }
98 override bool IsBoltOpen () { return true; }
99 override bool IsDischarged () { return true; }
100 override bool IsRepairEnabled () { return true; }
102};
103
104class OB_JAM_MA1 extends WeaponStableState
105{
106 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { jammed mag"); } m_weapon.SetWeaponOpen(true); super.OnEntry(e); }
107 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } jammed mag"); } }
108 override int GetCurrentStateID () { return OBStableStateID.OB_JAM_MA1; }
109 override bool HasBullet () { return true; }
110 override bool HasMagazine () { return true; }
111 override bool IsJammed () { return true; }
112 override bool IsBoltOpen () { return true; }
113 override bool IsDischarged () { return true; }
114 override bool IsRepairEnabled () { return true; }
116};
117
122class OpenBolt_Base extends Rifle_Base
123{
124 ref WeaponStableState C0;
131
133 {
134 }
135
136 override void InitStateMachine()
137 {
138 m_abilities.Insert(new AbilityRecord(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADRIFLE_MAGAZINE_BULLET));
139 m_abilities.Insert(new AbilityRecord(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADRIFLE_NOMAGAZINE_BULLET));
140 m_abilities.Insert(new AbilityRecord(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADRIFLE_MAGAZINE_NOBULLET_OPEN));
141 m_abilities.Insert(new AbilityRecord(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADRIFLE_NOMAGAZINE_NOBULLET_OPEN));
142
143 m_abilities.Insert(new AbilityRecord(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOAD_MAGAZINE_DETACH));
144
145 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_OPENED));
146
147 m_abilities.Insert(new AbilityRecord(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_START));
148 m_abilities.Insert(new AbilityRecord(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_END));
149
150 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL));
151 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY));
152 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_COCKED));
153 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_JAM));
154
155 //m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_UNCOCKED));
156
157 // setup state machine
158 // basic weapon states
159 // close-open-jammed | nomag-mag | - no bullet in chamber
160 // regexp: [COJ][01][-E]
161 C0 = new OB_CLO_MA0(this, NULL, OBAnimState.CLOSED);
162 O0 = new OB_OPN_MA0(this, NULL, OBAnimState.OPENED);
163 C1 = new OB_CLO_MA1(this, NULL, OBAnimState.CLOSED);
164 O1 = new OB_OPN_MA1(this, NULL, OBAnimState.OPENED);
165 O1E = new OB_OPN_MA1_EMPTY(this, NULL, OBAnimState.OPENED);
166 J0 = new OB_JAM_MA0(this, NULL, OBAnimState.JAMMED);
167 J1 = new OB_JAM_MA1(this, NULL, OBAnimState.JAMMED);
168
169 WeaponCharging Mech_C1 = new WeaponCharging(this, NULL, WeaponActions.MECHANISM, GetWeaponSpecificCommand(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_OPENED));
170
171 //-----------------------------------------------
172
173 WeaponStateBase Trigger_C0 = new WeaponDryFire(this, NULL, WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY));
174 WeaponStateBase Trigger_C1 = new WeaponDryFire(this, NULL, WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY));
175 WeaponStateBase Trigger_O1E = new WeaponDryFire(this, NULL, WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_COCKED));
176 WeaponStateBase Trigger_O0 = new WeaponDryFire(this, NULL, WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_COCKED));
177
178 WeaponFireAndChamberNext Trigger_O1 = new WeaponFireAndChamberNext(this, NULL, WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL));
179 WeaponStateBase Trigger_O1L = new WeaponFireLast(this, NULL, WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL));
180 WeaponStateBase Trigger_O1J = new WeaponFireToJam(this, NULL, WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_JAM));//Fire and jam
181
182 WeaponStateBase Trigger_J0 = new WeaponDryFire(this, NULL, WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY));
183 WeaponStateBase Trigger_J1 = new WeaponDryFire(this, NULL, WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY));
184
185 //-----------------------------------------------
186
187 WeaponStateBase Unjam_J0 = new WeaponUnjamming(this, NULL, WeaponActions.UNJAMMING, GetWeaponSpecificCommand(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_START));
188 WeaponStateBase Unjam_J1 = new WeaponUnjamming(this, NULL, WeaponActions.UNJAMMING, GetWeaponSpecificCommand(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_START));
189
190 //-----------------------------------------------
191
192 WeaponAttachMagazineOpenBoltCharged Attach_C0 = new WeaponAttachMagazineOpenBoltCharged(this, NULL, WeaponActions.RELOAD, GetWeaponSpecificCommand(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADRIFLE_NOMAGAZINE_NOBULLET_OPEN));
193 WeaponAttachMagazineOpenBoltCharged Attach_O0 = new WeaponAttachMagazineOpenBoltCharged(this, NULL, WeaponActions.RELOAD, GetWeaponSpecificCommand(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADRIFLE_NOMAGAZINE_BULLET));//TODO Need add open animation
194 WeaponAttachMagazineOpenBoltCharged Attach_J0 = new WeaponAttachMagazineOpenBoltCharged(this, NULL, WeaponActions.RELOAD, GetWeaponSpecificCommand(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADRIFLE_NOMAGAZINE_BULLET));
195
196 WeaponReplacingMagAndChamberNextOpenBoltCharged Reload_C1 = new WeaponReplacingMagAndChamberNextOpenBoltCharged(this, NULL, WeaponActions.RELOAD, GetWeaponSpecificCommand(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADRIFLE_MAGAZINE_NOBULLET_OPEN));
197 WeaponReplacingMagAndChamberNextOpenBoltCharged Reload_O1 = new WeaponReplacingMagAndChamberNextOpenBoltCharged(this, NULL, WeaponActions.RELOAD, GetWeaponSpecificCommand(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADRIFLE_MAGAZINE_BULLET));//TODO Need add open animation
198 WeaponReplacingMagAndChamberNextOpenBoltCharged Reload_J1 = new WeaponReplacingMagAndChamberNextOpenBoltCharged(this, NULL, WeaponActions.RELOAD, GetWeaponSpecificCommand(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADRIFLE_MAGAZINE_BULLET));
199
200 WeaponDetachingMagOpenBolt Detach_C1 = new WeaponDetachingMagOpenBolt(this, NULL, WeaponActions.RELOAD, GetWeaponSpecificCommand(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADRIFLE_MAGAZINE_DETACH));
201 WeaponDetachingMagOpenBolt Detach_O1 = new WeaponDetachingMagOpenBolt(this, NULL, WeaponActions.RELOAD, GetWeaponSpecificCommand(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADRIFLE_MAGAZINE_DETACH));
202 WeaponDetachingMagOpenBolt Detach_J1 = new WeaponDetachingMagOpenBolt(this, NULL, WeaponActions.RELOAD, GetWeaponSpecificCommand(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADRIFLE_MAGAZINE_DETACH));
203
204 //WeaponStateBase chmMag = new WeaponChamberFromAttMag(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
205
206 // events
207 WeaponEventBase __M__ = new WeaponEventMechanism;
208 WeaponEventBase __T__ = new WeaponEventTrigger;
209 WeaponEventBase __TJ_ = new WeaponEventTriggerToJam;
210 WeaponEventBase __U__ = new WeaponEventUnjam;
211 WeaponEventBase __A__ = new WeaponEventAttachMagazine;
212 WeaponEventBase __D__ = new WeaponEventDetachMagazine;
213 WeaponEventBase __S__ = new WeaponEventSwapMagazine;
214 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
215 WeaponEventBase _abt_ = new WeaponEventHumanCommandActionAborted;
216 WeaponEventBase _rto_ = new WeaponEventReloadTimeout;
217 WeaponEventBase _dto_ = new WeaponEventDryFireTimeout;
218
219 m_fsm = new WeaponFSM();
220
221 m_fsm.AddTransition(new WeaponTransition( C1, __M__, Mech_C1)); // charge from bullet nomag
222 m_fsm.AddTransition(new WeaponTransition( Mech_C1, _fin_, C1, NULL, new WeaponGuardWeaponDischarged(this) ));
223 m_fsm.AddTransition(new WeaponTransition( Mech_C1, _fin_, O1E, NULL, new WeaponGuardCurrentChamberEmpty(this) ));
224 m_fsm.AddTransition(new WeaponTransition( Mech_C1, _fin_, O1));
225 m_fsm.AddTransition(new WeaponTransition( Mech_C1, _abt_, C1, NULL, new WeaponGuardWeaponDischarged(this) ));
226 m_fsm.AddTransition(new WeaponTransition( Mech_C1, _abt_, O1E, NULL, new WeaponGuardCurrentChamberEmpty(this) ));
227 m_fsm.AddTransition(new WeaponTransition( Mech_C1, _abt_, O1));
228
229 m_fsm.AddTransition(new WeaponTransition( C0, __M__, C0));
230 m_fsm.AddTransition(new WeaponTransition( O1E, __M__, O1E));
231 m_fsm.AddTransition(new WeaponTransition( O0, __M__, O0));
232 m_fsm.AddTransition(new WeaponTransition( O1, __M__, O1));
233 m_fsm.AddTransition(new WeaponTransition( J0, __M__, J0));
234 m_fsm.AddTransition(new WeaponTransition( J1, __M__, J1));
235
236 // fire
237 m_fsm.AddTransition(new WeaponTransition( C0, __T__, Trigger_C0));
238 m_fsm.AddTransition(new WeaponTransition( Trigger_C0, _fin_, C0));
239 m_fsm.AddTransition(new WeaponTransition( Trigger_C0, _dto_, C0));
240 m_fsm.AddTransition(new WeaponTransition( Trigger_C0, _abt_, C0));
241
242 m_fsm.AddTransition(new WeaponTransition( C1, __T__, Trigger_C1));
243 m_fsm.AddTransition(new WeaponTransition( Trigger_C1, _fin_, C1));
244 m_fsm.AddTransition(new WeaponTransition( Trigger_C1, _dto_, C1));
245 m_fsm.AddTransition(new WeaponTransition( Trigger_C1, _abt_, C1));
246
247 m_fsm.AddTransition(new WeaponTransition( O1, __T__, Trigger_O1, NULL, new WeaponGuardHasAmmo(this)));
248 m_fsm.AddTransition(new WeaponTransition( Trigger_O1, _fin_, O1));
249 m_fsm.AddTransition(new WeaponTransition( Trigger_O1, _rto_, O1));
250 m_fsm.AddTransition(new WeaponTransition( Trigger_O1, _abt_, O1));
251
252 m_fsm.AddTransition(new WeaponTransition( O1, __T__, Trigger_O1L, NULL, new GuardNot(new WeaponGuardHasAmmo(this))));
253 m_fsm.AddTransition(new WeaponTransition( Trigger_O1L, _fin_, O1E));
254 m_fsm.AddTransition(new WeaponTransition( Trigger_O1L, _rto_, O1E));
255 m_fsm.AddTransition(new WeaponTransition( Trigger_O1L, _abt_, O1E));
256
257 m_fsm.AddTransition(new WeaponTransition( O1, __TJ_, Trigger_O1J ));
258 m_fsm.AddTransition(new WeaponTransition( Trigger_O1J, _fin_, J1 ));
259 m_fsm.AddTransition(new WeaponTransition( Trigger_O1J, _rto_, J1 ));
260 m_fsm.AddTransition(new WeaponTransition( Trigger_O1J, _abt_, J1 ));
261
262 m_fsm.AddTransition(new WeaponTransition( O1E, __T__, Trigger_O1E));
263 m_fsm.AddTransition(new WeaponTransition( Trigger_O1E, _fin_, C1));
264 m_fsm.AddTransition(new WeaponTransition( Trigger_O1E, _rto_, C1));
265 m_fsm.AddTransition(new WeaponTransition( Trigger_O1E, _abt_, C1));
266
267 m_fsm.AddTransition(new WeaponTransition( O0, __T__, Trigger_O0));
268 m_fsm.AddTransition(new WeaponTransition( Trigger_O0, _fin_, C0));
269 m_fsm.AddTransition(new WeaponTransition( Trigger_O0, _rto_, C0));
270 m_fsm.AddTransition(new WeaponTransition( Trigger_O0, _abt_, C0));
271
272 m_fsm.AddTransition(new WeaponTransition( J0, __T__, Trigger_J0));
273 m_fsm.AddTransition(new WeaponTransition( Trigger_J0, _fin_, J0));
274 m_fsm.AddTransition(new WeaponTransition( Trigger_J0, _dto_, J0));
275 m_fsm.AddTransition(new WeaponTransition( Trigger_J0, _abt_, J0));
276
277 m_fsm.AddTransition(new WeaponTransition( J1, __T__, Trigger_J1));
278 m_fsm.AddTransition(new WeaponTransition( Trigger_J1, _fin_, J1));
279 m_fsm.AddTransition(new WeaponTransition( Trigger_J1, _dto_, J1));
280 m_fsm.AddTransition(new WeaponTransition( Trigger_J1, _abt_, J1));
281
282 // attach magazine (no mag in weapon)
283 m_fsm.AddTransition(new WeaponTransition( C0, __A__, Attach_C0, NULL, new WeaponGuardCanAttachMag(this)));
284 m_fsm.AddTransition(new WeaponTransition( Attach_C0, _fin_, C0, NULL, new GuardNot(new WeaponGuardHasMag(this))) );
285 m_fsm.AddTransition(new WeaponTransition( Attach_C0, _fin_, C1, NULL, new WeaponGuardWeaponDischarged(this)));
286 m_fsm.AddTransition(new WeaponTransition( Attach_C0, _fin_, O1E, NULL, new WeaponGuardChamberEmpty(this)) );
287 m_fsm.AddTransition(new WeaponTransition( Attach_C0, _fin_, O1));
288 m_fsm.AddTransition(new WeaponTransition( Attach_C0, _abt_, C0, NULL, new GuardNot(new WeaponGuardHasMag(this))) );
289 m_fsm.AddTransition(new WeaponTransition( Attach_C0, _abt_, C1, NULL, new WeaponGuardWeaponDischarged(this)));
290 m_fsm.AddTransition(new WeaponTransition( Attach_C0, _abt_, O1E, NULL, new WeaponGuardChamberEmpty(this)) );
291 m_fsm.AddTransition(new WeaponTransition( Attach_C0, _abt_, O1));
292
293 m_fsm.AddTransition(new WeaponTransition( O0, __A__, Attach_O0, NULL, new WeaponGuardCanAttachMag(this)));
294 m_fsm.AddTransition(new WeaponTransition( Attach_O0, _fin_, O0, NULL, new GuardNot(new WeaponGuardHasMag(this))));
295 m_fsm.AddTransition(new WeaponTransition( Attach_O0, _fin_, O1E, NULL, new WeaponGuardChamberEmpty(this)));
296 m_fsm.AddTransition(new WeaponTransition( Attach_O0, _fin_, O1));
297 m_fsm.AddTransition(new WeaponTransition( Attach_O0, _abt_, O0, NULL, new GuardNot(new WeaponGuardHasMag(this))));
298 m_fsm.AddTransition(new WeaponTransition( Attach_O0, _abt_, O1E, NULL, new WeaponGuardChamberEmpty(this)));
299 m_fsm.AddTransition(new WeaponTransition( Attach_O0, _abt_, O1));
300
301 m_fsm.AddTransition(new WeaponTransition( J0, __A__, Attach_J0, NULL, new WeaponGuardCanAttachMag(this)));
302 m_fsm.AddTransition(new WeaponTransition( Attach_J0, _fin_, J1, NULL, new WeaponGuardHasMag(this)));
303 m_fsm.AddTransition(new WeaponTransition( Attach_J0, _fin_, J0));
304 m_fsm.AddTransition(new WeaponTransition( Attach_J0, _abt_, J1, NULL, new WeaponGuardHasMag(this)));
305 m_fsm.AddTransition(new WeaponTransition( Attach_J0, _abt_, J0));
306
307
308 // replace magazine
309 m_fsm.AddTransition(new WeaponTransition( C1, __S__, Reload_C1, NULL, new WeaponGuardCanSwapMag(this)));
310 m_fsm.AddTransition(new WeaponTransition( Reload_C1, _fin_, C0, NULL, new GuardNot(new WeaponGuardHasMag(this))) );
311 m_fsm.AddTransition(new WeaponTransition( Reload_C1, _fin_, C1, NULL, new WeaponGuardWeaponDischarged(this)));
312 m_fsm.AddTransition(new WeaponTransition( Reload_C1, _fin_, O1E, NULL, new WeaponGuardChamberEmpty(this)));
313 m_fsm.AddTransition(new WeaponTransition( Reload_C1, _fin_, O1));
314 m_fsm.AddTransition(new WeaponTransition( Reload_C1, _abt_, C0, NULL, new GuardNot(new WeaponGuardHasMag(this))) );
315 m_fsm.AddTransition(new WeaponTransition( Reload_C1, _abt_, C1, NULL, new WeaponGuardWeaponDischarged(this)));
316 m_fsm.AddTransition(new WeaponTransition( Reload_C1, _abt_, O1E, NULL, new WeaponGuardChamberEmpty(this)));
317 m_fsm.AddTransition(new WeaponTransition( Reload_C1, _abt_, O1));
318
319 m_fsm.AddTransition(new WeaponTransition( O1, __S__, Reload_O1, NULL, new WeaponGuardCanSwapMag(this)));
320 m_fsm.AddTransition(new WeaponTransition( O1E, __S__, Reload_O1, NULL, new WeaponGuardCanSwapMag(this)));
321 m_fsm.AddTransition(new WeaponTransition( Reload_O1, _fin_, O0, NULL, new GuardNot(new WeaponGuardHasMag(this))) );
322 m_fsm.AddTransition(new WeaponTransition( Reload_O1, _fin_, O1E, NULL, new WeaponGuardChamberEmpty(this)) );
323 m_fsm.AddTransition(new WeaponTransition( Reload_O1, _fin_, O1));
324 m_fsm.AddTransition(new WeaponTransition( Reload_O1, _abt_, O0, NULL, new GuardNot(new WeaponGuardHasMag(this))) );
325 m_fsm.AddTransition(new WeaponTransition( Reload_O1, _abt_, O1E, NULL, new WeaponGuardChamberEmpty(this)) );
326 m_fsm.AddTransition(new WeaponTransition( Reload_O1, _abt_, O1));
327
328 m_fsm.AddTransition(new WeaponTransition( J1, __S__, Reload_J1, NULL, new WeaponGuardCanSwapMag(this)));
329 m_fsm.AddTransition(new WeaponTransition( Reload_J1, _fin_, J1, NULL, new WeaponGuardHasMag(this)));
330 m_fsm.AddTransition(new WeaponTransition( Reload_J1, _fin_, J0));
331 m_fsm.AddTransition(new WeaponTransition( Reload_J1, _abt_, J1, NULL, new WeaponGuardHasMag(this)));
332 m_fsm.AddTransition(new WeaponTransition( Reload_J1, _abt_, J0));
333
334 // @TODO: abort in jam
335
336 // detach magazine
337 m_fsm.AddTransition(new WeaponTransition( C1, __D__, Detach_C1, NULL, new WeaponGuardCanDetachMag(this)));
338 m_fsm.AddTransition(new WeaponTransition( Detach_C1, _fin_, C1, NULL, new WeaponGuardHasMag(this)));
339 m_fsm.AddTransition(new WeaponTransition( Detach_C1, _fin_, C0));
340 m_fsm.AddTransition(new WeaponTransition( Detach_C1, _abt_, C1, NULL, new WeaponGuardHasMag(this)));
341 m_fsm.AddTransition(new WeaponTransition( Detach_C1, _abt_, C0));
342
343 m_fsm.AddTransition(new WeaponTransition( O1E, __D__, Detach_O1, NULL, new WeaponGuardCanDetachMag(this)));
344 m_fsm.AddTransition(new WeaponTransition( O1, __D__, Detach_O1, NULL, new WeaponGuardCanDetachMag(this)));
345 m_fsm.AddTransition(new WeaponTransition( Detach_O1, _fin_, O0, NULL, new GuardNot(new WeaponGuardHasMag(this))));
346 m_fsm.AddTransition(new WeaponTransition( Detach_O1, _fin_, O1E, NULL, new WeaponGuardChamberEmpty(this)));
347 m_fsm.AddTransition(new WeaponTransition( Detach_O1, _fin_, O1));
348 m_fsm.AddTransition(new WeaponTransition( Detach_O1, _abt_, O0, NULL, new GuardNot(new WeaponGuardHasMag(this))));
349 m_fsm.AddTransition(new WeaponTransition( Detach_O1, _abt_, O1E, NULL, new WeaponGuardChamberEmpty(this)));
350 m_fsm.AddTransition(new WeaponTransition( Detach_O1, _abt_, O1));
351
352 m_fsm.AddTransition(new WeaponTransition( J1, __D__, Detach_J1, NULL, new WeaponGuardCanDetachMag(this)));
353 m_fsm.AddTransition(new WeaponTransition( Detach_J1, _fin_, J1, NULL, new WeaponGuardHasMag(this)));
354 m_fsm.AddTransition(new WeaponTransition( Detach_J1, _fin_, J0));
355 m_fsm.AddTransition(new WeaponTransition( Detach_J1, _abt_, J1, NULL, new WeaponGuardHasMag(this)));
356 m_fsm.AddTransition(new WeaponTransition( Detach_J1, _abt_, J0));
357
358
359 // unjam
360 m_fsm.AddTransition(new WeaponTransition( J0, __U__, Unjam_J0)); // unjam nomag
361 m_fsm.AddTransition(new WeaponTransition( Unjam_J0, _fin_, J0, NULL, new WeaponGuardJammed(this)));
362 m_fsm.AddTransition(new WeaponTransition( Unjam_J0, _fin_, O0));
363 m_fsm.AddTransition(new WeaponTransition( Unjam_J0, _abt_, J0, NULL, new WeaponGuardJammed(this)));
364 m_fsm.AddTransition(new WeaponTransition( Unjam_J0, _abt_, O0));
365
366 m_fsm.AddTransition(new WeaponTransition( J1, __U__, Unjam_J1)); // unjam with mag with ammo
367 m_fsm.AddTransition(new WeaponTransition( Unjam_J1, _fin_, J1, NULL, new WeaponGuardJammed(this)));
368 m_fsm.AddTransition(new WeaponTransition( Unjam_J1, _fin_, O1E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
369 m_fsm.AddTransition(new WeaponTransition( Unjam_J1, _fin_, O1));
370 m_fsm.AddTransition(new WeaponTransition( Unjam_J1, _abt_, J1, NULL, new WeaponGuardJammed(this)));
371 m_fsm.AddTransition(new WeaponTransition( Unjam_J1, _abt_, O1E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
372 m_fsm.AddTransition(new WeaponTransition( Unjam_J1, _abt_, O1));
373
374 SetInitialState(C0);
375
376 SelectionBulletHide();
377 HideMagazine();
378
379 m_fsm.Start();
380 }
381
382 override void SetActions()
383 {
384 super.SetActions();
385
388 }
389
390}
void wpnPrint(string s)
void RemoveAction(typename actionName)
Определения AdvancedCommunication.c:252
@ UNKNOWN
24 - Any other error. Can be returned from any call.
Определения BIOSErrorModule.c:56
FirearmActionLoadBullet FirearmActionBase FirearmActionLoadBulletQuick()
class WeaponGuardIsDestroyed extends WeaponGuardBase m_weapon
Определения Guards.c:604
void WeaponGuardHasAmmo(Weapon_Base w=NULL)
Определения Guards.c:99
void WeaponGuardWeaponDischarged(Weapon_Base w=NULL)
Определения Guards.c:580
CLOSED
Определения Land_Underground_Entrance.c:33
OB_OPN_MA1
Определения OpenBolt_Base.c:27
OB_JAM_MA0
Определения OpenBolt_Base.c:29
OBStableStateID
Определения OpenBolt_Base.c:9
OB_OPN_MA0
Определения OpenBolt_Base.c:25
OB_JAM_MA1
Определения OpenBolt_Base.c:30
OB_CLO_MA1
Определения OpenBolt_Base.c:26
OBAnimState
Определения OpenBolt_Base.c:2
OB_CLO_MA0
Определения OpenBolt_Base.c:24
OB_OPN_MA1_EMPTY
Определения OpenBolt_Base.c:28
@ OPENED
Определения SKS.c:4
@ JAMMED
Определения SKS.c:5
class SSPFireout extends WeaponStableState OnEntry
enum FSMTransition WeaponTransition
enum FSMTransition WeaponEventBase
class WeaponChambering_Chamber_OnEntry extends WeaponChambering_Base OnExit
Определения WeaponChambering.c:352
MuzzleState
Определения WeaponStableState.c:15
ref array< MuzzleState > m_muzzleHasBullet
Определения WeaponStableState.c:30
void WeaponStableState(Weapon_Base w=NULL, WeaponStateBase parent=NULL, int anim_state=-1)
Определения WeaponStableState.c:32
pair ( action, actionType )
Определения Weapon_Base.c:5
static bool IsWeaponLogEnable()
Определения 3_Game/tools/Debug.c:718
Определения 3_Game/tools/Debug.c:594
Определения ObjectTyped.c:2
base for automatic weapons fireing from open bolt position @NOTE name copies config base class
Определения Entities/Firearms/SMG/PM73Rak.c:6
ref WeaponStableState O1E
Определения OpenBolt_Base.c:128
ref WeaponStableState J1
Определения OpenBolt_Base.c:129
ref WeaponStableState C0
Определения SKS.c:71
ref WeaponStableState O1
Определения OpenBolt_Base.c:127
ref WeaponStableState J0
Определения OpenBolt_Base.c:130
ref WeaponStableState C1
Определения SKS.c:72
void OpenBolt_Base()
Определения OpenBolt_Base.c:132
override void SetActions()
Определения OpenBolt_Base.c:382
ref WeaponStableState O0
Определения OpenBolt_Base.c:125
override void InitStateMachine()
Определения OpenBolt_Base.c:136
base for rifles @NOTE name copies config base class
Определения SKS.c:70
override void OnExit(WeaponEventBase e)
Определения WeaponChambering.c:439
charging of weapon without ammo to be chambered
signalize mechanism manipulation
Определения Events.c:35
weapon finite state machine
replace current magazine with new one for weapon charged with open position bolt
override bool IsBoltOpen()
Определения SKS.c:48
override bool IsJammed()
Определения Crossbow.c:33
override bool IsDischarged()
Определения OpenBolt_Base.c:44
override void OnExit(WeaponEventBase e)
Определения OpenBolt_Base.c:37
override void InitMuzzleArray()
Определения Crossbow.c:35
override void OnEntry(WeaponEventBase e)
Определения Crossbow.c:28
override bool HasBullet()
Определения Crossbow.c:31
override int GetCurrentStateID()
Определения Crossbow.c:30
override bool IsRepairEnabled()
Определения Crossbow.c:34
override bool HasMagazine()
Определения Crossbow.c:32
represents weapon's stable state (i.e. the basic states that the weapon will spend the most time in)
Определения Crossbow.c:27
represent weapon state base
Определения BulletHide.c:2
unjam submachine
class LOD Object
WeaponActions
actions
Определения human.c:816
WeaponActionReloadTypes
Определения human.c:832
WeaponActionUnjammingTypes
Определения human.c:916
WeaponActionFireTypes
Определения human.c:924