From d22630eab00d5be971f8e8f4255fb7d50c15ffbf Mon Sep 17 00:00:00 2001 From: cursed22bc Date: Tue, 10 Mar 2026 00:21:06 +0200 Subject: spikes --- spike.lua | 22 ++++++++++++++++++++++ tilemap.lua | 9 +++++++++ world.lua | 14 ++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 spike.lua diff --git a/spike.lua b/spike.lua new file mode 100644 index 0000000..f6e72b5 --- /dev/null +++ b/spike.lua @@ -0,0 +1,22 @@ +local Entity = require("entity") +local Spike = {} +Spike.__index = Spike +setmetatable(Spike, { __index = Entity }) + +function Spike.new(entity) + local self = setmetatable(Entity:new(entity.x, entity.y, entity.width, entity.height), Spike) + return self +end + +function Spike:setWorldPhysics(world) + self:enablePhysics(world, "static") +end + +function Spike:update(dt) + self:syncFromPhysicsBody() +end + +function Spike:draw() +end + +return Spike \ No newline at end of file diff --git a/tilemap.lua b/tilemap.lua index 09ce8d6..44d0db5 100644 --- a/tilemap.lua +++ b/tilemap.lua @@ -1,6 +1,7 @@ local Entity = require("entity") local Liquid = require("liquid") local LiquidSurface = require("liquidSurface") +local Spike = require("spike") local Tilemap = {} Tilemap.__index = Tilemap @@ -52,6 +53,7 @@ function Tilemap:new(mapPath, tilesets) self.entitiesCameraBorders = {} self.entitiesLiquidPolygons = {} self.entitiesLiquidSurfaces = {} + self.entitiesSpikes = {} self.layerBackground = nil self.layerDecorationBackground = nil self.layerDecorationForeground = nil @@ -128,6 +130,9 @@ function Tilemap:new(mapPath, tilesets) table.insert(self.entitiesTiles, entity) elseif name == "spawn" then table.insert(self.entitiesSpawns, entity) + elseif name == "spikes" then + table.insert(self.entitiesSpikes, Spike.new(entity)) + elseif name == "camera_border" then table.insert(self.entitiesCameraBorders, entity) elseif name == "liquid" then @@ -159,6 +164,10 @@ function Tilemap:getEntitiesSpawns() return self.entitiesSpawns end +function Tilemap:getEntitiesSpikes() + return self.entitiesSpikes +end + function Tilemap:getEntitiesCameraBorders() return self.entitiesCameraBorders end diff --git a/world.lua b/world.lua index 8f1722f..cbe6e8b 100644 --- a/world.lua +++ b/world.lua @@ -23,6 +23,7 @@ function World:new() self.liquidPolygons = {} self.liquidSurfaces = {} self.liquidSurfaceFixtures = {} + self.spikes = {} self.refractionCanvas = nil self.liquidShader = nil self.activeSplashes = {} @@ -145,6 +146,12 @@ function World:load(mapPath, tilesets) table.insert(self.liquidSurfaceFixtures, { body = body, fixture = fixture }) end + for _, spike in ipairs(self.tilemap:getEntitiesSpikes()) do + spike:setWorldPhysics(self.physicsWorld) + table.insert(self.spikes, spike) + table.insert(self.entities, spike) + end + local ok, shader = pcall(love.graphics.newShader, "shaders/liquid.glsl") self.liquidShader = ok and shader or nil if not self.liquidShader then @@ -386,6 +393,9 @@ function World:draw() 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 _, spike in ipairs(self.tilemap:getEntitiesSpikes()) do + spike:draw() + end for _, e in ipairs(self.entities) do if e.draw then e:draw() else World.drawEntityDefault(self, e) end end @@ -545,6 +555,10 @@ function World:update(dt) if surface.update then surface:update(dt) end end + for _, spike in ipairs(self.tilemap:getEntitiesSpikes()) do + if spike.update then spike:update(dt) end + end + for i = #self.activeSplashes, 1, -1 do self.activeSplashes[i].t = self.activeSplashes[i].t + dt * 2 if self.activeSplashes[i].t >= 1 then -- cgit v1.2.3