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 }