diff options
| -rw-r--r-- | spike.lua | 22 | ||||
| -rw-r--r-- | tilemap.lua | 9 | ||||
| -rw-r--r-- | world.lua | 14 |
3 files changed, 45 insertions, 0 deletions
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 @@ -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 |
