Merge branch 'main' of https://gitea.peaashmeter.dev/ArcMutex/heroes-of-nerevelon
This commit is contained in:
commit
ad77a92106
BIN
assets/sprites/character/attack.png
Normal file
BIN
assets/sprites/character/attack.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.1 KiB |
3
assets/sprites/character/conf.lua
Normal file
3
assets/sprites/character/conf.lua
Normal file
@ -0,0 +1,3 @@
|
||||
return {
|
||||
|
||||
}
|
||||
BIN
assets/sprites/character/hurt.png
Normal file
BIN
assets/sprites/character/hurt.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.2 KiB |
BIN
assets/sprites/character/idle.png
Normal file
BIN
assets/sprites/character/idle.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.6 KiB |
BIN
assets/sprites/character/run.png
Normal file
BIN
assets/sprites/character/run.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
@ -1,10 +1,11 @@
|
||||
local anim8 = require "lib/anim8"
|
||||
require 'lib/vec3'
|
||||
local AssetBundle = require "lib/asset_bundle"
|
||||
|
||||
local CHARACTER_SIZE = 64
|
||||
|
||||
--- Для anim8, представляет из себя с какого по какого представлены спрайты для анимации
|
||||
local ANIMATION_SIZE = '1-8'
|
||||
local ANIMATION_SIZE = '1-6'
|
||||
--- Скорость между кадрами в анимации
|
||||
local ANIMATION_SPEED = 0.1
|
||||
-- Константы ниже представляют из себя номер строки (с единицы), в которой находится та или иная анимация
|
||||
@ -28,9 +29,21 @@ Character.animationTable = {
|
||||
-- etc etc
|
||||
}
|
||||
--- чтобы не обновлять все анимации одновременно, храним нужную анимацию здесь
|
||||
---
|
||||
|
||||
--- меняем вместе с Character.animation
|
||||
Character.state = "idle"
|
||||
--- когда нужно сменить анимацию с idle на run например, меняем именно это поле
|
||||
Character.animation = Character.animationTable.idle
|
||||
|
||||
Character.spriteSheet = {
|
||||
animationSpeed = 0.1,
|
||||
width = 96,
|
||||
height = 64,
|
||||
idle = '1-6',
|
||||
run = '1-8',
|
||||
attack = '1-11',
|
||||
hurt = '1-6'
|
||||
}
|
||||
|
||||
|
||||
---------- Statistics -----
|
||||
|
||||
@ -60,31 +73,56 @@ Character.position = Vec3({})
|
||||
--- Обёртка над Character:Create
|
||||
-- CreateCharacter = Character.create
|
||||
|
||||
-- ты клоун же
|
||||
-- какого черта у тебя конструктор объекта принимает ссылку на объект
|
||||
--
|
||||
-- хз
|
||||
-- ща я в душ
|
||||
-- :clown:
|
||||
--- Создаёт персонажа, которым будет управлять или игрок или компьютер
|
||||
--- @param name string
|
||||
--- @param imagePath string
|
||||
--- @param spriteDir table
|
||||
--- @param level? integer
|
||||
function CreateCharacter(name, imagePath, level) -- aka Character.create(self, name, imagePath, level)
|
||||
function CreateCharacter(name, spriteDir, level) -- aka Character.create(self, name, imagePath, level)
|
||||
-- TODO: добавить asset_loader, где все необходимые ассеты будут грузиться в одном месте,
|
||||
-- а здесь мы добавляем ассет на загрузку в очередь
|
||||
local image = love.graphics.newImage(imagePath)
|
||||
local animationGrid = anim8.newGrid(CHARACTER_SIZE, CHARACTER_SIZE, image:getWidth(), image:getHeight())
|
||||
return Character {
|
||||
-- local image = love.graphics.newImage(imagePath)
|
||||
local animationGrid = {}
|
||||
-- n: name; i: image
|
||||
for n, i in pairs(spriteDir) do
|
||||
local aGrid = anim8.newGrid(96, 64, i:getWidth(), i:getHeight())
|
||||
local tiles = '1-' .. math.ceil(i:getWidth() / 96)
|
||||
animationGrid[n] = aGrid(tiles, 1)
|
||||
end
|
||||
--local animationGrid = anim8.newGrid(96, 64, image:getWidth(), image:getHeight())
|
||||
local char = {
|
||||
name = name,
|
||||
animationTable = {
|
||||
idle = anim8.newAnimation(animationGrid(ANIMATION_SIZE, IDLE_ROW), ANIMATION_SPEED),
|
||||
run = anim8.newAnimation(animationGrid(ANIMATION_SIZE, RUN_ROW), ANIMATION_SPEED),
|
||||
attack = anim8.newAnimation(animationGrid(ANIMATION_SIZE, ATTACK_ROW), ANIMATION_SPEED)
|
||||
}
|
||||
}
|
||||
char.animationTable.idle = anim8.newAnimation(animationGrid["idle"], ANIMATION_SPEED)
|
||||
char.animationTable.run = anim8.newAnimation(animationGrid["run"], ANIMATION_SPEED)
|
||||
char.animationTable.attack = anim8.newAnimation(animationGrid["attack"], ANIMATION_SPEED, function()
|
||||
char.state = "idle"
|
||||
end)
|
||||
char.animationTable.hurt = anim8.newAnimation(animationGrid["hurt"], ANIMATION_SPEED, function()
|
||||
char.state = "idle"
|
||||
end)
|
||||
|
||||
return setmetatable(char, { __index = Character })
|
||||
end
|
||||
|
||||
function Character:update(dt)
|
||||
self.animation:update(dt)
|
||||
if love.keyboard.isDown("r") then
|
||||
self.state = "run"
|
||||
end
|
||||
if love.keyboard.isDown("i") then
|
||||
self.state = "idle"
|
||||
end
|
||||
if love.keyboard.isDown("u") then
|
||||
self.state = "attack"
|
||||
end
|
||||
if love.keyboard.isDown("h") then
|
||||
self.state = "hurt"
|
||||
end
|
||||
self.animationTable[self.state]:update(dt)
|
||||
end
|
||||
|
||||
function Character:draw(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)
|
||||
end
|
||||
|
||||
@ -13,13 +13,13 @@ local camera = {
|
||||
velocity = Vec3 {},
|
||||
acceleration = 0.2,
|
||||
speed = 5,
|
||||
pixelsPerMeter = 100,
|
||||
scale = 1
|
||||
pixelsPerMeter = 24,
|
||||
scale = 2
|
||||
}
|
||||
|
||||
love.wheelmoved = function(x, y)
|
||||
if camera.scale > 2 and y > 0 then return end;
|
||||
if camera.scale < 0.5 and y < 0 then return end;
|
||||
if camera.scale > 50 and y > 0 then return end;
|
||||
if camera.scale < 0.005 and y < 0 then return end;
|
||||
camera.scale = camera.scale + 0.1 * y
|
||||
end
|
||||
|
||||
|
||||
9
main.lua
9
main.lua
@ -5,12 +5,15 @@ require "character"
|
||||
local camera = require 'lib/camera'
|
||||
local Vec3 = require "lib/vec3"
|
||||
local tree = require "lib/tree"
|
||||
local AssetBundle = require "lib/asset_bundle"
|
||||
|
||||
function love.conf(t)
|
||||
t.console = true
|
||||
end
|
||||
|
||||
function love.load()
|
||||
AssetBundle:load()
|
||||
|
||||
Camera = camera.new()
|
||||
Camera.position = Vec3({})
|
||||
-- PlayerFaction = Faction
|
||||
@ -18,6 +21,8 @@ function love.load()
|
||||
-- Hero1 = Character:create("Petya", 10)
|
||||
-- Hero2 = Character:create("Andrysha", 12)
|
||||
|
||||
Hero = CreateCharacter("Hero", AssetBundle.files.sprites.character)
|
||||
|
||||
-- PlayerFaction.characters = { Hero1, Hero2 }
|
||||
love.window.setMode(1080, 720, { resizable = true, msaa = 4, vsync = true })
|
||||
end
|
||||
@ -29,6 +34,8 @@ end
|
||||
function love.update(dt)
|
||||
Camera:update(dt)
|
||||
tree.instance().panning:update(dt)
|
||||
|
||||
Hero:update(dt)
|
||||
end
|
||||
|
||||
function love.draw()
|
||||
@ -46,6 +53,8 @@ function love.draw()
|
||||
love.graphics.rectangle('fill', 0, 0, width, height)
|
||||
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(Camera)
|
||||
|
||||
Camera:detach()
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user