Dayz
Build 1.29.163047, Scripts Rev. 123548
Dayz Code Explorer by Zeroy
Toggle main menu visibility
Loading...
Searching...
No Matches
weaponrechamber.c
Go to the documentation of this file.
1
2
// rechamber (== eject cartridge + load another + store the old one)
3
class
WeaponRechamber
extends
WeaponStateBase
4
{
5
int
m_actionEject
;
6
int
m_actionTypeEject
;
7
int
m_actionLoad
;
8
int
m_actionTypeLoad
;
9
Magazine
m_dstMagazine
;
10
Magazine
m_srcMagazine
;
11
12
ref
WeaponEjectBullet
m_eje
;
13
ref
WeaponChambering
m_loa
;
14
15
void
WeaponRechamber
(
Weapon_Base
w = NULL,
WeaponStateBase
parent = NULL,
int
actionEject = -1,
int
actionTypeEject = -1,
int
actionLoad = -1,
int
actionTypeLoad = -1)
16
{
17
m_actionEject
= actionEject;
18
m_actionTypeEject
= actionTypeEject;
19
m_actionLoad
= actionLoad;
20
m_actionTypeLoad
= actionTypeLoad;
21
22
// setup nested state machine
23
m_eje
=
new
WeaponEjectBullet
(
m_weapon
,
this
,
m_actionEject
,
m_actionTypeEject
);
24
m_loa
=
new
WeaponChambering
(
m_weapon
,
this
,
m_actionLoad
,
m_actionTypeLoad
);
25
// events
26
WeaponEventBase
_fin_ =
new
WeaponEventHumanCommandActionFinished;
27
28
m_fsm
=
new
WeaponFSM
(
this
);
// @NOTE: set owner of the submachine fsm
29
m_fsm
.AddTransition(
new
WeaponTransition
(
m_eje
, _fin_,
m_loa
));
30
m_fsm
.AddTransition(
new
WeaponTransition
(
m_loa
, _fin_, NULL));
31
32
m_fsm
.SetInitialState(
m_eje
);
33
}
34
35
override
void
OnEntry
(
WeaponEventBase
e)
36
{
37
if
(e)
38
{
39
if
(
LogManager
.
IsWeaponLogEnable
()) {
wpnDebugPrint
(
"[wpnfsm] "
+
Object
.GetDebugName(
m_weapon
) +
" WeaponRechamber, mag="
+ e.
m_magazine
.ToString()); }
40
m_srcMagazine
= e.
m_magazine
;
41
m_loa
.m_srcMagazine =
m_srcMagazine
;
42
43
// prepare magazine for ejected ammo
44
int
mi =
m_weapon
.GetCurrentMuzzle();
45
string
magazineTypeName =
m_weapon
.GetChamberedCartridgeMagazineTypeName(mi);
46
float
damage = 0.0;
47
string
type;
48
if
(
m_weapon
.GetCartridgeInfo(mi, damage, type))
49
{
50
m_dstMagazine
=
DayZPlayerUtils
.SelectStoreCartridge(e.
m_player
,
m_weapon
, mi,
m_srcMagazine
, damage, magazineTypeName);
51
if
(!
m_dstMagazine
)
52
{
53
Error
(
"[wpnfsm] "
+
Object
.GetDebugName(
m_weapon
) +
" WeaponRechamber - error, cannot prepare mag for catridge, magType="
+ magazineTypeName);
54
}
55
}
56
57
e.
m_magazine
=
m_dstMagazine
;
// @NOTE: override event mag - @TODO
58
}
59
super.OnEntry(e);
// @NOTE: super after submachine init (prevent override from submachine start)
60
}
61
62
override
void
OnExit
(
WeaponEventBase
e)
63
{
64
super.OnExit(e);
65
m_dstMagazine
= NULL;
66
m_eje
.m_dstMagazine = NULL;
67
m_loa
.m_srcMagazine = NULL;
68
}
69
70
override
bool
SaveCurrentFSMState
(
ParamsWriteContext
ctx)
71
{
72
if
(!super.SaveCurrentFSMState(ctx))
73
return
false
;
74
75
if
(!ctx.
Write
(
m_dstMagazine
))
76
{
77
Error
(
"[wpnfsm] "
+
Object
.GetDebugName(
m_weapon
) +
" WeaponChambering.SaveCurrentFSMState: cannot save m_dstMagazine for weapon="
+
m_weapon
);
78
return
false
;
79
}
80
if
(!ctx.
Write
(
m_srcMagazine
))
81
{
82
Error
(
"[wpnfsm] "
+
Object
.GetDebugName(
m_weapon
) +
" WeaponChambering.SaveCurrentFSMState: cannot save m_srcMagazine for weapon="
+
m_weapon
);
83
return
false
;
84
}
85
return
true
;
86
}
87
88
override
bool
LoadCurrentFSMState
(
ParamsReadContext
ctx,
int
version)
89
{
90
if
(!super.LoadCurrentFSMState(ctx, version))
91
return
false
;
92
93
if
(!ctx.
Read
(
m_dstMagazine
))
94
{
95
Error
(
"[wpnfsm] "
+
Object
.GetDebugName(
m_weapon
) +
" WeaponChambering.LoadCurrentFSMState: cannot read m_dstMagazine for weapon="
+
m_weapon
);
96
return
false
;
97
}
98
if
(!ctx.
Read
(
m_srcMagazine
))
99
{
100
Error
(
"[wpnfsm] "
+
Object
.GetDebugName(
m_weapon
) +
" WeaponChambering.LoadCurrentFSMState: cannot read m_srcMagazine for weapon="
+
m_weapon
);
101
return
false
;
102
}
103
return
true
;
104
}
105
};
106
wpnDebugPrint
void wpnDebugPrint(string s)
Definition
debug.c:9
LogManager
Definition
debug.c:692
LogManager::IsWeaponLogEnable
static bool IsWeaponLogEnable()
Definition
debug.c:816
Object
Definition
objecttyped.c:2
Serializer::Write
proto bool Write(void value_out)
Serializer::Read
proto bool Read(void value_in)
Weapon_Base
shorthand
Definition
boltactionrifle_base.c:6
WeaponEventBase
signalize mechanism manipulation
Definition
events.c:35
WeaponEventBase::m_magazine
Magazine m_magazine
Definition
events.c:38
WeaponEventBase::m_player
DayZPlayer m_player
Definition
events.c:37
WeaponFSM
weapon finite state machine
WeaponStateBase
represent weapon state base
Definition
bullethide.c:2
WeaponStateBase::m_actionEject
int m_actionEject
Definition
weaponrechamber.c:5
WeaponStateBase::m_weapon
Weapon_Base m_weapon
Definition
weaponstatebase.c:12
WeaponStateBase::m_loa
ref WeaponChambering m_loa
Definition
weaponrechamber.c:13
WeaponStateBase::m_srcMagazine
Magazine m_srcMagazine
destination of the ejected cartridge
Definition
riflechambering.c:5
WeaponStateBase::m_actionLoad
int m_actionLoad
Definition
weaponrechamber.c:7
WeaponStateBase::WeaponRechamber
void WeaponRechamber(Weapon_Base w=NULL, WeaponStateBase parent=NULL, int actionEject=-1, int actionTypeEject=-1, int actionLoad=-1, int actionTypeLoad=-1)
Definition
weaponrechamber.c:15
WeaponStateBase::OnEntry
override void OnEntry(WeaponEventBase e)
Definition
weaponrechamber.c:35
WeaponStateBase::m_fsm
ref WeaponFSM m_fsm
hierarchical parent state of this state (or null)
Definition
weaponstatebase.c:14
WeaponStateBase::WeaponEjectBullet
void WeaponEjectBullet(Weapon_Base w=NULL, WeaponStateBase parent=NULL, WeaponActions action=WeaponActions.NONE, int actionType=-1)
Definition
weaponejectbullet.c:50
WeaponStateBase::WeaponStateBase
void WeaponStateBase(Weapon_Base w=NULL, WeaponStateBase parent=NULL)
internal state id used for load/restore
Definition
weaponstatebase.c:17
WeaponStateBase::OnExit
override void OnExit(WeaponEventBase e)
Definition
weaponrechamber.c:62
WeaponStateBase::LoadCurrentFSMState
override bool LoadCurrentFSMState(ParamsReadContext ctx, int version)
Definition
weaponrechamber.c:88
WeaponStateBase::m_eje
ref WeaponEjectBullet m_eje
source of the loaded cartridge
Definition
weaponrechamber.c:12
WeaponStateBase::m_actionTypeEject
int m_actionTypeEject
Definition
weaponrechamber.c:6
WeaponStateBase::WeaponChambering
void WeaponChambering(Weapon_Base w=NULL, WeaponStateBase parent=NULL, WeaponActions action=WeaponActions.NONE, int actionType=-1)
Definition
weaponchambering.c:556
WeaponStateBase::m_actionTypeLoad
int m_actionTypeLoad
Definition
weaponrechamber.c:8
WeaponStateBase::m_dstMagazine
Magazine m_dstMagazine
Definition
riflerechambering.c:5
WeaponStateBase::SaveCurrentFSMState
override bool SaveCurrentFSMState(ParamsWriteContext ctx)
Definition
weaponrechamber.c:70
DayZPlayerUtils
void DayZPlayerUtils()
cannot be instantiated
Definition
dayzplayerutils.c:465
ParamsReadContext
Serializer ParamsReadContext
Definition
gameplay.c:15
ParamsWriteContext
Serializer ParamsWriteContext
Definition
gameplay.c:16
Error
void Error(string err)
Messagebox with error message.
Definition
endebug.c:90
WeaponTransition
enum FSMTransition WeaponTransition
Games
Dayz
scripts
4_world
entities
firearms
fsm
states
weaponrechamber.c
Generated by
1.17.0