123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372 |
- // fire
- class WeaponDryFire extends WeaponStartAction
- {
- float m_dtAccumulator;
- override void OnEntry (WeaponEventBase e)
- {
- super.OnEntry(e);
- if (e)
- {
- m_dtAccumulator = 0;
- }
- m_weapon.ResetBurstCount();
- }
- override bool IsWaitingForActionFinish () { return true; }
- override void OnUpdate (float dt)
- {
- m_dtAccumulator += dt;
- DayZPlayer 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 ( hic.IsAttackButton() && m_dtAccumulator >= reloadTime)
- if (m_weapon.CanProcessWeaponEvents())
- m_weapon.ProcessWeaponEvent(new WeaponEventDryFireTimeout(p));
- }
- }
- override void OnExit (WeaponEventBase e)
- {
- m_dtAccumulator = 0;
- super.OnExit(e);
- }
-
- };
- // fire
- class WeaponFire extends WeaponStartAction
- {
- float m_dtAccumulator;
- override bool IsWaitingForActionFinish () { return true; }
- override void OnEntry (WeaponEventBase e)
- {
- if (e)
- {
- m_dtAccumulator = 0;
-
- if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponFire bang!"); }
- //m_weapon.Fire();
- int mi = m_weapon.GetCurrentMuzzle();
- if (TryFireWeapon(m_weapon, mi))
- {
- DayZPlayerImplement p;
- if (Class.CastTo(p, e.m_player))
- p.GetAimingModel().SetRecoil(m_weapon);
- m_weapon.OnFire(mi);
- }
- }
- super.OnEntry(e);
- }
- override void OnUpdate (float dt)
- {
- m_dtAccumulator += dt;
- DayZPlayer p;
- Class.CastTo(p, m_weapon.GetHierarchyParent());
- int muzzleIndex = m_weapon.GetCurrentMuzzle();
- float reloadTime = m_weapon.GetReloadTime(muzzleIndex);
- if (m_dtAccumulator >= reloadTime)
- if (m_weapon.CanProcessWeaponEvents())
- m_weapon.ProcessWeaponEvent(new WeaponEventReloadTimeout(p));
- }
- override void OnExit (WeaponEventBase e)
- {
- if (e)
- m_dtAccumulator = 0;
- super.OnExit(e);
- }
-
- override void OnAbort (WeaponEventBase e)
- {
- m_weapon.ResetBurstCount();
- super.OnAbort(e);
- }
- };
- class WeaponFireWithEject extends WeaponFire
- {
- override void OnEntry (WeaponEventBase e)
- {
- m_dtAccumulator = 0;
- if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponFire bang!"); }
- //m_weapon.Fire();
- int mi = m_weapon.GetCurrentMuzzle();
- if (TryFireWeapon(m_weapon, mi))
- {
- DayZPlayerImplement p;
- if (Class.CastTo(p, e.m_player))
- p.GetAimingModel().SetRecoil(m_weapon);
- m_weapon.EjectCasing(mi);
- m_weapon.EffectBulletHide(mi);
- m_weapon.OnFire(mi);
- }
- super.OnEntry(e);
- }
- }
- // fire
- class WeaponFireMultiMuzzle extends WeaponStartAction
- {
- float m_dtAccumulator;
- override bool IsWaitingForActionFinish () { return true; }
- override void OnEntry (WeaponEventBase e)
- {
- if (e)
- {
- m_dtAccumulator = 0;
-
- if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponFire bang bang!"); }
- int mi = m_weapon.GetCurrentMuzzle();
- int b = m_weapon.GetCurrentModeBurstSize(mi);
- if (b > 1)
- {
- for (int i = 0; i < b; i++)
- {
- if (TryFireWeapon(m_weapon, i))
- {
- DayZPlayerImplement p1;
- if (Class.CastTo(p1, e.m_player))
- p1.GetAimingModel().SetRecoil(m_weapon);
- m_weapon.OnFire(i);
- }
- }
- }
- else
- {
- if (TryFireWeapon(m_weapon, mi))
- {
- DayZPlayerImplement p;
- if (Class.CastTo(p, e.m_player))
- p.GetAimingModel().SetRecoil(m_weapon);
- m_weapon.OnFire(mi);
- }
- }
-
- if (mi >= m_weapon.GetMuzzleCount() - 1)
- m_weapon.SetCurrentMuzzle(0);
- else
- m_weapon.SetCurrentMuzzle(mi + 1);
- }
- super.OnEntry(e);
- }
- override void OnUpdate (float dt)
- {
- m_dtAccumulator += dt;
- DayZPlayer p;
- Class.CastTo(p, m_weapon.GetHierarchyParent());
- int muzzleIndex = m_weapon.GetCurrentMuzzle();
- float reloadTime = m_weapon.GetReloadTime(muzzleIndex);
- if (m_dtAccumulator >= reloadTime)
- if (m_weapon.CanProcessWeaponEvents())
- m_weapon.ProcessWeaponEvent(new WeaponEventReloadTimeout(p));
- }
- override void OnExit (WeaponEventBase e)
- {
- if (e)
- m_dtAccumulator = 0;
- super.OnExit(e);
- }
-
- override void OnAbort (WeaponEventBase e)
- {
- m_weapon.ResetBurstCount();
- super.OnAbort(e);
- }
- };
- class WeaponFireMagnum extends WeaponFireMultiMuzzle
- {
- override void OnEntry (WeaponEventBase e)
- {
- super.OnEntry(e);
- if (e)
- {
- Magnum_Cylinder cylinder = Magnum_Cylinder.Cast(m_weapon.GetAttachmentByType(Magnum_Cylinder));
- Magnum_Ejector ejector = Magnum_Ejector.Cast(m_weapon.GetAttachmentByType(Magnum_Ejector));
- if(cylinder && ejector)
- {
- float a;
- int mi = m_weapon.GetCurrentMuzzle();
- switch(mi)
- {
- case 0:
- a = MAGNUM_ROTATION_POSITION_0;
- break;
- case 1:
- a = MAGNUM_ROTATION_POSITION_5;
- cylinder.ResetAnimationPhase("Rotate_Cylinder", MAGNUM_ROTATION_POSITION_6 );
- ejector.ResetAnimationPhase("Rotate_Ejector", MAGNUM_ROTATION_POSITION_6 );
- break;
- case 2:
- a = MAGNUM_ROTATION_POSITION_4;
- break;
- case 3:
- a = MAGNUM_ROTATION_POSITION_3;
- break;
- case 4:
- a = MAGNUM_ROTATION_POSITION_2;
- break;
- case 5:
- a = MAGNUM_ROTATION_POSITION_1;
- break;
- }
- cylinder.SetAnimationPhase("Rotate_Cylinder", a );
- ejector.SetAnimationPhase("Rotate_Ejector", a );
- }
- }
- }
- override void OnUpdate (float dt)
- {
- m_dtAccumulator += dt;
- DayZPlayer p;
- Class.CastTo(p, m_weapon.GetHierarchyParent());
- int muzzleIndex = m_weapon.GetCurrentMuzzle();
- float reloadTime = m_weapon.GetReloadTime(muzzleIndex);
- if (m_dtAccumulator >= reloadTime)
- if (m_weapon.CanProcessWeaponEvents())
- m_weapon.ProcessWeaponEvent(new WeaponEventReloadTimeout(p));
- }
- override void OnExit (WeaponEventBase e)
- {
- if (e)
- m_dtAccumulator = 0;
- super.OnExit(e);
- }
- };
- // fire to jam
- class WeaponFireToJam extends WeaponStartAction
- {
- float m_dtAccumulator;
- override bool IsWaitingForActionFinish () { return true; }
- override void OnEntry (WeaponEventBase e)
- {
- if (e)
- {
- m_dtAccumulator = 0;
- if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponFire bang! and jam?"); }
- //m_weapon.Fire();
- int mi = m_weapon.GetCurrentMuzzle();
- if (TryFireWeapon(m_weapon, mi))
- {
- m_weapon.SetJammed(true);
- DayZPlayerImplement p;
- if (Class.CastTo(p, e.m_player))
- p.GetAimingModel().SetRecoil(m_weapon);
- m_weapon.OnFire(mi);
- }
- }
- m_weapon.ResetBurstCount();
- super.OnEntry(e);
- }
- override void OnUpdate (float dt)
- {
- m_dtAccumulator += dt;
- DayZPlayer p;
- Class.CastTo(p, m_weapon.GetHierarchyParent());
- int muzzleIndex = m_weapon.GetCurrentMuzzle();
- float reloadTime = m_weapon.GetReloadTime(muzzleIndex);
- if (m_dtAccumulator >= reloadTime)
- if (m_weapon.CanProcessWeaponEvents())
- m_weapon.ProcessWeaponEvent(new WeaponEventReloadTimeout(p));
- }
- override void OnExit (WeaponEventBase e)
- {
- m_dtAccumulator = 0;
- super.OnExit(e);
- }
- };
- class WeaponFireAndChamber extends WeaponFire
- {
- override void OnEntry (WeaponEventBase e)
- {
- super.OnEntry(e);
- if (e)
- {
- if (GetGame().IsServer())
- {
- PlayerBase playerOwner;
- Class.CastTo(playerOwner, m_weapon.GetHierarchyParent());
- m_weapon.AddJunctureToAttachedMagazine(playerOwner, 100);
- }
- if (!m_weapon.IsJammed())
- {
- if (LogManager.IsWeaponLogEnable()) { wpnDebugPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " ejected fired out casing"); }
- int mi = m_weapon.GetCurrentMuzzle();
- m_weapon.EjectCasing(mi);
- m_weapon.EffectBulletHide(mi);
- m_weapon.SelectionBulletHide();
-
- pushToChamberFromAttachedMagazine(m_weapon, mi);
- }
- }
- }
-
- override void OnExit (WeaponEventBase e)
- {
- super.OnExit(e);
- if (GetGame().IsServer())
- {
- PlayerBase playerOwner;
- Class.CastTo(playerOwner, m_weapon.GetHierarchyParent());
- m_weapon.ClearJunctureToAttachedMagazine(playerOwner);
- }
-
- }
- };
- class WeaponFireAndChamberFromInnerMagazine extends WeaponFire
- {
- override void OnEntry (WeaponEventBase e)
- {
- super.OnEntry(e);
-
- if (!m_weapon.IsJammed())
- {
- if (LogManager.IsWeaponLogEnable()) { wpnDebugPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " ejected fired out casing"); }
- int mi = m_weapon.GetCurrentMuzzle();
- m_weapon.EjectCasing(mi);
- m_weapon.EffectBulletHide(mi);
- m_weapon.SelectionBulletHide();
-
- pushToChamberFromInnerMagazine(m_weapon, mi);
- }
- }
- };
|