From 5022e60857b287d619be8676d5cb450d3ebe62af Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Tue, 17 May 2011 20:35:07 +0000 Subject: [PATCH] Improved talents levelup screen git-svn-id: http://svn.net-core.org/repos/t-engine4@3398 51575b47-30f0-44d4-a5cc-537603b46e54 --- game/engines/default/engine/Dialog.lua | 5 +- .../tome/dialogs/LevelupTalentsDialog.lua | 66 ++++++++++--------- 2 files changed, 37 insertions(+), 34 deletions(-) diff --git a/game/engines/default/engine/Dialog.lua b/game/engines/default/engine/Dialog.lua index e49822237c..40ce0f898c 100644 --- a/game/engines/default/engine/Dialog.lua +++ b/game/engines/default/engine/Dialog.lua @@ -51,8 +51,9 @@ function _M:simpleLongPopup(title, text, w, fct, no_leave) local font = core.display.newFont("/data/font/Vera.ttf", 12) local list = text:splitLines(w - 10, font) - local th = font:lineSkip() - local d = new(title, w + 8, th * #list + 35, nil, nil, nil, font) + local fh = font:lineSkip() + local th = font:size(title) + local d = new(title, w + 8, th + fh * #list + 50, nil, nil, nil, font) if no_leave then d:keyCommands{} else diff --git a/game/modules/tome/dialogs/LevelupTalentsDialog.lua b/game/modules/tome/dialogs/LevelupTalentsDialog.lua index 536cb06ce8..db3b41d953 100644 --- a/game/modules/tome/dialogs/LevelupTalentsDialog.lua +++ b/game/modules/tome/dialogs/LevelupTalentsDialog.lua @@ -143,14 +143,17 @@ function _M:generateList() if not tt.hide and not (self.actor.talents_types[tt.type] == nil) then local cat = tt.type:gsub("/.*", "") local ttknown = self.actor:knowTalentType(tt.type) + local isgeneric = self.actor.talents_types_def[tt.type].generic local tshown = (self.actor.__hidden_talent_types[tt.type] == nil and ttknown) or (self.actor.__hidden_talent_types[tt.type] ~= nil and not self.actor.__hidden_talent_types[tt.type]) local node = { - name=function(item) return tstring{{"font", "bold"}, cat:capitalize().." / "..tt.name:capitalize() ..(" (mastery %.02f)"):format(self.actor:getTalentTypeMastery(tt.type)), {"font", "normal"}} end, - rawname=function(item) return cat:capitalize().." / "..tt.name:capitalize() ..(" (mastery %.02f)"):format(self.actor:getTalentTypeMastery(tt.type)) end, + name=function(item) return tstring{{"font", "bold"}, cat:capitalize().." / "..tt.name:capitalize() ..(" (%s)"):format((isgeneric and "generic" or "class")), {"font", "normal"}} end, + rawname=function(item) return cat:capitalize().." / "..tt.name:capitalize() ..(" (%s, mastery %.2f)"):format((isgeneric and "generic" or "class"), self.actor:getTalentTypeMastery(item.type)) end, type=tt.type, - color=function(item) return self.actor:knowTalentType(item.type) and {0,200,0} or {175,175,175} end, + color=function(item) + return ((self.actor:knowTalentType(item.type) ~= self.actor_dup:knowTalentType(item.type)) or ((self.actor.__increased_talent_types[item.type] or 0) ~= (self.actor_dup.__increased_talent_types[item.type] or 0))) and {255, 215, 0} or self.actor:knowTalentType(item.type) and {0,200,0} or {175,175,175} + end, shown = tshown, - status = function(item) return self.actor:knowTalentType(item.type) and tstring{{"color", 0x00, 0xC8, 0x00}, "known"} or tstring{{"color", 0x00, 0xC8, 0x00}, "0/1"} end, + status = function(item) return self.actor:knowTalentType(item.type) and tstring{{"font", "bold"}, {"color", 0x00, 0xFF, 0x00}, ("%.2f"):format(self.actor:getTalentTypeMastery(item.type)), {"font", "normal"}} or tstring{{"color", 0xFF, 0x00, 0x00}, "unknown"} end, nodes = {}, } tree[#tree+1] = node @@ -161,26 +164,20 @@ function _M:generateList() for j, t in ipairs(tt.talents) do if not t.hide or self.actor.__show_special_talents[t.id] then self:computeDeps(t) - - local typename = "class" - if t.generic then typename = "generic" end + local isgeneric = self.actor.talents_types_def[tt.type].generic list[#list+1] = { __id=t.id, - name=t.name.." ("..typename..")", - rawname=t.name.." ("..typename..")", + name=t.name, + rawname=t.name..(isgeneric and " (generic talent)" or " (class talent)"), talent=t.id, _type=tt.type, - color=function(item) return self.actor:knowTalentType(item._type) and {255,255,255} or {175,175,175} end, + color=function(item) return ((self.actor.talents[item.talent] or 0) ~= (self.actor_dup.talents[item.talent] or 0)) and {255, 215, 0} or self.actor:knowTalentType(item._type) and {255,255,255} or {175,175,175} end, } list[#list].status = function(item) local t = self.actor:getTalentFromId(item.talent) local ttknown = self.actor:knowTalentType(item._type) if self.actor:getTalentLevelRaw(t.id) == t.points then - if ttknown then - return tstring{{"color", "LIGHT_GREEN"}, "known"} - else - return tstring{{"color", 0x80, 0x80, 0x80}, "known"} - end + return tstring{{"color", 0x00, 0xFF, 0x00}, self.actor:getTalentLevelRaw(t.id).."/"..t.points} else if not self.actor:canLearnTalent(t) then return tstring{(ttknown and {"color", 0xFF, 0x00, 0x00} or {"color", 0x80, 0x80, 0x80}), self.actor:getTalentLevelRaw(t.id).."/"..t.points} @@ -227,33 +224,33 @@ function _M:onDrawItem(item) if item.type then text:add({"color",0x00,0xFF,0xFF}, "Talent Category", true) text:add({"color",0x00,0xFF,0xFF}, "A talent category allows you to learn talents of this category. You gain a talent category point at level 10, 20 and 30. You may also find trainers or artifacts that allow you to learn more.\nA talent category point can be used either to learn a new category or increase the mastery of a known one.", true, true, {"color", "WHITE"}) - text:add(self.actor:getTalentTypeFrom(item.type).description) - else - local t = self.actor:getTalentFromId(item.talent) - - local what - if t.generic then - what = "generic talent" - text:add({"color",0x00,0xFF,0xFF}, "Generic Talent", true) + + if self.actor.talents_types_def[item.type].generic then + text:add({"color",0x00,0xFF,0xFF}, "Generic talent tree", true) text:add({"color",0x00,0xFF,0xFF}, "A generic talent allows you to perform various utility actions and improve your character. It represents talents anybody can learn (should they find a trainer for it). You gain one point every level (except every 5th level). You may also find trainers or artifacts that allow you to learn more.", true, true, {"color", "WHITE"}) else - what = "class talent" - text:add({"color",0x00,0xFF,0xFF}, "Class talent", true) + text:add({"color",0x00,0xFF,0xFF}, "Class talent tree", true) text:add({"color",0x00,0xFF,0xFF}, "A class talent allows you to perform new combat moves, cast spells, and improve your character. It represents the core function of your class. You gain one point every level and two every 5th level. You may also find trainers or artifacts that allow you to learn more.", true, true, {"color", "WHITE"}) end + + text:add(self.actor:getTalentTypeFrom(item.type).description) + + else + local t = self.actor:getTalentFromId(item.talent) if self.actor:getTalentLevelRaw(t.id) > 0 then local req = self.actor:getTalentReqDesc(item.talent, 0) text:add{"color","WHITE"} - text:add({"font", "bold"}, "Current "..what.." level: "..(self.actor:getTalentLevelRaw(t.id)), {"font", "normal"}) + text:add({"font", "bold"}, "Current talent level: "..(self.actor:getTalentLevelRaw(t.id)), {"font", "normal"}) text:add(true) text:merge(req) text:merge(self.actor:getTalentFullDescription(t)) + text:add(true,true) end if self.actor:getTalentLevelRaw(t.id) < t.points then local req2 = self.actor:getTalentReqDesc(item.talent, 1) - text:add(true, true, {"font", "bold"}, "Next "..what.." level: "..(self.actor:getTalentLevelRaw(t.id)+1), {"font", "normal"}) + text:add({"font", "bold"}, "Next talent level: "..(self.actor:getTalentLevelRaw(t.id)+1), {"font", "normal"}) text:add(true) text:merge(req2) text:merge(self.actor:getTalentFullDescription(t, 1)) @@ -304,11 +301,16 @@ function _M:learn(v) end function _M:checkDeps() + local talents = "" for t_id, _ in pairs(self.talents_changed) do local t = self.actor:getTalentFromId(t_id) - if not self.actor:canLearnTalent(t, 0) and self.actor:knowTalent(t) then return false, t.name end + if not self.actor:canLearnTalent(t, 0) and self.actor:knowTalent(t) then talents = talents.."\n#GOLD##{bold}# - "..t.name.."#{normal}##LAST#" end + end + if talents ~="" then + return false, talents + else + return true end - return true end function _M:learnTalent(t_id, v) @@ -344,7 +346,7 @@ function _M:learnTalent(t_id, v) if ok then self.actor.unused_talents = self.actor.unused_talents + 1 else - self:simplePopup("Impossible", "You cannot unlearn this talent because of talent: "..dep_miss) + self:simpleLongPopup("Impossible", "You cannot unlearn this talent because of talent(s): "..dep_miss, game.w * 0.4) self.actor:learnTalent(t_id) return end @@ -380,7 +382,7 @@ function _M:learnTalent(t_id, v) if ok then self.actor.unused_generics = self.actor.unused_generics + 1 else - self:simplePopup("Impossible", "You can not unlearn this talent because of talent: "..dep_miss) + self:simpleLongPopup("Impossible", "You can not unlearn this talent because of talent(s): "..dep_miss, game.w * 0.4) self.actor:learnTalent(t_id) return end @@ -429,7 +431,7 @@ function _M:learnType(tt, v) if ok then self.actor.unused_talents_types = self.actor.unused_talents_types + 1 else - self:simplePopup("Impossible", "You cannot unlearn this category because of: "..dep_miss) + self:simpleLongPopup("Impossible", "You cannot unlearn this category because of: "..dep_miss, game.w * 0.4) self.actor:learnTalentType(tt) return end -- GitLab