Dayz 1.25
Dayz Code Explorer by KGB
Загрузка...
Поиск...
Не найдено
Класс Weapon_Base

shorthand Подробнее...

+ Граф наследования:Weapon_Base:

Закрытые члены

override float GetChanceToJam ()
 
override void SetActions ()
 
override RecoilBase SpawnRecoilObject ()
 
void Magnum_Base ()
 
override void InitStateMachine ()
 
override bool CanChamberBullet (int muzzleIndex, Magazine mag)
 
override void AssembleGun ()
 
void SetCylinderRotationAnimationPhase (float rot, bool reset=false)
 
void SyncCylinderRotation (bool reset=true)
 
override void EEHealthLevelChanged (int oldLevel, int newLevel, string zone)
 
void SetAttachmentsHealth ()
 
override void OnFire (int muzzle_index)
 
override bool IsShowingChamberedBullet ()
 
override bool CanEjectBullet ()
 
override void ShowBullet (int muzzleIndex)
 
override void HideBullet (int muzzleIndex)
 
override void OnDebugSpawn ()
 
override bool CanChamberBullet (int muzzleIndex, Magazine mag)
 
void Pistol_Base ()
 
override void InitStateMachine ()
 
override float GetChanceToJam ()
 
override void SetActions ()
 
void Rifle_Base ()
 
override void InitStateMachine ()
 

Закрытые статические члены

static float GetCylinderRotation (int muzzleIndex)
 

Закрытые данные

ref WeaponStableState C
 
int m_LastMuzzleloaded
 
int m_ActiveMuzzle
 
const string ATT_SLOT_CYLINDER = "RevolverCylinder"
 
const string ATT_SLOT_EJECTOR = "RevolverEjector"
 
ref WeaponStableState CD00
 
ref WeaponStableState CC00
 
ref WeaponStableState CC10
 
ref WeaponStableState CJF0
 
ref WeaponStableState OD00
 
ref WeaponStableState CD01
 
ref WeaponStableState CC01
 
ref WeaponStableState CC11
 
ref WeaponStableState CJF1
 
ref WeaponStableState OD01
 

Подробное описание

shorthand

script base for all weapons

@NOTE: this class is bound to core-config "Weapon_Base" config class

Методы

◆ AssembleGun()

override void AssembleGun ( )
inlineprivate
182 {
183 super.AssembleGun();
184
185 if ( !FindAttachmentBySlotName(ATT_SLOT_EJECTOR) )
186 {
187 GetInventory().CreateAttachment("Magnum_Ejector");
188 }
189
190 if ( !FindAttachmentBySlotName(ATT_SLOT_CYLINDER) )
191 {
192 GetInventory().CreateAttachment("Magnum_Cylinder");
193 }
194
195 ForceSyncSelectionState();
197 }
Definition EntityAI.c:95
const string ATT_SLOT_EJECTOR
Definition Magnum.c:56
void SyncCylinderRotation(bool reset=true)
Definition Magnum.c:248
const string ATT_SLOT_CYLINDER
Definition Magnum.c:55

Используется в Weapon::EEInit().

◆ CanChamberBullet() [1/2]

override bool CanChamberBullet ( int muzzleIndex,
Magazine mag )
inlineprivate
166 {
167 for (int i = 0; i < GetMuzzleCount(); i++)
168 {
169 if ( CanChamberFromMag(i, mag) )
170 {
171 if (IsChamberEmpty(i))
172 return true;
173
174 if (IsChamberFiredOut(i))
175 return true;
176 }
177 }
178 return false;
179 }
bool IsChamberFiredOut(int idx)
Definition WeaponStableState.c:153

Перекрестные ссылки IsChamberFiredOut().

◆ CanChamberBullet() [2/2]

override bool CanChamberBullet ( int muzzleIndex,
Magazine mag )
inlineprivate
163 {
164 return super.CanChamberBullet(muzzleIndex,mag) && IsChamberEmpty(muzzleIndex);
165 }

◆ CanEjectBullet()

override bool CanEjectBullet ( )
inlineprivate
297 {
298 for (int i = 0; i < GetMuzzleCount(); i++)
299 {
300 if (IsChamberFull(i))
301 return true;
302 }
303 return false;
304 }
bool IsChamberFull(int idx)
Definition WeaponStableState.c:154

Перекрестные ссылки IsChamberFull().

◆ EEHealthLevelChanged()

override void EEHealthLevelChanged ( int oldLevel,
int newLevel,
string zone )
inlineprivate
254 {
255 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
256
257 if (GetGame().IsClient())
258 return;
259
261 }
void SetAttachmentsHealth()
Definition Magnum.c:264
proto native CGame GetGame()

Перекрестные ссылки GetGame().

◆ GetChanceToJam() [1/2]

override float GetChanceToJam ( )
inlineprivate
8 {
9 return 0.0;
10 }

Используется в WeaponManager::Update().

◆ GetChanceToJam() [2/2]

override float GetChanceToJam ( )
inlineprivate
595 {
596 float chanceToJam = super.GetChanceToJam();
597 Magazine mag = GetMagazine(GetCurrentMuzzle());
598
599 if(mag)
600 {
601 chanceToJam = chanceToJam + ((1.0 - chanceToJam) * mag.GetChanceToJam());
602 }
603 else
604 {
605 chanceToJam = chanceToJam + ((1.0 - chanceToJam) * 0.06);
606 }
607
608 return chanceToJam;
609 }

◆ GetCylinderRotation()

static float GetCylinderRotation ( int muzzleIndex)
inlinestaticprivate
200 {
201 switch (muzzleIndex)
202 {
203 case 0:
205 case 1:
207 case 2:
209 case 3:
211 case 4:
213 case 5:
215 }
216
217 ErrorEx(string.Format("Invalid muzzle index: %1", muzzleIndex));
218
220 }
const float MAGNUM_ROTATION_POSITION_2
Definition Magnum.c:4
const float MAGNUM_ROTATION_POSITION_1
Definition Magnum.c:3
const float MAGNUM_ROTATION_POSITION_3
Definition Magnum.c:5
const float MAGNUM_ROTATION_POSITION_4
Definition Magnum.c:6
const float MAGNUM_ROTATION_POSITION_5
Definition Magnum.c:7
const float MAGNUM_ROTATION_POSITION_0
Definition Magnum.c:2
enum ShapeType ErrorEx

Перекрестные ссылки ErrorEx, MAGNUM_ROTATION_POSITION_0, MAGNUM_ROTATION_POSITION_1, MAGNUM_ROTATION_POSITION_2, MAGNUM_ROTATION_POSITION_3, MAGNUM_ROTATION_POSITION_4 и MAGNUM_ROTATION_POSITION_5.

◆ HideBullet()

override void HideBullet ( int muzzleIndex)
inlineprivate
330 {
331 super.HideBullet(muzzleIndex);
332
333 Magnum_Cylinder cylinder = Magnum_Cylinder.Cast(GetAttachmentByType(Magnum_Cylinder));
334 if (cylinder)
335 {
336 string bullet = "bullet";
337 if (muzzleIndex > 0)
338 bullet = string.Format("bullet_" + (muzzleIndex + 1));
339
340 cylinder.HideSelection(bullet);
341
342 string bullet_nose = "bullet_nose";
343 if (muzzleIndex > 0)
344 bullet_nose = string.Format("bullet_nose_" + (muzzleIndex + 1));
345 cylinder.HideSelection(bullet_nose);
346 }
347 }

Используется в Weapon::ForceSyncSelectionState().

◆ InitStateMachine() [1/3]

