47 lines
1.2 KiB
Lua
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 }
|