From 6a81ac4ecefe5537c471c2df9e1c133a5852f0c5 Mon Sep 17 00:00:00 2001 From: Sara Date: Fri, 13 Sep 2024 00:01:43 +0200 Subject: [PATCH] feat: created test object that renders a yellow box --- src/test_object.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++ src/test_object.h | 29 ++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 src/test_object.c create mode 100644 src/test_object.h diff --git a/src/test_object.c b/src/test_object.c new file mode 100644 index 0000000..a57be71 --- /dev/null +++ b/src/test_object.c @@ -0,0 +1,49 @@ +#include "test_object.h" +#include "core/render.h" +#include "raylib.h" + +START_REFLECT(TestObject); +REFLECT_TYPECLASS(TestObject, Drop); +REFLECT_TYPECLASS(TestObject, SceneNodeEntity); +REFLECT_TYPECLASS(TestObject, Renderable); +END_REFLECT(TestObject); + +impl_Drop_for(TestObject, + DestroyTestObject +) + +impl_Renderable_for(TestObject, + TestObjectDraw +) + +impl_SceneNodeEntity_for(TestObject, + TestObjectEnterTree, + TestObjectExitTree, + TestObjectTick +) + +SceneNode *CreateTestObject() { + TestObject *self = new(TestObject); + return CreateSceneNode(TestObject_as_SceneNodeEntity(self)); +} + +void DestroyTestObject(TestObject *self) { + free(self); +} + +void TestObjectEnterTree(TestObject *self) { + self->transform = TC_CAST(self->node->parent->entity, Transformable); + AddRenderable(TestObject_as_Renderable(self)); +} + +void TestObjectExitTree(TestObject *self) { + RemoveRenderable(TestObject_as_Renderable(self)); +} + +void TestObjectDraw(TestObject *self) { + Vector3 position = Vector3Add((Vector3){0.f, 1.f, 0.f}, self->transform.tc->get_global_transform(self->transform.data).translation); + DrawCube(position, 1.f, 2.f, 1.f, YELLOW); +} + +void TestObjectTick(TestObject *self, double delta) { +} diff --git a/src/test_object.h b/src/test_object.h new file mode 100644 index 0000000..2e42962 --- /dev/null +++ b/src/test_object.h @@ -0,0 +1,29 @@ +#ifndef TEST_OBJECT_H +#define TEST_OBJECT_H + +#include "core/scene.h" +#include "core/scene_node_entity.h" +#include "core/transformable.h" +#include "core/renderable.h" +#include "utils/drop.h" +#include "utils/mirror.h" + +typedef struct TestObject { + SceneNode *node; + Transformable transform; +} TestObject; + +SceneNode *CreateTestObject(); +void DestroyTestObject(TestObject *self); + +void TestObjectEnterTree(TestObject *self); +void TestObjectExitTree(TestObject *self); +void TestObjectDraw(TestObject *self); +void TestObjectTick(TestObject *self, double delta); + +DECL_REFLECT(TestObject); +decl_typeclass_impl(SceneNodeEntity, TestObject); +decl_typeclass_impl(Drop, TestObject); +decl_typeclass_impl(Renderable, TestObject); + +#endif // !TEST_OBJECT_H