#pragma once

#include "GameObject.h"
#include "Spieler.h"

class Spiel;

#define PFEIL_DAMAGE 100
#define KUGEL_DAMAGE 100

class Geschoss : public GameObject
{
private:
    float speed;
    Richtung richtung;
    Spieler *besitzer;
    GeschossTyp typ;
    int tunnelBenutzt;
    int umgelenkt;
    int geschosseGetroffen;
    int schalter;
    int currentImage;
    double nextImage;
    int id;
    ResourceRegistry *resources;

public:
    Geschoss( ResourceRegistry *zResources, int id, float speed, GeschossTyp typ, Richtung r, int x, int y, Spieler *besitzer );
    ~Geschoss();
    void invertDirection();
    void addUmlenkung( Spiel *zSpiel );
    void addGeschossTreffer( Spiel *zSpiel );
    void addTunnel( Spiel *zSpiel );
    void addSchalter();
    void setSpeed( float speed );
    void setBesitzer( Spieler *besitzer );
    void setTyp( GeschossTyp typ );
    void setRichtung( Richtung r );
    void tick( double zeit );
    GeschossTyp getTyp() const;
    Spieler *zBesitzer() const;
    Spieler *getBesitzer() const;
    Richtung getRichtung() const;
};

// size: 150x150
class FeuerballTreffer : public GameObject
{
private:
    int id;
    Spieler *besitzer;
    int count;
    float timeLeft;
    Resource *animation;
    int currentImage;
    double nextImage;

public:
    FeuerballTreffer( ResourceRegistry *zResources, int id, int x, int y, Spieler *besitzer, int maxZeit );
    ~FeuerballTreffer();
    void tick( double zeit );
    bool isOver() const;
    bool makeDamage() const;
    Spieler *zVerursacher() const;
};