local anim8 = require "lib/anim8" require 'lib/vec3' --- @alias Id integer --- @type Id local characterId = 1 --- @todo Композиция лучше наследования, но не до такой же степени! Надо отрефакторить и избавиться от сотни полей в таблице --- @class Character --- @field id Id --- @field info Info --- @field graphics Graphics --- @field logic Logic 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 target Vec3 function character:runTo(target) self.logic:runTo(target) end function character:update(dt) self.logic:update(dt) self.graphics:update(dt) end function character:draw() self.graphics:draw() end return { spawn = spawn }