DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
WeaponReChamber.c
См. документацию.
1
2// rechamber (== eject cartridge + load another + store the old one)
3class WeaponRechamber extends WeaponStateBase
4{
9 Magazine m_dstMagazine;
10 Magazine m_srcMagazine;
11
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
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()); }
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
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
void wpnDebugPrint(string s)
Определения Debug.c:9
void DayZPlayerUtils()
cannot be instantiated
Определения DayZPlayerUtils.c:465
enum FSMTransition WeaponTransition
static bool IsWeaponLogEnable()
Определения Debug.c:718
Определения Debug.c:594
Определения ObjectTyped.c:2
proto bool Write(void value_out)
proto bool Read(void value_in)
shorthand
Определения BoltActionRifle_Base.c:6
Magazine m_magazine
Определения Events.c:38
DayZPlayer m_player
Определения Events.c:37
signalize mechanism manipulation
Определения Events.c:35
weapon finite state machine
Magazine m_dstMagazine
Определения RifleReChambering.c:5
void WeaponStateBase(Weapon_Base w=NULL, WeaponStateBase parent=NULL)
internal state id used for load/restore
Определения WeaponStateBase.c:17
void WeaponEjectBullet(Weapon_Base w=NULL, WeaponStateBase parent=NULL, WeaponActions action=WeaponActions.NONE, int actionType=-1)
Определения WeaponEjectBullet.c:50
int m_actionTypeLoad
Определения WeaponReChamber.c:8
int m_actionTypeEject
Определения WeaponReChamber.c:6
int m_actionLoad
Определения WeaponReChamber.c:7
Magazine m_srcMagazine
destination of the ejected cartridge
Определения RifleChambering.c:5
ref WeaponFSM m_fsm
hierarchical parent state of this state (or null)
Определения WeaponStateBase.c:14
void WeaponChambering(Weapon_Base w=NULL, WeaponStateBase parent=NULL, WeaponActions action=WeaponActions.NONE, int actionType=-1)
Определения WeaponChambering.c:386
Weapon_Base m_weapon
Определения WeaponStateBase.c:12
ref WeaponEjectBullet m_eje
source of the loaded cartridge
Определения WeaponReChamber.c:12
override void OnEntry(WeaponEventBase e)
Определения WeaponReChamber.c:35
int m_actionEject
Определения WeaponReChamber.c:5
override bool LoadCurrentFSMState(ParamsReadContext ctx, int version)
Определения WeaponReChamber.c:88
ref WeaponChambering m_loa
Определения WeaponReChamber.c:13
void WeaponRechamber(Weapon_Base w=NULL, WeaponStateBase parent=NULL, int actionEject=-1, int actionTypeEject=-1, int actionLoad=-1, int actionTypeLoad=-1)
Определения WeaponReChamber.c:15
override void OnExit(WeaponEventBase e)
Определения WeaponReChamber.c:62
override bool SaveCurrentFSMState(ParamsWriteContext ctx)
Определения WeaponReChamber.c:70
represent weapon state base
Определения BulletHide.c:2
Serializer ParamsReadContext
Определения gameplay.c:15
Serializer ParamsWriteContext
Определения gameplay.c:16
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90