PeaAshMeter bab4b006ca перемещение персонажа по нажатию на кнопку
- я официально в тильте отэкспериментов с ui, щас возьму и напишу лютейшую императивщину
2025-09-04 02:01:25 +03:00

56 lines
1.7 KiB
Lua

local anim8 = require "lib.utils.anim8"
require 'lib.utils.vec3'
--- @alias Id integer
--- @type Id
local characterId = 1
--- @todo Композиция лучше наследования, но не до такой же степени! Надо отрефакторить и избавиться от сотни полей в таблице
--- @class Character
--- @field id Id
--- @field info Info
--- @field graphics Graphics
--- @field logic Logic
--- @field cast boolean @todo тестовое поле, которое отвечает за то, кастуется ли перемещение в данный момент
local character = {}
character.__index = character
--- Создаёт персонажа, которым будет управлять или игрок или компьютер
--- @param name string
--- @param template ClassTemplate
--- @param spriteDir table
--- @param position? Vec3
--- @param size? Vec3
--- @param level? integer
local function spawn(name, template, spriteDir, position, size, level)
local char = {}
char.id = characterId
characterId = characterId + 1
char.logic = (require 'lib.character.logic').new(char.id, position, size)
char.graphics = (require 'lib.character.graphics').new(char.id, spriteDir)
char.info = (require "lib/character/info").new(name, template, level)
char = setmetatable(char, character)
Tree.level.characters[char.id] = char
return char
end
--- @param path Deque
function character:followPath(path)
self.logic:followPath(path)
end
function character:update(dt)
self.logic:update(dt)
self.graphics:update(dt)
end
function character:draw()
self.graphics:draw()
end
return { spawn = spawn }