Dayz
Build 1.29.163047, Scripts Rev. 123548
Dayz Code Explorer by Zeroy
Toggle main menu visibility
Loading...
Searching...
No Matches
singleshotpistol_base.c
Go to the documentation of this file.
1
enum
SSPAnimState
2
{
3
COCKED
= 0,
4
UNCOCKED
= 1,
5
};
6
7
enum
SSPStableStateID
8
{
9
UNKNOWN
= 0,
10
Empty
= 1,
11
Fireout
= 2,
12
Loaded
= 3,
13
}
14
15
class
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
};
27
class
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
};
39
class
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
52
class
SingleShotPistol_Base
:
Weapon_Base
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
};
wpnPrint
void wpnPrint(string s)
Definition
debug.c:1
UNKNOWN
@ UNKNOWN
24 - Any other error. Can be returned from any call.
Definition
bioserrormodule.c:56
AbilityRecord
pair ( action, actionType )
Definition
weapon_base.c:5
LogManager
Definition
debug.c:692
LogManager::IsWeaponLogEnable
static bool IsWeaponLogEnable()
Definition
debug.c:816
Object
Definition
objecttyped.c:2
SingleShotPistol_Base
Definition
singleshotpistol_base.c:53
SingleShotPistol_Base::InitStateMachine
override void InitStateMachine()
Definition
singleshotpistol_base.c:54
Weapon_Base
shorthand
Definition
boltactionrifle_base.c:6
WeaponChambering_Base::OnExit
override void OnExit(WeaponEventBase e)
Definition
weaponchambering.c:439
WeaponCharging
charging of weapon without ammo to be chambered
WeaponEventBase
signalize mechanism manipulation
Definition
events.c:35
WeaponFSM
weapon finite state machine
WeaponFire
Definition
weaponfire.c:113
WeaponStableState
represents weapon's stable state (i.e.
Definition
crossbow.c:27
WeaponStableState::IsBoltOpen
override bool IsBoltOpen()
Definition
sks.c:48
WeaponStableState::IsRepairEnabled
override bool IsRepairEnabled()
Definition
crossbow.c:34
WeaponStableState::OnEntry
override void OnEntry(WeaponEventBase e)
Definition
crossbow.c:28
WeaponStableState::GetCurrentStateID
override int GetCurrentStateID()
Definition
crossbow.c:30
WeaponStableState::OnExit
override void OnExit(WeaponEventBase e)
Definition
singleshotpistol_base.c:30
WeaponStableState::IsJammed
override bool IsJammed()
Definition
crossbow.c:33
WeaponStableState::HasBullet
override bool HasBullet()
Definition
crossbow.c:31
WeaponStableState::InitMuzzleArray
override void InitMuzzleArray()
Definition
crossbow.c:35
WeaponStableState::HasMagazine
override bool HasMagazine()
Definition
crossbow.c:32
WeaponStateBase
represent weapon state base
Definition
bullethide.c:2
Loaded
Loaded
Definition
crossbow.c:21
Fireout
Fireout
Definition
flaregun.c:20
UNCOCKED
@ UNCOCKED
default weapon state, closed and discharged
Definition
flaregun.c:4
Object
class LOD Object
m_weapon
class WeaponGuardIsDestroyed extends WeaponGuardBase m_weapon
Definition
guards.c:604
Empty
Empty
Definition
hand_states.c:14
WeaponActionChamberingTypes
WeaponActionChamberingTypes
Definition
human.c:876
WeaponActions
WeaponActions
actions
Definition
human.c:816
COCKED
@ COCKED
Definition
human.c:981
WeaponActionFireTypes
WeaponActionFireTypes
Definition
human.c:926
SSPStableStateID
SSPStableStateID
Definition
singleshotpistol_base.c:8
OnEntry
class SSPFireout extends WeaponStableState OnEntry
SSPAnimState
SSPAnimState
Definition
singleshotpistol_base.c:2
WeaponTransition
enum FSMTransition WeaponTransition
WeaponEventBase
enum FSMTransition WeaponEventBase
OnExit
class WeaponChambering_Chamber_OnEntry extends WeaponChambering_Base OnExit
Definition
weaponchambering.c:352
MuzzleState
MuzzleState
Definition
weaponstablestate.c:15
E
@ E
EMPTY.
Definition
weaponstablestate.c:19
L
@ L
LOADED.
Definition
weaponstablestate.c:23
F
@ F
FIRED.
Definition
weaponstablestate.c:21
m_muzzleHasBullet
ref array< MuzzleState > m_muzzleHasBullet
Definition
weaponstablestate.c:30
Games
Dayz
scripts
4_world
entities
firearms
singleshotpistol_base.c
Generated by
1.17.0