override void InitStateMachine ( )
inlineprivate
89 {
90 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_CLOSED));
91 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_CLOSED_KEEP));
92 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE));
93 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED));
94 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_SPECIAL));
95 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL));
96 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_COCKED));
97 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_UNCOCKED));
98
99
100 // setup state machine
101 // basic weapon state
102 C = new Magnum_Static_State(this, NULL, MagnumAnimState.DEFAULT);
103
104
105 WeaponMagnumChambering Chamber = new WeaponMagnumChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_CLOSED_KEEP,WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE);
106 WeaponMagnumChambering Chamber_E = new WeaponMagnumChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_CLOSED,WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE);
107 //WeaponMagnumChambering Chamber_CC00 = new WeaponMagnumChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_END);
108
109 WeaponCharging Mech = new WeaponCharging(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
110
113
114 // events
115
116 WeaponEventBase __L__ = new WeaponEventLoad1Bullet;
117 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
118 WeaponEventBase _abt_ = new WeaponEventHumanCommandActionAborted;
119 WeaponEventBase __M__ = new WeaponEventMechanism;
120 WeaponEventBase __T__ = new WeaponEventTrigger;
121
122
123 WeaponEventBase _rto_ = new WeaponEventReloadTimeout;
124 WeaponEventBase _dto_ = new WeaponEventDryFireTimeout;
125
126
127 m_fsm = new WeaponFSM();
128
129
130
131 m_fsm.AddTransition(new WeaponTransition( C, __L__, Chamber, null, new WeaponGuardAnyChamberFiredOut(this))); // chamber from closed charged
132 m_fsm.AddTransition(new WeaponTransition( Chamber, _fin_, C));
133 m_fsm.AddTransition(new WeaponTransition( Chamber, _abt_, C));
134
135
136 m_fsm.AddTransition(new WeaponTransition( C, __L__, Chamber_E)); // chamber from closed charged
137 m_fsm.AddTransition(new WeaponTransition( Chamber_E, _fin_, C));
138 m_fsm.AddTransition(new WeaponTransition( Chamber_E, _abt_, C));
139
140
141 m_fsm.AddTransition(new WeaponTransition( C, __M__, Mech)); // charge from closed
142 m_fsm.AddTransition(new WeaponTransition( Mech, _fin_, C));
143 m_fsm.AddTransition(new WeaponTransition( Mech, _abt_, C));
144
145
146
147 m_fsm.AddTransition(new WeaponTransition( C, __T__, Trigger_normal, null, new GuardAnd (new WeaponGuardCurrentChamberFull(this), new GuardNot(new WeaponGuardCurrentChamberFiredOut(this))) )); // fire.cocked
148 m_fsm.AddTransition(new WeaponTransition( Trigger_normal, _fin_, C));
149 m_fsm.AddTransition(new WeaponTransition( Trigger_normal, _dto_, C));
150 m_fsm.AddTransition(new WeaponTransition( Trigger_normal, _abt_, C));
151
152 m_fsm.AddTransition(new WeaponTransition( C, __T__, Trigger_dry)); // fire.cocked
153 m_fsm.AddTransition(new WeaponTransition( Trigger_dry, _fin_, C));
154 m_fsm.AddTransition(new WeaponTransition( Trigger_dry, _dto_, C));
155 m_fsm.AddTransition(new WeaponTransition( Trigger_dry, _abt_, C));
156
157
158 SetInitialState(C);
159 SelectionBulletHide();
160 SetCurrentMuzzle(0);
161 //HideMagazine();
162 m_fsm.Start();
163 }
MagnumAnimState
Definition Magnum.c:12
enum FSMTransition WeaponTransition
pair ( action, actionType )
Definition Weapon_Base.c:5
ref WeaponStableState C
Definition Magnum.c:52
charging of weapon without ammo to be chambered
signalize mechanism manipulation
Definition Events.c:35
weapon finite state machine
represent weapon state base
Definition BulletHide.c:2
WeaponActionChamberingTypes
Definition human.c:869
WeaponActions
actions
Definition human.c:809
WeaponActionFireTypes
Definition human.c:913

Используется в Weapon::Weapon_Base().

◆ InitStateMachine() [2/3]

