DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
RifleReChambering.c
См. документацию.
1class RifleReChambering extends WeaponStateBase
2{
4 int m_actionType;
5 Magazine m_dstMagazine;
6 Magazine m_srcMagazine;
7
9 ref WeaponEjectBullet_Cartridge m_eject;
11 ref WeaponChambering_W4T m_w4t;
12
13 void RifleReChambering (Weapon_Base w = NULL, WeaponStateBase parent = NULL, WeaponActions action = WeaponActions.NONE, int actionType = -1)
14 {
15 m_action = action;
16 m_actionType = actionType;
17
18 // setup nested state machine
19 m_start = new WeaponChambering_Start(m_weapon, this, m_action, m_actionType);
20 m_eject = new WeaponEjectBullet_Cartridge(m_weapon, this);
22 m_w4t = new WeaponChambering_W4T(m_weapon, this);
23 // events
24 WeaponEventAnimBulletEject __be_ = new WeaponEventAnimBulletEject;
25 WeaponEventAnimBulletShow __bs_ = new WeaponEventAnimBulletShow;
26 WeaponEventAnimBulletInChamber __bc_ = new WeaponEventAnimBulletInChamber;
27 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
28
29 m_fsm = new WeaponFSM(this); // @NOTE: set owner of the submachine fsm
30 m_fsm.AddTransition(new WeaponTransition(m_start , __be_, m_eject));
31 m_fsm.AddTransition(new WeaponTransition(m_eject , __bs_, m_chamber));
32 m_fsm.AddTransition(new WeaponTransition(m_chamber, __bc_, m_w4t));
33 m_fsm.AddTransition(new WeaponTransition(m_w4t , _fin_, NULL));
34
35 // Safety exits
36 m_fsm.AddTransition(new WeaponTransition(m_chamber, _fin_, null));
37 m_fsm.AddTransition(new WeaponTransition(m_eject , _fin_, null));
38 m_fsm.AddTransition(new WeaponTransition(m_start , _fin_, null));
39
40 m_fsm.SetInitialState(m_start);
41 }
42
43 override void OnEntry (WeaponEventBase e)
44 {
45 if (e)
46 {
47 if (LogManager.IsWeaponLogEnable()) { wpnDebugPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponRechamber, mag=" + e.m_magazine.ToString()); }
49 m_chamber.m_srcMagazine = m_srcMagazine;
50
51 // prepare magazine for ejected ammo
52 int mi = m_weapon.GetCurrentMuzzle();
53 string magazineTypeName = m_weapon.GetChamberedCartridgeMagazineTypeName(mi);
54 float damage = 0.0;
55 string type;
56 if (m_weapon.GetCartridgeInfo(mi, damage, type))
57 {
58 bool is_single_or_server = !GetGame().IsMultiplayer() || GetGame().IsServer();
59 if (is_single_or_server)
60 {
61 m_dstMagazine = DayZPlayerUtils.SelectStoreCartridge(e.m_player, m_weapon, mi, m_srcMagazine, damage, magazineTypeName);
62 if (!m_dstMagazine)
63 {
64 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponRechamber - error, cannot prepare mag for catridge, magType=" + magazineTypeName);
65 }
66 }
67 }
68 m_eject.m_dstMagazine = m_dstMagazine;
69 }
70 super.OnEntry(e); // @NOTE: super after submachine init (prevent override from submachine start)
71
72 }
73
74 override void OnAbort (WeaponEventBase e)
75 {
76 super.OnAbort(e);
77 m_srcMagazine = NULL;
78 m_dstMagazine = NULL;
79 }
80
81 override void OnExit (WeaponEventBase e)
82 {
83 super.OnExit(e);
84 m_srcMagazine = NULL;
85 m_dstMagazine = NULL;
86 }
87
89 {
90 if (!super.SaveCurrentFSMState(ctx))
91 return false;
92
93 if (!ctx.Write(m_dstMagazine))
94 {
95 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponRechamber.SaveCurrentFSMState: cannot save m_dstMagazine for weapon=" + m_weapon);
96 return false;
97 }
98 if (!ctx.Write(m_srcMagazine))
99 {
100 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponRechamber.SaveCurrentFSMState: cannot save m_srcMagazine for weapon=" + m_weapon);
101 return false;
102 }
103 return true;
104 }
105
106 override bool LoadCurrentFSMState (ParamsReadContext ctx, int version)
107 {
108 if (!super.LoadCurrentFSMState(ctx, version))
109 return false;
110
111 if (!ctx.Read(m_dstMagazine))
112 {
113 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponRechamber.LoadCurrentFSMState: cannot read m_dstMagazine for weapon=" + m_weapon);
114 return false;
115 }
116 if (!ctx.Read(m_srcMagazine))
117 {
118 Error("[wpnfsm] " + Object.GetDebugName(m_weapon) + " WeaponRechamber.LoadCurrentFSMState: cannot read m_srcMagazine for weapon=" + m_weapon);
119 return false;
120 }
121 return true;
122 }
123};
124
void wpnDebugPrint(string s)
Определения Debug.c:9
void DayZPlayerUtils()
cannot be instantiated
Определения DayZPlayerUtils.c:465
enum FSMTransition WeaponTransition
class WeaponEndAction extends WeaponStartAction m_action
proto native bool IsMultiplayer()
proto native bool IsServer()
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
int m_actionType
action to be played
Определения RifleChambering.c:4
ref WeaponChambering_W4T m_w4t
Определения RifleChambering.c:10
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
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)
Определения RifleReChambering.c:43
ref WeaponStateBase m_start
source of the cartridge
Определения RifleChambering.c:7
override bool LoadCurrentFSMState(ParamsReadContext ctx, int version)
Определения RifleReChambering.c:106
ref WeaponEjectCasing m_eject
Определения RifleChambering.c:8
void RifleReChambering(Weapon_Base w=NULL, WeaponStateBase parent=NULL, WeaponActions action=WeaponActions.NONE, int actionType=-1)
Определения RifleReChambering.c:13
override void OnAbort(WeaponEventBase e)
Определения RifleReChambering.c:74
override void OnExit(WeaponEventBase e)
Определения RifleReChambering.c:81
override bool SaveCurrentFSMState(ParamsWriteContext ctx)
Определения RifleReChambering.c:88
represent weapon state base
Определения BulletHide.c:2
Serializer ParamsReadContext
Определения gameplay.c:15
proto native CGame GetGame()
Serializer ParamsWriteContext
Определения gameplay.c:16
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90
WeaponActions
actions
Определения human.c:816