mirror of
https://github.com/SashLilac/cambridge.git
synced 2024-11-22 20:39:02 -06:00
Allow sliders to be controlled with keyboard
Credits to Phoenix Flare
This commit is contained in:
parent
e195ccd721
commit
ba576dfc77
@ -7,14 +7,17 @@ require 'libs.simple-slider'
|
|||||||
|
|
||||||
ConfigScene.options = {
|
ConfigScene.options = {
|
||||||
-- this serves as reference to what the options' values mean i guess?
|
-- this serves as reference to what the options' values mean i guess?
|
||||||
{"manlock", "Manual Locking",{"Per ruleset","Per gamemode","Harddrop", "Softdrop"}},
|
-- Format: {name in config, displayed name, uses slider?, options OR slider name}
|
||||||
{"piece_colour", "Piece Colours", {"Per ruleset","Arika" ,"TTC"}},
|
{"manlock", "Manual Locking", false, {"Per ruleset", "Per gamemode", "Harddrop", "Softdrop"}},
|
||||||
{"world_reverse","A Button Rotation", {"Left" ,"Auto" ,"Right"}},
|
{"piece_colour", "Piece Colours", false, {"Per ruleset", "Arika", "TTC"}},
|
||||||
{"display_gamemode", "Display Gamemode", {"On", "Off"}},
|
{"world_reverse", "A Button Rotation", false, {"Left", "Auto", "Right"}},
|
||||||
{"das_last_key", "DAS Switch", {"Default", "Instant"}},
|
{"display_gamemode", "Display Gamemode", false, {"On", "Off"}},
|
||||||
{"smooth_movement", "Smooth Piece Drop", {"On", "Off"}},
|
{"das_last_key", "DAS Switch", false, {"Default", "Instant"}},
|
||||||
{"synchroes_allowed", "Synchroes", {"Per ruleset", "On", "Off"}},
|
{"smooth_movement", "Smooth Piece Drop", false, {"On", "Off"}},
|
||||||
{"diagonal_input", "Diagonal Input", {"On", "Off"}}
|
{"synchroes_allowed", "Synchroes", false, {"Per ruleset", "On", "Off"}},
|
||||||
|
{"diagonal_input", "Diagonal Input", false, {"On", "Off"}},
|
||||||
|
{"sfx_volume", "SFX", true, "sfxSlider"},
|
||||||
|
{"bgm_volume", "BGM", true, "bgmSlider"},
|
||||||
}
|
}
|
||||||
local optioncount = #ConfigScene.options
|
local optioncount = #ConfigScene.options
|
||||||
|
|
||||||
@ -46,25 +49,33 @@ function ConfigScene:render()
|
|||||||
0.5, 0.5
|
0.5, 0.5
|
||||||
)
|
)
|
||||||
|
|
||||||
love.graphics.setFont(font_3x5_3)
|
|
||||||
love.graphics.print("SFX Volume: " .. math.floor(self.sfxSlider:getValue()) .. "%", 75, 325)
|
|
||||||
love.graphics.print("BGM Volume: " .. math.floor(self.bgmSlider:getValue()) .. "%", 375, 325)
|
|
||||||
|
|
||||||
love.graphics.setFont(font_3x5_4)
|
love.graphics.setFont(font_3x5_4)
|
||||||
love.graphics.print("GAME SETTINGS", 80, 40)
|
love.graphics.print("GAME SETTINGS", 80, 40)
|
||||||
|
|
||||||
|
--Lazy check to see if we're on the SFX or BGM slider. Probably will need to be rewritten if more options get added.
|
||||||
love.graphics.setColor(1, 1, 1, 0.5)
|
love.graphics.setColor(1, 1, 1, 0.5)
|
||||||
|
if not ConfigScene.options[self.highlight][3] then
|
||||||
love.graphics.rectangle("fill", 20, 98 + self.highlight * 20, 170, 22)
|
love.graphics.rectangle("fill", 20, 98 + self.highlight * 20, 170, 22)
|
||||||
|
else
|
||||||
|
love.graphics.rectangle("fill", 65 + (1+self.highlight-#self.options) * 300, 322, 215, 33)
|
||||||
|
end
|
||||||
|
|
||||||
love.graphics.setFont(font_3x5_2)
|
love.graphics.setFont(font_3x5_2)
|
||||||
for i, option in ipairs(ConfigScene.options) do
|
for i, option in ipairs(ConfigScene.options) do
|
||||||
|
if not option[3] then
|
||||||
love.graphics.setColor(1, 1, 1, 1)
|
love.graphics.setColor(1, 1, 1, 1)
|
||||||
love.graphics.printf(option[2], 40, 100 + i * 20, 150, "left")
|
love.graphics.printf(option[2], 40, 100 + i * 20, 150, "left")
|
||||||
for j, setting in ipairs(option[3]) do
|
for j, setting in ipairs(option[4]) do
|
||||||
love.graphics.setColor(1, 1, 1, config.gamesettings[option[1]] == j and 1 or 0.5)
|
love.graphics.setColor(1, 1, 1, config.gamesettings[option[1]] == j and 1 or 0.5)
|
||||||
love.graphics.printf(setting, 100 + 110 * j, 100 + i * 20, 100, "center")
|
love.graphics.printf(setting, 100 + 110 * j, 100 + i * 20, 100, "center")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
love.graphics.setColor(1, 1, 1, 1)
|
||||||
|
love.graphics.setFont(font_3x5_3)
|
||||||
|
love.graphics.print("SFX Volume: " .. math.floor(self.sfxSlider:getValue()) .. "%", 75, 325)
|
||||||
|
love.graphics.print("BGM Volume: " .. math.floor(self.bgmSlider:getValue()) .. "%", 375, 325)
|
||||||
|
|
||||||
love.graphics.setColor(1, 1, 1, 0.75)
|
love.graphics.setColor(1, 1, 1, 0.75)
|
||||||
self.sfxSlider:draw()
|
self.sfxSlider:draw()
|
||||||
@ -83,13 +94,25 @@ function ConfigScene:onInputPress(e)
|
|||||||
playSE("cursor")
|
playSE("cursor")
|
||||||
self.highlight = Mod1(self.highlight+1, optioncount)
|
self.highlight = Mod1(self.highlight+1, optioncount)
|
||||||
elseif e.input == "left" or e.scancode == "left" then
|
elseif e.input == "left" or e.scancode == "left" then
|
||||||
|
if not self.options[self.highlight][3] then
|
||||||
playSE("cursor_lr")
|
playSE("cursor_lr")
|
||||||
local option = ConfigScene.options[self.highlight]
|
local option = ConfigScene.options[self.highlight]
|
||||||
config.gamesettings[option[1]] = Mod1(config.gamesettings[option[1]]-1, #option[3])
|
config.gamesettings[option[1]] = Mod1(config.gamesettings[option[1]]-1, #option[4])
|
||||||
|
else
|
||||||
|
playSE("cursor")
|
||||||
|
sld = self[self.options[self.highlight][4]]
|
||||||
|
sld.value = math.max(sld.min, math.min(sld.max, (sld:getValue() - 3) / (sld.max - sld.min)))
|
||||||
|
end
|
||||||
elseif e.input == "right" or e.scancode == "right" then
|
elseif e.input == "right" or e.scancode == "right" then
|
||||||
|
if not self.options[self.highlight][3] then
|
||||||
playSE("cursor_lr")
|
playSE("cursor_lr")
|
||||||
local option = ConfigScene.options[self.highlight]
|
local option = ConfigScene.options[self.highlight]
|
||||||
config.gamesettings[option[1]] = Mod1(config.gamesettings[option[1]]+1, #option[3])
|
config.gamesettings[option[1]] = Mod1(config.gamesettings[option[1]]+1, #option[4])
|
||||||
|
else
|
||||||
|
playSE("cursor")
|
||||||
|
sld = self[self.options[self.highlight][4]]
|
||||||
|
sld.value = math.max(sld.min, math.min(sld.max, (sld:getValue() + 3) / (sld.max - sld.min)))--math.max(0, (math.floor(sld:getValue())+2)/(sld.max-sld.min))
|
||||||
|
end
|
||||||
elseif e.input == "menu_back" or e.scancode == "delete" or e.scancode == "backspace" then
|
elseif e.input == "menu_back" or e.scancode == "delete" or e.scancode == "backspace" then
|
||||||
loadSave()
|
loadSave()
|
||||||
scene = SettingsScene()
|
scene = SettingsScene()
|
||||||
|
@ -5,11 +5,20 @@ TuningScene.title = "Tuning Settings"
|
|||||||
require 'load.save'
|
require 'load.save'
|
||||||
require 'libs.simple-slider'
|
require 'libs.simple-slider'
|
||||||
|
|
||||||
|
TuningScene.options = {
|
||||||
|
-- Serves as a reference for the options available in the menu. Format: {name in config, name as displayed if applicable, slider name}
|
||||||
|
{"das", "DAS", "dasSlider"},
|
||||||
|
{"arr", "ARR", "arrSlider"},
|
||||||
|
}
|
||||||
|
|
||||||
|
local optioncount = #TuningScene.options
|
||||||
|
|
||||||
function TuningScene:new()
|
function TuningScene:new()
|
||||||
DiscordRPC:update({
|
DiscordRPC:update({
|
||||||
details = "In menus",
|
details = "In menus",
|
||||||
state = "Changing tuning settings",
|
state = "Changing tuning settings",
|
||||||
})
|
})
|
||||||
|
self.highlight = 1
|
||||||
|
|
||||||
self.dasSlider = newSlider(290, 225, 400, config.das, 0, 20, function(v) config.das = math.floor(v) end, {width=20})
|
self.dasSlider = newSlider(290, 225, 400, config.das, 0, 20, function(v) config.das = math.floor(v) end, {width=20})
|
||||||
self.arrSlider = newSlider(290, 325, 400, config.arr, 0, 6, function(v) config.arr = math.floor(v) end, {width=20})
|
self.arrSlider = newSlider(290, 325, 400, config.arr, 0, 6, function(v) config.arr = math.floor(v) end, {width=20})
|
||||||
@ -28,6 +37,11 @@ function TuningScene:render()
|
|||||||
0.5, 0.5
|
0.5, 0.5
|
||||||
)
|
)
|
||||||
|
|
||||||
|
love.graphics.setColor(1, 1, 1, 0.5)
|
||||||
|
love.graphics.rectangle("fill", 75, 73 + self.highlight * 100, 400, 33)
|
||||||
|
|
||||||
|
love.graphics.setColor(1, 1, 1, 1)
|
||||||
|
|
||||||
love.graphics.setFont(font_3x5_4)
|
love.graphics.setFont(font_3x5_4)
|
||||||
love.graphics.print("TUNING SETTINGS", 80, 40)
|
love.graphics.print("TUNING SETTINGS", 80, 40)
|
||||||
|
|
||||||
@ -48,6 +62,20 @@ function TuningScene:onInputPress(e)
|
|||||||
playSE("mode_decide")
|
playSE("mode_decide")
|
||||||
saveConfig()
|
saveConfig()
|
||||||
scene = SettingsScene()
|
scene = SettingsScene()
|
||||||
|
elseif 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")
|
||||||
|
sld = self[self.options[self.highlight][3]]
|
||||||
|
sld.value = math.max(sld.min, math.min(sld.max, (sld:getValue() - 1) / (sld.max - sld.min)))
|
||||||
|
elseif e.input == "right" or e.scancode == "right" then
|
||||||
|
playSE("cursor")
|
||||||
|
sld = self[self.options[self.highlight][3]]
|
||||||
|
sld.value = math.max(sld.min, math.min(sld.max, (sld:getValue() + 1) / (sld.max - sld.min)))
|
||||||
elseif e.input == "menu_back" or e.scancode == "delete" or e.scancode == "backspace" then
|
elseif e.input == "menu_back" or e.scancode == "delete" or e.scancode == "backspace" then
|
||||||
loadSave()
|
loadSave()
|
||||||
scene = SettingsScene()
|
scene = SettingsScene()
|
||||||
|
Loading…
Reference in New Issue
Block a user