# (c) Hochschule Anhalt, veröffentlicht unter MIT-Lizenz
# Monster-Klasse
# Autor: Viktor Lysow, Johannes Tümler
# Letzte Änderung: 30.03.2022
# Zweck: Definition der Monster
#
# Monster erbt Alles von Figur
# Monster können selbst laufen
# Sterben, wenn sie mit der Magie des Helden in Berührung kommen
# können den Helden bei Berührung töten

# 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"

import pygame
from random import randint
from time import time
from KlasseFigur import Figur
from screen import screen
import sounds


class Monster(Figur):
    def __init__(self, x, y, geschw, breite, hoehe, level, bildFigur, zeitMonster):
        super().__init__(x, y, geschw, breite, hoehe, level, bildFigur)
        self.xReset = x
        self.yReset = y
        self.richtung = 1
        self.zeitMonster = zeitMonster
        self.leben = True
        self.heldTot = False
        self.feuerWechsel = 0
        self.heldDaten = None
        self.monsterDaten = None

        self.bildTot = [pygame.image.load(f"Bilder/Feuer/F1.png"),
                         pygame.image.load(f"Bilder/Feuer/F2.png"),
                         pygame.image.load(f"Bilder/Feuer/F3.png")]

    def reset(self):
        self.x = self.xReset
        self.y = self.yReset
        self.leben = True
        self.heldTot = False

    def mlaufen(self, spieler , monster = None):                                   #Monster können selber laufen
        if self.leben:
            self.heldDaten = spieler                                               #Alle Daten vom Held werden hier gespeichert
            self.monsterDaten = monster                                            #Alle Daten von einem Monster werden hier gespeichert
            if time() - self.zeitMonster >= 1:                                     #abhängig von der Zeit
                self.richtung = randint(0, 3)                                      #Zufallsrichtung
                self.zeitMonster = time()
            self.laufen(self.richtung)                                             #Laufen in eine Richtung
            self.sterben()
            self.faehigkeit()
            return self.heldTot                                                     #Rückgabe ob der Held tot ist

        else:
            screen.blit(self.bildTot[self.feuerWechsel], (self.x, self.y))          #Monster brennen, wenn sie tot sind
            if time() - self.zeitMonster >= 0.15:
                if self.feuerWechsel < 2:
                    self.feuerWechsel += 1
                else:
                    self.feuerWechsel = 0
                self.zeitMonster = time()

    def toeten(self):                                                               #Held wird getötet bei Kollision
        if self.rechteck.colliderect(self.heldDaten.rechteck):
            sounds.soundTot()
            screen.blit(self.heldDaten.bildtot, (self.heldDaten.x, self.heldDaten.y))
            self.heldTot = True

    def sterben(self):                                                             # Monster ist tot nach der Berührung von der Magie des Helden
        for k in self.heldDaten.kugeln:
            if self.rechteck.colliderect(k.kugelRec):
                self.heldDaten.kugeln.remove(k)
                self.leben = False
                sounds.soundFeuer()

    def faehigkeit(self):                                                            #Alle Fähigkeiten von Monster kommen hier rein
        self.toeten()