override void InitStateMachine ( )
inlineprivate
172 {
173 m_abilities.Insert(new AbilityRecord(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADPISTOL_MAGAZINE_BULLET_CLOSED));
174 m_abilities.Insert(new AbilityRecord(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADPISTOL_NOMAGAZINE_BULLET_CLOSED));
175 m_abilities.Insert(new AbilityRecord(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADPISTOL_MAGAZINE_NOBULLET_CLOSED_COCKED));
176 m_abilities.Insert(new AbilityRecord(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADPISTOL_NOMAGAZINE_NOBULLET_CLOSED_COCKED));
177 m_abilities.Insert(new AbilityRecord(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADPISTOL_MAGAZINE_NOBULLET_CLOSED_UNCOCKED));
178 m_abilities.Insert(new AbilityRecord(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADPISTOL_NOMAGAZINE_NOBULLET_CLOSED_UNCOCKED));
179 m_abilities.Insert(new AbilityRecord(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADPISTOL_NOMAGAZINE_NOBULLET_OPENED));
180 m_abilities.Insert(new AbilityRecord(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADPISTOL_MAGAZINE_NOBULLET_OPENED));
181 m_abilities.Insert(new AbilityRecord(WeaponActions.RELOAD, WeaponActionReloadTypes.RELOAD_MAGAZINE_DETACH));
182
183 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED));
184 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_OPENED));
185
186 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED));
187 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_OPENED));
188 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED_UNCOCKED));
189
190 m_abilities.Insert(new AbilityRecord(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_START));
191 m_abilities.Insert(new AbilityRecord(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_END));
192
193 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL));
194 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_LAST));
195 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_COCKED));
196 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_UNCOCKED));
197 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_JAM));
198
199 // setup state machine
200 // basic weapon states
201 // open-closed | discharged-charged | nobullet-bullet | nomag-mag
202 // regexp: [OC][CDJ][01][01]
203 CD00 = new Pistol_CLO_DIS_BU0_MA0(this, NULL, PistolAnimState.DEFAULT);
204 CC00 = new Pistol_CLO_CHG_BU0_MA0(this, NULL, PistolAnimState.CLOSED_CHARGED);
205 CC10 = new Pistol_CLO_CHG_BU1_MA0(this, NULL, PistolAnimState.CLOSED_CHARGED);
206 CJF0 = new Pistol_CLO_JAM_BU1_MA0(this, NULL, PistolAnimState.JAMMED);
207 OD00 = new Pistol_OPE_DIS_BU0_MA0(this, NULL, PistolAnimState.OPENED_DISCHARGED);
208 CD01 = new Pistol_CLO_DIS_BU0_MA1(this, NULL, PistolAnimState.DEFAULT);
209 CC01 = new Pistol_CLO_CHG_BU0_MA1(this, NULL, PistolAnimState.CLOSED_CHARGED);
210 CC11 = new Pistol_CLO_CHG_BU1_MA1(this, NULL, PistolAnimState.CLOSED_CHARGED);
211 CJF1 = new Pistol_CLO_JAM_BU1_MA1(this, NULL, PistolAnimState.JAMMED);
212 OD01 = new Pistol_OPE_DIS_BU0_MA1(this, NULL, PistolAnimState.OPENED_DISCHARGED);
213
214 // unstable (intermediate) states
215 WeaponCharging Mech_CD00 = new WeaponCharging(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED_UNCOCKED);
217 WeaponCharging Mech_CD01 = new WeaponCharging(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED_UNCOCKED);
221
222 WeaponCharging Mech_CC10 = new WeaponCharging(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED); // eject with no mag
223 WeaponCharging Mech_CC11 = new WeaponCharging(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED); // eject with mag
224
225
226 WeaponDryFire Trigger_CC00 = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_COCKED); // cock without clip
231 WeaponDryFire Trigger_CC01 = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_COCKED); // cock with clip
234
235 WeaponFireAndChamberNext Trigger_CC11 = new WeaponFireAndChamberNext(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL);
236 WeaponStateBase Trigger_CC10 = new WeaponFireLast(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL); // fire last no mag
237 WeaponStateBase Trigger_CC11L = new WeaponFireLast(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_LAST); // fire last with mag
238
241
244
245 WeaponChambering Chamber_CD00 = new WeaponChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED_UNCOCKED);
246 WeaponChambering Chamber_CC00 = new WeaponChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED);
247 WeaponChambering Chamber_OD00 = new WeaponChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_OPENED);
248 WeaponChambering Chamber_CD01 = new WeaponChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED_UNCOCKED);
249 WeaponChambering Chamber_CC01 = new WeaponChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED);
250 WeaponChambering Chamber_OD01 = new WeaponChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_OPENED);
251
252 WeaponAttachMagazine Attach_CC10 = new WeaponAttachMagazine(this, NULL, WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADPISTOL_NOMAGAZINE_BULLET_CLOSED);
253 WeaponAttachMagazine Attach_CJF0 = new WeaponAttachMagazine(this, NULL, WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADPISTOL_NOMAGAZINE_BULLET_CLOSED);
254 WeaponAttachMagazine Attach_CD00 = new WeaponAttachMagazine(this, NULL, WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADPISTOL_NOMAGAZINE_NOBULLET_CLOSED_UNCOCKED);
255 WeaponAttachMagazine Attach_CC00 = new WeaponAttachMagazine(this, NULL, WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADPISTOL_NOMAGAZINE_NOBULLET_CLOSED_COCKED);
256 WeaponAttachMagazine Attach_OD00 = new WeaponAttachMagazine(this, NULL, WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADPISTOL_NOMAGAZINE_NOBULLET_OPENED);
257
258 WeaponReplacingMagAndChamberNext Reload_CD01 = new WeaponReplacingMagAndChamberNext(this, NULL, WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADPISTOL_MAGAZINE_NOBULLET_CLOSED_UNCOCKED);
259 WeaponReplacingMagAndChamberNext Reload_CC01 = new WeaponReplacingMagAndChamberNext(this, NULL, WeaponActions.RELOAD, WeaponActionReloadTypes.RELOADPISTOL_MAGAZINE_NOBULLET_CLOSED_COCKED);
263
264 WeaponDetachingMag Detach_CC11 = new WeaponDetachingMag(this, NULL, WeaponActions.RELOAD, WeaponActionReloadTypes.RELOAD_MAGAZINE_DETACH);
265 WeaponDetachingMag Detach_CC01 = new WeaponDetachingMag(this, NULL, WeaponActions.RELOAD, WeaponActionReloadTypes.RELOAD_MAGAZINE_DETACH);
266 WeaponDetachingMag Detach_CD01 = new WeaponDetachingMag(this, NULL, WeaponActions.RELOAD, WeaponActionReloadTypes.RELOAD_MAGAZINE_DETACH);
267 WeaponDetachingMag Detach_OD01 = new WeaponDetachingMag(this, NULL, WeaponActions.RELOAD, WeaponActionReloadTypes.RELOAD_MAGAZINE_DETACH);
268 WeaponDetachingMag Detach_CJF1 = new WeaponDetachingMag(this, NULL, WeaponActions.RELOAD, WeaponActionReloadTypes.RELOAD_MAGAZINE_DETACH);
269
270 // events
271 WeaponEventBase __M__ = new WeaponEventMechanism;
272 WeaponEventBase __T__ = new WeaponEventTrigger;
273 WeaponEventBase __TJ_ = new WeaponEventTriggerToJam;
274 WeaponEventBase __U__ = new WeaponEventUnjam;
275 WeaponEventBase __L__ = new WeaponEventLoad1Bullet;
276 WeaponEventBase __A__ = new WeaponEventAttachMagazine;
277 WeaponEventBase __D__ = new WeaponEventDetachMagazine;
278 WeaponEventBase __S__ = new WeaponEventSwapMagazine;
279 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
280 WeaponEventBase _rto_ = new WeaponEventReloadTimeout;
281 WeaponEventBase _dto_ = new WeaponEventDryFireTimeout;
282 WeaponEventBase _abt_ = new WeaponEventHumanCommandActionAborted;
283
284 m_fsm = new WeaponFSM();
285
286 //WeaponGuardWeaponDischarged
287 //WeaponGuardWeaponOpen
288
289 // charging
290 m_fsm.AddTransition(new WeaponTransition( CD00, __M__, Mech_CD00)); // charge from closed
291 m_fsm.AddTransition(new WeaponTransition( Mech_CD00, _fin_, CC00, NULL, new WeaponGuardWeaponDischarged(this) ));
292 m_fsm.AddTransition(new WeaponTransition( Mech_CD00, _fin_, CD00));
293 m_fsm.AddTransition(new WeaponTransition( Mech_CD00, _abt_, CC00, NULL, new WeaponGuardWeaponDischarged(this) ));
294 m_fsm.AddTransition(new WeaponTransition( Mech_CD00, _abt_, CD00));
295
296 m_fsm.AddTransition(new WeaponTransition( CC00, __M__, Mech_CC00)); // charge from charged
297 m_fsm.AddTransition(new WeaponTransition( Mech_CC00, _fin_, CC00));
298 m_fsm.AddTransition(new WeaponTransition( Mech_CC00, _abt_, CC00));
299
300 m_fsm.AddTransition(new WeaponTransition( OD00, __M__, Mech_OD00)); // charge from opened
301 m_fsm.AddTransition(new WeaponTransition( Mech_OD00, _fin_, CD00, NULL, new WeaponGuardWeaponOpen(this) ));
302 m_fsm.AddTransition(new WeaponTransition( Mech_OD00, _fin_, CC00));
303 m_fsm.AddTransition(new WeaponTransition( Mech_OD00, _abt_, CD00, NULL, new WeaponGuardWeaponOpen(this) ));
304 m_fsm.AddTransition(new WeaponTransition( Mech_OD00, _abt_, CC00));
305
306 m_fsm.AddTransition(new WeaponTransition( OD01, __M__, Mech_OD01)); // charge from opened with mag
307 m_fsm.AddTransition(new WeaponTransition( Mech_OD01, _fin_, OD01, NULL, new WeaponGuardWeaponOpen(this) ));
308 m_fsm.AddTransition(new WeaponTransition( Mech_OD01, _fin_, CC01, NULL, new WeaponGuardCurrentChamberEmpty(this) ));
309 m_fsm.AddTransition(new WeaponTransition( Mech_OD01, _fin_, CC11));
310 m_fsm.AddTransition(new WeaponTransition( Mech_OD01, _abt_, OD01, NULL, new WeaponGuardWeaponOpen(this) ));
311 m_fsm.AddTransition(new WeaponTransition( Mech_OD01, _abt_, CC01, NULL, new WeaponGuardCurrentChamberEmpty(this) ));
312 m_fsm.AddTransition(new WeaponTransition( Mech_OD01, _abt_, CC11));
313
314 m_fsm.AddTransition(new WeaponTransition( CD01, __M__, Mech_CD01)); // charge from closed=1 with mag
315 m_fsm.AddTransition(new WeaponTransition( Mech_CD01, _fin_, CD01, NULL, new WeaponGuardWeaponDischarged(this)));
316 m_fsm.AddTransition(new WeaponTransition( Mech_CD01, _fin_, CC01, NULL, new WeaponGuardCurrentChamberEmpty(this)));
317 m_fsm.AddTransition(new WeaponTransition( Mech_CD01, _fin_, CC11));
318 m_fsm.AddTransition(new WeaponTransition( Mech_CD01, _abt_, CD01, NULL, new WeaponGuardWeaponDischarged(this)));
319 m_fsm.AddTransition(new WeaponTransition( Mech_CD01, _abt_, CC01, NULL, new WeaponGuardCurrentChamberEmpty(this)));
320 m_fsm.AddTransition(new WeaponTransition( Mech_CD01, _abt_, CC11));
321
322 m_fsm.AddTransition(new WeaponTransition( CC01, __M__, Mech_CC01)); // charge from closed/charged with mag
323 m_fsm.AddTransition(new WeaponTransition( Mech_CC01, _fin_, CC01, NULL, new WeaponGuardCurrentChamberEmpty(this)));
324 m_fsm.AddTransition(new WeaponTransition( Mech_CC01, _fin_, CC11));
325 m_fsm.AddTransition(new WeaponTransition( Mech_CC01, _abt_, CC01, NULL, new WeaponGuardCurrentChamberEmpty(this)));
326 m_fsm.AddTransition(new WeaponTransition( Mech_CC01, _abt_, CC11));
327
328 // eject good cartridge
329 m_fsm.AddTransition(new WeaponTransition( CC10, __M__, Mech_CC10)); // eject chamber nomag
330 m_fsm.AddTransition(new WeaponTransition( Mech_CC10, _fin_, CC00, NULL, new WeaponGuardCurrentChamberEmpty(this)));
331 m_fsm.AddTransition(new WeaponTransition( Mech_CC10, _fin_, CC10));
332 m_fsm.AddTransition(new WeaponTransition( Mech_CC10, _abt_, CC00, NULL, new WeaponGuardCurrentChamberEmpty(this)));
333 m_fsm.AddTransition(new WeaponTransition( Mech_CC10, _abt_, CC10));
334
335 m_fsm.AddTransition(new WeaponTransition( CC11, __M__, Mech_CC11 )); // eject with mag with ammo
336 m_fsm.AddTransition(new WeaponTransition( Mech_CC11, _fin_, CC01, NULL, new WeaponGuardCurrentChamberEmpty(this)));
337 m_fsm.AddTransition(new WeaponTransition( Mech_CC11, _fin_, CC11));
338 m_fsm.AddTransition(new WeaponTransition( Mech_CC11, _abt_, CC01, NULL, new WeaponGuardCurrentChamberEmpty(this)));
339 m_fsm.AddTransition(new WeaponTransition( Mech_CC11, _abt_, CC11));
340
341 // Trigger_CC11e
342 m_fsm.AddTransition(new WeaponTransition( CC00, __T__, Trigger_CC00)); // fire.cocked
343 m_fsm.AddTransition(new WeaponTransition( Trigger_CC00, _fin_, CD00));
344 m_fsm.AddTransition(new WeaponTransition( Trigger_CC00, _dto_, CD00));
345 m_fsm.AddTransition(new WeaponTransition( Trigger_CC00, _abt_, CD00));
346
347 m_fsm.AddTransition(new WeaponTransition( CD00, __T__, Trigger_CD00)); // fire.uncocked
348 m_fsm.AddTransition(new WeaponTransition( Trigger_CD00, _fin_, CD00));
349 m_fsm.AddTransition(new WeaponTransition( Trigger_CD00, _dto_, CD00));
350 m_fsm.AddTransition(new WeaponTransition( Trigger_CD00, _abt_, CD00));
351
352 m_fsm.AddTransition(new WeaponTransition( OD00, __T__, Trigger_OD00)); // opened fire.uncocked
353 m_fsm.AddTransition(new WeaponTransition( Trigger_OD00, _fin_, OD00));
354 m_fsm.AddTransition(new WeaponTransition( Trigger_OD00, _dto_, OD00));
355 m_fsm.AddTransition(new WeaponTransition( Trigger_OD00, _abt_, OD00));
356
357 m_fsm.AddTransition(new WeaponTransition( CD01, __T__, Trigger_CD01)); // fire.uncocked w mag
358 m_fsm.AddTransition(new WeaponTransition( Trigger_CD01, _fin_, CD01));
359 m_fsm.AddTransition(new WeaponTransition( Trigger_CD01, _dto_, CD01));
360 m_fsm.AddTransition(new WeaponTransition( Trigger_CD01, _abt_, CD01));
361
362 m_fsm.AddTransition(new WeaponTransition( OD01, __T__, Trigger_OD01)); // opened fire.uncocked w mag
363 m_fsm.AddTransition(new WeaponTransition( Trigger_OD01, _fin_, OD01));
364 m_fsm.AddTransition(new WeaponTransition( Trigger_OD01, _dto_, OD01));
365 m_fsm.AddTransition(new WeaponTransition( Trigger_OD01, _abt_, OD01));
366
367 m_fsm.AddTransition(new WeaponTransition( CJF0, __T__, Trigger_CJF0)); // opened fire.uncocked w mag
368 m_fsm.AddTransition(new WeaponTransition( Trigger_CJF0, _fin_, CJF0));
369 m_fsm.AddTransition(new WeaponTransition( Trigger_CJF0, _dto_, CJF0));
370 m_fsm.AddTransition(new WeaponTransition( Trigger_CJF0, _abt_, CJF0));
371
372 m_fsm.AddTransition(new WeaponTransition( CJF1, __T__, Trigger_CJF1)); // opened fire.uncocked w mag
373 m_fsm.AddTransition(new WeaponTransition( Trigger_CJF1, _fin_, CJF1));
374 m_fsm.AddTransition(new WeaponTransition( Trigger_CJF1, _dto_, CJF1));
375 m_fsm.AddTransition(new WeaponTransition( Trigger_CJF1, _abt_, CJF1));
376
377
378 m_fsm.AddTransition(new WeaponTransition( CC10, __T__, Trigger_CC10)); // or fire.last (if not jammed)
379 m_fsm.AddTransition(new WeaponTransition( Trigger_CC10, _fin_, CC00));
380 m_fsm.AddTransition(new WeaponTransition( Trigger_CC10, _rto_, CC00));
381 m_fsm.AddTransition(new WeaponTransition( Trigger_CC10, _abt_, CC00));
382
383 m_fsm.AddTransition(new WeaponTransition( CC10, __TJ_, Trigger_CC10J)); // or fire.last (if not jammed)
384 m_fsm.AddTransition(new WeaponTransition( Trigger_CC10J, _fin_, CJF0 ));
385 m_fsm.AddTransition(new WeaponTransition( Trigger_CC10J, _rto_, CJF0 ));
386 m_fsm.AddTransition(new WeaponTransition( Trigger_CC10J, _abt_, CJF0 ));
387
388
389 m_fsm.AddTransition(new WeaponTransition( CC11, __T__, Trigger_CC11, NULL, new WeaponGuardHasAmmo(this))); // fire.normal + chamber next
390 m_fsm.AddTransition(new WeaponTransition( Trigger_CC11, _fin_, CC11));
391 m_fsm.AddTransition(new WeaponTransition( Trigger_CC11, _rto_, CC11));
392 m_fsm.AddTransition(new WeaponTransition( Trigger_CC11, _abt_, CC11));
393
394 m_fsm.AddTransition(new WeaponTransition( CC11, __T__, Trigger_CC11L, NULL, new GuardNot(new WeaponGuardHasAmmo(this)))); // fire.last with mag
395 m_fsm.AddTransition(new WeaponTransition( Trigger_CC11L, _fin_, OD01));
396 m_fsm.AddTransition(new WeaponTransition( Trigger_CC11L, _rto_, OD01));
397 m_fsm.AddTransition(new WeaponTransition( Trigger_CC11L, _abt_, OD01));
398
399 m_fsm.AddTransition(new WeaponTransition( CC11, __TJ_, Trigger_CC11J )); // fire.last with mag
400 m_fsm.AddTransition(new WeaponTransition( Trigger_CC11J, _fin_, CJF1 ));
401 m_fsm.AddTransition(new WeaponTransition( Trigger_CC11J, _rto_, CJF1 ));
402 m_fsm.AddTransition(new WeaponTransition( Trigger_CC11J, _abt_, CJF1 ));
403
404 m_fsm.AddTransition(new WeaponTransition( CC01, __T__, Trigger_CC01)); // fire.cocked with mag
405 m_fsm.AddTransition(new WeaponTransition( Trigger_CC01, _fin_, CD01));
406 m_fsm.AddTransition(new WeaponTransition( Trigger_CC01, _dto_, CD01));
407 m_fsm.AddTransition(new WeaponTransition( Trigger_CC01, _abt_, CD01));
408
409 // load cartridge
410 m_fsm.AddTransition(new WeaponTransition( CD00, __L__, Chamber_CD00)); // chamber from closed=1
411 m_fsm.AddTransition(new WeaponTransition( Chamber_CD00, _fin_, OD00, NULL, new WeaponGuardWeaponOpen(this)));
412 m_fsm.AddTransition(new WeaponTransition( Chamber_CD00, _fin_, CD00, NULL, new WeaponGuardWeaponDischarged(this)));
413 m_fsm.AddTransition(new WeaponTransition( Chamber_CD00, _fin_, CC10));
414 m_fsm.AddTransition(new WeaponTransition( Chamber_CD00, _abt_, OD00, NULL, new WeaponGuardWeaponOpen(this)));
415 m_fsm.AddTransition(new WeaponTransition( Chamber_CD00, _abt_, CD00, NULL, new WeaponGuardWeaponDischarged(this)));
416 m_fsm.AddTransition(new WeaponTransition( Chamber_CD00, _abt_, CC10));
417
418 m_fsm.AddTransition(new WeaponTransition( OD00, __L__, Chamber_OD00)); // chamber from opened
419 m_fsm.AddTransition(new WeaponTransition( Chamber_OD00, _fin_, OD00, NULL, new WeaponGuardWeaponOpen(this)));
420 m_fsm.AddTransition(new WeaponTransition( Chamber_OD00, _fin_, CC10));
421 m_fsm.AddTransition(new WeaponTransition( Chamber_OD00, _abt_, OD00, NULL, new WeaponGuardWeaponOpen(this)));
422 m_fsm.AddTransition(new WeaponTransition( Chamber_OD00, _abt_, CC10));
423
424 m_fsm.AddTransition(new WeaponTransition( CC00, __L__, Chamber_CC00)); // chamber from closed charged
425 m_fsm.AddTransition(new WeaponTransition( Chamber_CC00, _fin_, OD00, NULL, new WeaponGuardWeaponOpen(this)));
426 m_fsm.AddTransition(new WeaponTransition( Chamber_CC00, _fin_, CC00, NULL, new WeaponGuardCurrentChamberEmpty(this)));
427 m_fsm.AddTransition(new WeaponTransition( Chamber_CC00, _fin_, CC10));
428 m_fsm.AddTransition(new WeaponTransition( Chamber_CC00, _abt_, OD00, NULL, new WeaponGuardWeaponOpen(this)));
429 m_fsm.AddTransition(new WeaponTransition( Chamber_CC00, _abt_, CC00, NULL, new WeaponGuardCurrentChamberEmpty(this)));
430 m_fsm.AddTransition(new WeaponTransition( Chamber_CC00, _abt_, CC10));
431
432 // load cartridge with mag
433 m_fsm.AddTransition(new WeaponTransition( CD01, __L__, Chamber_CD01, NULL, new WeaponGuardHasMag(this))); // chamber from closed=1 with mag
434 m_fsm.AddTransition(new WeaponTransition( Chamber_CD01, _fin_, OD01, NULL, new WeaponGuardWeaponOpen(this)));
435 m_fsm.AddTransition(new WeaponTransition( Chamber_CD01, _fin_, CD01, NULL, new WeaponGuardCurrentChamberEmpty(this)));
436 m_fsm.AddTransition(new WeaponTransition( Chamber_CD01, _fin_, CC11));
437 m_fsm.AddTransition(new WeaponTransition( Chamber_CD01, _abt_, OD01, NULL, new WeaponGuardWeaponOpen(this)));
438 m_fsm.AddTransition(new WeaponTransition( Chamber_CD01, _abt_, CD01, NULL, new WeaponGuardCurrentChamberEmpty(this)));
439 m_fsm.AddTransition(new WeaponTransition( Chamber_CD01, _abt_, CC11));
440
441 m_fsm.AddTransition(new WeaponTransition( CC01, __L__, Chamber_CC01, NULL, new WeaponGuardHasMag(this))); // chamber from closed=1 with mag
442 m_fsm.AddTransition(new WeaponTransition( Chamber_CC01, _fin_, OD01, NULL, new WeaponGuardWeaponOpen(this)));
443 m_fsm.AddTransition(new WeaponTransition( Chamber_CC01, _fin_, CC01, NULL, new WeaponGuardCurrentChamberEmpty(this)));
444 m_fsm.AddTransition(new WeaponTransition( Chamber_CC01, _fin_, CC11));
445 m_fsm.AddTransition(new WeaponTransition( Chamber_CC01, _abt_, OD01, NULL, new WeaponGuardWeaponOpen(this)));
446 m_fsm.AddTransition(new WeaponTransition( Chamber_CC01, _abt_, CC01, NULL, new WeaponGuardCurrentChamberEmpty(this)));
447 m_fsm.AddTransition(new WeaponTransition( Chamber_CC01, _abt_, CC11));
448
449 m_fsm.AddTransition(new WeaponTransition( OD01, __L__, Chamber_OD01, NULL, new WeaponGuardHasMag(this))); // chamber from opened with mag
450 m_fsm.AddTransition(new WeaponTransition( Chamber_OD01, _fin_, OD01, NULL, new WeaponGuardCurrentChamberEmpty(this) ));
451 m_fsm.AddTransition(new WeaponTransition( Chamber_OD01, _fin_, CC11));
452 m_fsm.AddTransition(new WeaponTransition( Chamber_OD01, _abt_, OD01, NULL, new WeaponGuardCurrentChamberEmpty(this) ));
453 m_fsm.AddTransition(new WeaponTransition( Chamber_OD01, _abt_, CC11));
454
455 m_fsm.AddTransition(new WeaponTransition( CJF0, __A__, Attach_CJF0, NULL, new WeaponGuardCanAttachMag(this))); // attach from JAM/b1/m0
456 m_fsm.AddTransition(new WeaponTransition( Attach_CJF0, _fin_, CJF1, NULL, new WeaponGuardHasMag(this)));
457 m_fsm.AddTransition(new WeaponTransition( Attach_CJF0, _fin_, CJF0));
458 m_fsm.AddTransition(new WeaponTransition( Attach_CJF0, _abt_, CJF1, NULL, new WeaponGuardHasMag(this)));
459 m_fsm.AddTransition(new WeaponTransition( Attach_CJF0, _abt_, CJF0));;
460
461// zdokumentovano az sem
462 // attach mag with no ammo
463 m_fsm.AddTransition(new WeaponTransition( CD00, __A__, Attach_CD00, NULL, new WeaponGuardCanAttachMag(this))); // attach from CLO/b0/m0
464 m_fsm.AddTransition(new WeaponTransition( Attach_CD00, _fin_, CD00, NULL, new GuardNot(new WeaponGuardHasMag(this))));
465 m_fsm.AddTransition(new WeaponTransition( Attach_CD00, _fin_, CD01, NULL, new WeaponGuardWeaponDischarged(this)));
466 m_fsm.AddTransition(new WeaponTransition( Attach_CD00, _fin_, CC01, NULL, new WeaponGuardCurrentChamberEmpty(this)));
467 m_fsm.AddTransition(new WeaponTransition( Attach_CD00, _fin_, CC11));
468 m_fsm.AddTransition(new WeaponTransition( Attach_CD00, _abt_, CD00, NULL, new GuardNot(new WeaponGuardHasMag(this))));
469 m_fsm.AddTransition(new WeaponTransition( Attach_CD00, _abt_, CD00, NULL, new WeaponGuardWeaponDischarged(this)));
470 m_fsm.AddTransition(new WeaponTransition( Attach_CD00, _abt_, CC01, NULL, new WeaponGuardCurrentChamberEmpty(this)));
471 m_fsm.AddTransition(new WeaponTransition( Attach_CD00, _abt_, CC11));
472
473 m_fsm.AddTransition(new WeaponTransition( CC10, __A__, Attach_CC10, NULL, new WeaponGuardCanAttachMag(this))); // attach from CLO/b1/m0
474 m_fsm.AddTransition(new WeaponTransition( Attach_CC10, _fin_, CC11, NULL, new WeaponGuardHasMag(this)));
475 m_fsm.AddTransition(new WeaponTransition( Attach_CC10, _fin_, CC10));
476 m_fsm.AddTransition(new WeaponTransition( Attach_CC10, _abt_, CC11, NULL, new WeaponGuardHasMag(this)));
477 m_fsm.AddTransition(new WeaponTransition( Attach_CC10, _abt_, CC10));
478
479 m_fsm.AddTransition(new WeaponTransition( OD00, __A__, Attach_OD00, NULL, new WeaponGuardCanAttachMag(this))); // attach from OPE/b0/m0
480 m_fsm.AddTransition(new WeaponTransition( Attach_OD00, _fin_, OD00, NULL, new GuardNot(new WeaponGuardHasMag(this))));
481 m_fsm.AddTransition(new WeaponTransition( Attach_OD00, _fin_, OD01, NULL, new WeaponGuardWeaponOpen(this)));
482 m_fsm.AddTransition(new WeaponTransition( Attach_OD00, _fin_, CC01, NULL, new WeaponGuardCurrentChamberEmpty(this)));
483 m_fsm.AddTransition(new WeaponTransition( Attach_OD00, _fin_, CC11));
484 m_fsm.AddTransition(new WeaponTransition( Attach_OD00, _abt_, OD00, NULL, new GuardNot(new WeaponGuardHasMag(this))));
485 m_fsm.AddTransition(new WeaponTransition( Attach_OD00, _abt_, OD01, NULL, new WeaponGuardWeaponOpen(this)));
486 m_fsm.AddTransition(new WeaponTransition( Attach_OD00, _abt_, CC01, NULL, new WeaponGuardCurrentChamberEmpty(this)));
487 m_fsm.AddTransition(new WeaponTransition( Attach_OD00, _abt_, CC11));
488
489 m_fsm.AddTransition(new WeaponTransition( CC00, __A__, Attach_CC00, NULL, new WeaponGuardCanAttachMag(this))); // attach from CLO/b0/m0 charged
490 m_fsm.AddTransition(new WeaponTransition( Attach_CC00, _fin_, CC11, NULL, new WeaponGuardCurrentChamberFull(this)));
491 m_fsm.AddTransition(new WeaponTransition( Attach_CC00, _fin_, CC01, NULL, new WeaponGuardHasMag(this)));
492 m_fsm.AddTransition(new WeaponTransition( Attach_CC00, _fin_, CC00));
493 m_fsm.AddTransition(new WeaponTransition( Attach_CC00, _abt_, CC11, NULL, new WeaponGuardCurrentChamberFull(this)));
494 m_fsm.AddTransition(new WeaponTransition( Attach_CC00, _abt_, CC01, NULL, new WeaponGuardHasMag(this)));
495 m_fsm.AddTransition(new WeaponTransition( Attach_CC00, _abt_, CC00));
496
497 // replace magazine
498 m_fsm.AddTransition(new WeaponTransition( CD01, __S__, Reload_CD01, NULL, new WeaponGuardCanSwapMag(this))); // swap in CLO/b0/m1
499 m_fsm.AddTransition(new WeaponTransition( Reload_CD01, _fin_, CC11, NULL, new WeaponGuardCurrentChamberFull(this)));
500 m_fsm.AddTransition(new WeaponTransition( Reload_CD01, _fin_, CC01, NULL, new WeaponGuardWeaponCharged(this)));
501 m_fsm.AddTransition(new WeaponTransition( Reload_CD01, _fin_, CD01, NULL, new WeaponGuardHasMag(this)));
502 m_fsm.AddTransition(new WeaponTransition( Reload_CD01, _fin_, CD00));
503 m_fsm.AddTransition(new WeaponTransition( Reload_CD01, _abt_, CC11, NULL, new WeaponGuardCurrentChamberFull(this)));
504 m_fsm.AddTransition(new WeaponTransition( Reload_CD01, _abt_, CC01, NULL, new WeaponGuardWeaponCharged(this)));
505 m_fsm.AddTransition(new WeaponTransition( Reload_CD01, _abt_, CD01, NULL, new WeaponGuardHasMag(this)));
506 m_fsm.AddTransition(new WeaponTransition( Reload_CD01, _abt_, CD00));
507
508
509 m_fsm.AddTransition(new WeaponTransition( CC11, __S__, Reload_CC11, NULL, new WeaponGuardCanSwapMag(this))); // swap in CLO/b1/m1
510 m_fsm.AddTransition(new WeaponTransition( Reload_CC11, _fin_, CC11, NULL, new WeaponGuardHasMag(this)));
511 m_fsm.AddTransition(new WeaponTransition( Reload_CC11, _fin_, CC10));
512 m_fsm.AddTransition(new WeaponTransition( Reload_CC11, _abt_, CC11, NULL, new WeaponGuardHasMag(this)));
513 m_fsm.AddTransition(new WeaponTransition( Reload_CC11, _abt_, CC10));
514
515 m_fsm.AddTransition(new WeaponTransition( CC01, __S__, Reload_CC01, NULL, new WeaponGuardCanSwapMag(this))); // CLO/b0/m1 swap with empty mag (no chamber)
516 m_fsm.AddTransition(new WeaponTransition( Reload_CC01, _fin_, CC11, NULL, new WeaponGuardCurrentChamberFull(this)) );
517 m_fsm.AddTransition(new WeaponTransition( Reload_CC01, _fin_, CC01, NULL, new WeaponGuardHasMag(this)) );
518 m_fsm.AddTransition(new WeaponTransition( Reload_CC01, _fin_, CC00));
519 m_fsm.AddTransition(new WeaponTransition( Reload_CC01, _abt_, CC11, NULL, new WeaponGuardCurrentChamberFull(this)) );
520 m_fsm.AddTransition(new WeaponTransition( Reload_CC01, _abt_, CC01, NULL, new WeaponGuardHasMag(this)) );
521 m_fsm.AddTransition(new WeaponTransition( Reload_CC01, _abt_, CC00));
522
523 m_fsm.AddTransition(new WeaponTransition( OD01, __S__, Reload_OD01, NULL, new WeaponGuardCanSwapMag(this))); // OPE/b0/m1 swap with empty mag (no chamber)
524 m_fsm.AddTransition(new WeaponTransition( Reload_OD01, _fin_, OD00, NULL, new GuardNot(new WeaponGuardHasMag(this))));
525 m_fsm.AddTransition(new WeaponTransition( Reload_OD01, _fin_, OD01, NULL, new WeaponGuardWeaponOpen(this)));
526 m_fsm.AddTransition(new WeaponTransition( Reload_OD01, _fin_, CC01, NULL, new WeaponGuardCurrentChamberEmpty(this)));
527 m_fsm.AddTransition(new WeaponTransition( Reload_OD01, _fin_, CC11));
528 m_fsm.AddTransition(new WeaponTransition( Reload_OD01, _abt_, OD00, NULL, new GuardNot(new WeaponGuardHasMag(this))));
529 m_fsm.AddTransition(new WeaponTransition( Reload_OD01, _abt_, OD01, NULL, new WeaponGuardWeaponOpen(this)));
530 m_fsm.AddTransition(new WeaponTransition( Reload_OD01, _abt_, CC01, NULL, new WeaponGuardCurrentChamberEmpty(this)));
531 m_fsm.AddTransition(new WeaponTransition( Reload_OD01, _abt_, CC11));
532
533 m_fsm.AddTransition(new WeaponTransition( CJF1, __S__, Reload_CJF1, NULL, new WeaponGuardCanSwapMag(this))); // swap in JAM/b1/m1
534 m_fsm.AddTransition(new WeaponTransition( Reload_CJF1, _fin_, CJF1, NULL, new WeaponGuardHasMag(this)));
535 m_fsm.AddTransition(new WeaponTransition( Reload_CJF1, _fin_, CJF0));
536 m_fsm.AddTransition(new WeaponTransition( Reload_CJF1, _abt_, CJF1, NULL, new WeaponGuardHasMag(this)));
537 m_fsm.AddTransition(new WeaponTransition( Reload_CJF1, _abt_, CJF0));
538
539
540 // detach magazine
541 m_fsm.AddTransition(new WeaponTransition( OD01, __D__, Detach_OD01, NULL, new WeaponGuardCanDetachMag(this))); // detach from OPE/b0/m1
542 m_fsm.AddTransition(new WeaponTransition( Detach_OD01, _fin_, OD01, NULL, new WeaponGuardHasMag(this)));
543 m_fsm.AddTransition(new WeaponTransition( Detach_OD01, _fin_, OD00));
544 m_fsm.AddTransition(new WeaponTransition( Detach_OD01, _abt_, OD01, NULL, new WeaponGuardHasMag(this)));
545 m_fsm.AddTransition(new WeaponTransition( Detach_OD01, _abt_, OD00));
546
547 m_fsm.AddTransition(new WeaponTransition( CC11, __D__, Detach_CC11, NULL, new WeaponGuardCanDetachMag(this))); // detach from CLO/b1/m1
548 m_fsm.AddTransition(new WeaponTransition( Detach_CC11, _fin_, CC11, NULL, new WeaponGuardHasMag(this)));
549 m_fsm.AddTransition(new WeaponTransition( Detach_CC11, _fin_, CC10));
550 m_fsm.AddTransition(new WeaponTransition( Detach_CC11, _abt_, CC11, NULL, new WeaponGuardHasMag(this)));
551 m_fsm.AddTransition(new WeaponTransition( Detach_CC11, _abt_, CC10));
552
553 m_fsm.AddTransition(new WeaponTransition( CC01, __D__, Detach_CC01, NULL, new WeaponGuardCanDetachMag(this))); // detach from CLO/b0/m1
554 m_fsm.AddTransition(new WeaponTransition( Detach_CC01, _fin_, CC01, NULL, new WeaponGuardHasMag(this)));
555 m_fsm.AddTransition(new WeaponTransition( Detach_CC01, _fin_, CC00));
556 m_fsm.AddTransition(new WeaponTransition( Detach_CC01, _abt_, CC01, NULL, new WeaponGuardHasMag(this)));
557 m_fsm.AddTransition(new WeaponTransition( Detach_CC01, _abt_, CC00));
558
559 m_fsm.AddTransition(new WeaponTransition( CD01, __D__, Detach_CD01, NULL, new WeaponGuardCanDetachMag(this))); // detach from CLO/b0/m1 dischg
560 m_fsm.AddTransition(new WeaponTransition( Detach_CD01, _fin_, CD01, NULL, new WeaponGuardHasMag(this)));
561 m_fsm.AddTransition(new WeaponTransition( Detach_CD01, _fin_, CD00));
562 m_fsm.AddTransition(new WeaponTransition( Detach_CD01, _abt_, CD01, NULL, new WeaponGuardHasMag(this)));
563 m_fsm.AddTransition(new WeaponTransition( Detach_CD01, _abt_, CD00));
564
565 m_fsm.AddTransition(new WeaponTransition( CJF1, __D__, Detach_CJF1, NULL, new WeaponGuardCanDetachMag(this))); // detach from CLO/b1/m1 jammed
566 m_fsm.AddTransition(new WeaponTransition( Detach_CJF1, _fin_, CJF1, NULL, new WeaponGuardHasMag(this)));
567 m_fsm.AddTransition(new WeaponTransition( Detach_CJF1, _fin_, CJF0));
568 m_fsm.AddTransition(new WeaponTransition( Detach_CJF1, _abt_, CJF1, NULL, new WeaponGuardHasMag(this)));
569 m_fsm.AddTransition(new WeaponTransition( Detach_CJF1, _abt_, CJF0));
570
571
572 // unjam
573 m_fsm.AddTransition(new WeaponTransition( CJF0, __U__, Unjam_CJF0)); // unjam nomag
574 m_fsm.AddTransition(new WeaponTransition( Unjam_CJF0, _fin_, CJF0, NULL, new WeaponGuardJammed(this)));
575 m_fsm.AddTransition(new WeaponTransition( Unjam_CJF0, _fin_, CC00));
576 m_fsm.AddTransition(new WeaponTransition( Unjam_CJF0, _abt_, CJF0, NULL, new WeaponGuardJammed(this)));
577 m_fsm.AddTransition(new WeaponTransition( Unjam_CJF0, _abt_, CC00));
578
579 m_fsm.AddTransition(new WeaponTransition( CJF1, __U__, Unjam_CJF1)); // unjam with mag with ammo
580 m_fsm.AddTransition(new WeaponTransition( Unjam_CJF1, _fin_, CJF1, NULL, new WeaponGuardJammed(this)));
581 m_fsm.AddTransition(new WeaponTransition( Unjam_CJF1, _fin_, CC01, NULL, new WeaponGuardCurrentChamberEmpty(this)));
582 m_fsm.AddTransition(new WeaponTransition( Unjam_CJF1, _fin_, CC11));
583 m_fsm.AddTransition(new WeaponTransition( Unjam_CJF1, _abt_, CJF1, NULL, new WeaponGuardJammed(this)));
584 m_fsm.AddTransition(new WeaponTransition( Unjam_CJF1, _abt_, CC01, NULL, new WeaponGuardCurrentChamberEmpty(this)));
585 m_fsm.AddTransition(new WeaponTransition( Unjam_CJF1, _abt_, CC11));
586
587
588 SetInitialState(CD00);
589 SelectionBulletHide();
590 HideMagazine();
591 m_fsm.Start();
592 }
void WeaponGuardHasAmmo(Weapon_Base w=NULL)
Definition Guards.c:99
void WeaponGuardWeaponOpen(Weapon_Base w=NULL)
Definition Guards.c:606
void WeaponGuardWeaponDischarged(Weapon_Base w=NULL)
Definition Guards.c:580
PistolAnimState
Definition Pistol_Base.c:3
ref WeaponStableState CC01
Definition Pistol_Base.c:157
ref WeaponStableState CC00
Definition Pistol_Base.c:152
ref WeaponStableState CC10
Definition Pistol_Base.c:153
ref WeaponStableState CD00
Definition Pistol_Base.c:151
ref WeaponStableState CD01
Definition Pistol_Base.c:156
ref WeaponStableState CJF0
Definition Pistol_Base.c:154
ref WeaponStableState CC11
Definition Pistol_Base.c:158
ref WeaponStableState CJF1
Definition Pistol_Base.c:159
ref WeaponStableState OD01
Definition Pistol_Base.c:160
ref WeaponStableState OD00
Definition Pistol_Base.c:155
replace current magazine with new one
unjam submachine
WeaponActionReloadTypes
Definition human.c:825
WeaponActionUnjammingTypes
Definition human.c:905

