/// <summary> /// Constructor of SceneTree class /// </summary> /// <param name="name">Name of the scene tree</param> /// <param name="renderer">Renderer</param> /// <param name="assetEngine">AssetEngine</param> internal SceneTree(string name, Renderer renderer, AssetEngine assetEngine) { Name = name; _renderer = renderer; AssetEngine = assetEngine; _camManager = new CameraManager(this); _root = CreateNode(); }
/// <summary> /// Detaches parent node /// </summary> void IMovable.DetachParent() { _parentNode = null; }
/// <summary> /// Attaches a parent node /// </summary> /// <param name="parent">Parent node</param> void IMovable.AttachParent(SceneNode parent) { if(parent == null) throw new ArgumentNullException("parent"); _parentNode = parent; }
/// <summary> /// Attaches the camera to a scene node<br /> /// <remarks>(Used internally)</remarks> /// </summary> /// <param name="parent">Parent scene node</param> void IMovable.AttachParent(SceneNode parent) { if(parent == null) throw new ArgumentNullException("parent"); ParentTransform = parent; RequireUpdate(); }
/// <summary> /// Destroys a node in this graph /// </summary> /// <param name="node">Node to destroy</param> public void DestroyNode(SceneNode node) { if(node.Scene != this) throw new ArgumentException("Already attached to another tree", "node"); if(node == _root) throw new ArgumentException("Cannot destroy root node", "node"); Node parent = node.ParentNode; if (parent != null) parent.RemoveChild(node); node.DestroyAllChild(); _nodes.Remove(node); }
/// <summary> /// Creates a new node in this graph /// </summary> /// <returns>Returns a new node</returns> public SceneNode CreateNode() { SceneNode node = new SceneNode(this); _nodes.Add(node); return node; }