diff --git a/src/missions.py b/src/missions.py index dfbe0d9..43e6b04 100644 --- a/src/missions.py +++ b/src/missions.py @@ -1,18 +1,16 @@ # -*- coding: utf-8 -*- from . import settings import pygame -from pygame.locals import * +import math def init(): - global newtime - newtime = pygame.time.get_ticks() + time("ingame") -def handle(usage): - - global newtime - +def time(usage): + if not "newtime" in locals(): + newtime = pygame.time.get_ticks() if usage == "ingame": oldtime = newtime newtime = pygame.time.get_ticks() @@ -21,6 +19,15 @@ def handle(usage): oldtime = pygame.time.get_ticks() newtime = pygame.time.get_ticks() + +def handle(usage): + time("ingame") + target_shooting() + player_hit_by_explosion() + + +def target_shooting(): + alltargets = 0 for world in settings.localmap: alltargets += len(settings.localmap[world].targets) @@ -35,8 +42,6 @@ def handle(usage): screen = settings.screen - settings.save(settings.current_game) - fade = pygame.Surface((settings.screenx_current, settings.screeny_current)) fade.fill((0, 0, 0)) fade.set_alpha(0) @@ -59,9 +64,9 @@ def handle(usage): settings.upd("get_events") for event in settings.events: - if event.type == QUIT: + if event.type == pygame.QUIT: settings.quit() - if event.type == KEYDOWN: + if event.type == pygame.KEYDOWN: key = pygame.key.name(event.key) if key == "escape" or key == "return": settings.run = False @@ -71,3 +76,22 @@ def handle(usage): screen.blit(texttime, textrect) screen.blit(texttt, textrectpertarget) pygame.display.flip() + + +def player_hit_by_explosion(): + + # need to be globals so it is are preserved everytime this is called + global running + + for explosion in settings.explosions_disp: + distance = math.sqrt( + (explosion.pos.centerx - settings.player.pos.centerx) ** 2 + + (explosion.pos.centery - settings.player.pos.centery) ** 2) + + if distance <= 20 and (not ("running" in globals())): + running = "Wow this variable exists" + settings.player.explode() + if settings.player.explosion_anim is not None: + if (settings.player.explosion_anim.state in ["paused", "stopped"] + or settings.player.explosion_anim.isFinished()): + settings.quit() diff --git a/src/objects.py b/src/objects.py index 8e3c953..0ce061c 100644 --- a/src/objects.py +++ b/src/objects.py @@ -170,6 +170,7 @@ class target(): if self.pos.colliderect(bulletrect) and not self.gothit: self.pos_x -= self.explosion.getRect().w / 2.0 self.pos_y -= self.explosion.getRect().h / 2.0 + self.pos.size = self.explosion.getRect().size self.explosion.play() self.gothit = True diff --git a/src/player.py b/src/player.py index 472779a..4bc8781 100644 --- a/src/player.py +++ b/src/player.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import pygame import math +from libs.pyganim import pyganim from ConfigParser import SafeConfigParser @@ -23,6 +24,7 @@ class player(): self.timeplay = 0 # Time player has played self.update = True # If yes new image gets loaded self.speedboost = 1 + self.explosion_anim = None def create_images(self, name): """creates new images from one image for the player""" @@ -186,8 +188,24 @@ class player(): self.img = self.playerup self.select_picture() + def explode(self): + self.speedboost = 0 + explosion_img = pyganim.getImagesFromSpriteSheet( + "./assets/sprites/explosions/ship_expl.png", + width=256, height=256) + explosion_attr = [(anim_file, 40) for anim_file in explosion_img] + self.explosion_anim = pyganim.PygAnimation(explosion_attr, loop=False) + self.explosion_anim.play() + def blit(self, screen): - screen.blit(self.img, self.pos) + if self.explosion_anim is None: + screen.blit(self.img, self.pos) + else: + self.update = False + pos = self.pos.copy() + pos.x -= self.explosion_anim.getMaxSize()[0] / 2 + pos.y -= self.explosion_anim.getMaxSize()[1] / 2 + self.explosion_anim.blit(screen, pos) def reset(self): self.should_move = False diff --git a/src/worlds.py b/src/worlds.py index 3c4faf1..7d812e4 100644 --- a/src/worlds.py +++ b/src/worlds.py @@ -63,12 +63,14 @@ class world(): target.test_ishit(bullet.pos) if target.gothit: self.targets.remove(target) + #TODO: move from settings to here settings.explosions_disp.append(target) settings.explosions_disp = list(set(settings.explosions_disp)) for explosion in settings.explosions_disp: if explosion.kill_entity: settings.explosions_disp.remove(explosion) + pass else: explosion.move(player_pos.left, player_pos.top)