Перекрестные ссылки WeaponGuardHasAmmo(), WeaponGuardWeaponDischarged() и WeaponGuardWeaponOpen().

◆ InitStateMachine() [3/3]

override void InitStateMachine ( )
inlineprivate
17 {
18 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED));
19
20 // setup state machine
21 // basic weapon states
23
24 WeaponStateBase Mech = new WeaponCharging(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
25
26 // events
27 WeaponEventBase __M__ = new WeaponEventMechanism;
28 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
29 WeaponEventBase _abt_ = new WeaponEventHumanCommandActionAborted;
30
31 m_fsm = new WeaponFSM();
32 // charging
33 m_fsm.AddTransition(new WeaponTransition(E , __M__, Mech));
34 m_fsm.AddTransition(new WeaponTransition(Mech , _fin_, E));
35 m_fsm.AddTransition(new WeaponTransition(Mech , _abt_, E));
36
37 SetInitialState(E);
38
39 SelectionBulletHide();
40
41 m_fsm.Start();
42 }
DefaultAnimState
Definition Rifle_Base.c:2
@ E
EMPTY.
Definition WeaponStableState.c:19
void WeaponStableState(Weapon_Base w=NULL, WeaponStateBase parent=NULL, int anim_state=-1)
Definition WeaponStableState.c:32
represents weapon's stable state (i.e. the basic states that the weapon will spend the most time in)
Definition Crossbow.c:27

