summaryrefslogtreecommitdiffhomepage
path: root/not/Sprite.lua
diff options
context:
space:
mode:
authorAki <nthirtyone@gmail.com>2017-03-19 00:21:02 +0100
committerAki <nthirtyone@gmail.com>2017-03-19 00:21:02 +0100
commit340a3a4b92de5495b47e8e1e102178edfd97514f (patch)
tree62e528b45c90affd4339942a8911fe51137ad963 /not/Sprite.lua
parentc16c1206f5884614157b8f5049e601ff77478d7f (diff)
downloadroflnauts-340a3a4b92de5495b47e8e1e102178edfd97514f.zip
roflnauts-340a3a4b92de5495b47e8e1e102178edfd97514f.tar.gz
roflnauts-340a3a4b92de5495b47e8e1e102178edfd97514f.tar.bz2
Night commit, added PhysicalBody, newImage to sprite
Diffstat (limited to 'not/Sprite.lua')
-rw-r--r--not/Sprite.lua66
1 files changed, 44 insertions, 22 deletions
diff --git a/not/Sprite.lua b/not/Sprite.lua
index 1cc46f7..905816b 100644
--- a/not/Sprite.lua
+++ b/not/Sprite.lua
@@ -1,32 +1,54 @@
-- `Sprite`
-- Abstract class for drawable animated entities.
-
--- Metatable
Sprite = {
- animations--[[table with animations]],
- current--[[animations.default]],
- image--[[love.graphics.newImage()]],
+ animations =--[[table with animations]]nil,
+ current =--[[animations.default]]nil,
+ image =--[[love.graphics.newImage]]nil,
frame = 1,
delay = .1,
}
Sprite.__index = Sprite
+-- Constructor of `Sprite`.
+function Sprite:new (imagePath)
+ local o = setmetatable({}, self)
+ if type(imagePath) == "string" then
+ o:setImage(self.newImage(imagePath))
+ end
+ return o
+end
+
-- Cleans up reference to image on deletion.
-function Sprite:delete()
+function Sprite:delete ()
self.image = nil
end
--- Sets an Image as a image.
-function Sprite:setImage(image)
+-- Creates new Image object from path. Key-colours two shades of green. Static.
+function Sprite.newImage (path)
+ local imagedata = love.image.newImageData(path)
+ local transparency = function(x, y, r, g, b, a)
+ if (r == 0 and g == 128 and b == 64) or
+ (r == 0 and g == 240 and b == 6) then
+ a = 0
+ end
+ return r, g, b, a
+ end
+ imagedata:mapPixel(transparency)
+ local image = love.graphics.newImage(imagedata)
+ return image
+end
+
+-- Sets an Image as an image.
+function Sprite:setImage (image)
self.image = image
end
-- Returns current image Image.
-function Sprite:getImage()
+function Sprite:getImage ()
return self.image
end
-- Sets new animations list.
-function Sprite:setAnimationsList(t)
+function Sprite:setAnimationsList (t)
if t then
self.animations = t
self:setAnimation("default")
@@ -34,45 +56,45 @@ function Sprite:setAnimationsList(t)
end
-- Sets current animation by table key.
-function Sprite:setAnimation(animation)
+function Sprite:setAnimation (animation)
self.frame = 1
self.delay = Sprite.delay -- INITIAL from metatable
self.current = self.animations[animation]
end
-- Returns current animation table.
-function Sprite:getAnimation()
+function Sprite:getAnimation ()
return self.current
end
-- Get frame quad for drawing.
-function Sprite:getQuad()
+function Sprite:getQuad ()
if self.animations and self.current then
return self.current[self.frame]
end
end
-- Drawing self to LOVE2D buffer.
--- If there is no Quad, it will draw entire image.
-function Sprite:draw(...)
- local s, q = self:getImage(), self:getQuad()
- if s then
+-- If there is no Quad, it will draw entire image. It won't draw anything if there is no image.
+function Sprite:draw (...)
+ local i, q = self:getImage(), self:getQuad()
+ if i then
love.graphics.setColor(255,255,255,255)
- if q then love.graphics.draw(s, q, ...)
- else love.graphics.draw(s, ...) end
+ if q then love.graphics.draw(i, q, ...)
+ else love.graphics.draw(i, ...) end
end
end
-- Animation updating.
-function Sprite:update(dt)
+function Sprite:update (dt)
if self.animations and self.current then
self.delay = self.delay - dt
if self.delay < 0 then
self.delay = self.delay + Sprite.delay -- INITIAL from metatable
- self:nextFrame()
+ self:goToNextFrame()
end
end
end
-- Moving to the next frame.
-function Sprite:nextFrame()
+function Sprite:goToNextFrame ()
if self.current.repeated or not (self.frame == self.current.frames) then
self.frame = (self.frame % self.current.frames) + 1
else