cambridge/scene/gamemode_config.lua

113 lines
3.6 KiB
Lua
Raw Normal View History

2021-08-21 11:08:03 -05:00
local GamemodeConfigScene = Scene:extend()
GamemodeConfigScene.title = "Gamemode Configuration"
local selected_mode = {}
local mode_config = {}
local new_config = {}
local optioncount = 1
function GamemodeConfigScene:new(gamemode)
selected_mode = gamemode
mode_config = gamemode:provideSettings() or {}
optioncount = #mode_config
self.highlight = 1
for i, j in pairs(mode_config) do
new_config[j[1]] = config.gamemodesettings[selected_mode.hash][j[1]] or 1
end
DiscordRPC:update({
details = "In menus",
state = "Configuring "..selected_mode.name,
})
end
function GamemodeConfigScene:save()
config.gamemodesettings[selected_mode.hash] = new_config
end
function GamemodeConfigScene:render()
love.graphics.setColor(1, 1, 1, 1)
love.graphics.draw(
backgrounds["game_config"],
0, 0, 0,
0.5, 0.5
)
love.graphics.setFont(font_3x5_4)
love.graphics.print(string.upper(selected_mode.name).." SETTINGS", 80, 40)
love.graphics.setFont(font_3x5_2)
if #mode_config == 0 then
love.graphics.print("This mode does not offer any settings.\n"..
"Press Backspace to return to mode select.", 40, 100)
return
end
love.graphics.setColor(1, 1, 1, 0.5)
love.graphics.rectangle("fill", 25, 98 + self.highlight * 20, 170, 22)
for i, option in ipairs(mode_config) do
love.graphics.setColor(1, 1, 1, 1)
love.graphics.printf(option[2], 40, 100 + i * 20, 150, "left")
if #option[3] <= 4 then
for j, setting in ipairs(option[3]) do
love.graphics.setColor(1, 1, 1, new_config[option[1]] == j and 1 or 0.5)
love.graphics.printf(setting, 100 + 110 * j, 100 + i * 20, 100, "center")
end
else
2021-08-21 11:24:52 -05:00
local curr_index = new_config[option[1]]
local prev_index = Mod1(curr_index-1, #option[3])
local next_index = Mod1(curr_index+1, #option[3])
love.graphics.setColor(1, 1, 1, 0.5)
2021-08-21 11:27:33 -05:00
love.graphics.printf("<<< "..option[3][prev_index],
2021-08-21 11:24:52 -05:00
100 + 110 * 1, 100 + i * 20, 100, 'center')
love.graphics.setColor(1, 1, 1, 1)
2021-08-21 11:27:33 -05:00
love.graphics.printf(option[3][curr_index],
2021-08-21 11:24:52 -05:00
100 + 110 * 2.5, 100 + i * 20, 100, 'center')
love.graphics.setColor(1, 1, 1, 0.5)
2021-08-21 11:27:33 -05:00
love.graphics.printf(option[3][next_index].." >>>",
2021-08-21 11:24:52 -05:00
100 + 110 * 4, 100 + i * 20, 100, 'center')
2021-08-21 11:08:03 -05:00
love.graphics.setColor(1, 1, 1, 1)
end
end
end
function GamemodeConfigScene:onInputPress(e)
if e.input == "menu_back" or e.scancode == "delete" or e.scancode == "backspace" then
scene = ModeSelectScene()
elseif e.input == "menu_decide" then
playSE("mode_decide")
self:save()
saveConfig()
scene = ModeSelectScene()
end
if #mode_config == 0 then return end
if e.input == "up" or e.scancode == "up" then
playSE("cursor")
self.highlight = Mod1(self.highlight-1, optioncount)
elseif e.input == "down" or e.scancode == "down" then
playSE("cursor")
self.highlight = Mod1(self.highlight+1, optioncount)
elseif e.input == "left" or e.scancode == "left" then
playSE("cursor_lr")
local option = mode_config[self.highlight]
new_config[option[1]] = Mod1(new_config[option[1]]-1, #option[3])
elseif e.input == "right" or e.scancode == "right" then
playSE("cursor_lr")
local option = mode_config[self.highlight]
new_config[option[1]] = Mod1(new_config[option[1]]+1, #option[3])
end
end
return GamemodeConfigScene