--[[
状态机
602809934@qq.com
Sample:
local MaxFPSTimer = 0.016
local STATE_IDLE = 0
local STATE_WALK = 1
local STATE_RUN = 2
local STATE_IN_COMBAT = 3
local STATE_DYING = 20
...
local Player = player:create()
Player.onEnterIdle = function(currPlr)
currPlr.__isInCombat = false
...
end
Player.onExecuteIde = function(currPlr, TimeDiff)
for k, v in pairs(enemy) do
if (currPlr:MoveInLineOfSight(v) == ENGAGE_COMBAT) then
currPlr:EngageWith(v)
currPlr.sm:setNextState(Player:IsInAttackRange(v) and STATE_IN_COMBAT or STATE_RUN)
currPlr.__isInCombat = true
break
end
end
...
end
Player.onExitIdle = function(currPlr)
if currPlr.__isInCombat then
currPlr:TryShowWeapon()
end
...
end
...
Player:CleanupAndDelete()
self.sm = nil
end
local sm = StateMechine:new()
sm:addState(STATE_IDLE, handler(Player, Player.onEnterIdle, handler(Player.onExecuteIdle,
Lua 实现状态机
最新推荐文章于 2024-06-14 01:35:18 发布