TaggedEngine/states/weekstate.lua
2025-09-09 16:15:38 +07:00

155 lines
4.8 KiB
Lua

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.cameraPosition = 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
curChar = weeks[currentWeek].character
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