Neckrat af792bd2d5 refactor character & grid again
Co-authored-by: Ivan Yuriev <ivanyr44@gmail.com>
2025-08-09 23:22:34 +03:00

47 lines
1.2 KiB
Lua

local anim8 = require "lib/anim8"
--- Скорость между кадрами в анимации
local ANIMATION_SPEED = 0.1
--- @class Animation
--- @field animationTable table<string, table>
local animation = {}
local function new(id, spriteDir)
local anim = {
animationTable = {}
}
local animationGrid = {}
-- n: name; i: image
for n, i in pairs(spriteDir) do
local aGrid = anim8.newGrid(96, 64, i:getWidth(), i:getHeight())
local tiles = '1-' .. math.ceil(i:getWidth() / 96)
animationGrid[n] = aGrid(tiles, 1)
end
anim.state = "idle"
anim.animationTable.idle = anim8.newAnimation(animationGrid["idle"], ANIMATION_SPEED)
anim.animationTable.run = anim8.newAnimation(animationGrid["run"], ANIMATION_SPEED)
anim.animationTable.attack = anim8.newAnimation(animationGrid["attack"], ANIMATION_SPEED, function()
anim.state = "idle"
end)
anim.animationTable.hurt = anim8.newAnimation(animationGrid["hurt"], ANIMATION_SPEED, function()
anim.state = "idle"
end)
return setmetatable(anim, animation)
end
function animation:getState()
return self.state
end
--- @param state State
function animation:setState(state)
self.state = state
end
return { new = new }