heroes-of-nerevelon/character.lua
2025-07-31 02:13:30 +03:00

71 lines
2.7 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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