Перекрестные ссылки E и WeaponStableState().

◆ IsShowingChamberedBullet()

override bool IsShowingChamberedBullet ( )
inlineprivate
292 {
293 return false;
294 }

◆ Magnum_Base()

void Magnum_Base ( )
inlineprivate
74 {
77
78 /*m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionTypes.CHAMBERING_STARTLOOPABLE_CLOSED));
79 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionTypes.CHAMBERING_ENDLOOPABLE));
80 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionTypes.MECHANISM_CLOSED));
81 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionTypes.MECHANISM_SPECIAL));
82 m_abilities.Insert(new AbilityRecord(WeaponActions.UNJAMMING, WeaponActionTypes.UNJAMMING_START));
83 m_abilities.Insert(new AbilityRecord(WeaponActions.UNJAMMING, WeaponActionTypes.UNJAMMING_END));
84 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionTypes.FIRE_NORMAL));
85 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionTypes.FIRE_COCKED));*/
86 }
int m_LastMuzzleloaded
Definition Magnum.c:53
int m_ActiveMuzzle
Definition Magnum.c:54

◆ OnDebugSpawn()

override void OnDebugSpawn ( )
inlineprivate
351 {
352 super.OnDebugSpawn();
353
355 if ( Class.CastTo(entity, this) )
356 {
357 entity.SpawnEntityOnGroundPos("Ammo_357", entity.GetPosition());
358 }
359 }
Super root of all classes in Enforce script.
Definition EnScript.c:11
Definition Building.c:6
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.

