from typing import Any

import pygame
from pygame.sprite import Sprite


class Explode0(Sprite):
    def __init__(self, ai_game):
        super().__init__()
        # 获取屏幕设置
        self.screen = ai_game.screen
        self.screen_rect = ai_game.screen.get_rect()
        self.settings = ai_game.settings


class Explode(Explode0):    # 敌人的爆炸
    def __init__(self, ai_game):
        super().__init__(ai_game)
        self.images = self.settings.frame_images
        self.frame = 0
        self.image = self.images[self.frame]
        self.rect = self.image.get_rect()
        self.last_frame = 15

        self.last_time = pygame.time.get_ticks()
        self.now_time = None
        self.frame_rate = 0

        sound = pygame.mixer.Sound('resource/Bonus/boom.wav')
        # sound.set_volume(0.9)
        sound.play()

    def update(self):
        self.now_time = pygame.time.get_ticks()
        if self.now_time - self.last_time > self.frame_rate:
            self.last_time = self.now_time
            if self.frame <= self.last_frame:
                self.image = self.images[self.frame]
                self.frame += 1
            else:
                self.kill()


class Explode1(Explode0):  # 飞船被击毁时的爆炸
    def __init__(self, ai_game):
        super().__init__(ai_game)
        # 导入图片
        self.images = [pygame.image.load("resource/Damage/playerShip3_damage" + str(i) + ".png") for i in range(1, 4)]
        self.image_index = 2
        self.image = self.images[self.image_index]
        self.image_rect = self.image.get_rect()
        self.image_index = 3
        # 改变爆炸
        self.ready_to_change = 0

        # 播放声音
        sound = pygame.mixer.Sound('resource/Bonus/sfx_lose.ogg')
        sound.play()

    def update(self, *args: Any, **kwargs: Any) -> None:
        if self.image_index > 0:
            self.ready_to_change += 1
            if self.ready_to_change % 10 == 0:
                self.image_index -= 1
                self.image = self.images[self.image_index]
        else:
            self.kill()
            # print("dw")


class Explode2(Explode0):  # 飞船被击中的提示
    def __init__(self, ai_game):
        super().__init__(ai_game)
        # 导入图片
        self.ship = ai_game.ship
        self.images = [pygame.image.load("resource/Effects/shield" + str(i) + ".png") for i in range(1, 4)]
        self.image_index = 2
        self.image = self.images[self.image_index]
        self.image_rect = self.image.get_rect()
        self.rect = self.image_rect
        # 改变爆炸
        self.ready_to_change = 0

        # 播放声音
        sound = pygame.mixer.Sound("resource/Bonus/sfx_zap.ogg")
        sound.set_volume(0.1)
        sound.play()

    def update(self, *args: Any, **kwargs: Any) -> None:
        self.rect.center = self.ship.rect.center
        if self.image_index >= 0:
            self.ready_to_change += 1
            if self.ready_to_change % 10 == 0:
                self.image_index -= 1
                self.image = self.images[self.image_index]
        else:
            self.kill()