summaryrefslogtreecommitdiffhomepage
path: root/not/Sprite.lua
diff options
context:
space:
mode:
authorAki <nthirtyone@gmail.com>2017-03-19 04:19:59 +0100
committerAki <nthirtyone@gmail.com>2017-03-19 04:19:59 +0100
commitcca4d9c1bf4033c79e4bd61a257c6ea02557524c (patch)
treed26570878c7b912a9d3be6c0d8853b315f1c89a1 /not/Sprite.lua
parent2e352657813b37d17c2215b85189f18a50c099f9 (diff)
downloadroflnauts-cca4d9c1bf4033c79e4bd61a257c6ea02557524c.zip
roflnauts-cca4d9c1bf4033c79e4bd61a257c6ea02557524c.tar.gz
roflnauts-cca4d9c1bf4033c79e4bd61a257c6ea02557524c.tar.bz2
Moving draw away to abstract classes
Diffstat (limited to 'not/Sprite.lua')
-rw-r--r--not/Sprite.lua46
1 files changed, 43 insertions, 3 deletions
diff --git a/not/Sprite.lua b/not/Sprite.lua
index f9a9cb4..a8785d3 100644
--- a/not/Sprite.lua
+++ b/not/Sprite.lua
@@ -79,16 +79,56 @@ function Sprite:getQuad ()
end
end
+-- TODO: Following five methods are stupid, do something about them!
+-- Sprite can't be moved by itself. Positioning should be handled by children's methods.
+function Sprite:getPosition ()
+ return 0,0
+end
+-- Sprite can't be rotated by itself. Rotation should be handled by children's methods.
+function Sprite:getAngle ()
+ return 0
+end
+-- Sprite can't be mirrored by itself. Mirroring should be handled by children's methods.
+function Sprite:getHorizontalMirror ()
+ return 1
+end
+function Sprite:getVerticalMirror ()
+ return 1
+end
+-- Sprite can't be offset by itself. Offsetting should be handled by children's methods.
+function Sprite:getOffset ()
+ return 0,0
+end
+
-- Drawing self to LOVE2D buffer.
-- If there is no Quad, it will draw entire image. It won't draw anything if there is no image.
-- TODO: it doesn't follow same pattern as `not.Hero.draw`. It should implement so it can be called from `not.World`.
-- TODO: change children if above changes are in effect: `not.Platform`, `not.Decoration`.
-function Sprite:draw (...)
+function Sprite:draw (offset_x, offset_y, scale, debug)
+ local offset_x = offset_x or 0
+ local offset_y = offset_y or 0
+ local debug = debug or false
+
local i, q = self:getImage(), self:getQuad()
+ local x, y = self:getPosition()
+ local angle = self:getAngle()
+
+ local scaleX = self:getHorizontalMirror()*(scale or 1)
+ local scaleY = self:getVerticalMirror()*(scale or 1)
+
+ -- pixel grid ; `approx` selected to prevent floating characters on certain conditions
+ local approx = math.floor
+ if (y - math.floor(y)) > 0.5 then approx = math.ceil end
+ local draw_y = (approx(y) + offset_y) * scale
+ local draw_x = (math.floor(x) + offset_x) * scale
+
if i then
love.graphics.setColor(255,255,255,255)
- if q then love.graphics.draw(i, q, ...)
- else love.graphics.draw(i, ...) end
+ if q then
+ love.graphics.draw(i, q, draw_x, draw_y, angle, scaleX, scaleY, self:getOffset())
+ else
+ love.graphics.draw(i, draw_x, draw_y, angle, scaleX, scaleY, self:getOffset())
+ end
end
end