From 2e808f8fd261aa4d23964fc5bd5858a3804e3f07 Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Sun, 19 Aug 2012 12:36:27 +0000 Subject: [PATCH] Points buttons have description in the levelup screen git-svn-id: http://svn.net-core.org/repos/t-engine4@5517 51575b47-30f0-44d4-a5cc-537603b46e54 --- game/engines/default/engine/ui/Button.lua | 11 ++- game/engines/default/engine/ui/Dialog.lua | 8 +-- .../default/engine/ui/TextzoneList.lua | 26 +++---- .../tome/data/talents/psionic/voracity.lua | 2 +- game/modules/tome/dialogs/LevelupDialog.lua | 67 +++++++++++++++++-- 5 files changed, 90 insertions(+), 24 deletions(-) diff --git a/game/engines/default/engine/ui/Button.lua b/game/engines/default/engine/ui/Button.lua index 372e6b3cde..3f2984521a 100644 --- a/game/engines/default/engine/ui/Button.lua +++ b/game/engines/default/engine/ui/Button.lua @@ -32,9 +32,11 @@ frame_oy2 = 5 function _M:init(t) self.text = assert(t.text, "no button text") self.fct = assert(t.fct, "no button fct") + self.on_select = t.on_select self.force_w = t.width if t.can_focus ~= nil then self.can_focus = t.can_focus end - + if t.can_focus_mouse ~= nil then self.can_focus_mouse = t.can_focus_mouse end + Base.init(self, t) end @@ -54,7 +56,10 @@ function _M:generate() self.font:setStyle("normal") -- Add UI controls - self.mouse:registerZone(0, 0, self.w+6, self.h+6, function(button, x, y, xrel, yrel, bx, by, event) if button == "left" and event == "button" then self:sound("button") self.fct() end end) + self.mouse:registerZone(0, 0, self.w+6, self.h+6, function(button, x, y, xrel, yrel, bx, by, event) + if self.on_select then self.on_select() end + if button == "left" and event == "button" then self:sound("button") self.fct() end + end) self.key:addBind("ACCEPT", function() self:sound("button") self.fct() end) self.rw, self.rh = w, h @@ -67,6 +72,8 @@ function _M:generate() end function _M:display(x, y, nb_keyframes, ox, oy) + self.last_display_x = ox + self.last_display_y = oy x = x + 3 y = y + 3 ox = ox + 3 diff --git a/game/engines/default/engine/ui/Dialog.lua b/game/engines/default/engine/ui/Dialog.lua index a1a0c231cb..c73b775e3d 100644 --- a/game/engines/default/engine/ui/Dialog.lua +++ b/game/engines/default/engine/ui/Dialog.lua @@ -439,7 +439,7 @@ function _M:setupUI(resizex, resizey, on_resize, addmw, addmh) self.setuped = true end -function _M:setFocus(id) +function _M:setFocus(id, how) if type(id) == "table" then for i = 1, #self.uis do if self.uis[i].ui == id then id = i break end @@ -449,7 +449,7 @@ function _M:setFocus(id) local ui = self.uis[id] if self.focus_ui == ui then return end - if self.focus_ui and self.focus_ui.ui.can_focus then self.focus_ui.ui:setFocus(false) end + if self.focus_ui and (self.focus_ui.ui.can_focus or (self.focus_ui.ui.can_focus_mouse and how=="mouse")) then self.focus_ui.ui:setFocus(false) end if not ui.ui.can_focus then self:no_focus() return end self.focus_ui = ui self.focus_ui_id = id @@ -511,8 +511,8 @@ function _M:mouseEvent(button, x, y, xrel, yrel, bx, by, event) -- Look for focus for i = 1, #self.uis do local ui = self.uis[i] - if ui.ui.can_focus and bx >= ui.x and bx <= ui.x + ui.ui.w and by >= ui.y and by <= ui.y + ui.ui.h then - self:setFocus(i) + if (ui.ui.can_focus or ui.ui.can_focus_mouse) and bx >= ui.x and bx <= ui.x + ui.ui.w and by >= ui.y and by <= ui.y + ui.ui.h then + self:setFocus(i, "mouse") -- Pass the event ui.ui.mouse:delegate(button, bx, by, xrel, yrel, bx, by, event) diff --git a/game/engines/default/engine/ui/TextzoneList.lua b/game/engines/default/engine/ui/TextzoneList.lua index 1f79aacc80..d468f282cb 100644 --- a/game/engines/default/engine/ui/TextzoneList.lua +++ b/game/engines/default/engine/ui/TextzoneList.lua @@ -35,11 +35,11 @@ function _M:init(t) self.scrollbar = t.scrollbar self.focus_check = t.focus_check self.variable_height = t.variable_height - + self.dest_area = t.dest_area and t.dest_area or { h = self.h } self.max_h = 0 self.scroll_inertia = 0 - + if t.can_focus ~= nil then self.can_focus = t.can_focus end Base.init(self, t) @@ -82,13 +82,13 @@ function _M:generate() self.scroll_drag = false end end - + self.mouse:registerZone(0, 0, self.w, self.h, on_mousewheel) self.key:addBinds{ MOVE_UP = function() if self.scrollbar then self.scroll_inertia = math.min(self.scroll_inertia, 0) - 10 end end, MOVE_DOWN = function() if self.scrollbar then self.scroll_inertia = math.max(self.scroll_inertia, 0) + 10 end end } - + self.key:addCommands{ _HOME = function() if self.scrollbar then self.scrollbar.pos = 0 end end, _END = function() if self.scrollbar then self.scrollbar.pos = self.scrollbar.max end end, @@ -120,9 +120,9 @@ function _M:createItem(item, text) end end end - if gen[i].is_separator then + if gen[i].is_separator then self.max_h = self.max_h + (self.fh - self.sep.h) - else + else self.max_h = self.max_h + gen[i].h end end @@ -140,7 +140,7 @@ function _M:switchItem(item, create_if_needed, force) if (create_if_needed and not self.items[item]) or force then self:createItem(item, create_if_needed) end if not item or not self.items[item] then self.list = nil return false end local d = self.items[item] - + self.max_h = d.max_h if self.scrollbar then self.scrollbar.max = self.max_h - self.h @@ -173,7 +173,7 @@ function _M:display(x, y, nb_keyframes, ox, oy, offset_x, offset_y, local_x, loc offset_y = offset_y and offset_y or (self.scrollbar and self.scrollbar.pos or 0) local_x = local_x and local_x or 0 local_y = local_y and local_y or 0 - + if self.scrollbar then self.scrollbar.pos = util.minBound(self.scrollbar.pos + self.scroll_inertia, 0, self.scrollbar.max) if self.scroll_inertia > 0 then self.scroll_inertia = math.max(self.scroll_inertia - 1, 0) @@ -181,7 +181,7 @@ function _M:display(x, y, nb_keyframes, ox, oy, offset_x, offset_y, local_x, loc end if self.scrollbar.pos == 0 or self.scrollbar.pos == self.scrollbar.max then self.scroll_inertia = 0 end end - + local loffset_y = offset_y - local_y local current_y = 0 local current_x = 0 @@ -192,16 +192,16 @@ function _M:display(x, y, nb_keyframes, ox, oy, offset_x, offset_y, local_x, loc local item = self.list[i] clip_y_start = 0 clip_y_end = 0 - + local item_h = item.is_separator and (self.fh - self.sep.h) or item.h -- if item is within visible area bounds if total_h + item_h > loffset_y and total_h < loffset_y + self.dest_area.h then -- if it started before visible area then compute its top clip - if total_h < loffset_y then - clip_y_start = loffset_y - total_h + if total_h < loffset_y then + clip_y_start = loffset_y - total_h end -- if it ended after visible area then compute its bottom clip - if total_h + item_h > loffset_y + self.dest_area.h then + if total_h + item_h > loffset_y + self.dest_area.h then clip_y_end = total_h + item_h - (loffset_y + self.dest_area.h) end if item.background then diff --git a/game/modules/tome/data/talents/psionic/voracity.lua b/game/modules/tome/data/talents/psionic/voracity.lua index 3080325109..2256c2a1d1 100644 --- a/game/modules/tome/data/talents/psionic/voracity.lua +++ b/game/modules/tome/data/talents/psionic/voracity.lua @@ -171,7 +171,7 @@ newTalent{ local range = self:getTalentRadius(t) local en = t.getLeech(self, t) local dam = damDesc(self, DamageType.LIGHTNING, t.getDam(self, t)) - return ([[You pull electric potential from all targets around you in a radius of %d, gaining %d energy for each one affected and giving them a nasty shock in the process. Deals between %d and %d damage nad has a chance to daze.]]):format(range, en, dam / 3, dam) + return ([[You pull electric potential from all targets around you in a radius of %d, gaining %d energy for each one affected and giving them a nasty shock in the process. Deals between %d and %d damage and has a chance to daze.]]):format(range, en, dam / 3, dam) end, } newTalent{ diff --git a/game/modules/tome/dialogs/LevelupDialog.lua b/game/modules/tome/dialogs/LevelupDialog.lua index a0f56cb7b3..b1255289d7 100644 --- a/game/modules/tome/dialogs/LevelupDialog.lua +++ b/game/modules/tome/dialogs/LevelupDialog.lua @@ -554,6 +554,33 @@ Category points left: #00FF00#%d#LAST# Class talent points left: #00FF00#%d#LAST# Generic talent points left: #00FF00#%d#LAST#]] +local desc_stats = ([[Stat points allow you to increase your core stats. +Each level you gain 3 new stat points to use. + +You may only increase stats to a natural maximum of 60 or lower (relative to your level).]]):toTString() + +local desc_class = ([[Class talent points alow you to learn new class talents or improve them. +Class talents are core to your class and can not be learnt by training. + +Each level you gain 1 new class points to use. +Each five levels you gain one more. +]]):toTString() + +local desc_generic = ([[Generic talent points alow you to learn new generic talents or improve them. +Generic talents comes from your class, your race or various outside training you can get during your adventures. + +Each level you gain 1 new class points to use. +Each five levels you gain one less. +]]):toTString() + +local desc_types = ([[Talent category points allow you to either: +- learn a new talent (class or generic) category +- improve a known talent category efficiency by 0.2 +- learn a new inscription slot (up to a maximum of 5, learning it is automatic when using an inscription) + +You gain a new point at level 10, 20 and 30. +Some races or items may increase them as well.]]):toTString() + function _M:createDisplay() self.c_ctree = TalentTrees.new{ font = core.display.newFont("/data/font/DroidSans.ttf", 14), @@ -619,10 +646,42 @@ function _M:createDisplay() local vsep2 = Separator.new{dir="horizontal", size=self.ih - 20} local hsep = Separator.new{dir="vertical", size=180} - self.b_stat = Button.new{can_focus = false, text="Stats: "..self.actor.unused_stats, fct=function() end} - self.b_class = Button.new{can_focus = false, text="Class points: "..self.actor.unused_talents, fct=function() end} - self.b_generic = Button.new{can_focus = false, text="Generic points: "..self.actor.unused_generics, fct=function() end} - self.b_types = Button.new{can_focus = false, text="Category points: "..self.actor.unused_talents_types, fct=function() end} + self.b_stat = Button.new{can_focus = false, can_focus_mouse=true, text="Stats: "..self.actor.unused_stats, fct=function() end, on_select=function() + local str = desc_stats + if self.no_tooltip then + self.c_desc:erase() + self.c_desc:switchItem(str, str, true) + else + game:tooltipDisplayAtMap(self.b_stat.last_display_x + self.b_stat.w, self.b_stat.last_display_y, str) + end + end} + self.b_class = Button.new{can_focus = false, can_focus_mouse=true, text="Class points: "..self.actor.unused_talents, fct=function() end, on_select=function() + local str = desc_class + if self.no_tooltip then + self.c_desc:erase() + self.c_desc:switchItem(str, str, true) + else + game:tooltipDisplayAtMap(self.b_stat.last_display_x + self.b_stat.w, self.b_stat.last_display_y, str) + end + end} + self.b_generic = Button.new{can_focus = false, can_focus_mouse=true, text="Generic points: "..self.actor.unused_generics, fct=function() end, on_select=function() + local str = desc_generic + if self.no_tooltip then + self.c_desc:erase() + self.c_desc:switchItem(str, str, true) + else + game:tooltipDisplayAtMap(self.b_stat.last_display_x + self.b_stat.w, self.b_stat.last_display_y, str) + end + end} + self.b_types = Button.new{can_focus = false, can_focus_mouse=true, text="Category points: "..self.actor.unused_talents_types, fct=function() end, on_select=function() + local str = desc_types + if self.no_tooltip then + self.c_desc:erase() + self.c_desc:switchItem(str, str, true) + else + game:tooltipDisplayAtMap(self.b_stat.last_display_x + self.b_stat.w, self.b_stat.last_display_y, str) + end + end} local ret = { {left=-10, top=0, ui=self.b_stat}, -- GitLab