Перекрестные ссылки Class::CastTo().

◆ OnFire()

override void OnFire ( int muzzle_index)
inlineprivate
279 {
280 super.OnFire(muzzle_index);
281 Magnum_Cylinder cylinder = Magnum_Cylinder.Cast(GetAttachmentByType(Magnum_Cylinder));
282 if (cylinder)
283 {
284 string bullet_nose = "bullet_nose";
285 if (muzzle_index > 0)
286 bullet_nose = string.Format("bullet_nose_" + (muzzle_index + 1));
287 cylinder.HideSelection(bullet_nose);
288 }
289 }

◆ Pistol_Base()

void Pistol_Base ( )
inlineprivate
168 {
169 }

◆ Rifle_Base()

void Rifle_Base ( )
inlineprivate
13 {
14 }

◆ SetActions() [1/2]

override void SetActions ( )
inlineprivate
59 {
60 super.SetActions();
62
65
66 }
void AddAction(typename actionName)
Definition AdvancedCommunication.c:220
void RemoveAction(typename actionName)
Definition AdvancedCommunication.c:252
FirearmActionLoadBullet FirearmActionBase FirearmActionLoadBulletQuick()
Definition FirearmActionLoadMultiBullet.c:2
Definition FirearmActionLoadMultiBullet.c:95

