45 lines
1.1 KiB
Plaintext
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 |