summaryrefslogtreecommitdiff
path: root/world.lua
diff options
context:
space:
mode:
authorcursed22bc <admin@pixeldawn.org>2026-03-09 23:48:43 +0200
committercursed22bc <admin@pixeldawn.org>2026-03-09 23:48:43 +0200
commit6f160bac033726c9bddecee42f24616ee537c4be (patch)
treecff0cbdb52847add84c2a09e2985b259e1cbed90 /world.lua
parentfa90ee5c494ef7db5c779fe7eec33d6312237f9b (diff)
hacking layering
Diffstat (limited to 'world.lua')
-rw-r--r--world.lua29
1 files changed, 29 insertions, 0 deletions
diff --git a/world.lua b/world.lua
index 2542fa1..8f1722f 100644
--- a/world.lua
+++ b/world.lua
@@ -3,6 +3,7 @@ local Entity = require("entity")
local Player = require("player")
local Camera = require("camera")
local Textbox = require("textbox")
+local Enemy = require("enemy")
local World = {}
World.__index = World
@@ -118,6 +119,11 @@ function World:load(mapPath, tilesets)
self.player = Player.new(self.physicsWorld, spawn.x, spawn.y)
self.player.isPlayer = true
table.insert(self.entities, self.player)
+ elseif entityType == "Enemy" then
+ local e = Enemy.new(spawn.x, spawn.y, spawn.width, spawn.height)
+ e:setWorldContext(self)
+ e:setPropertiesFromOptions({ properties = spawn.properties or {}, name = spawn.name, type = spawn.type })
+ table.insert(self.entities, e)
else
local e = Entity:new(spawn.x, spawn.y, spawn.width, spawn.height)
e:setPropertiesFromOptions({ properties = spawn.properties or {}, name = spawn.name, type = spawn.type })
@@ -271,6 +277,22 @@ function World:getMapData()
return self.mapData
end
+function World:isTileSolidAtPixel(x, y)
+ local groundLayer = self.tilemap:getGroundLayer()
+ if not groundLayer or not groundLayer.data then return false end
+ local dims = self.tilemap:getLayerTileDimensions("ground")
+ local tw = dims.tilewidth or self.tilemap:getTileWidth()
+ local th = dims.tileheight or self.tilemap:getTileHeight()
+ local mapW = self.mapData.width or 0
+ local mapH = self.mapData.height or 0
+ local col = math.floor(x / tw)
+ local row = math.floor(y / th)
+ if col < 0 or col >= mapW or row < 0 or row >= mapH then return false end
+ local idx = row * mapW + col + 1
+ local gid = groundLayer.data[idx]
+ return gid and gid ~= 0
+end
+
local function drawTileLayer(layer, mapTileW, mapTileH, tileGidInfo, viewMinX, viewMinY, viewMaxX, viewMaxY)
if not layer or not layer.visible or not layer.data then return end
local w = layer.width or 0
@@ -360,12 +382,15 @@ function World:draw()
love.graphics.push()
love.graphics.setCanvas(self.refractionCanvas)
love.graphics.clear(0, 0, 0, 1)
+ drawTileLayer(self.tilemap:getFargroundLayer(), mapTileW, mapTileH, tileGidInfo, viewMinX, viewMinY, viewMaxX, viewMaxY)
+ drawTileLayer(self.tilemap:getDecorationBackgroundLayer(), mapTileW, mapTileH, tileGidInfo, viewMinX, viewMinY, viewMaxX, viewMaxY)
drawTileLayer(self.tilemap:getBackgroundLayer(), mapTileW, mapTileH, tileGidInfo, viewMinX, viewMinY, viewMaxX, viewMaxY)
drawTileLayer(self.tilemap:getGroundLayer(), mapTileW, mapTileH, tileGidInfo, viewMinX, viewMinY, viewMaxX, viewMaxY)
for _, e in ipairs(self.entities) do
if e.draw then e:draw() else World.drawEntityDefault(self, e) end
end
drawTileLayer(self.tilemap:getForegroundLayer(), mapTileW, mapTileH, tileGidInfo, viewMinX, viewMinY, viewMaxX, viewMaxY)
+ drawTileLayer(self.tilemap:getDecorationForegroundLayer(), mapTileW, mapTileH, tileGidInfo, viewMinX, viewMinY, viewMaxX, viewMaxY)
love.graphics.setCanvas(mainCanvas)
love.graphics.pop()
@@ -411,7 +436,10 @@ function World:draw()
love.graphics.setShader()
else
drawTileLayer(self.tilemap:getBackgroundLayer(), mapTileW, mapTileH, tileGidInfo, viewMinX, viewMinY, viewMaxX, viewMaxY)
+ drawTileLayer(self.tilemap:getDecorationBackgroundLayer(), mapTileW, mapTileH, tileGidInfo, viewMinX, viewMinY, viewMaxX, viewMaxY)
drawTileLayer(self.tilemap:getGroundLayer(), mapTileW, mapTileH, tileGidInfo, viewMinX, viewMinY, viewMaxX, viewMaxY)
+ drawTileLayer(self.tilemap:getFargroundLayer(), mapTileW, mapTileH, tileGidInfo, viewMinX, viewMinY, viewMaxX, viewMaxY)
+ drawTileLayer(self.tilemap:getDecorationBackgroundLayer(), mapTileW, mapTileH, tileGidInfo, viewMinX, viewMinY, viewMaxX, viewMaxY)
love.graphics.setColor(0.25, 0.5, 0.9, 0.6)
for _, liquid in ipairs(self.liquidPolygons) do
@@ -440,6 +468,7 @@ function World:draw()
if e.draw then e:draw() else World.drawEntityDefault(self, e) end
end
drawTileLayer(self.tilemap:getForegroundLayer(), mapTileW, mapTileH, tileGidInfo, viewMinX, viewMinY, viewMaxX, viewMaxY)
+ drawTileLayer(self.tilemap:getDecorationForegroundLayer(), mapTileW, mapTileH, tileGidInfo, viewMinX, viewMinY, viewMaxX, viewMaxY)
end
if DEBUG then