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

◆ InitStateMachine()

override void SingleShotPistol_Base::InitStateMachine ( )
inlineprivate

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

55 {
56 // setup abilities
57 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED));
58 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_OPENED));
59 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED));
60 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL));
61 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_UNCOCKED));
62
63 // setup state machine
64 // basic weapon states
65 WeaponStableState E = new SSPEmpty(this, NULL, SSPAnimState.UNCOCKED);
66 WeaponStableState F = new SSPFireout(this, NULL, SSPAnimState.UNCOCKED);
67 WeaponStableState L = new SSPLoaded(this, NULL, SSPAnimState.COCKED);
68 // unstable (intermediate) states
69 WeaponStateBase Mech_F = new WeaponCharging(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
70 WeaponStateBase Mech_L = new WeaponEjectBullet(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_OPENED);
71
72 WeaponStateBase Chamber_E = new WeaponChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED);
73 WeaponStateBase Chamber_F = new WeaponChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED);
74 //WeaponStateBase Chamber_L = new RifleReChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED);
75
76 WeaponStateBase Trigger_E = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_UNCOCKED);
77 WeaponStateBase Trigger_L = new WeaponFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL);
78 WeaponStateBase Trigger_F = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_UNCOCKED);
79
80
81 // events
82 WeaponEventBase __M__ = new WeaponEventMechanism;
83 WeaponEventBase __T__ = new WeaponEventTrigger;
84 WeaponEventBase __TJ_ = new WeaponEventTriggerToJam;
85 WeaponEventBase __L__ = new WeaponEventLoad1Bullet;
86 WeaponEventBase __U__ = new WeaponEventUnjam;
87 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
88 WeaponEventBase _abt_ = new WeaponEventHumanCommandActionAborted;
89 WeaponEventBase _dto_ = new WeaponEventDryFireTimeout;
90
91 m_fsm = new WeaponFSM();
92 // charging
93 m_fsm.AddTransition(new WeaponTransition( E, __M__, Mech_F));
94 m_fsm.AddTransition(new WeaponTransition( F, __M__, Mech_F));
95 m_fsm.AddTransition(new WeaponTransition( Mech_F, _fin_, F, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
96 m_fsm.AddTransition(new WeaponTransition( Mech_F, _fin_, E));
97 m_fsm.AddTransition(new WeaponTransition( Mech_F, _abt_, F, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
98 m_fsm.AddTransition(new WeaponTransition( Mech_F, _abt_, E));
99
100 // eject good cartridge
101 m_fsm.AddTransition(new WeaponTransition( L, __M__, Mech_L));
102 m_fsm.AddTransition(new WeaponTransition( Mech_L, _fin_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
103 m_fsm.AddTransition(new WeaponTransition( Mech_L, _fin_, L));
104 m_fsm.AddTransition(new WeaponTransition( Mech_L, _abt_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
105 m_fsm.AddTransition(new WeaponTransition( Mech_L, _abt_, L));
106
107 m_fsm.AddTransition(new WeaponTransition( E, __L__, Chamber_F));
108 m_fsm.AddTransition(new WeaponTransition( F, __L__, Chamber_F));
109 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _fin_, F, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
110 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _fin_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
111 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _fin_, L));
112 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _abt_, F, NULL, new WeaponGuardCurrentChamberFiredOut(this)));
113 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _abt_, E, NULL, new WeaponGuardCurrentChamberEmpty(this)));
114 m_fsm.AddTransition(new WeaponTransition( Chamber_F, _abt_, L));
115
116 // fire
117 m_fsm.AddTransition(new WeaponTransition( E, __T__, Trigger_E)); // fire cocked
118 m_fsm.AddTransition(new WeaponTransition( Trigger_E, _fin_, E));
119 m_fsm.AddTransition(new WeaponTransition( Trigger_E, _dto_, E));
120 m_fsm.AddTransition(new WeaponTransition( Trigger_E, _abt_, E));
121
122 m_fsm.AddTransition(new WeaponTransition( F, __T__, Trigger_F)); // fire uncocked
123 m_fsm.AddTransition(new WeaponTransition( Trigger_F, _fin_, F));
124 m_fsm.AddTransition(new WeaponTransition( Trigger_F, _dto_, F));
125 m_fsm.AddTransition(new WeaponTransition( Trigger_F, _abt_, F));
126
127 m_fsm.AddTransition(new WeaponTransition( L, __T__, Trigger_L)); // a) fire if not jammed
128 m_fsm.AddTransition(new WeaponTransition( Trigger_L, _fin_, F));
129 m_fsm.AddTransition(new WeaponTransition( Trigger_L, _abt_, F));
130
131
132 // initial state setup
133 bool empty = true;
134 bool discharged = false; // @TODO:
135 WeaponStableState init_state = E;
136 if (empty)
137 {
138 if (!discharged)
139 init_state = E;
140 }
141 else
142 {
143 init_state = L; // can init state == load/jammed?
144 }
145 SetInitialState(init_state);
146
147 SelectionBulletHide();
148
149 m_fsm.Start();
150 }
SSPAnimState
Определения SingleShotPistol_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
WeaponActionFireTypes
Определения human.c:920

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