#pragma once

#include "Mat3.h"
#include "Welt2D.h"
#include "Zeichnung.h"

namespace Framework
{
    class Welt2D;
    class Object2D;

    class Kamera2D : public ZeichnungHintergrund
    {
    protected:
        Welt2D* welt;
        bool tickWelt;
        Vertex wPos;
        float rotation;
        float zoom;
        Mat3<float> matrix;
        Text* name;

    public:
        __declspec(dllexport) Kamera2D();
        __declspec(dllexport) virtual ~Kamera2D();
        __declspec(dllexport) void setName(const char* name);
        __declspec(dllexport) void setName(Text* name);
        __declspec(dllexport) void lookAtWorldPos(Vertex pos);
        __declspec(dllexport) void lookAtWorldPos(float x, float y);
        __declspec(dllexport) void lookAtWorldArea(float width, float height);
        __declspec(dllexport) void setDrehung(float rotation);
        __declspec(dllexport) void setZoom(float zoom);
        __declspec(dllexport) void setWelt(Welt2D* welt, bool tick);
        __declspec(dllexport) bool tick(double time);
        __declspec(dllexport) void render(Bild& zRObj);
        __declspec(dllexport) Vertex getWorldCoordinates(Punkt screenPos);
        __declspec(dllexport) Vertex getWorldDirection(Vertex dir);
        __declspec(dllexport) Vertex getWorldPosition();
        __declspec(dllexport) float getRotation();
        __declspec(dllexport) float getZoom();
        __declspec(dllexport) const Mat3<float>& getMatrix();
        __declspec(dllexport) Text* getName();
        __declspec(dllexport) Text* zName();
    };

    class TestKamera2D : public Kamera2D
    {
    public:
        __declspec(dllexport) bool tick(double time);
    };
} // namespace Framework