Перекрестные ссылки AddAction(), FirearmActionLoadBulletQuick() и RemoveAction().

◆ SetActions() [2/2]

override void SetActions ( )
inlineprivate
626 {
627 super.SetActions();
629 //AddAction(ActionAdvancedDetachMagazine);
630 }
Definition FirearmActionDetachMagazine.c:148

Перекрестные ссылки AddAction().

◆ SetAttachmentsHealth()

void SetAttachmentsHealth ( )
inlineprivate
265 {
268 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
269 {
270 entity = GetInventory().GetAttachmentFromIndex(i);
272 {
273 attachment.SetHealth01("","Health",GetHealth01());
274 }
275 }
276 }
Definition InventoryItem.c:731

Перекрестные ссылки Class::CastTo().

◆ SetCylinderRotationAnimationPhase()

void SetCylinderRotationAnimationPhase ( float rot,
bool reset = false )
inlineprivate
223 {
224 Magnum_Cylinder cylinder = Magnum_Cylinder.Cast(GetAttachmentByType(Magnum_Cylinder));
225 Magnum_Ejector ejector = Magnum_Ejector.Cast(GetAttachmentByType(Magnum_Ejector));
226 if (cylinder && ejector)
227 {
228 float anim_phase = cylinder.GetAnimationPhase("Rotate_Cylinder");
229 if ( Math.AbsFloat(anim_phase - rot) > 0.1 )
230 {
231 if (reset)
232 {
233 cylinder.ResetAnimationPhase("Rotate_Cylinder", rot );
234 ejector.ResetAnimationPhase("Rotate_Ejector", rot );
235 }
237 {
238 cylinder.ResetAnimationPhase("Rotate_Cylinder", MAGNUM_ROTATION_POSITION_M1 );
239 ejector.ResetAnimationPhase("Rotate_Ejector", MAGNUM_ROTATION_POSITION_M1 );
240 }
241
242 cylinder.SetAnimationPhase("Rotate_Cylinder", rot );
243 ejector.SetAnimationPhase("Rotate_Ejector", rot );
244 }
245 }
246 }
const float MAGNUM_ROTATION_POSITION_M1
Definition Magnum.c:1
Definition EnMath.c:7
static proto float AbsFloat(float f)
Returns absolute value.

