DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
Flaregun.c
См. документацию.
2{
3 COCKED = 0,
4 UNCOCKED = 1,
5};
6
8{
9 UNKNOWN = 0,
10 Empty = 1,
11 Fireout = 2,
12 Loaded = 3,
13}
14
15class FLAREEmpty extends WeaponStableState
16{
17 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { Empty E"); } super.OnEntry(e); }
18 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } Empty E"); } }
19 override int GetCurrentStateID () { return FLAREStableStateID.Empty; }
20 override bool HasBullet () { return false; }
21 override bool HasMagazine () { return false; }
22 override bool IsJammed () { return false; }
23 override bool IsBoltOpen () { return false; }
24 override bool IsRepairEnabled () { return true; }
25 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.E}; }
26};
27class FLAREFireout extends WeaponStableState
28{
29 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { Fireout F"); } super.OnEntry(e); }
30 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } Fireout F"); } }
31 override int GetCurrentStateID () { return FLAREStableStateID.Fireout; }
32 override bool HasBullet () { return true; }
33 override bool HasMagazine () { return false; }
34 override bool IsJammed () { return false; }
35 override bool IsBoltOpen () { return false; }
36 override bool IsRepairEnabled () { return true; }
37 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.F}; }
38};
39class FLARELoaded extends WeaponStableState
40{
41 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { Loaded C"); } super.OnEntry(e); }
42 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } Loaded C"); } }
43 override int GetCurrentStateID () { return FLAREStableStateID.Loaded; }
44 override bool HasBullet () { return true; }
45 override bool HasMagazine () { return false; }
46 override bool IsJammed () { return false; }
47 override bool IsBoltOpen () { return false; }
48 override bool IsRepairEnabled () { return true; }
49 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.L}; }
50};
51
53{
54 override void InitStateMachine()
55 {
56 // setup abilities
57 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED));
58 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_OPENED));
59 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED));
60 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL));
61 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_UNCOCKED));
62
63 // setup state machine
64 // basic weapon states
65 WeaponStableState E = new FLAREEmpty(this, NULL, FLAREAnimState.UNCOCKED);
66 WeaponStableState F = new FLAREFireout(this, NULL, FLAREAnimState.UNCOCKED);
67 WeaponStableState L = new FLARELoaded(this, NULL, FLAREAnimState.COCKED);
68 // unstable (intermediate) states
69 WeaponStateBase Mech_F = new WeaponCharging(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
70 WeaponStateBase Mech_L = new WeaponEjectBullet(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_OPENED);
71
72 WeaponStateBase Chamber_E = new WeaponChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED);
73 WeaponStateBase Chamber_F = new WeaponChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED);
74 //WeaponStateBase Chamber_L = new RifleReChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED);
75
76 WeaponStateBase Trigger_E = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_UNCOCKED);
77 WeaponStateBase Trigger_L = new WeaponFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL);
78 WeaponStateBase Trigger_F = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_UNCOCKED);
79
80
81 // events
82 WeaponEventBase __M__ = new WeaponEventMechanism;
83 WeaponEventBase __T__ = new WeaponEventTrigger;
84 WeaponEventBase __TJ_ = new WeaponEventTriggerToJam;
85 WeaponEventBase __L__ = new WeaponEventLoad1Bullet;
86 WeaponEventBase __U__ = new WeaponEventUnjam;
87 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
88 WeaponEventBase _abt_ = new WeaponEventHumanCommandActionAborted;
89 WeaponEventBase _dto_ = new WeaponEventDryFireTimeout;
90
91 m_fsm = new WeaponFSM();
92 // charging
93 m_fsm.AddTransition(new WeaponTransition( E, __M__, Mech_F));
94 m_fsm.AddTransition(new WeaponTransition( F, __M__, Mech_F));
95 m_fsm.AddTransition(new WeaponTransition( Mech_F, _fin_, E));
96 m_fsm.AddTransition(new WeaponTransition( Mech_F, _abt_, F, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
97 m_fsm.AddTransition(new WeaponTransition( Mech_F, _abt_, E));
98
99 // eject good cartridge
100 m_fsm.AddTransition(new WeaponTransition( L, __M__, Mech_L));
101 m_fsm.AddTransition(new WeaponTransition( Mech_L, _fin_, E));
102 m_fsm.AddTransition(new WeaponTransition( Mech_L, _abt_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
103 m_fsm.AddTransition(new WeaponTransition( Mech_L, _abt_, L));
104
105 m_fsm.AddTransition(new WeaponTransition( E, __L__, Chamber_F));
106 m_fsm.AddTransition(new WeaponTransition( F, __L__, Chamber_F));
107 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _fin_, L));
108 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _abt_, F, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
109 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _abt_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
110 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _abt_, L));
111
112 // fire
113 m_fsm.AddTransition(new WeaponTransition( E, __T__, Trigger_E)); // fire cocked
114 m_fsm.AddTransition(new WeaponTransition( Trigger_E, _fin_, E));
115 m_fsm.AddTransition(new WeaponTransition( Trigger_E, _dto_, E));
116 m_fsm.AddTransition(new WeaponTransition( Trigger_E, _abt_, E));
117
118 m_fsm.AddTransition(new WeaponTransition( F, __T__, Trigger_F)); // fire uncocked
119 m_fsm.AddTransition(new WeaponTransition( Trigger_F, _fin_, F));
120 m_fsm.AddTransition(new WeaponTransition( Trigger_F, _dto_, F));
121 m_fsm.AddTransition(new WeaponTransition( Trigger_F, _abt_, F));
122
123 m_fsm.AddTransition(new WeaponTransition( L, __T__, Trigger_L)); // a) fire if not jammed
124 m_fsm.AddTransition(new WeaponTransition( Trigger_L, _fin_, F));
125 m_fsm.AddTransition(new WeaponTransition( Trigger_L, _abt_, F));
126
127
128 // initial state setup
129 bool empty = true;
130 bool discharged = false; // @TODO:
131 WeaponStableState init_state = E;
132 if (empty)
133 {
134 if (!discharged)
135 init_state = E;
136 }
137 else
138 {
139 init_state = L; // can init state == load/jammed?
140 }
141 SetInitialState(init_state);
142
143 SelectionBulletHide();
144
145 m_fsm.Start();
146 }
147};
void wpnPrint(string s)
Определения Debug.c:1
@ UNKNOWN
24 - Any other error. Can be returned from any call.
Определения BIOSErrorModule.c:56
Loaded
Определения Crossbow.c:21
FLAREStableStateID
Определения Flaregun.c:8
Fireout
Определения Flaregun.c:20
FLAREAnimState
Определения Flaregun.c:2
@ UNCOCKED
default weapon state, closed and discharged
Определения Flaregun.c:4
class WeaponGuardIsDestroyed extends WeaponGuardBase m_weapon
Определения Guards.c:604
Empty
Определения Hand_States.c:14
class SSPFireout extends WeaponStableState OnEntry
enum FSMTransition WeaponTransition
enum FSMTransition WeaponEventBase
MuzzleState
Определения WeaponStableState.c:15
@ E
EMPTY.
Определения WeaponStableState.c:19
@ L
LOADED.
Определения WeaponStableState.c:23
@ F
FIRED.
Определения WeaponStableState.c:21
ref array< MuzzleState > m_muzzleHasBullet
Определения WeaponStableState.c:30
pair ( action, actionType )
Определения Weapon_Base.c:5
override void InitStateMachine()
Определения Flaregun.c:54
Определения Flaregun.c:53
static bool IsWeaponLogEnable()
Определения Debug.c:718
Определения Debug.c:594
Определения ObjectTyped.c:2
shorthand
Определения BoltActionRifle_Base.c:6
charging of weapon without ammo to be chambered
signalize mechanism manipulation
Определения Events.c:35
weapon finite state machine
Определения WeaponFire.c:99
override bool IsBoltOpen()
Определения SKS.c:48
override bool IsJammed()
Определения Crossbow.c:33
override void OnExit(WeaponEventBase e)
Определения Crossbow.c:29
override void InitMuzzleArray()
Определения Crossbow.c:35
override void OnEntry(WeaponEventBase e)
Определения Crossbow.c:28
override bool HasBullet()
Определения Crossbow.c:31
override int GetCurrentStateID()
Определения Crossbow.c:30
override bool IsRepairEnabled()
Определения Crossbow.c:34
override bool HasMagazine()
Определения Crossbow.c:32
represents weapon's stable state (i.e. the basic states that the weapon will spend the most time in)
Определения Crossbow.c:27
represent weapon state base
Определения BulletHide.c:2
class LOD Object
WeaponActionChamberingTypes
Определения human.c:876
WeaponActions
actions
Определения human.c:816
@ COCKED
Определения human.c:975
WeaponActionFireTypes
Определения human.c:920