diff options
author | chai <chaifix@163.com> | 2019-09-13 15:08:43 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-09-13 15:08:43 +0800 |
commit | 20535cb86266d7a4828009f3ddca42e35269b9e2 (patch) | |
tree | 796e77e4a34ed52b6c92fb58ec432c69ed4232e1 /src/libjin-lua/scripts/ai/state_machine.lua | |
parent | 695eadc9d2a6d2f499b24ee6858325f6e22da077 (diff) |
*格式化代码
Diffstat (limited to 'src/libjin-lua/scripts/ai/state_machine.lua')
-rw-r--r-- | src/libjin-lua/scripts/ai/state_machine.lua | 142 |
1 files changed, 71 insertions, 71 deletions
diff --git a/src/libjin-lua/scripts/ai/state_machine.lua b/src/libjin-lua/scripts/ai/state_machine.lua index adeceb4..aac6239 100644 --- a/src/libjin-lua/scripts/ai/state_machine.lua +++ b/src/libjin-lua/scripts/ai/state_machine.lua @@ -12,7 +12,7 @@ local ASYNC = "async" local function call_handler(handler, params) if handler then - return handler(unpack(params)) + return handler(unpack(params)) end end @@ -20,56 +20,56 @@ local function create_transition(name) local can, to, from, params local function transition(self, ...) - if self.asyncState == NONE then - can, to = self:can(name) - from = self.current - params = { self, name, from, to, ...} - - if not can then return false end - self.currentTransitioningEvent = name - - local beforeReturn = call_handler(self["onbefore" .. name], params) - local leaveReturn = call_handler(self["onleave" .. from], params) - - if beforeReturn == false or leaveReturn == false then - return false - end - - self.asyncState = name .. "WaitingOnLeave" - - if leaveReturn ~= ASYNC then - transition(self, ...) - end - - return true - elseif self.asyncState == name .. "WaitingOnLeave" then - self.current = to - - local enterReturn = call_handler(self["onenter" .. to] or self["on" .. to], params) - - self.asyncState = name .. "WaitingOnEnter" - - if enterReturn ~= ASYNC then - transition(self, ...) - end - - return true - elseif self.asyncState == name .. "WaitingOnEnter" then - call_handler(self["onafter" .. name] or self["on" .. name], params) - call_handler(self["onstatechange"], params) - self.asyncState = NONE - self.currentTransitioningEvent = nil - return true - else - if string.find(self.asyncState, "WaitingOnLeave") or string.find(self.asyncState, "WaitingOnEnter") then - self.asyncState = NONE - transition(self, ...) - return true - end - end - - self.currentTransitioningEvent = nil - return false + if self.asyncState == NONE then + can, to = self:can(name) + from = self.current + params = { self, name, from, to, ...} + + if not can then return false end + self.currentTransitioningEvent = name + + local beforeReturn = call_handler(self["onbefore" .. name], params) + local leaveReturn = call_handler(self["onleave" .. from], params) + + if beforeReturn == false or leaveReturn == false then + return false + end + + self.asyncState = name .. "WaitingOnLeave" + + if leaveReturn ~= ASYNC then + transition(self, ...) + end + + return true + elseif self.asyncState == name .. "WaitingOnLeave" then + self.current = to + + local enterReturn = call_handler(self["onenter" .. to] or self["on" .. to], params) + + self.asyncState = name .. "WaitingOnEnter" + + if enterReturn ~= ASYNC then + transition(self, ...) + end + + return true + elseif self.asyncState == name .. "WaitingOnEnter" then + call_handler(self["onafter" .. name] or self["on" .. name], params) + call_handler(self["onstatechange"], params) + self.asyncState = NONE + self.currentTransitioningEvent = nil + return true + else + if string.find(self.asyncState, "WaitingOnLeave") or string.find(self.asyncState, "WaitingOnEnter") then + self.asyncState = NONE + transition(self, ...) + return true + end + end + + self.currentTransitioningEvent = nil + return false end return transition @@ -77,11 +77,11 @@ end local function add_to_map(map, event) if type(event.from) == 'string' then - map[event.from] = event.to + map[event.from] = event.to else - for _, from in ipairs(event.from) do - map[from] = event.to - end + for _, from in ipairs(event.from) do + map[from] = event.to + end end end @@ -97,14 +97,14 @@ function machine.create(options) fsm.events = {} for _, event in ipairs(options.events or {}) do - local name = event.name - fsm[name] = fsm[name] or create_transition(name) - fsm.events[name] = fsm.events[name] or { map = {} } - add_to_map(fsm.events[name].map, event) + local name = event.name + fsm[name] = fsm[name] or create_transition(name) + fsm.events[name] = fsm.events[name] or { map = {} } + add_to_map(fsm.events[name].map, event) end for name, callback in pairs(options.callbacks or {}) do - fsm[name] = callback + fsm[name] = callback end return fsm @@ -128,16 +128,16 @@ function machine:todot(filename) local dotfile = io.open(filename,'w') dotfile:write('digraph {\n') local transition = function(event,from,to) - dotfile:write(string.format('%s -> %s [label=%s];\n',from,to,event)) + dotfile:write(string.format('%s -> %s [label=%s];\n',from,to,event)) end for _, event in pairs(self.options.events) do - if type(event.from) == 'table' then - for _, from in ipairs(event.from) do - transition(event.name,from,event.to) - end - else - transition(event.name,event.from,event.to) - end + if type(event.from) == 'table' then + for _, from in ipairs(event.from) do + transition(event.name,from,event.to) + end + else + transition(event.name,event.from,event.to) + end end dotfile:write('}\n') dotfile:close() @@ -145,14 +145,14 @@ end function machine:transition(event) if self.currentTransitioningEvent == event then - return self[self.currentTransitioningEvent](self) + return self[self.currentTransitioningEvent](self) end end function machine:cancelTransition(event) if self.currentTransitioningEvent == event then - self.asyncState = NONE - self.currentTransitioningEvent = nil + self.asyncState = NONE + self.currentTransitioningEvent = nil end end |