Skip to content
Snippets Groups Projects
Commit 317544ce authored by dg's avatar dg
Browse files

more progressbar goodness

git-svn-id: http://svn.net-core.org/repos/t-engine4@4122 51575b47-30f0-44d4-a5cc-537603b46e54
parent 4ec178ac
No related branches found
No related tags found
No related merge requests found
......@@ -269,7 +269,8 @@ function _M:saveZone(zone, no_dialog)
core.display.forceRedraw()
local zip = fs.zipOpen(self.save_dir..self:nameSaveZone(zone)..".tmp")
self:saveObject(zone, zip)
local nb = self:saveObject(zone, zip)
zip:add("nb", tostring(nb))
zip:close()
fs.delete(self.save_dir..self:nameSaveZone(zone))
fs.rename(self.save_dir..self:nameSaveZone(zone)..".tmp", self.save_dir..self:nameSaveZone(zone))
......@@ -297,7 +298,8 @@ function _M:saveLevel(level, no_dialog)
core.display.forceRedraw()
local zip = fs.zipOpen(self.save_dir..self:nameSaveLevel(level)..".tmp")
self:saveObject(level, zip)
local nb = self:saveObject(level, zip)
zip:add("nb", tostring(nb))
zip:close()
fs.delete(self.save_dir..self:nameSaveLevel(level))
fs.rename(self.save_dir..self:nameSaveLevel(level)..".tmp", self.save_dir..self:nameSaveLevel(level))
......@@ -325,7 +327,8 @@ function _M:saveEntity(e, no_dialog)
core.display.forceRedraw()
local zip = fs.zipOpen(self.save_dir..self:nameSaveEntity(e)..".tmp")
self:saveObject(e, zip)
local nb = self:saveObject(e, zip)
zip:add("nb", tostring(nb))
zip:close()
fs.delete(self.save_dir..self:nameSaveEntity(e))
fs.rename(self.save_dir..self:nameSaveEntity(e)..".tmp", self.save_dir..self:nameSaveEntity(e))
......@@ -464,7 +467,15 @@ function _M:loadZone(zone)
fs.mount(path, self.load_dir)
local popup = Dialog:simpleWaiter("Loading zone", "Please wait while loading the zone...")
local f = fs.open(self.load_dir.."nb", "r")
local nb = 0
if f then
nb = tonumber(f:read()) or 100
f:close()
end
local popup = Dialog:simpleWaiter("Loading zone", "Please wait while loading the zone...", nil, nil, nb > 0 and nb)
core.wait.enableManualTick(true)
core.display.forceRedraw()
local loadedZone = self:loadReal("main")
......@@ -475,6 +486,7 @@ function _M:loadZone(zone)
o:loaded()
end
core.wait.enableManualTick(false)
popup:done()
fs.umount(path)
......
......@@ -25,11 +25,11 @@ local Base = require "engine.ui.Base"
module(..., package.seeall, class.inherit(Base))
--- Requests a simple waiter dialog
function _M:simpleWaiter(title, text, width, count)
function _M:simpleWaiter(title, text, width, count, max)
width = width or 400
local w, h = self.font:size(text)
local d = new(title, 1, 1)
local wait = require("engine.ui.Waiter").new{size=width}
local wait = require("engine.ui.Waiter").new{size=width, known_max=max}
d:loadUI{
{left = 3, top = 3, ui=require("engine.ui.Textzone").new{width=w+10, height=h+5, text=text}},
{left = 3, bottom = 3, ui=wait},
......
......@@ -25,6 +25,7 @@ module(..., package.seeall, class.inherit(Base))
function _M:init(t)
self.size = assert(t.size, "no waiter size")
self.known_max = t.known_max
Base.init(self, t)
end
......@@ -50,7 +51,10 @@ function _M:getWaitDisplay(d)
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 has_max = self.known_max
if has_max then core.wait.addMaxTicks(has_max) end
local i, max, dir = 0, has_max or 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()}
......@@ -62,21 +66,35 @@ function _M:getWaitDisplay(d)
-- Progressbar
local x
i = i + dir
if dir > 0 and i >= max then dir = -1
elseif dir < 0 and i <= -max then dir = 1
if has_max then
i, max = core.wait.getTicks()
i = util.bound(i, 0, max)
else
i = i + dir
if dir > 0 and i >= max then dir = -1
elseif dir < 0 and i <= -max then dir = 1
end
end
local x = dw * (i / max)
local x2 = x + dw
x = util.bound(x, 0, dw)
x2 = util.bound(x2, 0, dw)
if has_max then x, x2 = 0, x end
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])
if has_max then
self.font:setStyle("bold")
local txt = {core.display.drawStringBlendedNewSurface(self.font, math.min(100, math.floor(core.wait.getTicks() * 100 / max)).."%", 255, 255, 255):glTexture()}
self.font:setStyle("normal")
txt[1]:toScreenFull(dx + (dw - txt[6]) / 2 + 2, dy + (bar[7] - txt[7]) / 2 + 2, txt[6], txt[7], txt[2], txt[3], 0, 0, 0, 0.6)
txt[1]:toScreenFull(dx + (dw - txt[6]) / 2, dy + (bar[7] - txt[7]) / 2, txt[6], txt[7], txt[2], txt[3])
end
end
end
end
......@@ -187,6 +187,7 @@ static int disable(lua_State *L)
static int enable_manual_tick(lua_State *L)
{
if (!waiting) return 0;
manual_ticks_enabled = lua_toboolean(L, 1);
if (!manual_ticks_enabled) lua_sethook(L, hook_wait_display, LUA_MASKCOUNT, wait_hooked);
else lua_sethook(L, NULL, 0, 0);
......@@ -195,6 +196,7 @@ static int enable_manual_tick(lua_State *L)
static int manual_tick(lua_State *L)
{
if (!waiting) return 0;
if (manual_ticks_enabled)
{
waited_count += lua_tonumber(L, 1);
......@@ -205,6 +207,7 @@ static int manual_tick(lua_State *L)
static int add_max_ticks(lua_State *L)
{
if (!waiting) return 0;
waited_count_max += lua_tonumber(L, 1);
return 0;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment