DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
WeaponUnjamming.c
См. документацию.
1class WeaponChamberFromAttMag_W4T extends WeaponChamberFromAttMag
2{
3 override bool IsWaitingForActionFinish () { return true; }
4};
5
6class WeaponChamberFromInnerMag_W4T extends WeaponChamberFromInnerMag
7{
8 override bool IsWaitingForActionFinish () { return true; }
9};
10
11class WeaponUnjamming_Start extends WeaponStartAction
12{
13 float m_dtAccumulator;
14 float m_jamTime;
15
16 void WeaponUnjamming_Start (Weapon_Base w = NULL, WeaponStateBase parent = NULL, WeaponActions action = WeaponActions.NONE, int actionType = -1)
17 {
18 m_dtAccumulator = 0.0;
19 m_jamTime = 0.0;
20 }
21
22 override void OnEntry (WeaponEventBase e)
23 {
24 super.OnEntry(e);
25 }
26
27 override void OnUpdate (float dt)
28 {
29 m_dtAccumulator += dt;
30
31 DayZPlayer p;
32 Class.CastTo(p, m_weapon.GetHierarchyParent());
33 if(p)
34 {
35 HumanInputController hic = p.GetInputController();
36 HumanCommandWeapons hcw = p.GetCommandModifier_Weapons();
37
39 {
40 if (LogManager.IsWeaponLogEnable()) { wpnDebugPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " Unjammed!"); }
41 hcw.StartAction(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_END);
42 m_weapon.ProcessWeaponEvent(new WeaponEventUnjammingTimeout(p));
43 return; // unjammed successfuly
44 }
45
46
48 {
49 if (LogManager.IsWeaponLogEnable()) { wpnDebugPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " Unjamming..."); }
50 }
51 #ifndef PLATFORM_CONSOLE
52 #ifndef SERVER_FOR_CONSOLE
53 else
54 {
55 if (LogManager.IsWeaponLogEnable()) { wpnDebugPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " Unjamming failed, weapon still jammed"); }
56 hcw.StartAction(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_INTERRUPT);
57 m_weapon.ProcessWeaponEvent(new WeaponEventUnjammingFailedTimeout(p));
58 }
59 #endif
60 #endif
61 }
62 }
63
64 override void OnExit (WeaponEventBase e)
65 {
66 m_dtAccumulator = 0.0;
67 m_jamTime = 0.0;
68 super.OnExit(e);
69 }
70};
71
73{
74 float m_damage;
75 string m_type;
76
77 override void OnEntry (WeaponEventBase e)
78 {
79 super.OnEntry(e);
80 if (e)
81 {
82 m_type = string.Empty;
83
84 float dmg;
85 string type;
86
87 m_weapon.SetJammed(false);
88
89 int mi = m_weapon.GetCurrentMuzzle();
90
91 if (m_weapon.IsChamberFiredOut(mi))
92 {
93 m_weapon.EjectCasing(mi);
94 m_weapon.EffectBulletHide(mi);
95 m_weapon.SelectionBulletHide();
96 }
97
98 if (!m_weapon.IsChamberEmpty(mi))
99 {
100 DayZPlayer p = e.m_player;
101
102 m_weapon.CreateRound(mi);
104
105 m_weapon.EffectBulletHide(mi);
106 m_weapon.SelectionBulletHide();
107 }
108 }
109 }
110 override void OnExit (WeaponEventBase e)
111 {
112 m_type = string.Empty;
113 super.OnExit(e);
114 }
115
117 {
118 if (!super.SaveCurrentFSMState(ctx))
119 return false;
120
121 if (!ctx.Write(m_damage))
122 {
123 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponUnjamming_Cartridge.SaveCurrentFSMState: cannot write m_damage for weapon=" + m_weapon);
124 return false;
125 }
126 if (!ctx.Write(m_type))
127 {
128 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponUnjamming_Cartridge.SaveCurrentFSMState: cannot write m_type for weapon=" + m_weapon);
129 return false;
130 }
131 return true;
132 }
133
134 override bool LoadCurrentFSMState (ParamsReadContext ctx, int version)
135 {
136 if (!super.LoadCurrentFSMState(ctx, version))
137 return false;
138
139 if (!ctx.Read(m_damage))
140 {
141 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponUnjamming_Cartridge.LoadCurrentFSMState: cannot read m_damage for weapon=" + m_weapon);
142 return false;
143 }
144 if (!ctx.Read(m_type))
145 {
146 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponUnjamming_Cartridge.LoadCurrentFSMState: cannot read m_type for weapon=" + m_weapon);
147 return false;
148 }
149 return true;
150 }
151
152};
153
154class WeaponUnjamming_Cartridge_W4T extends WeaponUnjamming_Cartridge
155{
156 override bool IsWaitingForActionFinish () { return true; }
157};
158
159class WeaponUnjamming_W4T extends WeaponStateBase
160{
161 override bool IsWaitingForActionFinish () { return true; }
162};
163
164
169{
171 int m_actionType;
172 float m_dtAccumulator;
174
175 ref WeaponUnjamming_Start m_start;
176 ref WeaponUnjamming_Cartridge_W4T m_eject;
177 ref WeaponUnjamming_W4T m_w4t;
178 ref WeaponChamberFromAttMag_W4T m_chamber;
179
180 void WeaponUnjamming (Weapon_Base w = NULL, WeaponStateBase parent = NULL, WeaponActions action = WeaponActions.NONE, int actionType = -1)
181 {
182 m_action = action;
183 m_actionType = actionType;
184
185 // setup nested state machine
186 m_start = new WeaponUnjamming_Start(m_weapon, this, m_action, m_actionType);
187 m_eject = new WeaponUnjamming_Cartridge_W4T(m_weapon, this);
188 m_chamber = new WeaponChamberFromAttMag_W4T(m_weapon, this);
189 m_w4t = new WeaponUnjamming_W4T(m_weapon, this);
190
191 // events
192 WeaponEventBase _uto_ = new WeaponEventUnjammingTimeout;
193 WeaponEventBase _fto_ = new WeaponEventUnjammingFailedTimeout;
194 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
195 WeaponEventBase __uj_ = new WeaponEventAnimUnjammed;
196
197 m_fsm = new WeaponFSM(this); // @NOTE: set owner of the submachine fsm
198 // transitions
199 m_fsm.AddTransition(new WeaponTransition( m_start, _uto_, m_eject));
200 m_fsm.AddTransition(new WeaponTransition( m_start, _fto_, m_w4t));
201 m_fsm.AddTransition(new WeaponTransition( m_eject, __uj_, m_chamber, NULL, new WeaponGuardHasAmmo(m_weapon)));
202 m_fsm.AddTransition(new WeaponTransition( m_eject, _fin_, NULL));
203 m_fsm.AddTransition(new WeaponTransition( m_w4t, _fin_, NULL));
204 m_fsm.AddTransition(new WeaponTransition(m_chamber, _fin_, NULL));
205
206 // Safety exits
207 m_fsm.AddTransition(new WeaponTransition(m_start, _fin_, null));
208
209 m_fsm.SetInitialState(m_start);
210 }
211
212 override void OnEntry (WeaponEventBase e)
213 {
214 super.OnEntry(e);
215 if (e)
216 {
217 m_dtAccumulator = 0.0;
218 m_jamTime = 5.0; // @TODO: rand
219
220 m_start.m_dtAccumulator = m_dtAccumulator;
221 m_start.m_jamTime = m_jamTime;
222 }
223 }
224
225 override void OnExit (WeaponEventBase e)
226 {
227 m_dtAccumulator = 0.0;
228 m_jamTime = 0.0;
229 super.OnExit(e);
230 }
231};
232
void wpnDebugPrint(string s)
Определения Debug.c:9
class WeaponGuardIsDestroyed extends WeaponGuardBase m_weapon
Определения Guards.c:604
void WeaponGuardHasAmmo(Weapon_Base w=NULL)
Определения Guards.c:99
enum FSMTransition WeaponTransition
class WeaponEndAction extends WeaponStartAction m_action
class WeaponFireWithEject extends WeaponFire m_dtAccumulator
Super root of all classes in Enforce script.
Определения EnScript.c:11
proto native bool StartAction(WeaponActions pAction, int pActionType)
start reload,mechanism,chambering,unjam ...
Определения human.c:994
proto native bool IsReloadOrMechanismContinuousUse()
R - reloading / bolting - long press (== true for multiple ticks)
Определения human.c:18
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
override bool IsWaitingForActionFinish()
Определения WeaponUnjamming.c:3
override bool IsWaitingForActionFinish()
Определения WeaponUnjamming.c:8
DayZPlayer m_player
Определения Events.c:37
signalize mechanism manipulation
Определения Events.c:35
weapon finite state machine
void WeaponUnjamming_Start(Weapon_Base w=NULL, WeaponStateBase parent=NULL, WeaponActions action=WeaponActions.NONE, int actionType=-1)
Определения WeaponUnjamming.c:16
override void OnEntry(WeaponEventBase e)
Определения WeaponUnjamming.c:22
float m_dtAccumulator
Определения WeaponFire.c:4
float m_jamTime
Определения WeaponUnjamming.c:14
override void OnExit(WeaponEventBase e)
Определения WeaponUnjamming.c:64
override void OnUpdate(float dt)
Определения WeaponUnjamming.c:27
simple class starting animation action specified by m_action and m_actionType
Определения WeaponChambering.c:3
void WeaponUnjamming(Weapon_Base w=NULL, WeaponStateBase parent=NULL, WeaponActions action=WeaponActions.NONE, int actionType=-1)
Определения WeaponUnjamming.c:180
float m_damage
Определения WeaponChambering.c:22
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
ref WeaponFSM m_fsm
hierarchical parent state of this state (or null)
Определения WeaponStateBase.c:14
WeaponActions m_action
Определения RifleChambering.c:3
float m_dtAccumulator
Определения WeaponFireAndChamberNext.c:6
Weapon_Base m_weapon
Определения WeaponStateBase.c:12
ref WeaponChambering_Cartridge m_chamber
Определения RifleChambering.c:9
override bool IsWaitingForActionFinish()
Определения WeaponUnjamming.c:161
string m_type
Определения WeaponChambering.c:23
override void OnEntry(WeaponEventBase e)
Определения WeaponUnjamming.c:77
float m_jamTime
Определения WeaponUnjamming.c:173
ref WeaponStateBase m_start
source of the cartridge
Определения RifleChambering.c:7
override bool LoadCurrentFSMState(ParamsReadContext ctx, int version)
Определения WeaponUnjamming.c:134
ref WeaponEjectCasing m_eject
Определения RifleChambering.c:8
override void OnExit(WeaponEventBase e)
Определения WeaponUnjamming.c:110
override bool SaveCurrentFSMState(ParamsWriteContext ctx)
Определения WeaponUnjamming.c:116
represent weapon state base
Определения BulletHide.c:2
override bool IsWaitingForActionFinish()
Определения WeaponUnjamming.c:156
unjam submachine
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
WeaponActionUnjammingTypes
Определения human.c:912
void ejectBulletAndStoreInMagazine(Weapon_Base weapon, int muzzleIndex, Magazine mag, DayZPlayer p)
Определения weapon_utils.c:58