#pragma once
#include <list>
#include "SceneNode.h"

class SceneGraph : public SceneNode
{
public:
	SceneGraph() : SceneNode(L"Root") {};
	SceneGraph(wstring name) : SceneNode(name) {};
	~SceneGraph(void) {};

	bool Initialise(void);
	void Update(FXMMATRIX& currentWorldTransformation);
	void Render(void);
	void Shutdown(void);

	void Add(SceneNodePointer node);
	void Remove(SceneNodePointer node);
	SceneNodePointer Find(wstring name);
	SceneNodePointer GetRootNode();
	SceneNodePointer GetParent();
	SceneNodePointer GetFirstChild();

	list<SceneNodePointer>& GetChildren();

protected:
	// Here you need to add whatever collection you are going to
	// use to store the children of this scene graph
	list<SceneNodePointer> _children;
};

typedef shared_ptr<SceneGraph> SceneGraphPointer;
