From 5229779d66c466c55430eb8c1ae2cbe6c0b581be Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Thu, 11 Aug 2011 21:50:08 +0000 Subject: [PATCH] fix git-svn-id: http://svn.net-core.org/repos/t-engine4@4117 51575b47-30f0-44d4-a5cc-537603b46e54 --- game/engines/default/engine/Savefile.lua | 12 ++-- game/engines/default/engine/ui/Waiter.lua | 82 +++++++++++++++++++++++ 2 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 game/engines/default/engine/ui/Waiter.lua diff --git a/game/engines/default/engine/Savefile.lua b/game/engines/default/engine/Savefile.lua index a40bfaaf8f..c03ff60fcf 100644 --- a/game/engines/default/engine/Savefile.lua +++ b/game/engines/default/engine/Savefile.lua @@ -96,19 +96,20 @@ function _M:getFileName(o) end function _M:saveObject(obj, zip) + local processed = 0 self.current_save_zip = zip self.current_save_main = obj self:addToProcess(obj) while #self.process > 0 do local tbl = table.remove(self.process) self.tables[tbl] = self:getFileName(tbl) --- zip:add(self:getFileName(tbl), tbl:save(nil, nil, self)) tbl:save() savefile_pipe.current_nb = savefile_pipe.current_nb + 1 + processed = processed + 1 if self.coroutine then coroutine.yield() end end - return self.tables[obj] + return processed end --- Get a savename for a world @@ -133,7 +134,8 @@ function _M:saveWorld(world, no_dialog) core.display.forceRedraw() local zip = fs.zipOpen(self.save_dir..self:nameSaveWorld(world)..".tmp") - self:saveObject(world, zip) + local nb = self:saveObject(world, zip) + zip:add("nb", tostring(nb)) zip:close() fs.delete(self.save_dir..self:nameSaveWorld(world)) fs.rename(self.save_dir..self:nameSaveWorld(world)..".tmp", self.save_dir..self:nameSaveWorld(world)) @@ -215,7 +217,8 @@ function _M:saveGame(game, no_dialog) core.display.forceRedraw() local zip = fs.zipOpen(self.save_dir..self:nameSaveGame(game)..".tmp") - self:saveObject(game, zip) + local nb = self:saveObject(game, zip) + zip:add("nb", tostring(nb)) zip:close() fs.delete(self.save_dir..self:nameSaveGame(game)) fs.rename(self.save_dir..self:nameSaveGame(game)..".tmp", self.save_dir..self:nameSaveGame(game)) @@ -360,6 +363,7 @@ function _M:loadReal(load) -- Resolve self referencing tables now resolveSelf(o, o, true) +-- core.wait.manualTick() self.loaded[load] = o return o end diff --git a/game/engines/default/engine/ui/Waiter.lua b/game/engines/default/engine/ui/Waiter.lua new file mode 100644 index 0000000000..376cb871dd --- /dev/null +++ b/game/engines/default/engine/ui/Waiter.lua @@ -0,0 +1,82 @@ +-- TE4 - T-Engine 4 +-- Copyright (C) 2009, 2010, 2011 Nicolas Casalini +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. +-- +-- Nicolas Casalini "DarkGod" +-- darkgod@te4.org + +require "engine.class" +local Base = require "engine.ui.Base" + +--- A generic waiter bar +module(..., package.seeall, class.inherit(Base)) + +function _M:init(t) + self.size = assert(t.size, "no waiter size") + + Base.init(self, t) +end + +function _M:generate() + local left = core.display.loadImage("/data/gfx/waiter/left_basic.png") + local right = core.display.loadImage("/data/gfx/waiter/right_basic.png") + local lw, lh = left:getSize() + local rw, rh = right:getSize() + self.w, self.h = self.size + lw + lw, lh + self.dx = lw +end + +function _M:display(x, y) +end + +function _M:getWaitDisplay(d) + d.__showup = false + d.unload_wait = rawget(d, "unload") + d.unload = function(self) core.wait.disable() if self.unload_wait then self:unload_wait() end end + + core.display.forceRedraw() + + return function() + local dx, dy, dw, dh = self.dx + d.ui_by_ui[self].x + d.display_x, d.ui_by_ui[self].y + d.display_y, self.size, self.h + local i, max, dir = 0, 20, 1 + local left = {core.display.loadImage("/data/gfx/waiter/left_basic.png"):glTexture()} + local right = {core.display.loadImage("/data/gfx/waiter/right_basic.png"):glTexture()} + local middle = {core.display.loadImage("/data/gfx/waiter/middle.png"):glTexture()} + local bar = {core.display.loadImage("/data/gfx/waiter/bar.png"):glTexture()} + + return function() + -- Background + core.wait.drawLastFrame() + + -- Progressbar + local x + i = i + dir + if dir > 0 and i >= max then dir = -1 + elseif dir < 0 and i <= -max then dir = 1 + end + + local x = dw * (i / max) + local x2 = x + dw + x = util.bound(x, 0, dw) + x2 = util.bound(x2, 0, dw) + local w, h = x2 - x, dh + + middle[1]:toScreenFull(dx, dy, dw, middle[7], middle[2], middle[3]) + bar[1]:toScreenFull(dx + x, dy, w, bar[7], bar[2], bar[3]) + left[1]:toScreenFull(dx - left[6] + 5, dy + (middle[7] - left[7]) / 2, left[6], left[7], left[2], left[3]) + right[1]:toScreenFull(dx + dw - 5, dy + (middle[7] - right[7]) / 2, right[6], right[7], right[2], right[3]) + end + end +end -- GitLab