12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- class WeaponFireAndChamberNext extends WeaponStateBase
- {
- WeaponActions m_action;
- int m_actionType;
- float m_dtAccumulator;
- ref WeaponFire m_fire;
- void WeaponFireAndChamberNext (Weapon_Base w = NULL, WeaponStateBase parent = NULL, WeaponActions action = WeaponActions.NONE, int actionType = -1)
- {
- m_action = action;
- m_actionType = actionType;
- // setup nested state machine
- m_fire = new WeaponFireAndChamber(m_weapon, this, m_action, m_actionType);
- // events
- WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
- WeaponEventAnimBulletEject __be_ = new WeaponEventAnimBulletEject;
- WeaponEventReloadTimeout __to_ = new WeaponEventReloadTimeout;
- m_fsm = new WeaponFSM(this); // @NOTE: set owner of the submachine fsm
- // transitions
- m_fsm.AddTransition(new WeaponTransition(m_fire, _fin_, NULL));
- m_fsm.AddTransition(new WeaponTransition(m_fire, __to_, NULL));
- m_fsm.SetInitialState(m_fire);
- }
- override void OnEntry (WeaponEventBase e)
- {
- super.OnEntry(e);
- if (e)
- m_dtAccumulator = 0;
- }
- override void OnUpdate (float dt)
- {
- m_dtAccumulator += dt;
- DayZPlayerImplement p;
- Class.CastTo(p, m_weapon.GetHierarchyParent());
- if( p )
- {
- HumanInputController hic = p.GetInputController();
- int muzzleIndex = m_weapon.GetCurrentMuzzle();
- float reloadTime = m_weapon.GetReloadTime(muzzleIndex);
-
- if ( m_dtAccumulator >= reloadTime && ( hic.IsAttackButton() || (m_weapon.GetBurstCount() < m_weapon.GetCurrentModeBurstSize(muzzleIndex))))
- {
- if (m_weapon.CanProcessWeaponEvents())
- {
- m_weapon.ProcessWeaponEvent(new WeaponEventReloadTimeout(p));
- }
- }
- }
- }
- override void OnExit (WeaponEventBase e)
- {
- //m_weapon.ResetBurstCount();
- m_dtAccumulator = 0;
- super.OnExit(e);
- }
-
- override void OnAbort (WeaponEventBase e)
- {
- m_weapon.SetCoolDown(GetCoolDown());
- m_weapon.ResetBurstCount();
- super.OnAbort(e);
- }
-
- override float GetCoolDown()
- {
- int muzzleIndex = m_weapon.GetCurrentMuzzle();
- float reloadTime = m_weapon.GetReloadTime(muzzleIndex);
- return reloadTime - m_dtAccumulator;
- }
- };
|