64 lines
2.0 KiB
Lua
64 lines
2.0 KiB
Lua
-- 混合轨道行 的 轨道,用于过热动画
|
|
local OVER_HEAT_TRACK = increment(blending_track_top)
|
|
local OVER_HEATING_TRACK = increment(blending_track_top)
|
|
|
|
-- 检查当前是否处于过热状态
|
|
local function isOverHeat(context)
|
|
return context:isOverHeat()
|
|
end
|
|
|
|
-- 过热部分
|
|
-- 过热部分的内容完全参照空挂部分
|
|
local over_heat_states = {
|
|
-- normal 是不过热的正常状态
|
|
normal = {},
|
|
-- over_heat 是过热时的状态
|
|
over_heat = {}
|
|
}
|
|
|
|
-- 更新"不过热"状态
|
|
function over_heat_states.normal.update(this, context)
|
|
-- 如果进入过热状态,则触发 INPUT_OVER_HEAT
|
|
if (isOverHeat(context)) then
|
|
context:trigger(this.INPUT_OVER_HEAT)
|
|
end
|
|
end
|
|
|
|
-- 进入"不过热"状态
|
|
function over_heat_states.normal.entry(this, context)
|
|
-- 直接进入 update 检查是否要切进过热状态
|
|
this.over_heat_states.normal.update(this, context)
|
|
end
|
|
|
|
-- 转出"不过热"状态
|
|
function over_heat_states.normal.transition(this, context, input)
|
|
-- 收到过热信号则进入过热状态
|
|
if (input == this.INPUT_OVER_HEAT) then
|
|
return this.over_heat_states.over_heat
|
|
end
|
|
end
|
|
|
|
-- 进入"过热"状态
|
|
function over_heat_states.over_heat.entry(this, context)
|
|
-- 在混合轨道播放过热动画
|
|
context:runAnimation("over_heat", context:getTrack(BLENDING_TRACK_LINE, OVER_HEAT_TRACK), false, LOOP, 0)
|
|
end
|
|
|
|
-- 更新"过热"状态
|
|
function over_heat_states.over_heat.update(this, context)
|
|
-- 如果热量下降,不再过热,触发 INPUT_OVER_HEAT_NORMAL
|
|
if (not isOverHeat(context)) then
|
|
context:trigger(this.INPUT_OVER_HEAT_NORMAL)
|
|
end
|
|
end
|
|
|
|
-- 转出"过热"状态
|
|
function over_heat_states.over_heat.transition(this, context, input)
|
|
-- 收到"恢复正常"信号
|
|
if (input == this.INPUT_OVER_HEAT_NORMAL) then
|
|
-- 停止过热动画
|
|
context:stopAnimation(context:getTrack(BLENDING_TRACK_LINE, OVER_HEAT_TRACK))
|
|
return this.over_heat_states.normal
|
|
end
|
|
end
|