DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
WeaponDetachingMag.c
См. документацию.
1
2// detach magazine composite state
3class WeaponDetachingMag_1 extends WeaponStartAction
4{ };
5
6class WeaponDetachingMag_Store extends WeaponStateBase
7{
8 Magazine m_magazine;
10
11 override void OnEntry (WeaponEventBase e)
12 {
13 //if (LogManager.IsWeaponLogEnable()) { wpnDebugPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponDetachingMag_Store, Detaching mag=" + m_magazine.ToString() + "to loc=" + InventoryLocation.DumpToStringNullSafe(m_dst)); }
14 super.OnEntry(e);
15 if (e)
16 {
17 if (!m_magazine || !m_dst)
18 {
19 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponDetachingMag_Store, error - no magazine to load from (m_magazine=NULL)");
20 }
21 }
22 }
23
24 override void OnAbort (WeaponEventBase e)
25 {
26 m_magazine = NULL;
27 m_dst = NULL;
28
29 super.OnAbort(e);
30 }
31
32 override void OnExit (WeaponEventBase e)
33 {
35 if (m_magazine.GetInventory().GetCurrentInventoryLocation(il))
36 {
38 {
39 m_weapon.HideMagazine();
40 if (LogManager.IsWeaponLogEnable()) { wpnDebugPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponDetachingMag_Store, ok - magazine removed from inv (inv->dst)"); }
41 }
42 else
43 {
44 // @TODO: drop on gnd
45 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponDetachingMag_Store, error - cannot store detached magazine!");
46 }
47 }
48 else
49 {
50 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponDetachingMag_Store, error - cannot get curr location");
51 }
52
53 m_magazine = NULL;
54 m_dst = NULL;
55 super.OnExit(e);
56 }
57
59 {
60 if (!super.SaveCurrentFSMState(ctx))
61 return false;
62
63 if (!ctx.Write(m_magazine))
64 {
65 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponDetachingMag_Store.SaveCurrentFSMState: cannot write m_magazine for weapon=" + m_weapon);
66 return false;
67 }
68
70 {
71 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponDetachingMag_Store.SaveCurrentFSMState: cannot write m_st for weapon=" + m_weapon);
72 return false;
73 }
74 return true;
75 }
76
77 override bool LoadCurrentFSMState (ParamsReadContext ctx, int version)
78 {
79 if (!super.LoadCurrentFSMState(ctx, version))
80 return false;
81
82 if (!ctx.Read(m_magazine))
83 {
84 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponDetachingMag_Store.LoadCurrentFSMState: cannot read m_magazine for weapon=" + m_weapon);
85 return false;
86 }
88 {
89 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponDetachingMag_Store.LoadCurrentFSMState: cannot read m_dst for weapon=" + m_weapon);
90 return false;
91 }
92 return true;
93 }
94};
95
96/*class WeaponDetachingMag_Store_W4T extends WeaponDetachingMag_Store
97{
98 override bool IsWaitingForActionFinish () { return true; }
99};*/
100
101class WeaponDetachingMag extends WeaponStateBase
102{
104 int m_actionType;
105 Magazine m_magazine;
106 ref InventoryLocation m_dst;
107
108 ref WeaponStateBase m_start;
109 ref WeaponDetachingMag_Store m_store;
110 ref MagazineHide_W4T m_hideM;
111
112 void WeaponDetachingMag (Weapon_Base w = NULL, WeaponStateBase parent = NULL, WeaponActions action = WeaponActions.NONE, int actionType = -1)
113 {
114 m_action = action;
115 m_actionType = actionType;
116
117 // setup nested state machine
118 m_start = new WeaponDetachingMag_1(m_weapon, this, m_action, m_actionType);
119 m_store = new WeaponDetachingMag_Store(m_weapon, this);
120 m_hideM = new MagazineHide_W4T(m_weapon, this);
121 // events
122 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
123 WeaponEventBase __md_ = new WeaponEventAnimMagazineDetached;
124 WeaponEventBase __mh_ = new WeaponEventAnimMagazineHide;
125
126 m_fsm = new WeaponFSM(this); // @NOTE: set owner of the submachine fsm
127 m_fsm.AddTransition(new WeaponTransition(m_start, __md_, m_store));
128 m_fsm.AddTransition(new WeaponTransition(m_store, __mh_, m_hideM));
129 m_fsm.AddTransition(new WeaponTransition(m_hideM, _fin_, NULL));
130
131 // Safety exits
132 m_fsm.AddTransition(new WeaponTransition(m_store , _fin_, null));
133 m_fsm.AddTransition(new WeaponTransition(m_start , _fin_, null));
134
135 m_fsm.SetInitialState(m_start);
136 }
137
138 override void OnEntry (WeaponEventBase e)
139 {
140 if (e != NULL)
141 {
142 WeaponEventDetachMagazine de;
143 if (Class.CastTo(de, e))
144 {
145 if (LogManager.IsWeaponLogEnable()) { wpnDebugPrint("WeaponDetachingMag type=" + typename.EnumToString(InventoryLocationType, de.m_dst.GetType())); }
147 m_dst = de.m_dst;
148
149 m_store.m_magazine = m_magazine;
150 m_store.m_dst = m_dst;
151 if (LogManager.IsWeaponLogEnable()) { wpnDebugPrint("WeaponDetachingMag type=" + typename.EnumToString(InventoryLocationType, m_store.m_dst.GetType())); }
152 }
153 }
154 super.OnEntry(e); // @NOTE: super at the end (prevent override from submachine start)
155 }
156
157 override void OnExit (WeaponEventBase e)
158 {
159 m_dst = NULL;
160 m_magazine = NULL;
161 super.OnExit(e);
162 }
163
165 {
166 if (!super.SaveCurrentFSMState(ctx))
167 return false;
168
169 if (!ctx.Write(m_magazine))
170 {
171 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponDetachingMag.SaveCurrentFSMState: cannot write m_magazine for weapon=" + m_weapon);
172 return false;
173 }
174
176 {
177 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponDetachingMag.SaveCurrentFSMState: cannot write m_st for weapon=" + m_weapon);
178 return false;
179 }
180 return true;
181 }
182
183 override bool LoadCurrentFSMState (ParamsReadContext ctx, int version)
184 {
185 if (!super.LoadCurrentFSMState(ctx, version))
186 return false;
187
188 if (!ctx.Read(m_magazine))
189 {
190 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponDetachingMag.LoadCurrentFSMState: cannot read m_magazine for weapon=" + m_weapon);
191 return false;
192 }
194 {
195 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponDetachingMag.LoadCurrentFSMState: cannot read m_dst for weapon=" + m_weapon);
196 return false;
197 }
198 return true;
199 }
200};
201
void wpnDebugPrint(string s)
Определения Debug.c:9
ref InventoryLocation m_dst
Определения DayZPlayerInventory.c:13
bool OptionalLocationReadFromContext(out InventoryLocation loc, notnull ParamsReadContext ctx)
Определения InventoryLocation.c:662
InventoryLocationType
types of Inventory Location
Определения InventoryLocation.c:4
bool OptionalLocationWriteToContext(InventoryLocation loc, notnull ParamsWriteContext ctx)
Определения InventoryLocation.c:640
enum FSMTransition WeaponTransition
ref WeaponStateBase m_start
Определения WeaponChambering.c:637
class WeaponEndAction extends WeaponStartAction m_action
Super root of all classes in Enforce script.
Определения EnScript.c:11
static proto native bool LocationSyncMoveEntity(notnull InventoryLocation src_loc, notnull InventoryLocation dst_loc)
synchronously removes item from current inventory location and adds it to destination no anims involv...
script counterpart to engine's class Inventory
Определения Inventory.c:79
InventoryLocation.
Определения InventoryLocation.c:29
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
simple class starting animation action specified by m_action and m_actionType
Определения WeaponChambering.c:3
int m_actionType
action to be played
Определения RifleChambering.c:4
void WeaponStateBase(Weapon_Base w=NULL, WeaponStateBase parent=NULL)
internal state id used for load/restore
Определения WeaponStateBase.c:17
ref WeaponDetachingMag_Store m_store
Определения WeaponDetachingMag.c:109
void WeaponDetachingMag(Weapon_Base w=NULL, WeaponStateBase parent=NULL, WeaponActions action=WeaponActions.NONE, int actionType=-1)
Определения WeaponDetachingMag.c:112
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
Magazine m_magazine
Определения WeaponDetachingMag.c:8
override void OnEntry(WeaponEventBase e)
Определения WeaponDetachingMag.c:11
ref WeaponStateBase m_start
source of the cartridge
Определения RifleChambering.c:7
override bool LoadCurrentFSMState(ParamsReadContext ctx, int version)
Определения WeaponDetachingMag.c:77
ref InventoryLocation m_dst
magazine that will be detached
Определения WeaponDetachingMag.c:9
override void OnAbort(WeaponEventBase e)
Определения WeaponDetachingMag.c:24
ref MagazineHide_W4T m_hideM
Определения WeaponDetachingMag.c:110
override void OnExit(WeaponEventBase e)
Определения WeaponDetachingMag.c:32
override bool SaveCurrentFSMState(ParamsWriteContext ctx)
Определения WeaponDetachingMag.c:58
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
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
WeaponActions
actions
Определения human.c:816