diff --git a/game/engines/default/engine/class.lua b/game/engines/default/engine/class.lua index 65c0cd01db68940613ac858d56043e247474b519..69c6b2e70839d3b5c85411438d4ccb732846b3ec 100644 --- a/game/engines/default/engine/class.lua +++ b/game/engines/default/engine/class.lua @@ -92,6 +92,8 @@ local skip_key = {init=true, _NAME=true, _M=true, _PACKAGE=true, new=true, _BASE -- @return function(c) function inherit(...) local bases = {...} + local basenames = {} + for _, b in ipairs(bases) do if b._NAME then basenames[b._NAME] = true end end return function(c) c._BASES = bases -- Recursive inheritance caching @@ -172,13 +174,25 @@ function _M:importInterface(base) end function _M:getClassName() - return self.__CLASSNAME + return self.__CLASSNAME or self._NAME end function _M:getClass() return getmetatable(self).__index end +function _M:isClassName(name) + if self.__CLASSNAME == name then return true end + if self._NAME == name then return true end + if self._BASES then + for _, b in ipairs(self._BASES) do + if b._NAME == name then return true end + if b:isClassName(name) then return true end + end + end + return false +end + function _M:runInherited() for _, f in ipairs(run_inherited) do f() diff --git a/game/engines/default/engine/ui/Base.lua b/game/engines/default/engine/ui/Base.lua index b812facfd79ec44d490c994c6d175fcbe9da3c82..e8b11719cc856819cf97a8656c386102965cb48a 100644 --- a/game/engines/default/engine/ui/Base.lua +++ b/game/engines/default/engine/ui/Base.lua @@ -60,6 +60,16 @@ function _M:uiExists(ui) return self.ui_conf[ui] end +function _M:changeDefault(ui) + if not self:uiExists(ui) then return end + self.ui = ui + for name, c in pairs(package.loaded) do + if type(c) == "table" and c.isClassName and c:isClassName(self._NAME) then + c.ui = ui + end + end +end + function _M:inherited(base) if base._NAME == "engine.ui.Base" then self.font = base.font diff --git a/game/engines/default/modules/boot/load.lua b/game/engines/default/modules/boot/load.lua index 9c1a2285b6df4e70a67eea3cbe4d50934195a3c0..ec6eea32a745b7beeae7eedf956d6f725b9eec43 100644 --- a/game/engines/default/modules/boot/load.lua +++ b/game/engines/default/modules/boot/load.lua @@ -45,9 +45,6 @@ UIBase.font_mono_h = UIBase.font_mono:lineSkip()+2 local n = core.noise.new(2) _2DNoise = n:makeTexture2D(64, 64) -if config.settings.tome and config.settings.tome.ui_theme3 and UIBase:uiExists(config.settings.tome.ui_theme3) then - UIBase.ui = config.settings.tome.ui_theme3 -end UIBase:setTextShadow(0.6) -- Usefull keybinds @@ -81,5 +78,8 @@ Birther:loadDefinition("/data/birth/descriptors.lua") core.game.setRealtime(8) class:triggerHook{"Boot:load"} +if config.settings.tome and config.settings.tome.ui_theme3 then + UIBase:changeDefault(config.settings.tome.ui_theme3) +end return {require "mod.class.Game" } diff --git a/game/modules/tome/load.lua b/game/modules/tome/load.lua index 7f5a9751b341fa9e410204e753fa6f0b4355d0e1..c032cf29082e62ec13a03fcd111666ef40d2717d 100644 --- a/game/modules/tome/load.lua +++ b/game/modules/tome/load.lua @@ -44,7 +44,7 @@ Map.faction_danger_check = function(self, e, max) return (not max and e.rank > 3 Level.remove_old_entity_on_duplicate = true -- Dialog UI -UIBase.ui = config.settings.tome.ui_theme3 +UIBase:changeDefault(config.settings.tome.ui_theme3) UIBase:setTextShadow(0.6) -- Dialogs fonts