
Added the files provided for the tutorial Added the SplitMeshNode and SubMeshNode classes
80 lines
1.4 KiB
C++
80 lines
1.4 KiB
C++
#include "SceneGraph.h"
|
|
|
|
bool SceneGraph::Initialise()
|
|
{
|
|
bool currentStatus = true;
|
|
|
|
for (SceneNodePointer& currentSceneGraphPtr : _children)
|
|
{
|
|
currentStatus = currentSceneGraphPtr->Initialise();
|
|
if (!currentStatus)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
return currentStatus;
|
|
}
|
|
|
|
void SceneGraph::Update(FXMMATRIX& currentWorldTransformation)
|
|
{
|
|
SceneNode::Update(currentWorldTransformation);
|
|
|
|
XMMATRIX combinedWorldTransform = XMLoadFloat4x4(&_combinedWorldTransformation);
|
|
for (SceneNodePointer& currentSceneGraphPtr : _children)
|
|
{
|
|
currentSceneGraphPtr->Update(combinedWorldTransform);
|
|
}
|
|
}
|
|
|
|
void SceneGraph::Render()
|
|
{
|
|
for (SceneNodePointer& currentSceneGraphPtr : _children)
|
|
{
|
|
currentSceneGraphPtr->Render();
|
|
}
|
|
}
|
|
|
|
void SceneGraph::Shutdown()
|
|
{
|
|
for (SceneNodePointer& currentSceneGraphPtr : _children)
|
|
{
|
|
currentSceneGraphPtr->Shutdown();
|
|
}
|
|
}
|
|
|
|
void SceneGraph::Add(SceneNodePointer node)
|
|
{
|
|
_children.push_back(node);
|
|
}
|
|
|
|
void SceneGraph::Remove(SceneNodePointer node)
|
|
{
|
|
for (SceneNodePointer& currentSceneGraphPtr : _children)
|
|
{
|
|
if (currentSceneGraphPtr == node)
|
|
{
|
|
_children.remove(currentSceneGraphPtr);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
SceneNodePointer SceneGraph::Find(wstring name)
|
|
{
|
|
if (_name == name)
|
|
{
|
|
return shared_from_this();
|
|
}
|
|
|
|
SceneNodePointer foundValue = nullptr;
|
|
for (SceneNodePointer& currentSceneGraphPtr : _children)
|
|
{
|
|
foundValue = currentSceneGraphPtr->Find(name);
|
|
if (foundValue != nullptr)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
return foundValue;
|
|
} |