81 {
82
83 m_abilities.Insert(
new AbilityRecord(
WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED));
86
89
93
94
99
100 WeaponStateBase Mech_E =
new WeaponChargingInnerMag(
this, NULL,
WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
101 WeaponStateBase Mech_F =
new WeaponChargingInnerMag(
this, NULL,
WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
102 WeaponStateBase Mech_L =
new WeaponChargingInnerMag(
this, NULL,
WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
103
107
109
114
116
126
127 m_fsm = new WeaponFSM();
128
129
131
132
134 m_fsm.AddTransition(
new WeaponTransition( Mech_L, _fin_,
E, NULL,
new WeaponGuardCurrentChamberEmpty(
this)));
136 m_fsm.AddTransition(
new WeaponTransition( Mech_L, _abt_,
E, NULL,
new WeaponGuardCurrentChamberEmpty(
this)));
138
140 m_fsm.AddTransition(
new WeaponTransition( Mech_F, _fin_,
E, NULL,
new WeaponGuardCurrentChamberEmpty(
this)));
141 m_fsm.AddTransition(
new WeaponTransition( Mech_F, _fin_,
F, NULL,
new WeaponGuardCurrentChamberFiredOut(
this)));
143 m_fsm.AddTransition(
new WeaponTransition( Mech_F, _abt_,
E, NULL,
new WeaponGuardCurrentChamberEmpty(
this)));
144 m_fsm.AddTransition(
new WeaponTransition( Mech_F, _abt_,
F, NULL,
new WeaponGuardCurrentChamberFiredOut(
this)));
146
147
148
150 m_fsm.AddTransition(
new WeaponTransition( Chamber_E, _fin_,
E, NULL,
new WeaponGuardCurrentChamberEmpty(
this)));
152 m_fsm.AddTransition(
new WeaponTransition( Chamber_E, _abt_,
E, NULL,
new WeaponGuardCurrentChamberEmpty(
this)));
154
155 m_fsm.AddTransition(
new WeaponTransition(
L, __L__, Chamber_L, NULL,
new GuardNot(
new WeaponGuardInnerMagazineFull(
this))));
158
159 m_fsm.AddTransition(
new WeaponTransition(
F, __L__, Chamber_F, NULL,
new GuardNot(
new WeaponGuardInnerMagazineFull(
this))));
160 m_fsm.AddTransition(
new WeaponTransition( Chamber_F, _fin_,
F, NULL,
new WeaponGuardCurrentChamberFiredOut(
this)));
162 m_fsm.AddTransition(
new WeaponTransition( Chamber_F, _abt_,
F, NULL,
new WeaponGuardCurrentChamberFiredOut(
this)));
164
165
166
167
169 m_fsm.AddTransition(
new WeaponTransition( Unjam_J, _fin_,
J, NULL,
new WeaponGuardJammed(
this)));
170 m_fsm.AddTransition(
new WeaponTransition( Unjam_J, _fin_,
E, NULL,
new WeaponGuardCurrentChamberEmpty(
this)));
172 m_fsm.AddTransition(
new WeaponTransition( Unjam_J, _abt_,
J, NULL,
new WeaponGuardJammed(
this)));
173 m_fsm.AddTransition(
new WeaponTransition( Unjam_J, _abt_,
E, NULL,
new WeaponGuardCurrentChamberEmpty(
this)));
175
176
177
178
183
188
193
198
203
204
205
207
208 SelectionBulletHide();
209 HideMagazine();
210
211 m_fsm.Start();
212 }
enum FSMTransition WeaponTransition
enum FSMTransition WeaponEventBase
WeaponActionChamberingTypes
WeaponActionUnjammingTypes