DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено

◆ InitStateMachine() [5/5]

override void Rifle_Base::InitStateMachine ( )
inlineprivate

См. определение в файле RifleSingleShot_Base.c строка 71

72 {
73 // setup abilities
74 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED));
75 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED));
76 m_abilities.Insert(new AbilityRecord(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_START));
77 m_abilities.Insert(new AbilityRecord(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_END));
78 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL));
79 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_COCKED));
80
81 // setup state machine
82 // basic weapon states
83 WeaponStableState E = new RSSEmpty(this, NULL, RSSAnimState.DEFAULT);
84 WeaponStableState F = new RSSFireout(this, NULL, RSSAnimState.DEFAULT);
85 WeaponStableState J = new RSSJammed(this, NULL, RSSAnimState.DEFAULT);
86 WeaponStableState L = new RSSLoaded(this, NULL, RSSAnimState.DEFAULT);
87 // unstable (intermediate) states
88 WeaponStateBase Mech_F = new WeaponCharging(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
89 WeaponStateBase Mech_L = new WeaponEjectBullet(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
90
91 WeaponChambering Chamber_E = new WeaponChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED);
92 WeaponChambering Chamber_F = new WeaponChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED);
93 //WeaponStateBase Chamber_L = new RifleReChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED);
94
95 WeaponStateBase Trigger_E = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_COCKED);
96 WeaponStateBase Trigger_L = new WeaponFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL);
97 WeaponStateBase Trigger_F = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_COCKED);
98
99 WeaponStateBase Trigger_LJ = new WeaponFireToJam(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_JAM);
100
101 WeaponStateBase Unjam_J = new WeaponUnjamming(this, NULL, WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_START);
102
103 // events
104 WeaponEventBase __M__ = new WeaponEventMechanism;
105 WeaponEventBase __T__ = new WeaponEventTrigger;
106 WeaponEventBase __TJ_ = new WeaponEventTriggerToJam;
107 WeaponEventBase __L__ = new WeaponEventLoad1Bullet;
108 WeaponEventBase __U__ = new WeaponEventUnjam;
109 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
110 WeaponEventBase _abt_ = new WeaponEventHumanCommandActionAborted;
111 WeaponEventBase _dto_ = new WeaponEventDryFireTimeout;
112
113 m_fsm = new WeaponFSM();
114 // charging
115 m_fsm.AddTransition(new WeaponTransition( E, __M__, Mech_F));
116 m_fsm.AddTransition(new WeaponTransition( F, __M__, Mech_F));
117 m_fsm.AddTransition(new WeaponTransition( Mech_F, _fin_, F, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
118 m_fsm.AddTransition(new WeaponTransition( Mech_F, _fin_, E));
119 m_fsm.AddTransition(new WeaponTransition( Mech_F, _abt_, F, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
120 m_fsm.AddTransition(new WeaponTransition( Mech_F, _abt_, E));
121
122 // eject good cartridge
123 m_fsm.AddTransition(new WeaponTransition( L, __M__, Mech_L));
124 m_fsm.AddTransition(new WeaponTransition( Mech_L, _fin_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
125 m_fsm.AddTransition(new WeaponTransition( Mech_L, _fin_, L));
126 m_fsm.AddTransition(new WeaponTransition( Mech_L, _abt_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
127 m_fsm.AddTransition(new WeaponTransition( Mech_L, _abt_, L));
128
129 // load bullet
130 m_fsm.AddTransition(new WeaponTransition( E, __L__, Chamber_E));
131 m_fsm.AddTransition(new WeaponTransition( Chamber_E, _fin_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
132 m_fsm.AddTransition(new WeaponTransition( Chamber_E, _fin_, L));
133 m_fsm.AddTransition(new WeaponTransition( Chamber_E, _abt_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
134 m_fsm.AddTransition(new WeaponTransition( Chamber_E, _abt_, L));
135
136
137 m_fsm.AddTransition(new WeaponTransition( F, __L__, Chamber_F));
138 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _fin_, F, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
139 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _fin_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
140 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _fin_, L));
141 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _abt_, F, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
142 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _abt_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
143 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _abt_, L));
144
145
146 // fire
147 m_fsm.AddTransition(new WeaponTransition( E, __T__, Trigger_E)); // fire cocked
148 m_fsm.AddTransition(new WeaponTransition( Trigger_E, _fin_, E));
149 m_fsm.AddTransition(new WeaponTransition( Trigger_E, _dto_, E));
150 m_fsm.AddTransition(new WeaponTransition( Trigger_E, _abt_, E));
151
152 m_fsm.AddTransition(new WeaponTransition( F, __T__, Trigger_F)); // fire uncocked
153 m_fsm.AddTransition(new WeaponTransition( Trigger_F, _fin_, F));
154 m_fsm.AddTransition(new WeaponTransition( Trigger_F, _dto_, F));
155 m_fsm.AddTransition(new WeaponTransition( Trigger_F, _abt_, F));
156
157 m_fsm.AddTransition(new WeaponTransition( L, __T__, Trigger_L)); // a) fire if not jammed
158 m_fsm.AddTransition(new WeaponTransition( Trigger_L, _fin_, F));
159 m_fsm.AddTransition(new WeaponTransition( Trigger_L, _abt_, F));
160
161 m_fsm.AddTransition(new WeaponTransition( L, __TJ_, Trigger_LJ)); // a) fire if not jammed
162 m_fsm.AddTransition(new WeaponTransition( Trigger_LJ, _fin_, J));
163 m_fsm.AddTransition(new WeaponTransition( Trigger_LJ, _abt_, J));
164
165 // unjam
166 m_fsm.AddTransition(new WeaponTransition( J, __U__, Unjam_J));
167 m_fsm.AddTransition(new WeaponTransition( Unjam_J, _fin_, J, NULL, new WeaponGuardJammed(this)));
168 m_fsm.AddTransition(new WeaponTransition( Unjam_J, _fin_, E));
169
170 // initial state setup
171 bool empty = true;
172 bool discharged = false; // @TODO:
173 WeaponStableState init_state = E;
174 if (empty)
175 {
176 if (!discharged)
177 init_state = E;
178 }
179 else
180 {
181 init_state = L; // can init state == load/jammed?
182 }
183 SetInitialState(init_state);
184
185 SelectionBulletHide();
186
187 m_fsm.Start();
188 }
RSSAnimState
Определения RifleSingleShot_Base.c:2
enum FSMTransition WeaponTransition
enum FSMTransition WeaponEventBase
@ E
EMPTY.
Определения WeaponStableState.c:19
@ L
LOADED.
Определения WeaponStableState.c:23
@ F
FIRED.
Определения WeaponStableState.c:21
void WeaponStableState(Weapon_Base w=NULL, WeaponStateBase parent=NULL, int anim_state=-1)
Определения WeaponStableState.c:32
WeaponActionChamberingTypes
Определения human.c:876
WeaponActions
actions
Определения human.c:816
WeaponActionUnjammingTypes
Определения human.c:912
WeaponActionFireTypes
Определения human.c:920

Перекрестные ссылки E, F и L.