summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--spike.lua22
-rw-r--r--tilemap.lua9
-rw-r--r--world.lua14
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
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