2025-06-04 05:02:57 +08:00

45 lines
1.1 KiB
Plaintext

autoImport("LState")
autoImport("LStack")
autoImport("EventDispatcher")
LStateMachine = class('LStateMachine',EventDispatcher)
function LStateMachine:ctor()
self:Reset()
end
function LStateMachine:Reset()
self:SetCurrentState(nil)
self.previousState = nil
self.onStateChange = nil
end
function LStateMachine:SetOnStateChange(func,owner)
self.onStateChange = {call = func,owner=owner}
end
--private 別直接呼叫啊-_-||
function LStateMachine:SetCurrentState(state)
if(state~=self.currentState or (self.currentState and state.class ~= self.currentState.class)) then
self.previousState = self.currentState
if(self.currentState) then
self.currentState:Exit()
end
self.currentState = state
if(self.onStateChange) then
self.onStateChange.func(self.onStateChange.owner,self.previousState,self.currentState)
end
if(self.currentState) then
self.currentState:Enter()
end
elseif(self.currentState)then
self.currentState:Reset()
end
end
function LStateMachine:SwitchState(state)
self:SetCurrentState(state)
end
function LStateMachine:Exit()
self:Reset()
end