#ifndef MiniGames_H
#define MiniGames_H

#include <Fenster.h>
#include <Animation.h>
#include "MiniGame.h"
#include <Thread.h>
#include <Knopf.h>
#include <MiniGameV.h>
#include "DLLDateien.h"

using namespace Framework;

class MiniGames; // aus dieser Datei

class MGSuchen : private Thread
{
private:
    MiniGames * mGames;
public:
    // Konstruktor
    MGSuchen( MiniGames *mGames );
    // Destruktor
    ~MGSuchen();
    // nicht constant
    void thread() override;
};

class MGLaden : private Thread
{
private:
    Text * name;
    MiniGameV *game;
    DLLDateien *dLLs;
    int ref;

public:
    // Konstruktor
    MGLaden( char *name, DLLDateien *zDLLs );
    // Destruktor
    ~MGLaden();
    // nicht constant
    void thread();
    // constant
    bool fertig() const;
    MiniGameV *zGame() const;
    // Reference Counting
    MGLaden *getThis();
    MGLaden *release();
};

class MiniGames : public Zeichnung
{
private:
    Punkt bildschirmGröße;
    LRahmen *rahmen;
    RCArray< MiniGame > *games;
    MGLaden *mgl;
    Schrift *schrift;
    DLLDateien *dLLs;
    Bildschirm *screen;
    double tickVal;
    int alpha2;
    int ref;

public:
    // Konstruktor
    MiniGames( Schrift *zSchrift, DLLDateien *zDLLs, Bildschirm *zScreen );
    // Destruktor
    ~MiniGames();
    // nicht constant
    void addMiniGame( MiniGame *mg );
    void doMausEreignis( MausEreignis &me ) override;
    void doTastaturEreignis( TastaturEreignis &te ) override;
    bool tick( double z ) override;
    void render( Bild &zRObj ) override;
    // Reference Counting
    MiniGames *getThis();
    MiniGames *release();
};

#endif