local anim8 = require "anim8" local CHARACTER_SIZE = 64 --- Для anim8, представляет из себя с какого по какого представлены спрайты для анимации local ANIMATION_SIZE = '1-8' --- Скорость между кадрами в анимации local ANIMATION_SPEED = 0.1 -- Константы ниже представляют из себя номер строки (с единицы), в которой находится та или иная анимация local IDLE_ROW = 1 local RUN_ROW = 2 local ATTACK_ROW = 3 local Character = {} Character.name = "" --- мы должны определиться со спрайтшитами и подобным, всё что здесь написано лишь пример --- --- предполагается, что у всех будет одинаковое кол-во кадров в анимации и их скорость произведения Character.animationTable = { idle = {}, run = {}, attack = {} -- etc etc } --- чтобы не обновлять все анимации одновременно, храним нужную анимацию здесь --- --- когда нужно сменить анимацию с idle на run например, меняем именно это поле Character.animation = Character.animationTable.idle Character.stats = {} Character.stats.initiative = 0 Character.player = {} --- Обёртка над Character:Create 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(ANIMATION_SIZE, IDLE_ROW), ANIMATION_SPEED), run = anim8.newAnimation(animationGrid(ANIMATION_SIZE, RUN_ROW), ANIMATION_SPEED), attack = anim8.newAnimation(animationGrid(ANIMATION_SIZE, ATTACK_ROW), ANIMATION_SPEED) }, animation = self.animationTable.idle, stats = { initiative = initiative or 10 } } end function Character:update(dt) self.animation:update(dt) end local f = Character.create