local anim8 = require "anim8" local CHARACTER_SIZE = 64 local Character = {} Character.name = "" Character.animationTable = { idle = {}, run = {}, attack = {} -- etc etc } Character.animation = Character.animationTable.idle Character.stats = {} Character.stats.initiative = 0 Character.player = {} --- Обёртка над Character:Create --- @param name string --- @param imagePath string --- @param initiative? integer CreateCharacter = Character.create -- ты клоун же -- какого черта у тебя конструктор объекта принимает ссылку на объект -- -- хз -- ща я в душ -- :clown: --- Создаёт персонажа, которым будет управлять или игрок или компьютер --- @param name string --- @param imagePath string --- @param initiative? integer function Character:create(name, imagePath, initiative) local image = love.graphics.newImage(imagePath) local animationGrid = anim8.newGrid(CHARACTER_SIZE, CHARACTER_SIZE, image:getWidth(), image:getHeight()) return Character { name = name, --- мы должны определиться со спрайтшитами и подобным, всё что здесь написано лишь пример --- --- предполагается, что у всех будет одинаковое кол-во кадров в анимации и их скорость произведения animationTable = { idle = anim8.newAnimation(animationGrid('1-8', 1), 0.2) }, --- чтобы не обновлять все анимации одновременно, храним нужную анимацию здесь --- --- когда нужно сменить анимацию с idle на run например, меняем именно это поле animation = self.animationTable.idle, stats = { initiative = initiative or 10 } } end function Character:update(dt) self.animation:update(dt) end local f = Character.create