summaryrefslogtreecommitdiffhomepage
path: root/not/Effect.lua
diff options
context:
space:
mode:
Diffstat (limited to 'not/Effect.lua')
-rw-r--r--not/Effect.lua46
1 files changed, 46 insertions, 0 deletions
diff --git a/not/Effect.lua b/not/Effect.lua
new file mode 100644
index 0000000..dd7570a
--- /dev/null
+++ b/not/Effect.lua
@@ -0,0 +1,46 @@
+--- `Effect`
+-- Short animation with graphics that plays in various situation.
+-- TODO: animation is currently slower than it used to be, check if it is ok; if not then make it possible to change it to 0.06 delay.
+Effect = {
+ finished = false,
+}
+
+-- `Effect` is a child of `Decoration`.
+require "not.Decoration"
+Effect.__index = Effect
+setmetatable(Effect, Decoration)
+
+-- Constructor of `Effect`.
+function Effect:new (name, x, y)
+ local o = setmetatable({}, self)
+ o:init(name, x, y)
+ -- Load spritesheet statically.
+ if self:getImage() == nil then
+ self:setImage(Sprite.newImage("assets/effects.png"))
+ end
+ return o
+end
+
+-- Initializer of `Effect`.
+function Effect:init (name, x, y)
+ Decoration.init(self, x, y, nil)
+ self:setAnimationsList(require("config.animations.effects"))
+ self:setAnimation(name)
+end
+
+-- Update of `Effect`.
+-- Returns true if animation is finished and effect is ready to be deleted.
+function Effect:update (dt)
+ Decoration.update(self, dt)
+ return self.finished
+end
+
+-- Overridden from `not.Sprite`.
+-- Sets finished flag if reached last frame of played animation.
+function Effect:goToNextFrame ()
+ if not (self.frame == self.current.frames) then
+ self.frame = (self.frame % self.current.frames) + 1
+ else
+ self.finished = true
+ end
+end