diff options
author | Aki <nthirtyone@gmail.com> | 2017-03-19 04:19:59 +0100 |
---|---|---|
committer | Aki <nthirtyone@gmail.com> | 2017-03-19 04:19:59 +0100 |
commit | cca4d9c1bf4033c79e4bd61a257c6ea02557524c (patch) | |
tree | d26570878c7b912a9d3be6c0d8853b315f1c89a1 /not/Sprite.lua | |
parent | 2e352657813b37d17c2215b85189f18a50c099f9 (diff) | |
download | roflnauts-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.lua | 46 |
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 |