summaryrefslogtreecommitdiffhomepage
path: root/platform.lua
diff options
context:
space:
mode:
Diffstat (limited to 'platform.lua')
-rw-r--r--platform.lua73
1 files changed, 73 insertions, 0 deletions
diff --git a/platform.lua b/platform.lua
new file mode 100644
index 0000000..908cf73
--- /dev/null
+++ b/platform.lua
@@ -0,0 +1,73 @@
+-- `Platform`
+-- Static platform physical object with a sprite. `Players` can walk on it.
+-- Collision category: [1]
+
+-- WHOLE CODE HAS FLAG OF "need a cleanup"
+require "animated"
+
+-- Metatable of `Platform`
+-- nils initialized in constructor
+Platform = {
+ body = nil,
+ shape = nil,
+ fixture = nil,
+ world = nil,
+}
+Platform.__index = Platform
+setmetatable(Platform, Animated)
+
+-- Constructor of `Platform`
+function Platform:new (game, world, x, y, shape, sprite, animations)
+ local o = {}
+ setmetatable(o, self)
+ o.body = love.physics.newBody(world, x, y)
+ -- MULTIPLE SHAPES NEED TO BE REWRITED!
+ o.shape = {}
+ if type(shape[1]) == "number" then
+ local poly = love.physics.newPolygonShape(shape)
+ table.insert(o.shape, poly)
+ o.fixture = love.physics.newFixture(o.body, poly)
+ o.fixture:setCategory(1)
+ o.fixture:setFriction(0.2)
+ else
+ for i,v in pairs(shape) do
+ local poly = love.physics.newPolygonShape(v)
+ table.insert(o.shape, poly)
+ local fixture = love.physics.newFixture(o.body, poly)
+ fixture:setCategory(1)
+ fixture:setFriction(0.2)
+ end
+ end
+ -- END HERE
+ o:setSprite(love.graphics.newImage(sprite))
+ o:setAnimationsList(animations)
+ o.world = game
+ return o
+end
+
+-- Position
+function Platform:getPosition()
+ return self.body:getPosition()
+end
+
+-- Draw of `Platform`
+function Platform:draw (offset_x, offset_y, scale, debug)
+ -- locals
+ local offset_x = offset_x or 0
+ local offset_y = offset_y or 0
+ local scale = scale or 1
+ local debug = debug or false
+ local x, y = self:getPosition()
+ -- pixel grid
+ local draw_x = (math.floor(x) + offset_x) * scale
+ local draw_y = (math.floor(y) + offset_y) * scale
+ -- sprite draw
+ Animated.draw(self, draw_x, draw_y, 0, scale, scale)
+ -- debug draw
+ if debug then
+ love.graphics.setColor(255, 69, 0, 140)
+ for i,v in pairs(self.shape) do
+ love.graphics.polygon("fill", self.world.camera:translatePoints(self.body:getWorldPoints(v:getPoints())))
+ end
+ end
+end \ No newline at end of file