Skip to content
Snippets Groups Projects
Commit 5128cc86 authored by dg's avatar dg
Browse files

Improved store dialog

git-svn-id: http://svn.net-core.org/repos/t-engine4@1445 51575b47-30f0-44d4-a5cc-537603b46e54
parent 3dd1edde
No related branches found
No related tags found
No related merge requests found
......@@ -35,7 +35,7 @@ function _M:init(title, store_inven, actor_inven, store_filter, actor_filter, ac
self.actor_filter = actor_filter
Dialog.init(self, title or "Store", game.w * 0.8, game.h * 0.8)
self:generateList()
self:maxH()
self.c_desc = TextzoneList.new{width=self.iw, height=self.max_h*self.font_h, no_color_bleed=true}
......@@ -44,14 +44,16 @@ function _M:init(title, store_inven, actor_inven, store_filter, actor_filter, ac
{name="Inventory", width=72, display_prop="name", sort="name"},
{name="Category", width=20, display_prop="cat", sort="cat"},
{name="Price", width=8, display_prop="cost", sort="cost"},
}, list=self.actor_list, fct=function(item, sel) self:use(item) end, select=function(item, sel) self:select(item) end}
}, list={}, fct=function(item, sel) self:use(item) end, select=function(item, sel) self:select(item) end}
self.c_store = ListColumns.new{width=math.floor(self.iw / 2 - 10), height=self.ih - self.max_h*self.font_h - 10, sortable=true, scrollbar=true, columns={
{name="", width={20,"fixed"}, display_prop="char", sort="id"},
{name="Store", width=72, display_prop="name"},
{name="Category", width=20, display_prop="cat"},
{name="Price", width=8, display_prop="cost", sort="cost"},
}, list=self.store_list, fct=function(item) self:use(item) end, select=function(item, sel) self:select(item) end}
}, list={}, fct=function(item) self:use(item) end, select=function(item, sel) self:select(item) end}
self:generateList()
self:loadUI{
{left=0, top=0, ui=self.c_store},
......@@ -93,10 +95,24 @@ function _M:use(item)
if item and item.object then
if self.focus_ui and self.focus_ui.ui == self.c_store then
self.action("buy", item.object, item.item)
self:updateStore()
-- self:updateStore()
else
self.action("sell", item.object, item.item)
self:updateStore()
-- self:updateStore()
end
end
end
function _M:maxH()
self.max_h = 0
for item, o in ipairs(self.store_inven) do
if not self.store_filter or self.store_filter(o) then
self.max_h = math.max(self.max_h, #o:getDesc():splitLines(self.iw - 10, self.font))
end
end
for item, o in ipairs(self.actor_inven) do
if not self.actor_filter or self.actor_filter(o) then
self.max_h = math.max(self.max_h, #o:getDesc():splitLines(self.iw - 10, self.font))
end
end
end
......@@ -106,12 +122,10 @@ function _M:generateList()
local list = {}
list.chars = {}
local i = 1
self.max_h = 0
for item, o in ipairs(self.store_inven) do
if not self.store_filter or self.store_filter(o) then
local char = self:makeKeyChar(i)
list[#list+1] = { id=#list+1, char=char, name=o:getDisplayString()..o:getName(), color=o:getDisplayColor(), object=o, item=item, cat=o.subtype, cost=o.cost, desc=o:getDesc() }
self.max_h = math.max(self.max_h, #o:getDesc():splitLines(self.iw - 10, self.font))
list.chars[char] = #list
i = i + 1
end
......@@ -126,17 +140,12 @@ function _M:generateList()
if not self.actor_filter or self.actor_filter(o) then
local char = self:makeKeyChar(i)
list[#list+1] = { id=#list+1, char=char, name=o:getDisplayString()..o:getName(), color=o:getDisplayColor(), object=o, item=item, cat=o.subtype, cost=o.cost, desc=o:getDesc() }
self.max_h = math.max(self.max_h, #o:getDesc():splitLines(self.iw - 10, self.font))
list.chars[char] = #list
i = i + 1
end
end
self.actor_list = list
if self.c_inven then
self.c_inven.list = self.actor_list
self.c_store.list = self.store_list
self.c_inven:generate()
self.c_store:generate()
end
self.c_inven:setList(self.actor_list)
self.c_store:setList(self.store_list)
end
......@@ -60,6 +60,52 @@ function _M:init(t)
Base.init(self, t)
end
local ls, ls_w, ls_h = _M:getImage("ui/selection-left-sel.png")
local ms, ms_w, ms_h = _M:getImage("ui/selection-middle-sel.png")
local rs, rs_w, rs_h = _M:getImage("ui/selection-right-sel.png")
local l, l_w, l_h = _M:getImage("ui/selection-left.png")
local m, m_w, m_h = _M:getImage("ui/selection-middle.png")
local r, r_w, r_h = _M:getImage("ui/selection-right.png")
local cls, cls_w, cls_h = _M:getImage("ui/selection-left-column-sel.png")
local cms, cms_w, cms_h = _M:getImage("ui/selection-middle-column-sel.png")
local crs, crs_w, crs_h = _M:getImage("ui/selection-right-column-sel.png")
local cl, cl_w, cl_h = _M:getImage("ui/selection-left-column.png")
local cm, cm_w, cm_h = _M:getImage("ui/selection-middle-column.png")
local cr, cr_w, cr_h = _M:getImage("ui/selection-right-column.png")
function _M:drawItem(item)
for j, col in ipairs(self.columns) do
local fw, fh = col.fw, self.fh
local text = tostring(util.getval(item[col.display_prop or col.sort], item))
local color = item.color or {255,255,255}
local ss = core.display.newSurface(fw, fh)
local sus = core.display.newSurface(fw, fh)
local s = core.display.newSurface(fw, fh)
ss:merge(ls, 0, 0)
for i = ls_w, fw - rs_w do ss:merge(ms, i, 0) end
ss:merge(rs, fw - rs_w, 0)
ss:drawColorStringBlended(self.font, text, ls_w, (fh - self.font_h) / 2, color[1], color[2], color[3], nil, fw - ls_w - rs_w)
s:erase(0, 0, 0)
s:drawColorStringBlended(self.font, text, ls_w, (fh - self.font_h) / 2, color[1], color[2], color[3], nil, fw - ls_w - rs_w)
sus:merge(l, 0, 0)
for i = l_w, fw - r_w do sus:merge(m, i, 0) end
sus:merge(r, fw - r_w, 0)
sus:drawColorStringBlended(self.font, text, ls_w, (fh - self.font_h) / 2, color[1], color[2], color[3], nil, fw - ls_w - rs_w)
item._tex = item._tex or {}
item._stex = item._stex or {}
item._sustex = item._sustex or {}
item._tex[j] = {s:glTexture()}
item._stex[j] = {ss:glTexture()}
item._sustex[j] = {sus:glTexture()}
end
end
function _M:generate()
self.mouse:reset()
self.key:reset()
......@@ -69,21 +115,6 @@ function _M:generate()
self.max = #self.list
self:selectColumn(1, true)
local ls, ls_w, ls_h = self:getImage("ui/selection-left-sel.png")
local ms, ms_w, ms_h = self:getImage("ui/selection-middle-sel.png")
local rs, rs_w, rs_h = self:getImage("ui/selection-right-sel.png")
local l, l_w, l_h = self:getImage("ui/selection-left.png")
local m, m_w, m_h = self:getImage("ui/selection-middle.png")
local r, r_w, r_h = self:getImage("ui/selection-right.png")
local cls, cls_w, cls_h = self:getImage("ui/selection-left-column-sel.png")
local cms, cms_w, cms_h = self:getImage("ui/selection-middle-column-sel.png")
local crs, crs_w, crs_h = self:getImage("ui/selection-right-column-sel.png")
local cl, cl_w, cl_h = self:getImage("ui/selection-left-column.png")
local cm, cm_w, cm_h = self:getImage("ui/selection-middle-column.png")
local cr, cr_w, cr_h = self:getImage("ui/selection-right-column.png")
local fh = ls_h
self.fh = fh
......@@ -127,41 +158,15 @@ function _M:generate()
col._tex, col._tex_w, col._tex_h = s:glTexture()
col._stex = ss:glTexture()
-- Draw the list items
for i, item in ipairs(self.list) do
local text = tostring(util.getval(item[col.display_prop or col.sort], item))
local color = item.color or {255,255,255}
local ss = core.display.newSurface(fw, fh)
local sus = core.display.newSurface(fw, fh)
local s = core.display.newSurface(fw, fh)
ss:merge(ls, 0, 0)
for i = ls_w, fw - rs_w do ss:merge(ms, i, 0) end
ss:merge(rs, fw - rs_w, 0)
ss:drawColorStringBlended(self.font, text, ls_w, (fh - self.font_h) / 2, color[1], color[2], color[3], nil, fw - ls_w - rs_w)
s:erase(0, 0, 0)
s:drawColorStringBlended(self.font, text, ls_w, (fh - self.font_h) / 2, color[1], color[2], color[3], nil, fw - ls_w - rs_w)
sus:merge(l, 0, 0)
for i = l_w, fw - r_w do sus:merge(m, i, 0) end
sus:merge(r, fw - r_w, 0)
sus:drawColorStringBlended(self.font, text, ls_w, (fh - self.font_h) / 2, color[1], color[2], color[3], nil, fw - ls_w - rs_w)
item._tex = item._tex or {}
item._stex = item._stex or {}
item._sustex = item._sustex or {}
item._tex[j] = {s:glTexture()}
item._stex[j] = {ss:glTexture()}
item._sustex[j] = {sus:glTexture()}
end
self.mouse:registerZone(colx, 0, col.width, self.fh, function(button, x, y, xrel, yrel, bx, by, event)
if button == "left" and event == "button" then self:selectColumn(j) end
end)
colx = colx + col.width
end
-- Draw the list items
for i, item in ipairs(self.list) do self:drawItem(item) end
-- Add UI controls
self.mouse:registerZone(0, self.fh, self.w, self.h - (self.hide_columns and 0 or self.fh), function(button, x, y, xrel, yrel, bx, by, event)
if button == "wheelup" and event == "button" then self.scroll = util.bound(self.scroll - 1, 1, self.max - self.max_display + 1)
......@@ -202,6 +207,17 @@ function _M:generate()
self:onSelect()
end
function _M:setList(list)
self.list = list
self.max = #self.list
self.sel = util.bound(self.sel, 1, self.max)
self.scroll = util.bound(self.scroll, 1, self.max)
self.scroll = util.scroll(self.sel, self.scroll, self.max_display)
self:selectColumn(1, true)
for i, item in ipairs(self.list) do self:drawItem(item) end
end
function _M:onSelect()
local item = self.list[self.sel]
if not item then return end
......@@ -238,7 +254,6 @@ end
function _M:display(x, y)
local bx, by = x, y
for j = 1, #self.columns do
local col = self.columns[j]
local y = y
......
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