diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua index c51778d22fcdc67884109ed8895d05fd89992114..c745523f1bd59805e33f3117a75592954c98d61b 100644 --- a/game/modules/tome/class/Game.lua +++ b/game/modules/tome/class/Game.lua @@ -544,7 +544,14 @@ function _M:setupCommands() end, EXIT = function() - local menu = require("engine.dialogs.GameMenu").new{"resume", "keybinds", "resolution", "save", "quit"} + local menu menu = require("engine.dialogs.GameMenu").new{ + "resume", + "keybinds", + {"Graphic Mode", function() game:unregisterDialog(menu) game:registerDialog(require("mod.dialogs.GraphicMode").new()) end}, + "resolution", + "save", + "quit" + } self:registerDialog(menu) end, diff --git a/game/modules/tome/dialogs/GraphicMode.lua b/game/modules/tome/dialogs/GraphicMode.lua new file mode 100644 index 0000000000000000000000000000000000000000..0780611a6771427d1e8e9c027ca36d47cd1e7d1f --- /dev/null +++ b/game/modules/tome/dialogs/GraphicMode.lua @@ -0,0 +1,55 @@ +require "engine.class" +require "engine.Dialog" + +module(..., package.seeall, class.inherit(engine.Dialog)) + +function _M:init() + self:generateList() + + engine.Dialog.init(self, "Change graphic mode", 300, #self.list * 30 + 20) + + self.sel = 1 + self.scroll = 1 + self.max = math.floor((self.ih - 5) / self.font_h) - 1 + + self:keyCommands({ + __TEXTINPUT = function(c) + if c:find("^[a-z]$") then + self.sel = util.bound(1 + string.byte(c) - string.byte('a'), 1, #self.list) + self:use() + end + end, + },{ + MOVE_UP = function() self.sel = util.boundWrap(self.sel - 1, 1, #self.list) self.scroll = util.scroll(self.sel, self.scroll, self.max) self.changed = true end, + MOVE_DOWN = function() self.sel = util.boundWrap(self.sel + 1, 1, #self.list) self.scroll = util.scroll(self.sel, self.scroll, self.max) self.changed = true end, + ACCEPT = function() self:use() end, + EXIT = function() game:unregisterDialog(self) end, + }) + self:mouseZones{ + { x=2, y=5, w=350, h=self.font_h*self.max, fct=function(button, x, y, xrel, yrel, tx, ty) + self.sel = util.bound(self.scroll + math.floor(ty / self.font_h), 1, #self.list) + if button == "left" then self:use() + elseif button == "right" then + end + end }, + } +end + +function _M:use() + game.gfxmode = self.list[self.sel].mode + game:setupDisplayMode() + game:unregisterDialog(self) +end + +function _M:generateList() + local list = { + {name="32x32 Graphical", mode=1}, + {name="16x16 Graphical", mode=2}, + {name="16x16 ASCII", mode=3}, + } + self.list = list +end + +function _M:drawDialog(s) + self:drawSelectionList(s, 2, 5, self.font_h, self.list, self.sel, "name", self.scroll, self.max) +end