diff options
author | Aki <nthirtyone@gmail.com> | 2017-03-01 21:31:11 +0100 |
---|---|---|
committer | Aki <nthirtyone@gmail.com> | 2017-03-01 21:33:23 +0100 |
commit | bd22a09dc862ac5480426bfd5e0311a97b6cfa77 (patch) | |
tree | 971b467b2612a0b195a38ea5450b32399810c951 /sprite.lua | |
parent | 55b0cf1a22e4a7e41fe00aa693445d6c4bd0652d (diff) | |
download | roflnauts-bd22a09dc862ac5480426bfd5e0311a97b6cfa77.zip roflnauts-bd22a09dc862ac5480426bfd5e0311a97b6cfa77.tar.gz roflnauts-bd22a09dc862ac5480426bfd5e0311a97b6cfa77.tar.bz2 |
Rename: Animated -> Sprite
Rename: getSprite, setSprite -> getImage, setImage
Diffstat (limited to 'sprite.lua')
-rw-r--r-- | sprite.lua | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/sprite.lua b/sprite.lua new file mode 100644 index 0000000..1cc46f7 --- /dev/null +++ b/sprite.lua @@ -0,0 +1,81 @@ +-- `Sprite` +-- Abstract class for drawable animated entities. + +-- Metatable +Sprite = { + animations--[[table with animations]], + current--[[animations.default]], + image--[[love.graphics.newImage()]], + frame = 1, + delay = .1, +} +Sprite.__index = Sprite + +-- Cleans up reference to image on deletion. +function Sprite:delete() + self.image = nil +end + +-- Sets an Image as a image. +function Sprite:setImage(image) + self.image = image +end +-- Returns current image Image. +function Sprite:getImage() + return self.image +end + +-- Sets new animations list. +function Sprite:setAnimationsList(t) + if t then + self.animations = t + self:setAnimation("default") + end +end + +-- Sets current animation by table key. +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() + return self.current +end + +-- Get frame quad for drawing. +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 + 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 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() + end + end +end +-- Moving to the next frame. +function Sprite: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 |