DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
RifleChambering.c
См. документацию.
1class RifleChambering extends WeaponStateBase
2{
5 Magazine m_srcMagazine;
6
10 ref WeaponChambering_W4T m_w4t;
11
12 void RifleChambering (Weapon_Base w = NULL, WeaponStateBase parent = NULL, WeaponActions action = WeaponActions.NONE, int actionType = -1)
13 {
14 m_action = action;
15 m_actionType = actionType;
16
17 // setup nested state machine
18 m_start = new WeaponChambering_Start(m_weapon, this, m_action, m_actionType);
21 m_w4t = new WeaponChambering_W4T(m_weapon, this);
22 // events
23 WeaponEventAnimBulletEject __be_ = new WeaponEventAnimBulletEject;
24 WeaponEventAnimBulletShow __bs_ = new WeaponEventAnimBulletShow;
25 WeaponEventAnimBulletInChamber __bc_ = new WeaponEventAnimBulletInChamber;
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_start , __be_, m_eject));
30 m_fsm.AddTransition(new WeaponTransition(m_eject , __bs_, m_chamber));
31 m_fsm.AddTransition(new WeaponTransition(m_chamber, __bc_, m_w4t));
32 m_fsm.AddTransition(new WeaponTransition(m_w4t , _fin_, NULL));
33
34 // Safety exits
35 m_fsm.AddTransition(new WeaponTransition(m_chamber, _fin_, null));
36 m_fsm.AddTransition(new WeaponTransition(m_eject , _fin_, null));
37 m_fsm.AddTransition(new WeaponTransition(m_start , _fin_, null));
38
39 m_fsm.SetInitialState(m_start);
40 }
41
42 override void OnEntry (WeaponEventBase e)
43 {
44 if (e != NULL)
45 {
46 if (e.m_magazine != NULL)
47 {
48 if (LogManager.IsWeaponLogEnable()) { wpnDebugPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " RifleChambering, taking mag from event e.mag=" + e.m_magazine.ToString()); }
50 m_chamber.m_srcMagazine = m_srcMagazine;
51 }
52 }
53 else
54 {
55 if (LogManager.IsWeaponLogEnable()) { wpnDebugPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " RifleChambering (e=NULL), m_srcMagazine=" + m_srcMagazine.ToString()); }
56 }
57 if (LogManager.IsWeaponLogEnable()) { wpnDebugPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " m_srcMagazine=" + m_srcMagazine.ToString()); }
58
59 super.OnEntry(e); // @NOTE: super at the end (prevent override from submachine start)
60 }
61
62 override void OnAbort (WeaponEventBase e)
63 {
64 super.OnAbort(e);
65 m_srcMagazine = NULL;
66 }
67
68 override void OnExit (WeaponEventBase e)
69 {
70 super.OnExit(e);
71 m_srcMagazine = NULL;
72 }
73
75 {
76 if (!super.SaveCurrentFSMState(ctx))
77 return false;
78
79 if (!ctx.Write(m_srcMagazine))
80 {
81 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " RifleChambering.SaveCurrentFSMState: cannot save m_srcMagazine for weapon=" + m_weapon);
82 return false;
83 }
84 return true;
85 }
86
87 override bool LoadCurrentFSMState (ParamsReadContext ctx, int version)
88 {
89 if (!super.LoadCurrentFSMState(ctx, version))
90 return false;
91
92 if (!ctx.Read(m_srcMagazine))
93 {
94 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " RifleChambering.LoadCurrentFSMState: cannot read m_srcMagazine for weapon=" + m_weapon);
95 return false;
96 }
97 return true;
98 }
99};
100
void wpnDebugPrint(string s)
Определения Debug.c:9
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
signalize mechanism manipulation
Определения Events.c:35
weapon finite state machine
int m_actionType
action to be played
Определения RifleChambering.c:4
ref WeaponChambering_W4T m_w4t
Определения RifleChambering.c:10
void WeaponStateBase(Weapon_Base w=NULL, WeaponStateBase parent=NULL)
internal state id used for load/restore
Определения WeaponStateBase.c:17
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
WeaponActions m_action
Определения RifleChambering.c:3
Weapon_Base m_weapon
Определения WeaponStateBase.c:12
ref WeaponChambering_Cartridge m_chamber
Определения RifleChambering.c:9
override void OnEntry(WeaponEventBase e)
Определения RifleChambering.c:42
ref WeaponStateBase m_start
source of the cartridge
Определения RifleChambering.c:7
override bool LoadCurrentFSMState(ParamsReadContext ctx, int version)
Определения RifleChambering.c:87
ref WeaponEjectCasing m_eject
Определения RifleChambering.c:8
override void OnAbort(WeaponEventBase e)
Определения RifleChambering.c:62
void WeaponEjectCasing(Weapon_Base w=NULL, WeaponStateBase parent=NULL)
void RifleChambering(Weapon_Base w=NULL, WeaponStateBase parent=NULL, WeaponActions action=WeaponActions.NONE, int actionType=-1)
Определения RifleChambering.c:12
override void OnExit(WeaponEventBase e)
Определения RifleChambering.c:68
override bool SaveCurrentFSMState(ParamsWriteContext ctx)
Определения RifleChambering.c:74
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
WeaponActions
actions
Определения human.c:816