#ifndef RENDERABLE_H
#define RENDERABLE_H

#include "scene_node_entity.h"
#include "utils/typeclass_helpers.h"

typedef struct IRenderable {
    void (*const draw)(void *self);
} IRenderable;

typedef struct Renderable {
    IRenderable const *tc;
    void *data;
    ISceneNodeEntity const *scene_node_entity;
} Renderable;

#define impl_Renderable_for(T, draw_f)\
Renderable T##_as_Renderable(T *x) {\
    TC_FN_TYPECHECK(void, draw_f, T*);\
    static IRenderable const tc = {\
        .draw = (void(*const)(void*)) draw_f\
    };\
    return (Renderable){ .tc = &tc, .data = x, .scene_node_entity = T##_as_SceneNodeEntity(x).tc };\
}

#endif // !RENDERABLE_H
