aboutsummaryrefslogtreecommitdiff
path: root/src/libjin-lua/scripts/ai/state_machine.lua
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-09-13 15:08:43 +0800
committerchai <chaifix@163.com>2019-09-13 15:08:43 +0800
commit20535cb86266d7a4828009f3ddca42e35269b9e2 (patch)
tree796e77e4a34ed52b6c92fb58ec432c69ed4232e1 /src/libjin-lua/scripts/ai/state_machine.lua
parent695eadc9d2a6d2f499b24ee6858325f6e22da077 (diff)
*格式化代码
Diffstat (limited to 'src/libjin-lua/scripts/ai/state_machine.lua')
-rw-r--r--src/libjin-lua/scripts/ai/state_machine.lua142
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