#ifndef CAMERA_NODE_H
#define CAMERA_NODE_H

#include "scene.h"
#include "scene_node_entity.h"
#include "transformable.h"
#include "utils/drop.h"
#include "raylib.h"

typedef struct CameraNode {
    SceneNode *node;
    Transform transform;
    Transform global_transform;
} CameraNode;

extern SceneNode *CreateCameraNode();
extern void DestroyCameraNode(CameraNode *self);

extern void CameraNodeEnterTree(CameraNode *self);

extern Camera3D CameraNodeGetCamera(CameraNode *self);

extern Transform *CameraNodeGetTransform(CameraNode *self);
extern Transform *CameraNodeGetGlobalTransform(CameraNode *self);

DECL_REFLECT(CameraNode)
decl_typeclass_impl(Drop, CameraNode)
decl_typeclass_impl(Transformable, CameraNode)
decl_typeclass_impl(SceneNodeEntity, CameraNode)

#endif // !CAMERA_NODE_H
