Add units menu + units file

This commit is contained in:
mars 2023-04-20 11:52:35 -04:00
parent 9dc81e02e3
commit 80310a942c
2 changed files with 65 additions and 10 deletions

View File

@ -3,6 +3,7 @@ local Animator = require "animator"
local Atlas = require "atlas"
local Font = require "font"
local MultiMenu = require "multimenu"
local Units = require "units"
local push = require "lib/push"
local gameWidth, gameHeight = 480, 360
@ -49,37 +50,69 @@ function love.load()
local options = {}
for name, state in pairs(states) do
for idx, unit in ipairs(Units) do
local state_menu = {}
for name, state in pairs(unit.states) do
state_menu[#state_menu + 1] = {
text = name,
callback = function() ActiveUnit:setState(name) end
}
end
options[#options + 1] = {
text = name,
callback = function() LeafRanger:setState(name) end,
text = unit.name,
callback = function() StateMenu = MultiMenu(BlockyFont, state_menu) end,
}
end
Menu = MultiMenu(BlockyFont, options)
UnitMenu = MultiMenu(BlockyFont, options)
ActiveUnit = Animator(Units[1].states, "idle")
end
function love.draw()
push:start()
Menu:draw()
BlockyFont:draw("Hello, world!")
LeafRanger:draw(0, 0)
ActiveUnit:draw()
if StateMenu then
StateMenu:draw()
else
UnitMenu:draw()
end
push:finish()
end
function love.update(dt)
LeafRanger:update(dt)
ActiveUnit:update(dt)
end
function love.keypressed(key)
local menu
if StateMenu then
menu = StateMenu
else
menu = UnitMenu
end
local changed = false
if key == "up" then
Menu:up()
menu:up()
changed = true
elseif key == "down" then
Menu:down()
menu:down()
changed = true
elseif key == "space" then
Menu:select()
menu:select()
elseif key == "escape" then
StateMenu = nil
end
if changed and not StateMenu then
ActiveUnit = Animator(Units[UnitMenu.selected].states, "idle")
end
end

22
units.lua Normal file
View File

@ -0,0 +1,22 @@
local Animation = require "animation"
local Atlas = require "atlas"
local function spannedState(atlas, row, len, on_finish, next)
local start = (row - 1) * atlas.w + 1
local animation = Animation:new_spanned(atlas, start, start + len - 1)
return { animation = animation, on_finish = on_finish, next = next }
end
local leafRanger = Atlas(love.graphics.newImage("assets/leaf-ranger.png"), 288, 128)
return {
{
name = "Leaf Ranger",
states = {
idle = spannedState(leafRanger, 1, 12),
run = spannedState(leafRanger, 2, 10),
hurt = spannedState(leafRanger, 16, 6, "goto", "idle"),
death = spannedState(leafRanger, 17, 19, "stop"),
}
}
}