123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- enum RPTAnimState
- {
- DEFAULT = 0, ///< default weapon state, closed and discharged
- CHARGED = 1,
- JAMMED = 2,
- };
- enum RPTStableStateID
- {
- UNKNOWN = 0,
- EmptyDischarged = 1,
- LoadedCharged = 2,
- LoadedDischarged = 3,
- LoadedJammed = 4,
- }
- class RPTEmptyDischarged extends WeaponStableState
- {
- override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { EmptyDischarged C0"); } super.OnEntry(e); }
- override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } EmptyDischarged C0"); } }
- override int GetCurrentStateID () { return RPTStableStateID.EmptyDischarged; }
- override bool HasBullet () { return false; }
- override bool HasMagazine () { return false; }
- override bool IsJammed () { return false; }
- override bool IsRepairEnabled () { return true; }
- override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.E}; }
- };
- class RPTLoadedCharged extends WeaponStableState
- {
- override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { LoadedCharged C1"); } super.OnEntry(e); }
- override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } LoadedCharged C1"); } }
- override int GetCurrentStateID () { return RPTStableStateID.LoadedCharged; }
- override bool HasBullet () { return true; }
- override bool HasMagazine () { return false; }
- override bool IsJammed () { return false; }
- override bool IsRepairEnabled () { return true; }
- override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.L}; }
- };
- class RPTLoadedDischarged extends WeaponStableState
- {
- override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { LoadedDischarged D1"); } super.OnEntry(e); }
- override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } LoadedDischarged D1"); } }
- override int GetCurrentStateID () { return RPTStableStateID.LoadedDischarged; }
- override bool HasBullet () { return true; }
- override bool HasMagazine () { return false; }
- override bool IsJammed () { return false; }
- override bool IsRepairEnabled () { return true; }
- override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.F}; }
- };
- class RPTLoadedJammed extends WeaponStateJammed
- {
- override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { LoadedJammed JF"); } super.OnEntry(e); }
- override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } LoadedJammed JF"); } }
- override int GetCurrentStateID () { return RPTStableStateID.LoadedJammed; }
- override bool HasBullet () { return true; }
- override bool HasMagazine () { return false; }
- override bool IsJammed () { return true; }
- override bool IsRepairEnabled () { return true; }
- override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.F}; }
- };
- /**@class Mp133Shotgun_Base
- * @brief basic mp5 submachine gun
- **/
- class Repeater_Base extends Rifle_Base
- {
- ref WeaponStableState D0;
- ref WeaponStableState C0;
- ref WeaponStableState C1;
- ref WeaponStableState DF;
- ref WeaponStableState JF;
-
-
- override void InitStateMachine ()
- {
- m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED));
- m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_OPENED));
- m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_SHOTGUN_COCKED));
- m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_SHOTGUN_UNCOCKED));
- m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE));
- m_abilities.Insert(new AbilityRecord(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_START));
- m_abilities.Insert(new AbilityRecord(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_END));
- m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL));
- m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_COCKED));
- m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_UNCOCKED));
- m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY));
-
- D0 = new RPTEmptyDischarged(this, NULL, RPTAnimState.DEFAULT);
- C0 = new RPTEmptyDischarged(this, NULL, RPTAnimState.CHARGED);
- DF = new RPTLoadedDischarged(this, NULL, RPTAnimState.DEFAULT);
- C1 = new RPTLoadedCharged(this, NULL, RPTAnimState.CHARGED);
- JF = new RPTLoadedJammed(this, NULL, RPTAnimState.JAMMED);
-
- //WeaponStateBase Mech_D0 = new WeaponChargingInnerMag(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
- WeaponStateBase Mech_C1 = new WeaponChargingInnerMag(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_OPENED);
- WeaponStateBase Mech_DF = new WeaponChargingInnerMag(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
- LoopedChamberingEjectLast Chamber_D0 = new LoopedChamberingEjectLast(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_SHOTGUN_UNCOCKED, WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE);
- LoopedChamberingEjectLast Chamber_C0 = new LoopedChamberingEjectLast(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_SHOTGUN_UNCOCKED, WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE);
- LoopedChamberingEjectLast Chamber_C1 = new LoopedChamberingEjectLast(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_SHOTGUN_COCKED, WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE);
- LoopedChamberingEjectLast Chamber_DF = new LoopedChamberingEjectLast(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_SHOTGUN_UNCOCKED, WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE);
-
- WeaponStateBase Unjam_JF = new WeaponUnjamming(this, NULL, WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_START);
-
- WeaponStateBase Trigger_D0 = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY);
- WeaponStateBase Trigger_C0 = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL);
- WeaponStateBase Trigger_C1 = new WeaponFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL);
- WeaponStateBase Trigger_DF = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY);
- WeaponStateBase Trigger_JF = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY);
-
- WeaponStateBase Trigger_C1J = new WeaponFireToJam(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_JAM);
-
- WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
- WeaponEventBase __L__ = new WeaponEventLoad1Bullet;
- WeaponEventBase __T__ = new WeaponEventTrigger;
- WeaponEventBase __TJ_ = new WeaponEventTriggerToJam;
- WeaponEventBase __U__ = new WeaponEventUnjam;
- WeaponEventBase __M__ = new WeaponEventMechanism;
- WeaponEventBase _abt_ = new WeaponEventHumanCommandActionAborted;
- WeaponEventBase _rto_ = new WeaponEventReloadTimeout;
- WeaponEventBase _dto_ = new WeaponEventDryFireTimeout;
- m_fsm = new WeaponFSM();
-
- // Mechanism
- //----------------------------------------
- m_fsm.AddTransition(new WeaponTransition( D0, __M__, Mech_DF));
- m_fsm.AddTransition(new WeaponTransition( C0, __M__, Mech_C1));
-
- m_fsm.AddTransition(new WeaponTransition( C1, __M__, Mech_C1));
- m_fsm.AddTransition(new WeaponTransition( Mech_C1, _fin_, C0, NULL, new WeaponGuardCurrentChamberEmpty(this)));
- m_fsm.AddTransition(new WeaponTransition( Mech_C1, _fin_, C1));
- m_fsm.AddTransition(new WeaponTransition( Mech_C1, _abt_, C0, NULL, new WeaponGuardCurrentChamberEmpty(this)));
- m_fsm.AddTransition(new WeaponTransition( Mech_C1, _abt_, C1));
-
- m_fsm.AddTransition(new WeaponTransition( DF, __M__, Mech_DF));
- m_fsm.AddTransition(new WeaponTransition( Mech_DF, _fin_, C0, NULL, new WeaponGuardCurrentChamberEmpty(this)));
- m_fsm.AddTransition(new WeaponTransition( Mech_DF, _fin_, DF, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
- m_fsm.AddTransition(new WeaponTransition( Mech_DF, _fin_, C1));
- m_fsm.AddTransition(new WeaponTransition( Mech_DF, _abt_, C0, NULL, new WeaponGuardCurrentChamberEmpty(this)));
- m_fsm.AddTransition(new WeaponTransition( Mech_DF, _abt_, DF, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
- m_fsm.AddTransition(new WeaponTransition( Mech_DF, _abt_, C1));
-
-
- //----------------------------------------
- m_fsm.AddTransition(new WeaponTransition( C0, __L__, Chamber_D0));
-
- m_fsm.AddTransition(new WeaponTransition( D0, __L__, Chamber_D0));
- m_fsm.AddTransition(new WeaponTransition( Chamber_D0, _fin_, C1));
- m_fsm.AddTransition(new WeaponTransition( Chamber_D0, _abt_, C0, NULL, new WeaponGuardCurrentChamberEmpty(this)));
- m_fsm.AddTransition(new WeaponTransition( Chamber_D0, _abt_, C1));
-
- m_fsm.AddTransition(new WeaponTransition( C1, __L__, Chamber_C1, NULL, new GuardNot(new WeaponGuardInnerMagazineFull(this))));
- m_fsm.AddTransition(new WeaponTransition( Chamber_C1, _fin_, C1));
- m_fsm.AddTransition(new WeaponTransition( Chamber_C1, _abt_, C1));
-
- m_fsm.AddTransition(new WeaponTransition( DF, __L__, Chamber_DF, NULL, new GuardNot(new WeaponGuardInnerMagazineFull(this))));
- m_fsm.AddTransition(new WeaponTransition( Chamber_DF, _fin_, C1));
- m_fsm.AddTransition(new WeaponTransition( Chamber_DF, _abt_, DF, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
- m_fsm.AddTransition(new WeaponTransition( Chamber_DF, _abt_, C1));
-
- //------------------------------------------
-
- m_fsm.AddTransition(new WeaponTransition( JF, __U__, Unjam_JF));
- m_fsm.AddTransition(new WeaponTransition( Unjam_JF, _fin_, JF, NULL, new WeaponGuardJammed(this)));
- m_fsm.AddTransition(new WeaponTransition( Unjam_JF, _fin_, C0, NULL, new WeaponGuardCurrentChamberEmpty(this)));
- m_fsm.AddTransition(new WeaponTransition( Unjam_JF, _fin_, C1));
- m_fsm.AddTransition(new WeaponTransition( Unjam_JF, _abt_, JF, NULL, new WeaponGuardJammed(this)));
- m_fsm.AddTransition(new WeaponTransition( Unjam_JF, _abt_, C0, NULL, new WeaponGuardCurrentChamberEmpty(this)));
- m_fsm.AddTransition(new WeaponTransition( Unjam_JF, _abt_, C1));
-
-
- //-----------------------------------------
-
- // fire
- m_fsm.AddTransition(new WeaponTransition( D0, __T__, Trigger_D0)); // fire.cocked
- m_fsm.AddTransition(new WeaponTransition( Trigger_D0, _fin_, D0));
- m_fsm.AddTransition(new WeaponTransition( Trigger_D0, _dto_, D0));
- m_fsm.AddTransition(new WeaponTransition( Trigger_D0, _abt_, D0));
-
- m_fsm.AddTransition(new WeaponTransition( C0, __T__, Trigger_C0)); // fire.cocked
- m_fsm.AddTransition(new WeaponTransition( Trigger_C0, _fin_, D0));
- m_fsm.AddTransition(new WeaponTransition( Trigger_C0, _dto_, D0));
- m_fsm.AddTransition(new WeaponTransition( Trigger_C0, _abt_, D0));
-
- m_fsm.AddTransition(new WeaponTransition( C1, __T__, Trigger_C1)); // fire.cocked
- m_fsm.AddTransition(new WeaponTransition( Trigger_C1, _fin_, DF));
- m_fsm.AddTransition(new WeaponTransition( Trigger_C1, _rto_, DF));
- m_fsm.AddTransition(new WeaponTransition( Trigger_C1, _abt_, DF));
-
- m_fsm.AddTransition(new WeaponTransition( DF, __T__, Trigger_DF)); // fire.cocked
- m_fsm.AddTransition(new WeaponTransition( Trigger_DF, _fin_, DF));
- m_fsm.AddTransition(new WeaponTransition( Trigger_DF, _dto_, DF));
- m_fsm.AddTransition(new WeaponTransition( Trigger_DF, _abt_, DF));
-
- m_fsm.AddTransition(new WeaponTransition( JF, __T__, Trigger_JF)); // fire.cocked
- m_fsm.AddTransition(new WeaponTransition( Trigger_JF, _fin_, JF));
- m_fsm.AddTransition(new WeaponTransition( Trigger_JF, _dto_, JF));
- m_fsm.AddTransition(new WeaponTransition( Trigger_JF, _abt_, JF));
-
-
- m_fsm.AddTransition(new WeaponTransition( JF, __TJ_, Trigger_C1J)); // fire.cocked
- m_fsm.AddTransition(new WeaponTransition( Trigger_C1J, _fin_, JF));
- m_fsm.AddTransition(new WeaponTransition( Trigger_C1J, _rto_, JF));
- m_fsm.AddTransition(new WeaponTransition( Trigger_C1J, _abt_, JF));
-
- //---------------------------------------------
-
- SetInitialState(D0);
- SelectionBulletHide();
- HideMagazine();
- m_fsm.Start();
- }
-
- override bool CanChamberBullet (int muzzleIndex, Magazine mag)
- {
- return CanChamberFromMag(muzzleIndex, mag) && !IsInternalMagazineFull(muzzleIndex);
- }
-
- override void SetActions()
- {
- super.SetActions();
- AddAction(FirearmActionLoadMultiBullet);
- RemoveAction(FirearmActionLoadBulletQuick); // Easy reload
- AddAction(FirearmActionLoadMultiBulletQuick); // Easy reload
- }
- };
- class Repeater : Repeater_Base
- {
- override RecoilBase SpawnRecoilObject()
- {
- return new RepeaterRecoil(this);
- }
-
-
- //Debug menu Spawn Ground Special
- override void OnDebugSpawn()
- {
- super.OnDebugSpawn();
-
- EntityAI entity;
- if ( Class.CastTo(entity, this) )
- {
- entity.SpawnEntityOnGroundPos("Ammo_357", entity.GetPosition());
- }
- }
- };
|