Files
cursebreaker-parser/include/tree_builder.h
2025-12-24 16:51:01 +09:00

34 lines
918 B
C++

#pragma once
#include "assets/scene.h"
#include "types/transform.h"
#include <vector>
void BuildTreeHelper(Transform& transform, const glm::mat4& parentMatrix);
template <typename ParsedProject>
void BuildTree(ParsedProject& project, Scene& scene)
{
// Get the scene data which contains the components
auto& sceneData = project.GetSceneData(scene.GUID);
// Get all transforms from the scene data
auto& transforms = sceneData.template GetComponents<Transform>();
// Find transforms with no parent (root transforms)
std::vector<Transform*> rootTransforms;
for (auto& transform : transforms)
{
if (transform.Parent == nullptr)
{
rootTransforms.push_back(&transform);
}
}
// Build tree for each root transform
for (auto rootTransform : rootTransforms)
{
BuildTreeHelper(*rootTransform, glm::mat4(1.0f));
}
}