From a5f362ceaa4904596ab9914344b4ce7a00f811f4 Mon Sep 17 00:00:00 2001 From: Kazhnuz Date: Tue, 23 Mar 2021 11:26:15 +0100 Subject: [PATCH] improvement: rework layer drawing code --- .../core/modules/world/baseworld.lua | 19 ++++++- .../core/modules/world/maps/parent.lua | 4 ++ .../core/modules/world/maps/sti.lua | 51 ++++++++++++++----- 3 files changed, 60 insertions(+), 14 deletions(-) diff --git a/sonic-radiance.love/core/modules/world/baseworld.lua b/sonic-radiance.love/core/modules/world/baseworld.lua index 9257a31..1fd1334 100644 --- a/sonic-radiance.love/core/modules/world/baseworld.lua +++ b/sonic-radiance.love/core/modules/world/baseworld.lua @@ -398,12 +398,15 @@ function BaseWorld:draw(dt) local camNumber = self.cameras:getViewNumber() if (camNumber == 0) then - self:drawMap() + self:drawLowerLayers() self:drawActors() + self:drawUpperLayers() else for i=1, camNumber do self.cameras:attachView(i) - self:drawMap(i) + self:drawLowerLayers(i) + self:drawActors(i) + self:drawUpperLayers(i) self.cameras:detachView(i) end end @@ -417,6 +420,18 @@ function BaseWorld:drawActors(id) end end +function BaseWorld:drawUpperLayers() + if (self.map ~= nil) then + self.map:drawUpperLayers() + end +end + +function BaseWorld:drawLowerLayers() + if (self.map ~= nil) then + self.map:drawLowerLayers() + end +end + function BaseWorld:drawMap(id) if (self.map ~= nil) then self.map:draw() diff --git a/sonic-radiance.love/core/modules/world/maps/parent.lua b/sonic-radiance.love/core/modules/world/maps/parent.lua index ac77a3c..a5165b8 100644 --- a/sonic-radiance.love/core/modules/world/maps/parent.lua +++ b/sonic-radiance.love/core/modules/world/maps/parent.lua @@ -85,6 +85,10 @@ function ParentMap:getDimensions() return core.screen:getDimensions() end +function ParentMap:drawLowerLayers() + self:draw() +end + function ParentMap:getBox() local x1, y1, x2, y2 = self:getPadding() local w, h = self:getDimensions() diff --git a/sonic-radiance.love/core/modules/world/maps/sti.lua b/sonic-radiance.love/core/modules/world/maps/sti.lua index 5ab0342..26b57b0 100644 --- a/sonic-radiance.love/core/modules/world/maps/sti.lua +++ b/sonic-radiance.love/core/modules/world/maps/sti.lua @@ -10,6 +10,26 @@ function StiMap:new(world, mapfile) StiMap.super.new(self, world) self:setBackgroundColorFromTable(self.sti.backgroundcolor) self.mapname = self:getMapName(mapfile) + + self.objectlayer = 0 +end + +function StiMap:loadObjects() + self:loadCollisions() + self:loadPlayers() + self:loadActors() + self.objectlayer = self:getObjectLayer() +end + +function StiMap:getObjectLayer() + local objectlayer = 0 + for i, layer in ipairs(self.sti.layers) do + if (layer.name == "objects") then + objectlayer = i + end + self.nbrLayer = i + end + return objectlayer end function StiMap:getMapName(mapfile) @@ -224,20 +244,27 @@ end -- DRAW FUNCTIONS -- Draw the map -function StiMap:draw(i) - local haveDrawnObjects = false - for _, layer in ipairs(self.sti.layers) do - if layer.visible and layer.opacity > 0 and (layer.type == "tilelayer") then - self.sti:drawLayer(layer) - else - if (layer.name == "objects") then - haveDrawnObjects = true - self.world:drawActors(i) - end +function StiMap:drawUpperLayers() + if (self.objectlayer > 0) then + for i = self.objectlayer, self.nbrLayer, 1 do + self:drawLayer(i) end end - if (not haveDrawnObjects) then - self.world:drawActors(i) +end + +function StiMap:drawLowerLayers() + for i = 1, self.objectlayer, 1 do + self:drawLayer(i) + end +end + +function StiMap:drawLayer(id) + local layer = self.sti.layers[id] + if (layer ~= nil) then + if layer.visible and layer.opacity > 0 and (layer.type == "tilelayer") then + print("upper " .. id) + self.sti:drawLayer(layer) + end end end