From 3a9ac247fcada5e8946adda16e0fd8cf0cac41a5 Mon Sep 17 00:00:00 2001 From: Kazhnuz Date: Sat, 1 Aug 2020 18:54:12 +0200 Subject: [PATCH] feat: add basic charset handling --- .../assets/sprites/charset/perso.png | Bin 0 -> 29166 bytes .../scenes/overworld/actors/parent.lua | 2 + .../scenes/overworld/actors/player.lua | 14 +++- .../scenes/overworld/charsetmanager.lua | 74 ++++++++++++++++++ sonic-radiance.love/scenes/overworld/init.lua | 4 +- 5 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 sonic-radiance.love/assets/sprites/charset/perso.png create mode 100644 sonic-radiance.love/scenes/overworld/charsetmanager.lua diff --git a/sonic-radiance.love/assets/sprites/charset/perso.png b/sonic-radiance.love/assets/sprites/charset/perso.png new file mode 100644 index 0000000000000000000000000000000000000000..0cc9985fcb6f31e0366555752bd91d90008e5d43 GIT binary patch literal 29166 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

H=>M)7^H;ag_h8wq1y)( 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 literal 0 HcmV?d00001 diff --git a/sonic-radiance.love/scenes/overworld/actors/parent.lua b/sonic-radiance.love/scenes/overworld/actors/parent.lua index 4a7e397..7b27ac1 100644 --- a/sonic-radiance.love/scenes/overworld/actors/parent.lua +++ b/sonic-radiance.love/scenes/overworld/actors/parent.lua @@ -4,6 +4,8 @@ local Parent = Base:extend() function Parent:new(world, type, x, y, w, h, isSolid) self.scene = world.scene Parent.super.new(self, world, type, x, y, w, h, isSolid) + self.charDir = "down" + self.charset = self.world.scene.charsetManager end function Parent:draw() diff --git a/sonic-radiance.love/scenes/overworld/actors/player.lua b/sonic-radiance.love/scenes/overworld/actors/player.lua index 9e80089..7f9187d 100644 --- a/sonic-radiance.love/scenes/overworld/actors/player.lua +++ b/sonic-radiance.love/scenes/overworld/actors/player.lua @@ -4,7 +4,11 @@ local Player = Parent:extend() function Player:new(world, x, y, id) Player.super.new(self, world, "player", x, y, 16, 16, true) + self.charset:addTexture("perso") +end +function Player:isMoving() + return ((math.abs(self.ysp) > 0.01) or (math.abs(self.xsp) > 0.01)) end function Player:updateStart(dt) @@ -12,20 +16,28 @@ function Player:updateStart(dt) if self.keys["up"].isDown then self.ysp = -120 + self.charDir = "up" end if self.keys["down"].isDown then self.ysp = 120 + self.charDir = "down" end if self.keys["left"].isDown then self.xsp = -120 + self.charDir = "left" end if self.keys["right"].isDown then self.xsp = 120 + self.charDir = "right" end end function Player:draw() - Player.super.draw(self) + if (self:isMoving()) then + self.charset:draw("perso", 1, self.charDir, self.x, self.y) + else + self.charset:drawStanding("perso", 1, self.charDir, self.x, self.y) + end end function Player:drawHUD(id) diff --git a/sonic-radiance.love/scenes/overworld/charsetmanager.lua b/sonic-radiance.love/scenes/overworld/charsetmanager.lua new file mode 100644 index 0000000..194cb62 --- /dev/null +++ b/sonic-radiance.love/scenes/overworld/charsetmanager.lua @@ -0,0 +1,74 @@ +local Charset = Object:extend() + +local folder = "assets/sprites/charset/" +local animation = {1, 2, 3, 2} +local directionList = {"down", "right", "up", "left"} + +function Charset:new(scene) + self.char = {} + self.list = {} + + for i=1, 2 do + for j=1, 4 do + local id = ((i-1)*4) + j + self.char[id] = self:addChar(i, j) + end + end + self.currentFrame = 0 +end + +function Charset:update(dt) + self.currentFrame = ((self.currentFrame + (dt*5)) % 4) +end + +function Charset:addChar(ii, jj) + local charx, chary = (jj-1)*(24*3), (ii-1)*(32*4) + print(charx, chary) + local char = {} + for i=1, 4 do + animatedDirection = {} + local running = {} + for j=1, 3 do + local x, y = charx + ((j-1)*24), (chary + (i-1)*32) + --print(x, y) + running[j] = love.graphics.newQuad(x, y, 24, 32, 24*12, 32*8) + end + local direction = directionList[i] + char[direction] = running + end + return char +end + +function Charset:addTexture(charsetName) + self.list[charsetName] = love.graphics.newImage(folder .. charsetName .. ".png") +end + +function Charset:getRunningFrame(charID, direction) + local char = self.char[charID] + local animatedDirection = char[direction] + local fakeFrame = math.min(math.floor(self.currentFrame) + 1, 4) + print(fakeFrame) + local trueFrame = animation[fakeFrame] + print(trueFrame) + return animatedDirection[trueFrame] +end + +function Charset:getStandingFrame(charID, direction) + local char = self.char[charID] + local animatedDirection = char[direction] + return animatedDirection[2] +end + +function Charset:draw(charsetName, charID, direction, x, y) + local drawable = self.list[charsetName] + local quad = self:getRunningFrame(charID, direction) + love.graphics.draw(drawable, quad, math.floor(x), math.floor(y), 0, 1, 1, 4, 16) +end + +function Charset:drawStanding(charsetName, charID, direction, x, y) + local drawable = self.list[charsetName] + local quad = self:getStandingFrame(charID, direction) + love.graphics.draw(drawable, quad, x, y, 0, 1, 1, 4, 16) +end + +return Charset diff --git a/sonic-radiance.love/scenes/overworld/init.lua b/sonic-radiance.love/scenes/overworld/init.lua index 7dff1d5..48c27de 100644 --- a/sonic-radiance.love/scenes/overworld/init.lua +++ b/sonic-radiance.love/scenes/overworld/init.lua @@ -25,9 +25,11 @@ local Scene = require "core.modules.scenes" local MovePlayer = Scene:extend() local World = require "scenes.overworld.world" +local CharsetManager = require "scenes.overworld.charsetmanager" function MovePlayer:new() MovePlayer.super.new(self) + self.charsetManager = CharsetManager(self) World(self, "test", "map") self.world:setPlayerNumber(1) @@ -35,7 +37,7 @@ function MovePlayer:new() end function MovePlayer:update(dt) - + self.charsetManager:update(dt) end function MovePlayer:draw()