summaryrefslogtreecommitdiffhomepage
path: root/not/Cloud.lua
diff options
context:
space:
mode:
Diffstat (limited to 'not/Cloud.lua')
-rw-r--r--not/Cloud.lua105
1 files changed, 56 insertions, 49 deletions
diff --git a/not/Cloud.lua b/not/Cloud.lua
index c9899d5..2af7d4b 100644
--- a/not/Cloud.lua
+++ b/not/Cloud.lua
@@ -1,64 +1,71 @@
--- `Cloud`
--- That white thing moving in the background.
-
--- WHOLE CODE HAS FLAG OF "need a cleanup"
-
--- Metatable of `Cloud`
--- nils initialized in constructor
--- TODO: inherit from `not.Decoration` or `not.Sprite`, depending on final result of `not.Sprite`.
+--- `Cloud`
+-- That white thing moving in the background.
+-- TODO: extends variables names to be readable.
Cloud = {
- x = 0, -- position horizontal
- y = 0, -- position vertical
t = 1, -- type (sprite number)
- v = 13, -- velocity
- sprite = nil,
- quads = {
+ v = 13 -- velocity
+}
+
+-- TODO: allow maps to use other quads and sprites for clouds
+-- TODO: you know this isn't right, don't you?
+local animations = {
+ default = {
[1] = love.graphics.newQuad( 1, 1, 158,47, 478,49),
- [2] = love.graphics.newQuad(160, 1, 158,47, 478,49),
- [3] = love.graphics.newQuad(319, 1, 158,47, 478,49)
+ frames = 1,
+ repeated = true
+ },
+ default2 = {
+ [1] = love.graphics.newQuad(160, 1, 158,47, 478,49),
+ frames = 1,
+ repeated = true
+ },
+ default3 = {
+ [1] = love.graphics.newQuad(319, 1, 158,47, 478,49),
+ frames = 1,
+ repeated = true
}
}
--- Constructor of `Cloud`
-function Cloud:new(x, y, t, v)
- -- Meta
- local o = {}
- setmetatable(o, self)
- self.__index = self
- -- Load spritesheet to metatable if not yet loaded
- if self.sprite == nil then
- self.sprite = love.graphics.newImage("assets/clouds.png")
+-- `Cloud` is a child of `Decoration`.
+require "not.Decoration"
+Cloud.__index = Cloud
+setmetatable(Cloud, Decoration)
+
+-- Constructor of `Cloud`.
+function Cloud:new (x, y, t, v)
+ local o = setmetatable({}, self)
+ o:init(x, y, t, v)
+ -- Load spritesheet statically.
+ if self:getImage() == nil then
+ self:setImage(Sprite.newImage("assets/clouds.png"))
end
- -- Init
- o.x = x or self.x
- o.y = y or self.y
- o.t = t or self.t
- o.v = v or self.v
return o
end
--- Position
-function Cloud:getPosition()
- return self.x, self.y
+-- Initializator of `Cloud`.
+function Cloud:init (x, y, t, v)
+ Decoration.init(self, x, y, nil)
+ self:setAnimationsList(animations)
+ self:setVelocity(v)
+ self:setType(t)
end
--- Update of `Cloud`, returns x for world to delete cloud after reaching right corner
-function Cloud:update(dt)
+-- Setters for cloud type and velocity.
+function Cloud:setType (type)
+ local animation = "default"
+ if type > 1 then
+ animation = animation .. type
+ end
+ self:setAnimation(animation)
+ self.t = type
+end
+function Cloud:setVelocity (velocity)
+ self.v = velocity
+end
+
+-- Update of `Cloud`, returns x for world to delete cloud after reaching right corner.
+function Cloud:update (dt)
+ Decoration.update(self, dt)
self.x = self.x + self.v*dt
return self.x
end
-
--- Draw `Cloud`
-function Cloud:draw(offset_x, offset_y, scale)
- -- locals
- local offset_x = offset_x or 0
- local offset_y = offset_y or 0
- local scale = scale or 1
- local x, y = self:getPosition()
- -- pixel grid
- local draw_x = (math.floor(x) + offset_x) * scale
- local draw_y = (math.floor(y) + offset_y) * scale
- -- draw
- love.graphics.setColor(255,255,255,255)
- love.graphics.draw(self.sprite, self.quads[self.t], draw_x, draw_y, 0, scale, scale)
-end \ No newline at end of file