PinmikPanik/gamedata/objects/gameover.py

104 lines
4.2 KiB
Python

from gamedata.objects.base import BaseObject
from gamedata.objects.button import Button
class GameOver(BaseObject):
def __init__(self,game):
super().__init__(0,0,game)
# Back button function
def fnBack(self,game):
game.scene = game.scenes.main
# Creating the back button
btn = Button(int(game.DISPLAY_WIDTH/4),int(game.DISPLAY_HEIGHT*0.8),game,game.DISPLAY_WIDTH//2,int(game.DISPLAY_HEIGHT*0.1))
btn.text = "Back"
btn.click = fnBack
game.gameloop.summon(btn)
# Updating highscore
self.highscore = False
self.newunlocks = []
if game.globals["highscore"]<game.globals["score"]:
self.pastunlocks = game.lib.getunlocks(game.globals["highscore"])
self.currentunlocks = game.lib.getunlocks(game.globals["score"])
game.globals["highscore"] = game.globals["score"]
self.highscore = True
self.game.lib.savescore(self.game.datadir,self.game.globals["highscore"],self.game.dataname)
# Get if there's an unlock
self.newunlocks = []
self.unlocksprites = {}
for unlocktype in ["normal","specials"]:
for unlock in self.currentunlocks[unlocktype]:
if not unlock in self.pastunlocks[unlocktype]:
self.newunlocks.append(unlock)
sprite = game.sprite_lib["lemmings/"+unlock+"/falling.png"]
self.unlocksprites[unlock] = game.pygame.transform.scale(sprite,[sprite.get_width()*3,sprite.get_height()*3])
self.displayscore = 0
self.launched = False
self.launchtimer = game.lib.Timer(0.5)
self.color = [255]*3
self.scale = 1
# Highscore texts
text = "New Highscore !"
if len(self.newunlocks)>0:
text+=" You unlocked :"
self.highscorewhite = game.fontfilebig.render(text,False,[255]*3)
self.highscoreflash = game.fontfilebig.render(text,False,[255,230,55])
self.flashtimer = game.lib.Timer(0.4)
def step(self):
self.displayscore+=(self.game.globals["score"]-self.displayscore)*self.game.dt*0.4+self.game.dt*2
self.displayscore = min(self.game.globals["score"],self.displayscore)
colorvalue = self.displayscore*0.9
self.scale = min(2,colorvalue**0.9/250+1)
if colorvalue>255: # Green to red
colorvalue-=255
colorvalue = min(255,colorvalue**0.95)
self.color = [colorvalue,255-colorvalue,0]
else: # White to green
self.color = [255-colorvalue,255,255-colorvalue]
if not self.launched and int(self.displayscore)==int(self.game.globals["score"]):
if self.launchtimer.tick(self.game.dt):
# Launch particles
self.launched = True
if self.launched:
self.flashtimer.tick(self.game.dt)
if self.game.inputs["mouse"]["click"]==1:
# skip animation
self.displayscore = int(self.game.globals["score"])
def draw(self):
# Display score
txt = self.game.fontfilebig.render("Score : "+str(int(self.displayscore)),False,self.color)
txt = self.game.pygame.transform.scale(txt,(round(txt.get_width()*self.scale),round(txt.get_height()*self.scale)))
self.game.lib.drawcenter(self.game,txt,self.game.DISPLAY_WIDTH/2,self.game.DISPLAY_HEIGHT*0.4)
# Display new highscore
if self.highscore:
if not self.launched:
alpha = (1-self.launchtimer.getratio())**2*255
else:
alpha = 255
txt = [self.highscorewhite,self.highscoreflash][self.flashtimer.getloops()%2]
txt.set_alpha(alpha)
self.game.lib.drawcenter(self.game,txt,self.game.DISPLAY_WIDTH/2,self.game.DISPLAY_HEIGHT*0.6)
# Draw unlocks
for i in range(len(self.newunlocks)):
posx = self.game.DISPLAY_WIDTH/(len(self.newunlocks)+1)*(i+1)
posy = self.game.DISPLAY_HEIGHT*0.7
sprite = self.unlocksprites[self.newunlocks[i]]
sprite.set_alpha(alpha)
self.game.lib.drawcenter(self.game,sprite,posx,posy)