Dayz Explorer 1.29.162510
Loading...
Searching...
No Matches
doublebarrel_base.c
Go to the documentation of this file.
5
7{
8 UNKNOWN = 0,
9 LoadedLoaded = 1,
10 LoadedEmpty = 2,
11 FireoutLoaded = 3,
13 FireoutEmpty = 5,
14 EmptyEmpty = 6,
15 EmptyLoaded = 7,
16 EmptyFireout = 8,
17}
18
19enum MuzzleIndex
20{
21 First = 0,
22 Second = 1,
23}
24
25class DoubleBarrelLoadedLoaded extends WeaponStableState
26{
27 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { LoadedLoaded L_L"); } super.OnEntry(e); m_weapon.SetCurrentMuzzle(MuzzleIndex.First); }
28 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } LoadedLoaded L_L"); } }
29 override int GetCurrentStateID () { return DoubleBarrelStableStateID.LoadedLoaded; }
30 override bool HasBullet () { return true; }
31 override bool HasMagazine () { return false; }
32 override bool IsJammed () { return false; }
33 override bool IsRepairEnabled () { return true; }
35};
36class DoubleBarrelLoadedEmpty extends WeaponStableState
37{
38 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { LoadedEmpty L_E"); } super.OnEntry(e); m_weapon.SetCurrentMuzzle(MuzzleIndex.First);}
39 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } LoadedEmpty L_E"); } }
40 override int GetCurrentStateID () { return DoubleBarrelStableStateID.LoadedEmpty; }
41 override bool HasBullet () { return true; }
42 override bool HasMagazine () { return false; }
43 override bool IsJammed () { return false; }
44 override bool IsRepairEnabled () { return true; }
45 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.L, MuzzleState.E}; }
46};
47class DoubleBarrelEmptyLoaded extends WeaponStableState
48{
49 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { EmptyLoaded E_L"); } super.OnEntry(e); m_weapon.SetCurrentMuzzle(MuzzleIndex.Second);}
50 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } EmptyLoaded E_L"); } }
51 override int GetCurrentStateID () { return DoubleBarrelStableStateID.EmptyLoaded; }
52 override bool HasBullet () { return true; }
53 override bool HasMagazine () { return false; }
54 override bool IsJammed () { return false; }
55 override bool IsRepairEnabled () { return true; }
56 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.E, MuzzleState.L}; }
57};
58class DoubleBarrelFireoutLoaded extends WeaponStableState
59{
60 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { FireoutLoaded F_L"); } super.OnEntry(e); m_weapon.SetCurrentMuzzle(MuzzleIndex.Second);}
61 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } FireoutLoaded F_L"); } }
62 override int GetCurrentStateID () { return DoubleBarrelStableStateID.FireoutLoaded; }
63 override bool HasBullet () { return true; }
64 override bool HasMagazine () { return false; }
65 override bool IsJammed () { return false; }
66 override bool IsRepairEnabled () { return true; }
67 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.F, MuzzleState.L}; }
68};
69class DoubleBarrelFireoutFireout extends WeaponStableState
70{
71 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { FireoutFireout F_F"); } super.OnEntry(e); m_weapon.SetCurrentMuzzle(MuzzleIndex.First);}
72 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } FireoutFireout F_F"); } }
73 override int GetCurrentStateID () { return DoubleBarrelStableStateID.FireoutFireout; }
74 override bool HasBullet () { return true; }
75 override bool HasMagazine () { return false; }
76 override bool IsJammed () { return false; }
77 override bool IsRepairEnabled () { return true; }
78 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.F, MuzzleState.F}; }
79};
80
81class DoubleBarrelFireoutEmpty extends WeaponStableState
82{
83 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { FireoutEmpty F_E"); } super.OnEntry(e); m_weapon.SetCurrentMuzzle(MuzzleIndex.First);}
84 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } FireoutEmpty F_E"); } }
85 override int GetCurrentStateID () { return DoubleBarrelStableStateID.FireoutEmpty; }
86 override bool HasBullet () { return true; }
87 override bool HasMagazine () { return false; }
88 override bool IsJammed () { return false; }
89 override bool IsRepairEnabled () { return true; }
90 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.F, MuzzleState.E}; }
91};
92
93class DoubleBarrelEmptyFireout extends WeaponStableState
94{
95 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { EmptyFireout E_F"); } super.OnEntry(e); m_weapon.SetCurrentMuzzle(MuzzleIndex.First);}
96 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } EmptyFireout E_F"); } }
97 override int GetCurrentStateID () { return DoubleBarrelStableStateID.EmptyFireout; }
98 override bool HasBullet () { return true; }
99 override bool HasMagazine () { return false; }
100 override bool IsJammed () { return false; }
101 override bool IsRepairEnabled () { return true; }
102 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.E, MuzzleState.F}; }
103};
104
105class DoubleBarrelEmptyEmpty extends WeaponStableState
106{
107 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { EmptyEmpty E_E"); } super.OnEntry(e); m_weapon.SetCurrentMuzzle(MuzzleIndex.First);}
108 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } EmptyEmpty E_E"); } }
109 override int GetCurrentStateID () { return DoubleBarrelStableStateID.EmptyEmpty; }
110 override bool HasBullet () { return false; }
111 override bool HasMagazine () { return false; }
112 override bool IsJammed () { return false; }
113 override bool IsRepairEnabled () { return true; }
114 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.E, MuzzleState.E}; }
115};
116
117
118
120{
121 ref WeaponStableState L_L;
122 ref WeaponStableState L_E;
123 ref WeaponStableState E_L;
124 ref WeaponStableState F_L;
125 ref WeaponStableState F_F;
126 ref WeaponStableState F_E;
127 ref WeaponStableState E_F;
128 ref WeaponStableState E_E;
129
130 override void InitStateMachine()
131 {
132 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_END));
133 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_DOUBLE_1));
134 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_DOUBLE_2));
135 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_DOUBLE_3));
136 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_DOUBLE_4));
137 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_DOUBLE_FIREOUT_EJECT));
138
139 // setup abilities
140 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED));
141 m_abilities.Insert(new AbilityRecord(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_START));
142 m_abilities.Insert(new AbilityRecord(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_END));
143
144 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL));
145 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY));
146
147
148
149 // basic weapon states
150 L_L = new DoubleBarrelLoadedLoaded(this, NULL, DoubleBarrelAnimState.DEFAULT);
151 L_E = new DoubleBarrelLoadedEmpty(this, NULL, DoubleBarrelAnimState.DEFAULT);
152 E_L = new DoubleBarrelEmptyLoaded(this, NULL, DoubleBarrelAnimState.DEFAULT);
153 F_L = new DoubleBarrelFireoutLoaded(this, NULL, DoubleBarrelAnimState.DEFAULT);
154 F_F = new DoubleBarrelFireoutFireout(this, NULL, DoubleBarrelAnimState.DEFAULT);
155 F_E = new DoubleBarrelFireoutEmpty(this, NULL, DoubleBarrelAnimState.DEFAULT);
156 E_F = new DoubleBarrelEmptyFireout(this, NULL, DoubleBarrelAnimState.DEFAULT);
157 E_E = new DoubleBarrelEmptyEmpty(this, NULL, DoubleBarrelAnimState.DEFAULT);
158
159
160 WeaponStateBase Mech = new WeaponCharging(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
161
162 ChamberMultiBullet Chamber_E = new ChamberMultiBullet(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_DOUBLE_2,WeaponActionChamberingTypes.CHAMBERING_END);
163 ChamberMultiBullet Chamber_F = new ChamberMultiBullet(this, NULL, WeaponActions.CHAMBERING, GetAnimationForChamberingWithEjection(),WeaponActionChamberingTypes.CHAMBERING_END);
164
165 ChamberMultiBullet Chamber_L_E = new ChamberMultiBullet(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_DOUBLE_3,WeaponActionChamberingTypes.CHAMBERING_END);
166 ChamberMultiBullet Chamber_F_L = new ChamberMultiBullet(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_DOUBLE_4,WeaponActionChamberingTypes.CHAMBERING_END);
167 ChamberMultiBullet Chamber_E_L = new ChamberMultiBullet(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_DOUBLE_1,WeaponActionChamberingTypes.CHAMBERING_END);
168
169 WeaponStateBase Unjam_J = new WeaponUnjamming(this, NULL, WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_START);
170
171 WeaponStateBase Trigger_L_E = new WeaponFireMultiMuzzle(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL);
172 WeaponStateBase Trigger_E_L = new WeaponFireMultiMuzzle(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL);
173 WeaponStateBase Trigger_F_L = new WeaponFireMultiMuzzle(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL);
174 WeaponStateBase Trigger_L_L = new WeaponFireMultiMuzzle(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL);
175
176 WeaponStateBase Trigger_F_F = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY);
177 WeaponStateBase Trigger_F_E = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY);
178 WeaponStateBase Trigger_E_F = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY);
179 WeaponStateBase Trigger_E_E = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY);
180
181 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
182 WeaponEventBase __L__ = new WeaponEventLoad1Bullet;
183 WeaponEventBase __T__ = new WeaponEventTrigger;
184 //WeaponEventBase __U__ = new WeaponEventUnjam;
185 WeaponEventBase __M__ = new WeaponEventMechanism;
186 WeaponEventBase _abt_ = new WeaponEventHumanCommandActionAborted;
187 WeaponEventBase _rto_ = new WeaponEventReloadTimeout;
188 WeaponEventBase _dto_ = new WeaponEventDryFireTimeout;
189
190 m_fsm = new WeaponFSM();
191
192 m_fsm.AddTransition(new WeaponTransition( E_E, __M__, Mech));
193 m_fsm.AddTransition(new WeaponTransition( L_L, __M__, Mech));
194 m_fsm.AddTransition(new WeaponTransition( L_E, __M__, Mech));
195 m_fsm.AddTransition(new WeaponTransition( E_L, __M__, Mech));
196 m_fsm.AddTransition(new WeaponTransition( F_L, __M__, Mech));
197 m_fsm.AddTransition(new WeaponTransition( F_F, __M__, Mech));
198 m_fsm.AddTransition(new WeaponTransition( F_E, __M__, Mech));
199 m_fsm.AddTransition(new WeaponTransition( E_F, __M__, Mech));
200 m_fsm.AddTransition(new WeaponTransition( Mech, _fin_, E_E));
201
202 m_fsm.AddTransition(new WeaponTransition( Mech, _abt_, F_F, NULL, new GuardAnd( new WeaponGuardChamberFiredOut(this, MuzzleIndex.First), new WeaponGuardChamberFiredOut(this, MuzzleIndex.Second))));
203 m_fsm.AddTransition(new WeaponTransition( Mech, _abt_, F_E, NULL, new GuardAnd( new WeaponGuardChamberFiredOut(this, MuzzleIndex.First), new WeaponGuardChamberEmpty(this, MuzzleIndex.Second))));
204 m_fsm.AddTransition(new WeaponTransition( Mech, _abt_, E_F, NULL, new GuardAnd( new WeaponGuardChamberEmpty(this, MuzzleIndex.First), new WeaponGuardChamberFiredOut(this, MuzzleIndex.Second))));
205 m_fsm.AddTransition(new WeaponTransition( Mech, _abt_, F_L, NULL, new GuardAnd( new WeaponGuardChamberFiredOut(this, MuzzleIndex.First), new WeaponGuardChamberFull(this, MuzzleIndex.Second))));
206 m_fsm.AddTransition(new WeaponTransition( Mech, _abt_, L_L, NULL, new GuardAnd( new WeaponGuardChamberFull(this, MuzzleIndex.First), new WeaponGuardChamberFull(this, MuzzleIndex.Second))));
207 m_fsm.AddTransition(new WeaponTransition( Mech, _abt_, L_E, NULL, new GuardAnd( new WeaponGuardChamberFull(this, MuzzleIndex.First), new WeaponGuardChamberEmpty(this, MuzzleIndex.Second))));
208 m_fsm.AddTransition(new WeaponTransition( Mech, _abt_, E_L, NULL, new GuardAnd( new WeaponGuardChamberEmpty(this, MuzzleIndex.First), new WeaponGuardChamberFull(this, MuzzleIndex.Second))));
209 m_fsm.AddTransition(new WeaponTransition( Mech, _abt_, E_E));
210
211 m_fsm.AddTransition(new WeaponTransition( E_E, __L__, Chamber_E));
212 m_fsm.AddTransition(new WeaponTransition( Chamber_E, _fin_, L_E, NULL, new WeaponGuardChamberEmpty(this, MuzzleIndex.Second)));
213 m_fsm.AddTransition(new WeaponTransition( Chamber_E, _fin_, L_L));
214
215 m_fsm.AddTransition(new WeaponTransition( Chamber_E, _abt_, L_L, NULL, new GuardAnd( new WeaponGuardChamberFull(this, MuzzleIndex.First), new WeaponGuardChamberFull(this, MuzzleIndex.Second))));
216 m_fsm.AddTransition(new WeaponTransition( Chamber_E, _abt_, L_E, NULL, new GuardAnd( new WeaponGuardChamberFull(this, MuzzleIndex.First), new WeaponGuardChamberEmpty(this, MuzzleIndex.Second))));
217 m_fsm.AddTransition(new WeaponTransition( Chamber_E, _abt_, E_E));
218
219 m_fsm.AddTransition(new WeaponTransition( F_F, __L__, Chamber_F));
220 m_fsm.AddTransition(new WeaponTransition( F_E, __L__, Chamber_F));
221 m_fsm.AddTransition(new WeaponTransition( E_F, __L__, Chamber_F));
222
223 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _fin_, L_E, NULL, new WeaponGuardChamberEmpty(this, MuzzleIndex.Second)));
224 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _fin_, L_L));
225
226 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _abt_, F_F, NULL, new GuardAnd( new WeaponGuardChamberFiredOut(this, MuzzleIndex.First), new WeaponGuardChamberFiredOut(this, MuzzleIndex.Second))));
227 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _abt_, F_E, NULL, new GuardAnd( new WeaponGuardChamberFiredOut(this, MuzzleIndex.First), new WeaponGuardChamberEmpty(this, MuzzleIndex.Second))));
228 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _abt_, E_F, NULL, new GuardAnd( new WeaponGuardChamberEmpty(this, MuzzleIndex.First), new WeaponGuardChamberFiredOut(this, MuzzleIndex.Second))));
229 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _abt_, L_L, NULL, new GuardAnd( new WeaponGuardChamberFull(this, MuzzleIndex.First), new WeaponGuardChamberFull(this, MuzzleIndex.Second))));
230 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _abt_, L_E, NULL, new GuardAnd( new WeaponGuardChamberFull(this, MuzzleIndex.First), new WeaponGuardChamberEmpty(this, MuzzleIndex.Second))));
231 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _abt_, E_E));
232
233
234 m_fsm.AddTransition(new WeaponTransition( L_E, __L__, Chamber_L_E));
235 m_fsm.AddTransition(new WeaponTransition( Chamber_L_E, _abt_, L_L, NULL, new WeaponGuardChamberFull(this, MuzzleIndex.Second)));
236 m_fsm.AddTransition(new WeaponTransition( Chamber_L_E, _abt_, L_E));
237 m_fsm.AddTransition(new WeaponTransition( Chamber_L_E, _fin_, L_L, NULL, new WeaponGuardChamberFull(this, MuzzleIndex.Second)));
238 m_fsm.AddTransition(new WeaponTransition( Chamber_L_E, _fin_, L_E));
239
240 m_fsm.AddTransition(new WeaponTransition( E_L, __L__, Chamber_E_L));
241 m_fsm.AddTransition(new WeaponTransition( Chamber_E_L, _abt_, L_L, NULL, new WeaponGuardChamberFull(this, MuzzleIndex.First)));
242 m_fsm.AddTransition(new WeaponTransition( Chamber_E_L, _abt_, E_L));
243 m_fsm.AddTransition(new WeaponTransition( Chamber_E_L, _fin_, L_L, NULL, new WeaponGuardChamberFull(this, MuzzleIndex.First)));
244 m_fsm.AddTransition(new WeaponTransition( Chamber_E_L, _fin_, E_L));
245
246 m_fsm.AddTransition(new WeaponTransition( F_L, __L__, Chamber_F_L));
247 m_fsm.AddTransition(new WeaponTransition( Chamber_F_L, _abt_, F_L, NULL, new WeaponGuardChamberFiredOut(this, MuzzleIndex.First)));
248 m_fsm.AddTransition(new WeaponTransition( Chamber_F_L, _abt_, L_L, NULL, new GuardAnd( new WeaponGuardChamberFull(this, MuzzleIndex.First), new WeaponGuardChamberFull(this, MuzzleIndex.Second))));
249 m_fsm.AddTransition(new WeaponTransition( Chamber_F_L, _abt_, E_L, NULL, new GuardAnd( new WeaponGuardChamberEmpty(this, MuzzleIndex.First), new WeaponGuardChamberFull(this, MuzzleIndex.Second))));
250 m_fsm.AddTransition(new WeaponTransition( Chamber_F_L, _abt_, L_E));
251 m_fsm.AddTransition(new WeaponTransition( Chamber_F_L, _fin_, F_L, NULL, new WeaponGuardChamberFiredOut(this, MuzzleIndex.First)));
252 m_fsm.AddTransition(new WeaponTransition( Chamber_F_L, _fin_, L_L, NULL, new GuardAnd( new WeaponGuardChamberFull(this, MuzzleIndex.First), new WeaponGuardChamberFull(this, MuzzleIndex.Second))));
253 m_fsm.AddTransition(new WeaponTransition( Chamber_F_L, _fin_, E_L, NULL, new GuardAnd( new WeaponGuardChamberEmpty(this, MuzzleIndex.First), new WeaponGuardChamberFull(this, MuzzleIndex.Second))));
254 m_fsm.AddTransition(new WeaponTransition( Chamber_F_L, _fin_, L_E));
255
256 m_fsm.AddTransition(new WeaponTransition( L_E, __T__, Trigger_L_E));
257 m_fsm.AddTransition(new WeaponTransition( Trigger_L_E, _fin_, F_E));
258 m_fsm.AddTransition(new WeaponTransition( Trigger_L_E, _rto_, F_E));
259 m_fsm.AddTransition(new WeaponTransition( Trigger_L_E, _abt_, F_E));
260
261 m_fsm.AddTransition(new WeaponTransition( E_L, __T__, Trigger_E_L));
262 m_fsm.AddTransition(new WeaponTransition( Trigger_E_L, _fin_, E_F));
263 m_fsm.AddTransition(new WeaponTransition( Trigger_E_L, _rto_, E_F));
264 m_fsm.AddTransition(new WeaponTransition( Trigger_E_L, _abt_, E_F));
265
266 m_fsm.AddTransition(new WeaponTransition( F_L, __T__, Trigger_F_L));
267 m_fsm.AddTransition(new WeaponTransition( Trigger_F_L, _fin_, F_F));
268 m_fsm.AddTransition(new WeaponTransition( Trigger_F_L, _rto_, F_F));
269 m_fsm.AddTransition(new WeaponTransition( Trigger_F_L, _abt_, F_F));
270
271 m_fsm.AddTransition(new WeaponTransition( L_L, __T__, Trigger_L_L));
272 m_fsm.AddTransition(new WeaponTransition( Trigger_L_L, _fin_, F_F, NULL, new GuardAnd( new WeaponGuardChamberFiredOut(this, MuzzleIndex.First), new WeaponGuardChamberFiredOut(this, MuzzleIndex.Second))));
273 m_fsm.AddTransition(new WeaponTransition( Trigger_L_L, _rto_, F_F, NULL, new GuardAnd( new WeaponGuardChamberFiredOut(this, MuzzleIndex.First), new WeaponGuardChamberFiredOut(this, MuzzleIndex.Second))));
274 m_fsm.AddTransition(new WeaponTransition( Trigger_L_L, _abt_, F_F, NULL, new GuardAnd( new WeaponGuardChamberFiredOut(this, MuzzleIndex.First), new WeaponGuardChamberFiredOut(this, MuzzleIndex.Second))));
275 m_fsm.AddTransition(new WeaponTransition( Trigger_L_L, _fin_, F_L));
276 m_fsm.AddTransition(new WeaponTransition( Trigger_L_L, _rto_, F_L));
277 m_fsm.AddTransition(new WeaponTransition( Trigger_L_L, _abt_, F_L));
278
279 m_fsm.AddTransition(new WeaponTransition( F_F, __T__, Trigger_F_F));
280 m_fsm.AddTransition(new WeaponTransition( Trigger_F_F, _fin_, F_F));
281 m_fsm.AddTransition(new WeaponTransition( Trigger_F_F, _dto_, F_F));
282 m_fsm.AddTransition(new WeaponTransition( Trigger_F_F, _abt_, F_F));
283
284 m_fsm.AddTransition(new WeaponTransition( F_E, __T__, Trigger_F_E));
285 m_fsm.AddTransition(new WeaponTransition( Trigger_F_E, _fin_, F_E));
286 m_fsm.AddTransition(new WeaponTransition( Trigger_F_E, _dto_, F_E));
287 m_fsm.AddTransition(new WeaponTransition( Trigger_F_E, _abt_, F_E));
288
289 m_fsm.AddTransition(new WeaponTransition( E_F, __T__, Trigger_E_F));
290 m_fsm.AddTransition(new WeaponTransition( Trigger_E_F, _fin_, E_F));
291 m_fsm.AddTransition(new WeaponTransition( Trigger_E_F, _dto_, E_F));
292 m_fsm.AddTransition(new WeaponTransition( Trigger_E_F, _abt_, E_F));
293
294 m_fsm.AddTransition(new WeaponTransition( E_E, __T__, Trigger_E_E));
295 m_fsm.AddTransition(new WeaponTransition( Trigger_E_E, _fin_, E_E));
296 m_fsm.AddTransition(new WeaponTransition( Trigger_E_E, _dto_, E_E));
297 m_fsm.AddTransition(new WeaponTransition( Trigger_E_E, _abt_, E_E));
298
299
300
301 SetInitialState(E_E);
302
303 for(int i = 0; i < GetMuzzleCount(); i++)
304 {
305 HideBullet(i);
306 }
307 m_fsm.Start();
308
309 }
310
311 override bool CanChamberBullet (int muzzleIndex, Magazine mag)
312 {
313 if( CanChamberFromMag(muzzleIndex, mag) )
314 {
315 if(IsChamberEmpty(muzzleIndex))
316 return true;
317
318 if(IsChamberFiredOut(muzzleIndex))
319 return true;
320 }
321 return false;
322 }
323
324 override void SetActions()
325 {
327 super.SetActions();
329 }
330
331 override void SetNextWeaponMode(int muzzleIndex)
332 {
333 for (int i = 0; i < GetMuzzleCount(); i++)
334 {
335 SetNextMuzzleMode(i);
336 }
337 }
338
339 int GetAnimationForChamberingWithEjection()
340 {
341 return WeaponActionChamberingTypes.CHAMBERING_DOUBLE_2;
342 }
343};
void wpnPrint(string s)
Definition debug.c:1
void AddAction(typename actionName)
void SetActions()
@ UNKNOWN
24 - Any other error. Can be returned from any call.
pair ( action, actionType )
Definition weapon_base.c:5
base for rifles @NOTE name copies config base class
Definition sks.c:70
charging of weapon without ammo to be chambered
signalize mechanism manipulation
Definition events.c:35
weapon finite state machine
represents weapon's stable state (i.e. the basic states that the weapon will spend the most time in)
Definition crossbow.c:27
represent weapon state base
Definition bullethide.c:2
unjam submachine
EmptyFireout
LoadedEmpty
FireoutFireout
DoubleBarrelAnimState
LoadedLoaded
enum DoubleBarrelStableStateID First
EmptyLoaded
FireoutEmpty
DoubleBarrelStableStateID
FireoutLoaded
enum DoubleBarrelStableStateID Second
class LOD Object
@ DEFAULT
class WeaponGuardIsDestroyed extends WeaponGuardBase m_weapon
Definition guards.c:604
class SSPFireout extends WeaponStableState OnEntry
override bool IsRepairEnabled()
override int GetCurrentStateID()
override bool IsJammed()
override bool HasBullet()
override void InitMuzzleArray()
override bool HasMagazine()
enum FSMTransition WeaponTransition
enum FSMTransition WeaponEventBase
void ChamberMultiBullet(Weapon_Base w=NULL, WeaponStateBase parent=NULL, WeaponActions action=WeaponActions.NONE, int startActionType=-1, int endActionType=-1)
class WeaponChambering_Chamber_OnEntry extends WeaponChambering_Base OnExit
MuzzleState
ref array< MuzzleState > m_muzzleHasBullet
bool IsChamberFiredOut(int idx)