-- Striker-12 State Machine (now using 'reload_start') local default = require("tacz_manual_action_state_machine") local STATIC_TRACK_LINE = default.STATIC_TRACK_LINE local MAIN_TRACK = default.MAIN_TRACK local main_track_states = default.main_track_states local idle_state = setmetatable({}, {__index = main_track_states.idle}) function idle_state.transition(this, context, input) if (input == INPUT_RELOAD) then return this.main_track_states.reload end if (input == INPUT_INSPECT) then context:runAnimation("inspect", context:getTrack(STATIC_TRACK_LINE, MAIN_TRACK), false, PLAY_ONCE_STOP, 0.2) return this.main_track_states.inspect end return main_track_states.idle.transition(this, context, input) end local reload_state = { need_ammo = 0, loaded_ammo = 0 } function reload_state.entry(this, context) local track = context:getTrack(STATIC_TRACK_LINE, MAIN_TRACK) context:runAnimation("reload_start", track, false, PLAY_ONCE_HOLD, 0.2) local state = this.main_track_states.reload state.need_ammo = context:getMaxAmmoCount() - context:getAmmoCount() state.loaded_ammo = 0 end function reload_state.update(this, context) local state = this.main_track_states.reload local track = context:getTrack(STATIC_TRACK_LINE, MAIN_TRACK) if (context:isHolding(track)) then if (state.loaded_ammo < state.need_ammo and context:hasAmmoToConsume()) then context:runAnimation("reload_loop", track, false, PLAY_ONCE_HOLD, 0) state.loaded_ammo = state.loaded_ammo + 1 else context:trigger(this.INPUT_RELOAD_RETREAT) end end end function reload_state.transition(this, context, input) if (input == this.INPUT_RELOAD_RETREAT or input == INPUT_CANCEL_RELOAD) then context:runAnimation("reload_end", context:getTrack(STATIC_TRACK_LINE, MAIN_TRACK), false, PLAY_ONCE_STOP, 0.2) return this.main_track_states.idle end return this.main_track_states.idle.transition(this, context, input) end local M = setmetatable({ main_track_states = setmetatable({ idle = idle_state, reload = reload_state, }, {__index = main_track_states}), INPUT_RELOAD_RETREAT = "reload_retreat", }, {__index = default}) function M:initialize(context) default.initialize(self, context) self.main_track_states.reload.need_ammo = 0 self.main_track_states.reload.loaded_ammo = 0 end return M