34 override bool HasBullet () {
return false; }
36 override bool IsJammed () {
return false; }
45 override bool HasBullet () {
return true; }
47 override bool IsJammed () {
return false; }
56 override bool HasBullet () {
return true; }
58 override bool IsJammed () {
return true; }
68class ChamberFirst_InnerMagazine_SemiAutomatic_Base
extends Rifle_Base
76 override void InitStateMachine ()
78 m_abilities.Insert(
new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED));
79 m_abilities.Insert(
new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_CLOSED_EXTRA));
80 m_abilities.Insert(
new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_CLOSED_WITHCHAMBER));
81 m_abilities.Insert(
new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_OPENED));
82 m_abilities.Insert(
new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE));
83 m_abilities.Insert(
new AbilityRecord(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_START));
84 m_abilities.Insert(
new AbilityRecord(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_END));
85 m_abilities.Insert(
new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL));
86 m_abilities.Insert(
new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_LAST));
87 m_abilities.Insert(
new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY));
88 m_abilities.Insert(
new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_JAM));
96 WeaponStateBase Mech_E =
new WeaponChargingInnerMag(
this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
97 WeaponStateBase Mech_O =
new WeaponChargingInnerMag(
this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_OPENED);
98 WeaponStateBase Mech_L =
new WeaponChargingInnerMag(
this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
101 LoopedChamberingCombineChamberInternalMagazine Chamber_E =
new LoopedChamberingCombineChamberInternalMagazine(
this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_CLOSED_EXTRA, WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE);
102 LoopedChamberingCombineChamberInternalMagazine Chamber_O =
new LoopedChamberingCombineChamberInternalMagazine(
this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_OPENED, WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE);
103 LoopedChamberingEjectLast Chamber_L =
new LoopedChamberingEjectLast(
this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_CLOSED_WITHCHAMBER, WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE);
107 WeaponStateBase Trigger_E =
new WeaponDryFire(
this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY);
108 WeaponStateBase Trigger_O =
new WeaponDryFire(
this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY);
109 WeaponStateBase Trigger_L =
new WeaponFireAndChamberFromInnerMagazine(
this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL);
110 WeaponStateBase Trigger_J =
new WeaponDryFire(
this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY);
111 WeaponStateBase Trigger_LL =
new WeaponFireLast(
this, NULL, WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_LAST));
113 WeaponStateBase Trigger_LJ =
new WeaponFireToJam(
this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_JAM);
141 m_fsm.AddTransition(
new WeaponTransition( Mech_L, _fin_,
E, NULL,
new WeaponGuardCurrentChamberEmpty(
this)));
143 m_fsm.AddTransition(
new WeaponTransition( Mech_L, _abt_,
E, NULL,
new WeaponGuardCurrentChamberEmpty(
this)));
148 m_fsm.AddTransition(
new WeaponTransition( Chamber_E, _fin_,
E, NULL,
new WeaponGuardCurrentChamberEmpty(
this)));
151 m_fsm.AddTransition(
new WeaponTransition( Chamber_E, _abt_,
E, NULL,
new WeaponGuardCurrentChamberEmpty(
this)));
155 m_fsm.AddTransition(
new WeaponTransition( Chamber_O, _fin_,
E, NULL,
new WeaponGuardCurrentChamberEmpty(
this)));
158 m_fsm.AddTransition(
new WeaponTransition( Chamber_O, _abt_,
E, NULL,
new WeaponGuardCurrentChamberEmpty(
this)));
162 m_fsm.AddTransition(
new WeaponTransition(
L, __L__, Chamber_L, NULL,
new GuardNot(
new WeaponGuardInnerMagazineFullShareChamber(
this))));
168 m_fsm.AddTransition(
new WeaponTransition( Unjam_J, _fin_, J, NULL,
new WeaponGuardJammed(
this)));
169 m_fsm.AddTransition(
new WeaponTransition( Unjam_J, _fin_,
E, NULL,
new WeaponGuardCurrentChamberEmpty(
this)));
171 m_fsm.AddTransition(
new WeaponTransition( Unjam_J, _abt_, J, NULL,
new WeaponGuardJammed(
this)));
172 m_fsm.AddTransition(
new WeaponTransition( Unjam_J, _abt_,
E, NULL,
new WeaponGuardCurrentChamberEmpty(
this)));
189 m_fsm.AddTransition(
new WeaponTransition(
L, __T__, Trigger_L, NULL,
new WeaponGuardHasAmmoInnerMagazine(
this)));
214 SelectionBulletHide();
void AddAction(typename actionName)
Open
Implementations only.
@ DEFAULT
default weapon state
pair ( action, actionType )
base for rifles @NOTE name copies config base class
signalize mechanism manipulation
weapon finite state machine
represents weapon's stable state (i.e. the basic states that the weapon will spend the most time in)
represent weapon state base
override bool IsRepairEnabled()
override bool HasBullet()
override void InitMuzzleArray()
override bool HasMagazine()
class WeaponGuardIsDestroyed extends WeaponGuardBase m_weapon
void WeaponGuardWeaponOpen(Weapon_Base w=NULL)
override int GetCurrentStateID()
class SSPFireout extends WeaponStableState OnEntry
enum FSMTransition WeaponTransition
class WeaponChambering_Chamber_OnEntry extends WeaponChambering_Base OnExit
ref array< MuzzleState > m_muzzleHasBullet