#pragma once

#include <Welt3D.h>
#include <Bildschirm.h>
#include <Kam3D.h>
#include <Thread.h>

#include "Dimension.h"
#include "CurrentPlayer.h"

class World : public Framework::Thread
{
private:
    Framework::RCArray<Dimension> *dimensions;
    CurrentPlayer *currentPlayer;
    Framework::Welt3D *renderedWorld;
    Framework::Bildschirm3D *zScreenPtr;
    Framework::Kam3D *kam;

public:
    World( Framework::Bildschirm3D *zScreen );
    ~World();
    void update();
    void setChunk( Chunk *chunk, int dimensionId );
    void thread() override;

    Block *zBlockAt( Framework::Vec3<int> location, int dimension ) const;
    Dimension *zDimension( int id ) const;
    void setVisibility( Framework::Model3D *zModel, bool visible );
    Framework::Bildschirm3D *zScreen() const;
};