Dayz Explorer 1.29.162510
Loading...
Searching...
No Matches
singleshotpistol_base.c
Go to the documentation of this file.
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 SSPEmpty 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 SSPStableStateID.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 SSPFireout 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 SSPStableStateID.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 SSPLoaded 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 SSPStableStateID.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 SSPEmpty(this, NULL, SSPAnimState.UNCOCKED);
66 WeaponStableState F = new SSPFireout(this, NULL, SSPAnimState.UNCOCKED);
67 WeaponStableState L = new SSPLoaded(this, NULL, SSPAnimState.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_, F, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
96 m_fsm.AddTransition(new WeaponTransition( Mech_F, _fin_, E));
97 m_fsm.AddTransition(new WeaponTransition( Mech_F, _abt_, F, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
98 m_fsm.AddTransition(new WeaponTransition( Mech_F, _abt_, E));
99
100 // eject good cartridge
101 m_fsm.AddTransition(new WeaponTransition( L, __M__, Mech_L));
102 m_fsm.AddTransition(new WeaponTransition( Mech_L, _fin_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
103 m_fsm.AddTransition(new WeaponTransition( Mech_L, _fin_, L));
104 m_fsm.AddTransition(new WeaponTransition( Mech_L, _abt_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
105 m_fsm.AddTransition(new WeaponTransition( Mech_L, _abt_, L));
106
107 m_fsm.AddTransition(new WeaponTransition( E, __L__, Chamber_F));
108 m_fsm.AddTransition(new WeaponTransition( F, __L__, Chamber_F));
109 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _fin_, F, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
110 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _fin_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
111 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _fin_, L));
112 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _abt_, F, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
113 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _abt_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
114 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _abt_, L));
115
116 // fire
117 m_fsm.AddTransition(new WeaponTransition( E, __T__, Trigger_E)); // fire cocked
118 m_fsm.AddTransition(new WeaponTransition( Trigger_E, _fin_, E));
119 m_fsm.AddTransition(new WeaponTransition( Trigger_E, _dto_, E));
120 m_fsm.AddTransition(new WeaponTransition( Trigger_E, _abt_, E));
121
122 m_fsm.AddTransition(new WeaponTransition( F, __T__, Trigger_F)); // fire uncocked
123 m_fsm.AddTransition(new WeaponTransition( Trigger_F, _fin_, F));
124 m_fsm.AddTransition(new WeaponTransition( Trigger_F, _dto_, F));
125 m_fsm.AddTransition(new WeaponTransition( Trigger_F, _abt_, F));
126
127 m_fsm.AddTransition(new WeaponTransition( L, __T__, Trigger_L)); // a) fire if not jammed
128 m_fsm.AddTransition(new WeaponTransition( Trigger_L, _fin_, F));
129 m_fsm.AddTransition(new WeaponTransition( Trigger_L, _abt_, F));
130
131
132 // initial state setup
133 bool empty = true;
134 bool discharged = false; // @TODO:
135 WeaponStableState init_state = E;
136 if (empty)
137 {
138 if (!discharged)
139 init_state = E;
140 }
141 else
142 {
143 init_state = L; // can init state == load/jammed?
144 }
145 SetInitialState(init_state);
146
147 SelectionBulletHide();
148
149 m_fsm.Start();
150 }
151};
void wpnPrint(string s)
Definition debug.c:1
@ UNKNOWN
24 - Any other error. Can be returned from any call.
pair ( action, actionType )
Definition weapon_base.c:5
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
Loaded
Definition crossbow.c:21
Fireout
Definition flaregun.c:20
@ UNCOCKED
default weapon state, closed and discharged
Definition flaregun.c:4
class LOD Object
class WeaponGuardIsDestroyed extends WeaponGuardBase m_weapon
Definition guards.c:604
Empty
Definition hand_states.c:14
class SSPFireout extends WeaponStableState OnEntry
override bool IsBoltOpen()
override bool IsRepairEnabled()
override int GetCurrentStateID()
override bool IsJammed()
override bool HasBullet()
override void InitMuzzleArray()
override bool HasMagazine()
enum FSMTransition WeaponTransition
enum FSMTransition WeaponEventBase
class WeaponChambering_Chamber_OnEntry extends WeaponChambering_Base OnExit
MuzzleState
@ E
EMPTY.
@ L
LOADED.
@ F
FIRED.
ref array< MuzzleState > m_muzzleHasBullet