moved characters into the global tree
This commit is contained in:
parent
9abb55dd1d
commit
1be19bfb46
@ -14,15 +14,16 @@ local RUN_ROW = 2
|
||||
local ATTACK_ROW = 3
|
||||
|
||||
--- @class Character
|
||||
local Character = {}
|
||||
Character.name = ""
|
||||
local character = {}
|
||||
character.__index = character
|
||||
character.name = ""
|
||||
|
||||
---------- Animations -----
|
||||
|
||||
--- мы должны определиться со спрайтшитами и подобным, всё что здесь написано лишь пример
|
||||
---
|
||||
--- предполагается, что у всех будет одинаковое кол-во кадров в анимации и их скорость произведения
|
||||
Character.animationTable = {
|
||||
character.animationTable = {
|
||||
idle = {},
|
||||
run = {},
|
||||
attack = {}
|
||||
@ -31,10 +32,10 @@ Character.animationTable = {
|
||||
--- чтобы не обновлять все анимации одновременно, храним нужную анимацию здесь
|
||||
|
||||
--- меняем вместе с Character.animation
|
||||
Character.state = "idle"
|
||||
character.state = "idle"
|
||||
--- когда нужно сменить анимацию с idle на run например, меняем именно это поле
|
||||
|
||||
Character.spriteSheet = {
|
||||
character.spriteSheet = {
|
||||
animationSpeed = 0.1,
|
||||
width = 96,
|
||||
height = 64,
|
||||
@ -47,16 +48,16 @@ Character.spriteSheet = {
|
||||
|
||||
---------- Statistics -----
|
||||
|
||||
Character.stats = {}
|
||||
character.stats = {}
|
||||
--- TODO: придумать формулу расчёта статов относительно уровня
|
||||
Character.stats.level = 1
|
||||
character.stats.level = 1
|
||||
|
||||
Character.stats.initiative = 10
|
||||
Character.stats.damage = 5
|
||||
Character.stats.defence = 0
|
||||
Character.stats.hp = 30
|
||||
character.stats.initiative = 10
|
||||
character.stats.damage = 5
|
||||
character.stats.defence = 0
|
||||
character.stats.hp = 30
|
||||
|
||||
Character.player = {}
|
||||
character.player = {}
|
||||
|
||||
--- TODO: мнимая надежда на спеллмейкинг
|
||||
---
|
||||
@ -64,11 +65,11 @@ Character.player = {}
|
||||
--- в контексте рогалика, но посмотрим
|
||||
---
|
||||
--- мб это будет метаспеллмейкинг на овощах
|
||||
Character.skills = {}
|
||||
character.skills = {}
|
||||
|
||||
Character.class = ""
|
||||
character.class = ""
|
||||
|
||||
Character.position = Vec3({})
|
||||
character.position = Vec3({})
|
||||
|
||||
--- Обёртка над Character:Create
|
||||
-- CreateCharacter = Character.create
|
||||
@ -77,7 +78,7 @@ Character.position = Vec3({})
|
||||
--- @param name string
|
||||
--- @param spriteDir table
|
||||
--- @param level? integer
|
||||
function CreateCharacter(name, spriteDir, level) -- aka Character.create(self, name, imagePath, level)
|
||||
local function spawn(name, spriteDir, level) -- aka Character.create(self, name, imagePath, level)
|
||||
-- TODO: добавить asset_loader, где все необходимые ассеты будут грузиться в одном месте,
|
||||
-- а здесь мы добавляем ассет на загрузку в очередь
|
||||
-- local image = love.graphics.newImage(imagePath)
|
||||
@ -102,11 +103,12 @@ function CreateCharacter(name, spriteDir, level) -- aka Character.create(self, n
|
||||
char.animationTable.hurt = anim8.newAnimation(animationGrid["hurt"], ANIMATION_SPEED, function()
|
||||
char.state = "idle"
|
||||
end)
|
||||
|
||||
return setmetatable(char, { __index = Character })
|
||||
char = setmetatable(char, character)
|
||||
table.insert(Tree.level.characters, char)
|
||||
return char
|
||||
end
|
||||
|
||||
function Character:update(dt)
|
||||
function character:update(dt)
|
||||
if love.keyboard.isDown("r") then
|
||||
self.state = "run"
|
||||
end
|
||||
@ -122,8 +124,10 @@ function Character:update(dt)
|
||||
self.animationTable[self.state]:update(dt)
|
||||
end
|
||||
|
||||
function Character:draw()
|
||||
local camera = Tree.level.camera
|
||||
self.animationTable[self.state]:draw(AssetBundle.files.sprites.character[self.state], self.position.x,
|
||||
self.position.y, nil, 1 / camera.pixelsPerMeter, 1 / camera.pixelsPerMeter, 38, 47)
|
||||
function character:draw()
|
||||
local ppm = Tree.level.camera.pixelsPerMeter
|
||||
self.animationTable[self.state]:draw(Tree.assets.files.sprites.character[self.state], self.position.x,
|
||||
self.position.y, nil, 1 / ppm, 1 / ppm, 38, 47)
|
||||
end
|
||||
|
||||
return { spawn = spawn }
|
||||
|
||||
@ -21,6 +21,12 @@ function level:update(dt)
|
||||
self.camera:update(dt)
|
||||
end
|
||||
|
||||
function level:draw()
|
||||
utils.each(self.characters, function(el)
|
||||
el:draw()
|
||||
end)
|
||||
end
|
||||
|
||||
return {
|
||||
new = new
|
||||
}
|
||||
|
||||
14
main.lua
14
main.lua
@ -1,6 +1,6 @@
|
||||
-- CameraLoader = require 'lib/camera'
|
||||
|
||||
require "character"
|
||||
local character = require "character"
|
||||
require "lib/tree"
|
||||
|
||||
function love.conf(t)
|
||||
@ -8,12 +8,9 @@ function love.conf(t)
|
||||
end
|
||||
|
||||
function love.load()
|
||||
-- PlayerFaction = Faction
|
||||
|
||||
-- Hero1 = Character:create("Petya", 10)
|
||||
-- Hero2 = Character:create("Andrysha", 12)
|
||||
|
||||
Hero = CreateCharacter("Hero", Tree.assets.files.sprites.character)
|
||||
character.spawn("Hero", Tree.assets.files.sprites.character)
|
||||
local hero2 = character.spawn("Hero2", Tree.assets.files.sprites.character)
|
||||
hero2.position = Vec3 { 1, 1 }; -- вообще-то мы вообще не хотим как-то взаимодействовать с персонажем за пределами update, но это удобно для тестов
|
||||
|
||||
-- PlayerFaction.characters = { Hero1, Hero2 }
|
||||
love.window.setMode(1080, 720, { resizable = true, msaa = 4, vsync = true })
|
||||
@ -22,7 +19,6 @@ end
|
||||
function love.update(dt)
|
||||
Tree.panning:update(dt)
|
||||
Tree.level:update(dt)
|
||||
Hero:update(dt)
|
||||
end
|
||||
|
||||
function love.draw()
|
||||
@ -37,7 +33,7 @@ function love.draw()
|
||||
love.graphics.setColor(244 / 255, 67 / 255, 54 / 255, 1)
|
||||
love.graphics.rectangle('fill', 0, 0, 1, 1)
|
||||
love.graphics.setColor(1, 1, 1, 1)
|
||||
Hero:draw()
|
||||
|
||||
Tree.level:draw()
|
||||
Tree.level.camera:detach()
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user