summaryrefslogtreecommitdiffhomepage
path: root/animated.lua
diff options
context:
space:
mode:
authorAki <nthirtyone@gmail.com>2017-02-08 19:18:25 +0100
committerAki <nthirtyone@gmail.com>2017-02-08 19:18:25 +0100
commita7b1bcc6872579b0ed8dbce399352d3afca1a80f (patch)
treecad837f35cc495d42385c3238de06804e8d68d07 /animated.lua
parent939ef3d25ec3dadba9e86b04ae1e294e789175d0 (diff)
parentf44ce392bc511fdfd24c54a5ee24b09f8ff6836f (diff)
downloadroflnauts-a7b1bcc6872579b0ed8dbce399352d3afca1a80f.zip
roflnauts-a7b1bcc6872579b0ed8dbce399352d3afca1a80f.tar.gz
roflnauts-a7b1bcc6872579b0ed8dbce399352d3afca1a80f.tar.bz2
Merge branch 'animations'
Diffstat (limited to 'animated.lua')
-rw-r--r--animated.lua81
1 files changed, 81 insertions, 0 deletions
diff --git a/animated.lua b/animated.lua
new file mode 100644
index 0000000..160ee44
--- /dev/null
+++ b/animated.lua
@@ -0,0 +1,81 @@
+-- `Animated`
+-- Abstract class for drawable animated entities.
+
+-- Metatable
+Animated = {
+ animations--[[table with animations]],
+ current--[[animations.default]],
+ sprite--[[love.graphics.newImage()]],
+ frame = 1,
+ delay = .1,
+}
+Animated.__index = Animated
+
+-- Cleans up reference to sprite on deletion.
+function Animated:delete()
+ self.sprite = nil
+end
+
+-- Sets an Image as a sprite.
+function Animated:setSprite(image)
+ self.sprite = image
+end
+-- Returns current sprite Image.
+function Animated:getSprite()
+ return self.sprite
+end
+
+-- Sets new animations list.
+function Animated:setAnimationsList(t)
+ if t then
+ self.animations = t
+ self:setAnimation("default")
+ end
+end
+
+-- Sets current animation by table key.
+function Animated:setAnimation(animation)
+ self.frame = 1
+ self.delay = Animated.delay -- INITIAL from metatable
+ self.current = self.animations[animation]
+end
+-- Returns current animation table.
+function Animated:getAnimation()
+ return self.current
+end
+
+-- Get frame quad for drawing.
+function Animated: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 sprite.
+function Animated:draw(...)
+ local s, q = self:getSprite(), self:getQuad()
+ if s then
+ love.graphics.setColor(255,255,255,255)
+ if q then love.graphics.draw(s, q, ...)
+ else love.graphics.draw(s, ...) end
+ end
+end
+-- Animation updating.
+function Animated:update(dt)
+ if self.animations and self.current then
+ self.delay = self.delay - dt
+ if self.delay < 0 then
+ self.delay = self.delay + Animated.delay -- INITIAL from metatable
+ self:nextFrame()
+ end
+ end
+end
+-- Moving to the next frame.
+function Animated:nextFrame()
+ if self.current.repeated or not (self.frame == self.current.frames) then
+ self.frame = (self.frame % self.current.frames) + 1
+ else
+ self:setAnimation("default")
+ end
+end \ No newline at end of file