Перекрестные ссылки Math::AbsFloat(), MAGNUM_ROTATION_POSITION_0 и MAGNUM_ROTATION_POSITION_M1.

◆ ShowBullet()

override void ShowBullet ( int muzzleIndex)
inlineprivate
307 {
308 super.ShowBullet(muzzleIndex);
309
310 Magnum_Cylinder cylinder = Magnum_Cylinder.Cast(GetAttachmentByType(Magnum_Cylinder));
311 if (cylinder)
312 {
313 string bullet = "bullet";
314 if (muzzleIndex > 0)
315 bullet = string.Format("bullet_" + (muzzleIndex + 1));
316
317 cylinder.ShowSelection(bullet);
318
320 {
321 string bullet_nose = "bullet_nose";
322 if (muzzleIndex > 0)
323 bullet_nose = string.Format("bullet_nose_" + (muzzleIndex + 1));
324 cylinder.ShowSelection(bullet_nose);
325 }
326 }
327 }

Перекрестные ссылки IsChamberFiredOut().

Используется в Weapon::ForceSyncSelectionState().

◆ SpawnRecoilObject()

override RecoilBase SpawnRecoilObject ( )
inlineprivate
69 {
70 return new MagnumRecoil(this);
71 }
Definition MagnumRecoil.c:2

◆ SyncCylinderRotation()

void SyncCylinderRotation ( bool reset = true)
inlineprivate
249 {
250 SetCylinderRotationAnimationPhase(GetCylinderRotation(GetCurrentMuzzle()), reset);
251 }
void SetCylinderRotationAnimationPhase(float rot, bool reset=false)
Definition Magnum.c:222
static float GetCylinderRotation(int muzzleIndex)
Definition Magnum.c:199

Поля

◆ ATT_SLOT_CYLINDER

const string ATT_SLOT_CYLINDER = "RevolverCylinder"
private

◆ ATT_SLOT_EJECTOR

const string ATT_SLOT_EJECTOR = "RevolverEjector"
private

◆ C

Используется в Crossbow_Base::InitStateMachine().

◆ CC00

ref WeaponStableState CC00
private

◆ CC01

ref WeaponStableState CC01
private

◆ CC10

ref WeaponStableState CC10
private

◆ CC11

ref WeaponStableState CC11
private

◆ CD00

ref WeaponStableState CD00
private

◆ CD01

ref WeaponStableState CD01
private

◆ CJF0

ref WeaponStableState CJF0
private

◆ CJF1

ref WeaponStableState CJF1
private

◆ m_ActiveMuzzle

int m_ActiveMuzzle
private

◆ m_LastMuzzleloaded

int m_LastMuzzleloaded
private

◆ OD00

ref WeaponStableState OD00
private

◆ OD01

ref WeaponStableState OD01
private

Объявления и описания членов классов находятся в файлах: