diff options
| author | cursed22bc <admin@pixeldawn.org> | 2026-03-09 23:48:43 +0200 |
|---|---|---|
| committer | cursed22bc <admin@pixeldawn.org> | 2026-03-09 23:48:43 +0200 |
| commit | 6f160bac033726c9bddecee42f24616ee537c4be (patch) | |
| tree | cff0cbdb52847add84c2a09e2985b259e1cbed90 /world.lua | |
| parent | fa90ee5c494ef7db5c779fe7eec33d6312237f9b (diff) | |
hacking layering
Diffstat (limited to 'world.lua')
| -rw-r--r-- | world.lua | 29 |
1 files changed, 29 insertions, 0 deletions
@@ -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 |
