summaryrefslogtreecommitdiffhomepage
path: root/not/Platform.lua
diff options
context:
space:
mode:
authorAki <nthirtyone@gmail.com>2017-03-16 19:05:50 +0100
committerAki <nthirtyone@gmail.com>2017-03-16 19:05:50 +0100
commit84278ed41f61c586dbb38dd99c45ee33e2f58c77 (patch)
treed7661f79901f40464b0b39a9bc5de6f4d5191b3b /not/Platform.lua
parentbd22a09dc862ac5480426bfd5e0311a97b6cfa77 (diff)
downloadroflnauts-84278ed41f61c586dbb38dd99c45ee33e2f58c77.zip
roflnauts-84278ed41f61c586dbb38dd99c45ee33e2f58c77.tar.gz
roflnauts-84278ed41f61c586dbb38dd99c45ee33e2f58c77.tar.bz2
Moved ? -> not.?; Renamed Player -> Hero
Diffstat (limited to 'not/Platform.lua')
-rw-r--r--not/Platform.lua73
1 files changed, 73 insertions, 0 deletions
diff --git a/not/Platform.lua b/not/Platform.lua
new file mode 100644
index 0000000..9b7b03c
--- /dev/null
+++ b/not/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 "not.Sprite"
+
+-- Metatable of `Platform`
+-- nils initialized in constructor
+Platform = {
+ body = nil,
+ shape = nil,
+ fixture = nil,
+ world = nil,
+}
+Platform.__index = Platform
+setmetatable(Platform, Sprite)
+
+-- 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:setImage(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
+ Sprite.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