From def68197683aa3ef4ba6d567c8bcb0b94e4ba47b Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Sun, 12 Jun 2011 22:18:19 +0000 Subject: [PATCH] Improved keyboard running algorithm git-svn-id: http://svn.net-core.org/repos/t-engine4@3640 51575b47-30f0-44d4-a5cc-537603b46e54 --- .../default/engine/interface/PlayerRun.lua | 46 ++++++++++++++----- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/game/engines/default/engine/interface/PlayerRun.lua b/game/engines/default/engine/interface/PlayerRun.lua index 5ecece6dab..a8b8e84a2b 100644 --- a/game/engines/default/engine/interface/PlayerRun.lua +++ b/game/engines/default/engine/interface/PlayerRun.lua @@ -187,13 +187,27 @@ function _M:runStep() if self.running.block_left then self.running.ignore_left = nil end if self.running.ignore_left then self.running.ignore_left = self.running.ignore_left - 1 - if self.running.ignore_left <= 0 then self.running.ignore_left = nil end + if self.running.ignore_left <= 0 then + self.running.ignore_left = nil + -- We do this check here because it is path/time dependent, not terrain configuration dependent + if dir_is_cardinal and checkDir(self, sides[self.running.dir].soft_left) and checkDir(self, self.running.dir, 2) then + self:runStop("terrain change on the left") + return false + end + end if checkDir(self, sides[self.running.dir].soft_left) and (not checkDir(self, self.running.dir) or not dir_is_cardinal) then self.running.block_left = true end end if self.running.block_right then self.running.ignore_right = nil end if self.running.ignore_right then self.running.ignore_right = self.running.ignore_right - 1 - if self.running.ignore_right <= 0 then self.running.ignore_right = nil end + if self.running.ignore_right <= 0 then + self.running.ignore_right = nil + -- We do this check here because it is path/time dependent, not terrain configuration dependent + if dir_is_cardinal and checkDir(self, sides[self.running.dir].soft_right) and checkDir(self, self.running.dir, 2) then + self:runStop("terrain change on the right") + return false + end + end if checkDir(self, sides[self.running.dir].soft_right) and (not checkDir(self, self.running.dir) or not dir_is_cardinal) then self.running.block_right = true end end @@ -278,18 +292,26 @@ function _M:runCheck() -- Favor cardinal directions if possible, otherwise we may miss something interesting if not dir_is_cardinal then -- Turn soft left - if blocked_soft_right and blocked_hard_left and not blocked_soft_left and checkDir(self, sides[self.running.dir].soft_left, 2) and (not self.running.ignore_left or self.running.ignore_left ~= 2) then - self.running.dir = sides[self.running.dir].soft_left - self.running.block_left = true - self.running.block_right = true - return true + if blocked_soft_right and blocked_hard_left and not blocked_soft_left and (blocked_hard_right or self.running.ignore_right) and (not self.running.ignore_left or self.running.ignore_left ~= 2) then + if checkDir(self, sides[self.running.dir].soft_left, 2) then + self.running.dir = sides[self.running.dir].soft_left + self.running.block_left = true + self.running.block_right = true + return true + else + return false, "terrain changed ahead" + end end -- Turn soft right - if blocked_soft_left and blocked_hard_right and not blocked_soft_right and checkDir(self, sides[self.running.dir].soft_right, 2) and (not self.running.ignore_right or self.running.ignore_right ~= 2) then - self.running.dir = sides[self.running.dir].soft_right - self.running.block_left = true - self.running.block_right = true - return true + if blocked_soft_left and blocked_hard_right and not blocked_soft_right and (blocked_hard_left or self.running.ignore_left) and (not self.running.ignore_right or self.running.ignore_right ~= 2) then + if checkDir(self, sides[self.running.dir].soft_right, 2) then + self.running.dir = sides[self.running.dir].soft_right + self.running.block_left = true + self.running.block_right = true + return true + else + return false, "terrain changed ahead" + end end end if checkDir(self, self.running.dir, 2) then -- GitLab