# (c) Hochschule Anhalt, veröffentlicht unter MIT-Lizenz
# Figur-Klasse
# Autor: Johannes Tümler
# Letzte Änderung: 12.04.2022
# Zweck: Figur-Entität definieren
#
# Harpyie erbt Alles von Monster
# können den Held bei Berührung töten
# Harpyie kann in alle 4 Himmelrichtungen schießen, nacheinander pro Richtung (nicht zugleich)
# Harpyie kann seitwärts schießen
# Harpyie kann in alle Richtungen bewegen

# Der Nachfolgende Codeblock "BLOCK1" sorgt dafür, dass man aus jeder Datei heraus das Hauptprogramm starten kann.
# Dadurch kann man in jeder Datei auf "play" drücken und es wird automatisch main.py gestartet.
if __name__=="__main__":
    import subprocess
    # Auf Linux oder Mac aktivieren Sie die folgende Zeile und deaktivieren Sie die Zeile danach:
    #subprocess.call("python3 main.py", shell=True)  # die richtige Main-Datei aufrufen (unser eigentliches Hauptprogramm)
    subprocess.call("main.py", shell=True)  # die richtige Main-Datei aufrufen (unser eigentliches Hauptprogramm)
    exit(0) # nun das Programm hier beenden .. wir wollen ja nur das Hauptprogramm starten und nicht *diese* Datei.
# Ende "BLOCK1"

from re import I
import pygame
from KlasseMonster import Monster
from time import time
from random import randint
from KlasseMagie import Magie
from KlasseHeld import Held
import sounds                                                                                 #Die Quelle von Sounds Von Gamewin
from sounds import soundGewonnen

class Harpyie(Monster):                                                                       #erbt vom Monster
    def __init__(self, x, y, geschw, breite, hoehe, level, bildFigur, zeitMonster):
        super().__init__(x, y, geschw, breite, hoehe, level, bildFigur,zeitMonster)
        
        self.MonsterDupl = Monster                                                            #Welche Klasse erschaffen wird
        self.dupliList = []                                                                     #Liste der erschaffenen Hapyie
        self.zeitDupl = zeitMonster
        self.anzahlDouble = 1

        self.zeitUnsicht = zeitMonster
        self.bildUnsicht = [pygame.image.load("Bilder/Harpyie/tot.png"),
                         pygame.image.load("Bilder/Harpyie/tot.png")]
        self.saveBildOben = self.bildOben
        self.saveBildUnten = self.bildUnten
        self.saveBildRechts = self.bildRechts
        self.saveBildLinks = self.bildLinks

        self.zeitSpring = zeitMonster

        self.Harpyiekugeln = []                                  #Die Kugelnlist von Hapyie
        self.MagieReichtung=0
        self.block=True



    def reset(self):
        self.x = self.xReset
        self.y = self.yReset
        self.leben = True
        self.heldTot = False
        self.anzahlDouble = 1
        self.dupliList = []
        self.Harpyiekugeln = []


    def faehigkeit(self):                        #Fähigkeiten von Hapyie
        self.toeten()
        self.duplizieren()
        self.Magie()


  
    def duplizieren(self):                                                                      #Codequelle von KlasseGeist
        for dupli in self.dupliList:                                                            #Alle erschaffenen Hapyie in Bewegung bringen
           if dupli.mlaufen(self.heldDaten):                                                    #Prüfen ob ein erschaffene Hapyie den Held getötet hat
                self.heldTot = True

        if time() - self.zeitDupl >= 0.5 * self.anzahlDouble:                                   #Zeit zur Duplezierung wird jedes mal erhöht
            self.dupliList.append(self.MonsterDupl(x = self.x, y = self.y, geschw = self.geschw, breite = self.breite, hoehe = self.hoehe, level = self.level, bildFigur = self.bildFigur, zeitMonster = time())) #Monster wird erschaffen und in die Liste eingefügt
            self.zeitDupl = time()                                                                                                            #Zeit wird wieder auf Null gesetzt
            self.anzahlDouble += 1
    
    def Magie(self):                                                                            #Hapyie kann die Magiekugeln schiessen
        if(int(time())%2==0):                                                                   #Kugelschuss nicht gleichzeitig
            if (self.block):
                self.Harpyiekugeln.append(Magie(self.x, self.y, self.MagieReichtung, "R", 1))               
                self.block=False
                self.MagieReichtung+=1
                if self.MagieReichtung == 8:                                                    #kugelschuss in jede Richtungen:8 Kugelnrichungen
                    self.MagieReichtung=0
        else:  
            self.block=True

        for k in self.Harpyiekugeln:                                                                   #Alle Magiekugeln werden in Bewegung gebracht und Kollision von Hindernissen vernichtet
            if not self.hindernis(k.kugelRec):
                self.Harpyiekugeln.remove(k)
            k.bewegung()
            for b in self.heldDaten.kugeln:                                                            #Die Kugeln von Held und Hapyie werden vernichtet, wenn sie sich berühren
                if k.kugelRec.colliderect(b.kugelRec):
                    self.heldDaten.kugeln.remove(b)
                    self.Harpyiekugeln.remove(k)
    
    def sterben(self):                                                             # Hapyie ist tot nach der Berührung von der Magie des Helden
        for k in self.heldDaten.kugeln:
            if self.rechteck.colliderect(k.kugelRec):                              #Wenn Hapyie gestorben: gewonnen-Sound wird aktiviert
                self.heldDaten.kugeln.remove(k)                                    #Codequelle:GameOver und KlasseMonster
                self.leben = False
                soundGewonnen()

        

