feat: test object now rotates the surroundings

This commit is contained in:
Sara 2024-09-13 11:28:51 +02:00
parent 09e52d007a
commit 8f3ad30c4a
3 changed files with 7 additions and 4 deletions

View file

@ -10,12 +10,14 @@
Scene *CreateInitialScene() { Scene *CreateInitialScene() {
SceneNode *root = CreateTransformNode(); SceneNode *root = CreateTransformNode();
SceneNode *camera_parent_parent = CreateTransformNode(); SceneNode *camera_parent_parent = CreateTransformNode();
// create parent of camera parent to test transform hierarchy
Transformable transformable = TC_CAST(camera_parent_parent->entity, Transformable); Transformable transformable = TC_CAST(camera_parent_parent->entity, Transformable);
Transform transform = transformable.tc->get_transform(transformable.data); Transform transform = transformable.tc->get_transform(transformable.data);
transform.translation = (Vector3){10.f, 0.f, 0.f}; transform.translation = (Vector3){10.f, 0.f, 0.f};
transform.rotation = QuaternionFromEuler(0.f, -10.f * DEG2RAD, 0.f); transform.rotation = QuaternionFromEuler(0.f, -10.f * DEG2RAD, 0.f);
transformable.tc->set_transform(transformable.data, transform); transformable.tc->set_transform(transformable.data, transform);
// create camera with a transform parent // create camera with a transform parent
SceneNodeAddChild(root, camera_parent_parent);
SceneNode *camera_parent = CreateTransformNode(); SceneNode *camera_parent = CreateTransformNode();
// set camera parent location // set camera parent location
transformable = TC_CAST(camera_parent->entity, Transformable); transformable = TC_CAST(camera_parent->entity, Transformable);
@ -23,10 +25,9 @@ Scene *CreateInitialScene() {
transform.translation = (Vector3){0.f, 10.f, -10.f}; transform.translation = (Vector3){0.f, 10.f, -10.f};
transform.rotation = QuaternionFromEuler(45.f * DEG2RAD, 0.f, 0.f); transform.rotation = QuaternionFromEuler(45.f * DEG2RAD, 0.f, 0.f);
transformable.tc->set_transform(transformable.data, transform); transformable.tc->set_transform(transformable.data, transform);
SceneNodeAddChild(root, camera_parent_parent);
SceneNodeAddChild(camera_parent_parent, camera_parent); SceneNodeAddChild(camera_parent_parent, camera_parent);
SceneNodeAddChild(camera_parent, CreateCameraNode()); SceneNodeAddChild(camera_parent, CreateCameraNode());
SceneNodeAddChild(root, CreateTestObject()); SceneNodeAddChild(camera_parent, CreateTestObject());
return CreateScene(root); return CreateScene(root);
} }

View file

@ -41,9 +41,10 @@ void TestObjectExitTree(TestObject *self) {
} }
void TestObjectDraw(TestObject *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) { void TestObjectTick(TestObject *self, double delta) {
Transform local_transform = self->transform.tc->get_transform(self->transform.data);
local_transform.rotation = QuaternionMultiply(QuaternionFromEuler(0.f, 0.01f, 0.f), local_transform.rotation);
self->transform.tc->set_transform(self->transform.data, local_transform);
} }

View file

@ -8,6 +8,7 @@
#include "utils/drop.h" #include "utils/drop.h"
#include "utils/mirror.h" #include "utils/mirror.h"
// Test object created to generally test game features
typedef struct TestObject { typedef struct TestObject {
SceneNode *node; SceneNode *node;
Transformable transform; Transformable transform;