Files
directx-plane-game/Graphics2/SceneGraph.cpp
iDunnoDev 7a57c73ac3 Added the camera class
Added the DDS Texture Loading for future use
Added the gamepad class for future use
Added first child method to the scenegraph
Added RGB to intensity and lerp methods to the shared methods class
Added the terrain node class with normals
Fixed issue with submeshnode not passing the world transform to the actual meshes
2022-04-18 22:33:15 +01:00

90 lines
1.6 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;
}
SceneNodePointer SceneGraph::GetFirstChild()
{
SceneNodePointer firstChild = nullptr;
if (_children.size() > 0)
{
firstChild = _children.front();
}
return firstChild;
}