local anim8 = require "lib.utils.anim8" --- Скорость между кадрами в анимации local ANIMATION_SPEED = 0.1 --- @class Animation --- @field animationTable 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 }