print("weeks") local weeksMod = require("weeks") print("loaded") local weeks = weeksMod.weeks local weekOrder = weeksMod.order local backWeekOrder = {} local orderIndex = 1 local evilorderIndex = 1 local weekImages = {} local currentWeek = weekOrder[1] local currentDifficultyIndex = 1 local currentDifficulty = weeks[weekOrder[1]].difficulties[1] local selectShader = [[ extern int cur; extern int num; vec4 effect(vec4 color, Image texture, vec2 text_coor, vec2 screen_coor) { vec4 realcolor = Texel(texture, text_coor); if (cur == num) { realcolor.r -= .1; realcolor.g -= .1; realcolor.b -= .1; } return realcolor; } ]] local weekShaders = {} local diffImage return function() local state = {} local function setup() if not freaky:isPlaying() then freaky:play() end local bg = Image("images/menuBG.png", 0) bg.ui = false bg.layer = -10 for index, week in next, weekOrder do backWeekOrder[week] = index end for name, week in next, weeks do weekImages[name] = Image(string.format("images/story/%s.png", week.icon)) weekImages[name].shader = love.graphics.newShader(selectShader) weekImages[name].shader:send("cur", 1) weekImages[name].shader:send("num", backWeekOrder[name]) weekShaders[#weekShaders+1] = weekImages[name].shader weekImages[name].layer = 5 end diffImage = Sprite("images/diff/diffList.png", "images/diff/diffList.json") diffImage.layer = 10 diffImage:PlayAnimation(currentDifficulty, 24, true) diffImage.position = Vector2(1000, 450) local Recta = Rectangle(Vector2(0,0), Vector2(1280, 240), "fill", {0,0,0}) Recta.layer = 15 render.cameraTarget = Vector2(0,0) render.cameraPosition = Vector2(0,0) end function state.update(dt) for index, shader in next, weekShaders do shader:send("cur", orderIndex) end render.updateSprites(dt) evilorderIndex = Lerp(evilorderIndex, orderIndex, .05) for week, weekname in next, weekOrder do local weekImage = weekImages[weekname] -- print(week, weekImage) weekImage.position = Vector2(love.graphics:getWidth() / 2 - weekImage:getWidth() / 2, love.graphics:getHeight() / 1.5 - weekImage:getHeight() / 2 + (week - evilorderIndex) * 100) end end function state.draw() render.drawSprites() render.drawUI() end function state.keypressed(key) if key == "down" then orderIndex, currentWeek = next(weekOrder, orderIndex) print(orderIndex) currentDifficultyIndex = 1 if not orderIndex then orderIndex = 1 currentWeek = weekOrder[1] end currentDifficulty = weeks[currentWeek].difficulties[1] diffImage:PlayAnimation(currentDifficulty, 24, true) for index, shader in next, weekShaders do shader:send("cur", orderIndex) end elseif key == "up" then orderIndex = orderIndex - 1 > 0 and orderIndex - 1 or #weekOrder currentWeek = weekOrder[orderIndex] if not orderIndex then orderIndex = 1 currentWeek = weekOrder[1] end currentDifficultyIndex = 1 currentDifficulty = weeks[currentWeek].difficulties[1] diffImage:PlayAnimation(currentDifficulty, 24, true) for index, shader in next, weekShaders do shader:send("cur", orderIndex) end elseif key == "right" then currentDifficultyIndex, currentDifficulty = next(weeks[currentWeek].difficulties, currentDifficultyIndex) if not currentDifficultyIndex then currentDifficultyIndex = 1 currentDifficulty = weeks[currentWeek].difficulties[1] end diffImage:PlayAnimation(currentDifficulty, 24, true) elseif key == "return" then freaky:stop() gameMode = "storymode" currentSong = 1 songOrder = weeks[currentWeek].songs state.changeState("playstate", songOrder[currentSong], currentDifficulty) elseif key == "escape" then state.changeState("menustate") end end function state.load() love.window.setTitle("TaggedEngine: Week Menu") if love.graphics:getHeight() ~= 720 then love.window.setMode(1280, 720) end setup() end return state end