local logging = require "modules.logging" local files = require "modules.files" local json = require "modules.json" local defaultSettings = { -- The way its in the JSON Downscroll = false, Keybinds = { "a", "b", "up", "right" }, Offset = 0 } return function() ---@class StateClass local state = {} local options = { "storymode", "freeplay", "options", "credits", } local optionStates = { storymode = "weekstate", freeplay = "freeplaystate", options = "optionsstate", credits = "creditsstate" } local currentOption = 1 local evilCurrentOption = 1 local optionSprites = {} local moving = false function state.load() love.window.setTitle("TaggedEngine: Main Menu") local data = love.filesystem.getSaveDirectory() print(data) local settings = files.read_file(data.."/Settings.json") print(settings) if not settings then os.execute("mkdir "..data) files.write_file(data.."/Settings.json", json.stringify(defaultSettings)) print("Written") else settings = json.parse(settings) --Incase the settings are old for index, setting in next, defaultSettings do if not settings[index] then settings[index] = setting end end files.write_file(data.."/Settings.json", json.stringify(settings)) end if not freaky then freaky = love.audio.newSource("sounds/freakyMenu.ogg", "stream") freaky:setVolume(0.25) freaky:setLooping(true) end freaky:play() if love.graphics.getWidth() ~= 1280 then love.window.setMode(1280, 720) end local bg = Image("images/menuBG.png", 0) bg.ui = false bg.layer = -10 for index, option in next, options do optionSprites[option] = {index = index} optionSprites[option].sprite = Sprite(string.format("sprites/menu/%s.png", option), string.format("sprites/menu/%s.json", option)) optionSprites[option].sprite:PlayAnimation(string.format("%s idle", option), 24, true) optionSprites[option].sprite.layer = 5 if not optionSprites[option].sprite.quads[optionSprites[option].sprite.animation][0] then optionSprites[option].sprite.starterFrame = 1 optionSprites[option].sprite.frame = 1 end end end function state.keypressed(key) if moving then return end if key == "return" then state.changeState(optionStates[options[currentOption]]) elseif key == "down" then currentOption = next(options, currentOption) or 1 elseif key == "up" then currentOption = options[currentOption - 1] and currentOption -1 or #options elseif key == "9" then state.changeState("resultsstate", 1000, 100, { sick = 5, good = 5, bad = 5, shit = 5, miss = 5 }, 25) end end function state.draw() love.graphics.clear({1,1,1}) render.drawSprites() render.drawUI() end function state.update(delta) render.updateSprites(delta) evilCurrentOption = Lerp(evilCurrentOption, currentOption, .05) for option, optionSprite in next, optionSprites do local sprite = optionSprite.sprite sprite.position = Vector2(0, love.graphics.getHeight() / 5 + (optionSprite.index - evilCurrentOption) * 150) if optionSprite.index == currentOption and optionSprite.sprite.animation ~= string.format("%s selected", option) then optionSprites[option].sprite:PlayAnimation(string.format("%s selected", option), 24, true) elseif optionSprite.index ~= currentOption and optionSprite.sprite.animation ~= string.format("%s idle", option) then optionSprites[option].sprite:PlayAnimation(string.format("%s idle", option), 24, true) end end end return state end