from gamedata.objects.base import BaseObject from gamedata.objects.ingame.spawner import Spawner from gamedata.objects.ingame.tiles import Tiles class Manager(BaseObject): def __init__(self,game): super().__init__(0,0,game) self.score = 0 self.lives = 5 self.basetime = 10 self.steptime = 2 self.speedmargin = 7 self.stepmargin = 2 self.spawntimer = game.lib.Timer(self.basetime) # Time elapsing each lemming spawn self.deathtimer = game.lib.Timer(1) # Time betwin each life loss self.started = False self.invincible = False self.scoreratio = 0.2 # Points earned per seconds and per lemming self.endtimer = game.lib.Timer(1) # Black fade if game's over self.endrect = game.pygame.Surface((game.DISPLAY_WIDTH,game.DISPLAY_HEIGHT)) self.endrect.fill([0]*3) # Summon the tiles self.tiles = Tiles(50,50,game) game.gameloop.summon(self.tiles) # Spawn the first one self.game.gameloop.summon(Spawner(self.game,self.tiles)) def step(self): nblemmings = len(self.game.gameloop.findname("Lemming")) + len(self.game.gameloop.findname("Spawner")) # Updating score for i in range(nblemmings): self.score+=self.scoreratio*self.game.dt # Spawning more lemmings if (self.lives>0 and nblemmings>0): if self.spawntimer.tick(self.game.dt): self.game.gameloop.summon(Spawner(self.game,self.tiles,speedmargin=int(self.speedmargin+0.5))) self.spawntimer = self.game.lib.Timer(self.basetime+nblemmings*self.steptime) else: # Game over if self.endtimer.tick(self.game.dt): self.game.globals["score"] = self.score self.game.scenes.gameover(self.game) if self.invincible: if self.deathtimer.tick(self.game.dt): self.invincible = False def death(self): if not self.invincible: self.lives-=1 self.invincible = True else: self.deathtimer.tick(self.deathtimer.getmax()/3) def draw(self): pass def afterdraw(self): txtsurfacescore = self.game.fontfile.render("Score : "+str(int(self.score)),False,[150,255,150]) txtsurfacelives = self.game.fontfile.render("Lives : "+str(int(max(0,self.lives))),False,[255,150,150]) self.game.realwindow.blit(txtsurfacescore,[20,20]) self.game.realwindow.blit(txtsurfacelives,[20,20*2+txtsurfacescore.get_height()]) self.endrect.set_alpha((1-self.endtimer.getratio())*255) self.game.realwindow.blit(self.endrect,[0,0])