diff --git a/game.lua b/game.lua index 9c10882..6c7761d 100644 --- a/game.lua +++ b/game.lua @@ -11,6 +11,7 @@ function Game:reinit() self.objects.circle = require "objects/circle" self.objects.ending = require "objects/end" self.objects.background = require "objects/background" + self.objects.transition= require "objects/transition" self.rect = require "lib/rect" self.maxobjects = 0 self.camerax = 0 @@ -228,6 +229,15 @@ function Game:MouseCallback(x,y,presses) end end +function Game:delid(id) + local i + for i=0,#self.gameloop do + if self.gameloop[i]~=nil then + if self.gameloop[i].id==id then self.gameloop[i]=nil end + end + end +end + function Game:bint(bool) -- Convert Boolean to Integer local result = 0 if bool then result = 1 end diff --git a/objects/end.lua b/objects/end.lua index 4b351c8..e464362 100644 --- a/objects/end.lua +++ b/objects/end.lua @@ -13,7 +13,8 @@ function gen:new(game,winner) end function End:MouseCallback(x,y) - self.game.scenes:main(game) + local t = self.game.objects.transition:new(game,0.7,"main") + self.game:summon(t) end return End diff --git a/objects/grid.lua b/objects/grid.lua index 5114ca9..493ca45 100644 --- a/objects/grid.lua +++ b/objects/grid.lua @@ -61,8 +61,10 @@ function gridgen:new(game,x,y,cellsize) end function Grid:endgame(winner) - print(winner.." won !") - self.game.scenes:ending(self.game,winner) + local args = {} + args.winner = winner + local t = self.game.objects.transition:new(game,0.7,"ending",args) + self.game:summon(t) end function Grid:draw() diff --git a/objects/transition.lua b/objects/transition.lua new file mode 100644 index 0000000..8cc7c7d --- /dev/null +++ b/objects/transition.lua @@ -0,0 +1,38 @@ +local gen = {} + +function gen:new(game,time,func,args) + + local Transition = game.objects.base:new(game,0,0) + + Transition.color = {0.161,0.157,0.192,1} + Transition.func = func + Transition.args = args + + Transition.timer = game:Timer(time or 0.7) + + Transition.depth = 99 + + function Transition:step(dt) + if self.timer:tick(dt) then + if self.func then + self.game.scenes[func](self.game.scenes,self.game,self.args) + local t = self.game.objects.transition:new(self.game,self.timer.maxcount) + self.game:summon(t) + end + self.game:delid(self.id) + end + end + + function Transition:draw() + local offset = self.game.HEIGHT + if not self.func then offset = 0 end + lg.setColor(self.color) + lg.rectangle("fill",0,offset-self.game.HEIGHT*(1-self.timer:getratio()), self.game.WIDTH,self.game.HEIGHT) + lg.setColor({1,1,1,1}) + end + + return Transition + +end + +return gen diff --git a/scenes.lua b/scenes.lua index f859d92..d9bee89 100644 --- a/scenes.lua +++ b/scenes.lua @@ -7,19 +7,20 @@ function scenes:main(game) local y = (game.HEIGHT-cellsize*5)/2 local grid = game.objects.grid:new(game,x,y,cellsize) game:summon(grid) - local background = game.objects.background:new(game,game:newImage("pattern.png")) + local background = game.objects.background:new(game,game:newImage("pattern.png"),30,15) game:summon(background) - local background = game.objects.background:new(game,game:newImage("pattern2.png"),22,18) + local background = game.objects.background:new(game,game:newImage("pattern2.png"),30,-15) game:summon(background) end -function scenes:ending(game,winner) +function scenes:ending(game,args) + print(args.winner) game.gameloop = {} - local ending = game.objects.ending:new(game,winner) + local ending = game.objects.ending:new(game,args.winner) game:summon(ending) - local background = game.objects.background:new(game,game:newImage("pattern.png")) + local background = game.objects.background:new(game,game:newImage("pattern.png"),30,15) game:summon(background) - local background = game.objects.background:new(game,game:newImage("pattern2.png"),22) + local background = game.objects.background:new(game,game:newImage("pattern2.png"),30,-15) game:summon(background) end