Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
riflesingleshot.c
Go to the documentation of this file.
2{
3 DEFAULT = 0,
4};
5
7{
8 UNKNOWN = 0,
9 Empty = 1,
10 Fireout = 2,
11 Loaded = 3,
12 Jammed = 4,
13}
14
15class RSSEmpty extends WeaponStableState
16{
17 override void OnEntry (WeaponEventBase e) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { Empty E"); super.OnEntry(e); }
18 override void OnExit (WeaponEventBase e) { super.OnExit(e); wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } Empty E"); }
19 override int GetCurrentStateID () { return RSSStableStateID.Empty; }
20 override bool HasBullet () { return false; }
21 override bool HasMagazine () { return false; }
22 override bool IsJammed () { return false; }
23 override bool IsRepairEnabled () { return true; }
24 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.E}; }
25};
26class RSSFireout extends WeaponStableState
27{
28 override void OnEntry (WeaponEventBase e) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { Fireout F"); super.OnEntry(e); }
29 override void OnExit (WeaponEventBase e) { super.OnExit(e); wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } Fireout F"); }
30 override int GetCurrentStateID () { return RSSStableStateID.Fireout; }
31 override bool HasBullet () { return true; }
32 override bool HasMagazine () { return false; }
33 override bool IsJammed () { return false; }
34 override bool IsRepairEnabled () { return true; }
35 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.F}; }
36};
37class RSSLoaded extends WeaponStableState
38{
39 override void OnEntry (WeaponEventBase e) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { Loaded C"); super.OnEntry(e); }
40 override void OnExit (WeaponEventBase e) { super.OnExit(e); wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } Loaded C"); }
41 override int GetCurrentStateID () { return RSSStableStateID.Loaded; }
42 override bool HasBullet () { return true; }
43 override bool HasMagazine () { return false; }
44 override bool IsJammed () { return false; }
45 override bool IsRepairEnabled () { return true; }
46 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.L}; }
47};
48class RSSJammed extends WeaponStateJammed
49{
50 override void OnEntry (WeaponEventBase e) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { Jammed J"); super.OnEntry(e); }
51 override void OnExit (WeaponEventBase e) { super.OnExit(e); wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } Jammed J"); }
52 override int GetCurrentStateID () { return RSSStableStateID.Jammed; }
53 override bool HasBullet () { return true; }
54 override bool HasMagazine () { return false; }
55 override bool IsJammed () { return true; }
56 override bool IsBoltOpen () { return true; }
57 override bool IsRepairEnabled () { return true; }
58 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.F}; }
59};
60
66{
68 {
69 }
70
71 override void InitStateMachine()
72 {
73 // setup abilities
74 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED));
75 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED));
76 m_abilities.Insert(new AbilityRecord(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_START));
77 m_abilities.Insert(new AbilityRecord(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_END));
78 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL));
79 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_COCKED));
80
81 // setup state machine
82 // basic weapon states
83 WeaponStateBase E = new RSSEmpty(this, NULL, RSSAnimState.DEFAULT);
84 WeaponStateBase F = new RSSFireout(this, NULL, RSSAnimState.DEFAULT);
85 WeaponStateBase J = new RSSJammed(this, NULL, RSSAnimState.DEFAULT);
86 WeaponStateBase L = new RSSLoaded(this, NULL, RSSAnimState.DEFAULT);
87 // unstable (intermediate) states
88 WeaponStateBase Mech_F = new WeaponCharging(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
89 WeaponStateBase Mech_L = new WeaponEjectBullet(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
90
91 WeaponChambering Chamber_E = new WeaponChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED);
92 WeaponChambering Chamber_F = new WeaponChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED);
93 //WeaponStateBase Chamber_L = new RifleReChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED);
94
95 WeaponStateBase Trigger_E = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_COCKED);
96 WeaponStateBase Trigger_L = new WeaponFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL);
97 WeaponStateBase Trigger_F = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_COCKED);
98
99 WeaponStateBase Trigger_LJ = new WeaponFireToJam(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_JAM);
100
101 WeaponStateBase Unjam_J = new WeaponUnjamming(this, NULL, WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_START);
102
103 // events
104 WeaponEventBase __M__ = new WeaponEventMechanism;
105 WeaponEventBase __T__ = new WeaponEventTrigger;
106 WeaponEventBase __TJ_ = new WeaponEventTriggerToJam;
107 WeaponEventBase __L__ = new WeaponEventLoad1Bullet;
108 WeaponEventBase __U__ = new WeaponEventUnjam;
109 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
110 WeaponEventBase _abt_ = new WeaponEventHumanCommandActionAborted;
111 WeaponEventBase _dto_ = new WeaponEventDryFireTimeout;
112
113 m_fsm = new WeaponFSM();
114 // charging
115 m_fsm.AddTransition(new WeaponTransition( E, __M__, Mech_F));
116 m_fsm.AddTransition(new WeaponTransition( F, __M__, Mech_F));
117 m_fsm.AddTransition(new WeaponTransition( Mech_F, _fin_, F, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
118 m_fsm.AddTransition(new WeaponTransition( Mech_F, _fin_, E));
119 m_fsm.AddTransition(new WeaponTransition( Mech_F, _abt_, F, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
120 m_fsm.AddTransition(new WeaponTransition( Mech_F, _abt_, E));
121
122 // eject good cartridge
123 m_fsm.AddTransition(new WeaponTransition( L, __M__, Mech_L));
124 m_fsm.AddTransition(new WeaponTransition( Mech_L, _fin_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
125 m_fsm.AddTransition(new WeaponTransition( Mech_L, _fin_, L));
126 m_fsm.AddTransition(new WeaponTransition( Mech_L, _abt_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
127 m_fsm.AddTransition(new WeaponTransition( Mech_L, _abt_, L));
128
129 // load bullet
130 m_fsm.AddTransition(new WeaponTransition( E, __L__, Chamber_E));
131 m_fsm.AddTransition(new WeaponTransition( Chamber_E, _fin_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
132 m_fsm.AddTransition(new WeaponTransition( Chamber_E, _fin_, L));
133 Chamber_E.AddTransition(new WeaponTransition( Chamber_E.m_start, _abt_, E));
134 Chamber_E.AddTransition(new WeaponTransition( Chamber_E.m_eject, _abt_, E));
135 Chamber_E.AddTransition(new WeaponTransition( Chamber_E.m_chamber, _abt_, E));
136 Chamber_E.AddTransition(new WeaponTransition( Chamber_E.m_w4t, _abt_, L));
137
138 m_fsm.AddTransition(new WeaponTransition( F, __L__, Chamber_F));
139 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _fin_, F, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
140 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _fin_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
141 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _fin_, L));
142 Chamber_F.AddTransition(new WeaponTransition( Chamber_F.m_start, _abt_, F));
143 Chamber_F.AddTransition(new WeaponTransition( Chamber_F.m_eject, _abt_, E));
144 Chamber_F.AddTransition(new WeaponTransition( Chamber_F.m_chamber, _abt_, E));
145 Chamber_F.AddTransition(new WeaponTransition( Chamber_F.m_w4t, _abt_, L));
146
147 // fire
148 m_fsm.AddTransition(new WeaponTransition( E, __T__, Trigger_E)); // fire cocked
149 m_fsm.AddTransition(new WeaponTransition( Trigger_E, _fin_, E));
150 m_fsm.AddTransition(new WeaponTransition( Trigger_E, _dto_, E));
151 m_fsm.AddTransition(new WeaponTransition( Trigger_E, _abt_, E));
152
153 m_fsm.AddTransition(new WeaponTransition( F, __T__, Trigger_F)); // fire uncocked
154 m_fsm.AddTransition(new WeaponTransition( Trigger_F, _fin_, F));
155 m_fsm.AddTransition(new WeaponTransition( Trigger_F, _dto_, F));
156 m_fsm.AddTransition(new WeaponTransition( Trigger_F, _abt_, F));
157
158 m_fsm.AddTransition(new WeaponTransition( L, __T__, Trigger_L)); // a) fire if not jammed
159 m_fsm.AddTransition(new WeaponTransition( Trigger_L, _fin_, F));
160 m_fsm.AddTransition(new WeaponTransition( Trigger_L, _abt_, F));
161
162 m_fsm.AddTransition(new WeaponTransition( L, __TJ_, Trigger_LJ)); // a) fire if not jammed
163 m_fsm.AddTransition(new WeaponTransition( Trigger_LJ, _fin_, J));
164 m_fsm.AddTransition(new WeaponTransition( Trigger_LJ, _abt_, J));
165
166 // unjam
167 m_fsm.AddTransition(new WeaponTransition( J, __U__, Unjam_J));
168 m_fsm.AddTransition(new WeaponTransition( Unjam_J, _fin_, J, NULL, new WeaponGuardJammed(this)));
169 m_fsm.AddTransition(new WeaponTransition( Unjam_J, _fin_, E));
170
171 // initial state setup
172 bool empty = true;
173 bool discharged = false; // @TODO:
174 WeaponStateBase init_state = E;
175 if (empty)
176 {
177 if (!discharged)
178 init_state = E;
179 }
180 else
181 {
182 init_state = L; // can init state == load/jammed?
183 }
184 m_fsm.SetInitialState(init_state);
185
186 SelectionBulletHide();
187
188 m_fsm.Start();
189 }
190};
void wpnPrint(string s)
Definition debug.c:1
pair ( action, actionType )
Definition weapon_base.c:5
base for rifles @NOTE name copies config base class
Definition sks.c:70
charging of weapon without ammo to be chambered
signalize mechanism manipulation
Definition events.c:35
weapon finite state machine
represents weapon's stable state (i.e. the basic states that the weapon will spend the most time in)
Definition crossbow.c:27
represent weapon state base
Definition bullethide.c:2
handle jamming state set jam/unjam state for weapon
unjam submachine
override bool IsRepairEnabled()
Definition crossbow.c:23
override bool IsJammed()
Definition crossbow.c:22
override bool HasBullet()
Definition crossbow.c:20
override void InitMuzzleArray()
Definition crossbow.c:24
override bool HasMagazine()
Definition crossbow.c:21
class WeaponGuardIsDestroyed extends WeaponGuardBase m_weapon
Definition guards.c:604
override int GetCurrentStateID()
Definition hand_states.c:29
override bool IsBoltOpen()
class RSSFireout extends WeaponStableState OnEntry
UNKNOWN
RSSAnimState
@ DEFAULT
default weapon state, closed and discharged
Fireout
RSSStableStateID
class SSPFireout extends WeaponStableState OnEntry
enum FSMTransition WeaponTransition
class WeaponChambering_Chamber_OnEntry extends WeaponChambering_Base OnExit
MuzzleState
@ E
EMPTY.
@ L
LOADED.
@ F
FIRED.
ref array< MuzzleState > m_muzzleHasBullet