rafactor character.lua
This commit is contained in:
parent
1be19bfb46
commit
8762ba3d85
101
character.lua
101
character.lua
@ -1,87 +1,26 @@
|
|||||||
local anim8 = require "lib/anim8"
|
local anim8 = require "lib/anim8"
|
||||||
require 'lib/vec3'
|
require 'lib/vec3'
|
||||||
local AssetBundle = require "lib/asset_bundle"
|
|
||||||
|
|
||||||
local CHARACTER_SIZE = 64
|
|
||||||
|
|
||||||
--- Для anim8, представляет из себя с какого по какого представлены спрайты для анимации
|
|
||||||
local ANIMATION_SIZE = '1-6'
|
|
||||||
--- Скорость между кадрами в анимации
|
--- Скорость между кадрами в анимации
|
||||||
local ANIMATION_SPEED = 0.1
|
local ANIMATION_SPEED = 0.1
|
||||||
-- Константы ниже представляют из себя номер строки (с единицы), в которой находится та или иная анимация
|
|
||||||
local IDLE_ROW = 1
|
|
||||||
local RUN_ROW = 2
|
|
||||||
local ATTACK_ROW = 3
|
|
||||||
|
|
||||||
--- @class Character
|
--- @class Character
|
||||||
|
--- @field name string
|
||||||
|
--- @field animationTable table<string, table>
|
||||||
|
--- @field state "idle"|"run"|"attack"|"hurt"
|
||||||
|
--- @field stats table<string, integer>
|
||||||
|
--- @field player table
|
||||||
|
--- @field skills table
|
||||||
|
--- @field class "warrior"|"mage"
|
||||||
|
--- @field position Vec3
|
||||||
local character = {}
|
local character = {}
|
||||||
character.__index = character
|
character.__index = character
|
||||||
character.name = ""
|
|
||||||
|
|
||||||
---------- Animations -----
|
|
||||||
|
|
||||||
--- мы должны определиться со спрайтшитами и подобным, всё что здесь написано лишь пример
|
|
||||||
---
|
|
||||||
--- предполагается, что у всех будет одинаковое кол-во кадров в анимации и их скорость произведения
|
|
||||||
character.animationTable = {
|
|
||||||
idle = {},
|
|
||||||
run = {},
|
|
||||||
attack = {}
|
|
||||||
-- etc etc
|
|
||||||
}
|
|
||||||
--- чтобы не обновлять все анимации одновременно, храним нужную анимацию здесь
|
|
||||||
|
|
||||||
--- меняем вместе с Character.animation
|
|
||||||
character.state = "idle"
|
|
||||||
--- когда нужно сменить анимацию с idle на run например, меняем именно это поле
|
|
||||||
|
|
||||||
character.spriteSheet = {
|
|
||||||
animationSpeed = 0.1,
|
|
||||||
width = 96,
|
|
||||||
height = 64,
|
|
||||||
idle = '1-6',
|
|
||||||
run = '1-8',
|
|
||||||
attack = '1-11',
|
|
||||||
hurt = '1-6'
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
---------- Statistics -----
|
|
||||||
|
|
||||||
character.stats = {}
|
|
||||||
--- TODO: придумать формулу расчёта статов относительно уровня
|
|
||||||
character.stats.level = 1
|
|
||||||
|
|
||||||
character.stats.initiative = 10
|
|
||||||
character.stats.damage = 5
|
|
||||||
character.stats.defence = 0
|
|
||||||
character.stats.hp = 30
|
|
||||||
|
|
||||||
character.player = {}
|
|
||||||
|
|
||||||
--- TODO: мнимая надежда на спеллмейкинг
|
|
||||||
---
|
|
||||||
--- правда я абсолютно хз, как он будет смотреться
|
|
||||||
--- в контексте рогалика, но посмотрим
|
|
||||||
---
|
|
||||||
--- мб это будет метаспеллмейкинг на овощах
|
|
||||||
character.skills = {}
|
|
||||||
|
|
||||||
character.class = ""
|
|
||||||
|
|
||||||
character.position = Vec3({})
|
|
||||||
|
|
||||||
--- Обёртка над Character:Create
|
|
||||||
-- CreateCharacter = Character.create
|
|
||||||
|
|
||||||
--- Создаёт персонажа, которым будет управлять или игрок или компьютер
|
--- Создаёт персонажа, которым будет управлять или игрок или компьютер
|
||||||
--- @param name string
|
--- @param name string
|
||||||
--- @param spriteDir table
|
--- @param spriteDir table
|
||||||
--- @param level? integer
|
--- @param level? integer
|
||||||
local function spawn(name, spriteDir, level) -- aka Character.create(self, name, imagePath, level)
|
local function spawn(name, spriteDir, level)
|
||||||
-- TODO: добавить asset_loader, где все необходимые ассеты будут грузиться в одном месте,
|
|
||||||
-- а здесь мы добавляем ассет на загрузку в очередь
|
|
||||||
-- local image = love.graphics.newImage(imagePath)
|
|
||||||
local animationGrid = {}
|
local animationGrid = {}
|
||||||
-- n: name; i: image
|
-- n: name; i: image
|
||||||
for n, i in pairs(spriteDir) do
|
for n, i in pairs(spriteDir) do
|
||||||
@ -89,12 +28,16 @@ local function spawn(name, spriteDir, level) -- aka Character.create(self, name,
|
|||||||
local tiles = '1-' .. math.ceil(i:getWidth() / 96)
|
local tiles = '1-' .. math.ceil(i:getWidth() / 96)
|
||||||
animationGrid[n] = aGrid(tiles, 1)
|
animationGrid[n] = aGrid(tiles, 1)
|
||||||
end
|
end
|
||||||
--local animationGrid = anim8.newGrid(96, 64, image:getWidth(), image:getHeight())
|
|
||||||
local char = {
|
local char = {
|
||||||
name = name,
|
name = name,
|
||||||
animationTable = {
|
animationTable = {}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char.position = Vec3({})
|
||||||
|
|
||||||
|
char.state = "idle"
|
||||||
|
|
||||||
char.animationTable.idle = anim8.newAnimation(animationGrid["idle"], ANIMATION_SPEED)
|
char.animationTable.idle = anim8.newAnimation(animationGrid["idle"], ANIMATION_SPEED)
|
||||||
char.animationTable.run = anim8.newAnimation(animationGrid["run"], ANIMATION_SPEED)
|
char.animationTable.run = anim8.newAnimation(animationGrid["run"], ANIMATION_SPEED)
|
||||||
char.animationTable.attack = anim8.newAnimation(animationGrid["attack"], ANIMATION_SPEED, function()
|
char.animationTable.attack = anim8.newAnimation(animationGrid["attack"], ANIMATION_SPEED, function()
|
||||||
@ -103,6 +46,18 @@ local function spawn(name, spriteDir, level) -- aka Character.create(self, name,
|
|||||||
char.animationTable.hurt = anim8.newAnimation(animationGrid["hurt"], ANIMATION_SPEED, function()
|
char.animationTable.hurt = anim8.newAnimation(animationGrid["hurt"], ANIMATION_SPEED, function()
|
||||||
char.state = "idle"
|
char.state = "idle"
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
char.stats = {}
|
||||||
|
--- @todo придумать формулу расчёта статов относительно уровня
|
||||||
|
char.stats.level = 1
|
||||||
|
|
||||||
|
char.stats.initiative = 10
|
||||||
|
char.stats.damage = 5
|
||||||
|
char.stats.defence = 0
|
||||||
|
char.stats.hp = 30
|
||||||
|
|
||||||
|
print(char)
|
||||||
|
|
||||||
char = setmetatable(char, character)
|
char = setmetatable(char, character)
|
||||||
table.insert(Tree.level.characters, char)
|
table.insert(Tree.level.characters, char)
|
||||||
return char
|
return char
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user