local Scene = require "core.modules.scenes" local OptionsMenu = Scene:extend() local OptionMenu = require "scenes.options.menu" local Widgets = require "scenes.options.widgets" local gui = require "game.modules.gui" function OptionsMenu:new() OptionsMenu.super.new(self) self.assets:batchImport("scenes.options.assets") self:addMenu("main", true) self:addSubMenu("video", "video") self:addSubMenu("audio", "audio") self:addSubMenu("langs", "langs") self:addSubMenu("inputs", "inputs") Widgets.Resolution(self, "video") Widgets.Switch(self, "video", "fullscreen") Widgets.Switch(self, "video", "borders") Widgets.Switch(self, "video", "vsync") self:addPlayerMenus() self:setLanguageMenu() Widgets.Audio(self, "audio", "sfx") Widgets.Audio(self, "audio", "music") Widgets.Exit(self, "main") self.menusystem:switchMenu("main") self.menusystem:setSoundFromSceneAssets("mBeep") self.keyDetector = {} self.keyDetector.widget = nil self.borderY = 25 self.borders = gui.newBorder(424, 30, 8) self.timer = 0 end function OptionsMenu:update(dt) self.timer = (self.timer + (30 * dt)) % 128 end -- MENU FUNCTION -- Functions that serve the handling of menus function OptionsMenu:addMenu(name, nobackbutton) OptionMenu(self.menusystem, name) end function OptionsMenu:addSubMenu(name, fullname) self:addMenu(name) Widgets.SubMenu(self, "main", name, fullname) Widgets.SubMenu(self, name, "main", "back", 1, "<") end function OptionsMenu:addPlayerMenus() for i,v in ipairs(core.input.data) do local menu = "player" .. i self:addMenu(menu) Widgets.PlayerSubMenu(self, "inputs", i) for k,w in pairs(v.keys) do -- FIXME: make sure that you can use the order you want for the keys list -- instead of a random one Widgets.Key(self, i, k) end Widgets.SubMenu(self, menu, "inputs", "back", 1, "<") end end function OptionsMenu:addScene(submenu, scene, fullname) Widgets.Dummy(self, submenu, fullname) end function OptionsMenu:setLanguageMenu() for i,v in ipairs(core.lang.data.available) do Widgets.Lang(self, "langs", v) end end function OptionsMenu:changeKey(widget) self.keyDetector.isActive = true self.keyDetector.widget = widget end function OptionsMenu:keypressed( key ) if (self.keyDetector.isActive) then self.keyDetector.widget:receiveKey( key ) self.menusystem:activate() self.keyDetector.isActive = false end end function OptionsMenu:draw() local w, h = core.screen:getDimensions() for i=-1, (w/128) do for j=-1,(h/128) do self.assets.images["background"]:draw(i*128 + self.timer, j*128 + self.timer) end end love.graphics.draw(self.borders, 0, self.borderY, 0, 1, -1) love.graphics.draw(self.borders, 424, 240 - self.borderY, 0, -1, 1) end return OptionsMenu