From f73df8c671961d192716d070117c9eda232c3ed6 Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Tue, 1 May 2012 17:51:18 +0000 Subject: [PATCH] Pausing the level loop for player input correctly pauses & restarts at the right position in the actors list git-svn-id: http://svn.net-core.org/repos/t-engine4@5071 51575b47-30f0-44d4-a5cc-537603b46e54 --- .../default/engine/GameEnergyBased.lua | 23 +++++++++++++++++-- game/modules/tome/class/Game.lua | 8 +++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/game/engines/default/engine/GameEnergyBased.lua b/game/engines/default/engine/GameEnergyBased.lua index 1f748a34b5..5efef4acc2 100644 --- a/game/engines/default/engine/GameEnergyBased.lua +++ b/game/engines/default/engine/GameEnergyBased.lua @@ -97,6 +97,19 @@ end function _M:tickLevel(level) local i, e local arr = level.e_array + + if level.last_iteration then + i = nil + + for ii = 1, #arr do if arr[ii] == level.last_iteration.e then i = ii + 1 break end end + + if not i then i = level.last_iteration.i + 1 end + + if i > #arr then i = 1 end + level.last_iteration = nil +-- print("=====LEVEL", level.level, level.sublevel_id, "resuming tick loop at ", i, arr[i].name) + end + for i = 1, #arr do e = arr[i] if e and e.act and e.energy then @@ -109,7 +122,7 @@ function _M:tickLevel(level) end end --- print("<ENERGY", e.name, e.uid, "::", e.energy.value, self.paused, "::", e.player) +-- print("<ENERGY", e.name, e.uid, "::", e.energy.value, self.paused, "::", e.player) if e.energy.value < self.energy_to_act then e.energy.value = (e.energy.value or 0) + self.energy_per_tick * (e.energy.mod or 1) * (e.global_speed or 1) end @@ -117,7 +130,13 @@ function _M:tickLevel(level) e.energy.used = false e:act(self) end --- print(">ENERGY", e.name, e.uid, "::", e.energy.value, self.paused, "::", e.player) +-- print(">ENERGY", e.name, e.uid, "::", e.energy.value, self.paused, "::", e.player) + + if self.paused then + level.last_iteration = {i=i, e=e} +-- print("====LEVEL", level.level, level.sublevel_id, "pausing tick loop at ", i, e.name) + break + end end end end diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua index 80fb7973af..6d063fb20e 100644 --- a/game/modules/tome/class/Game.lua +++ b/game/modules/tome/class/Game.lua @@ -1447,6 +1447,14 @@ function _M:setupMouse(reset) -- Handle targeting if self:targetMouse(button, mx, my, xrel, yrel, event) then return end + -- Cheat kill + if config.settings.cheat and button == "right" and core.key.modState("ctrl") and core.key.modState("shift") and not xrel and not yrel and event == "button" and self.zone and not self.zone.wilderness then + local tmx, tmy = game.level.map:getMouseTile(mx, my) + local target = game.level.map(tmx, tmy, Map.ACTOR) + target:die(game.player) + return + end + -- Handle Use menu if button == "right" then if event == "motion" then -- GitLab