47 lines
1.1 KiB
Lua
47 lines
1.1 KiB
Lua
local anim8 = require "lib.utils.anim8"
|
|
|
|
--- Скорость между кадрами в анимации
|
|
local ANIMATION_SPEED = 0.1
|
|
|
|
LEFT = -1
|
|
RIGHT = 1
|
|
|
|
--- @class Animation
|
|
--- @field animationTable table<string, table>
|
|
--- @field animationGrid table
|
|
--- @field state "idle"|"run"|"hurt"|"attack"
|
|
--- @field side 1|-1
|
|
local animation = {}
|
|
animation.__index = animation
|
|
|
|
local function new(spriteDir)
|
|
local anim = {
|
|
animationTable = {},
|
|
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)
|
|
anim.animationGrid[n] = aGrid(tiles, 1)
|
|
end
|
|
|
|
anim.state = "idle"
|
|
anim.side = RIGHT
|
|
|
|
return setmetatable(anim, animation)
|
|
end
|
|
|
|
function animation:getState()
|
|
return self.state
|
|
end
|
|
|
|
--- @param state CharacterState
|
|
function animation:setState(state, onLoop)
|
|
self.animationTable[state] = anim8.newAnimation(self.animationGrid[state], ANIMATION_SPEED, onLoop)
|
|
self.state = state
|
|
end
|
|
|
|
return { new = new }
|