/// <summary> /// Creates a scene node from a stream /// </summary> /// <param name="_Owner"></param> /// <param name="_Parent"></param> /// <param name="_Reader"></param> internal Node( Scene _Owner, Node _Parent, System.IO.BinaryReader _Reader ) { m_Owner = _Owner; // m_NodeType = _Reader.ReadInt32(); // Don't read back the node type as it has already been consumed by the parent m_ID = _Reader.ReadInt32(); m_Owner.RegisterNodeID( this ); m_Name = _Reader.ReadString(); m_Parent = _Parent; if ( _Parent != null ) m_Parent.AddChild( this ); // Read the matrix m_Local2Parent.m[0,0] = _Reader.ReadSingle(); m_Local2Parent.m[0,1] = _Reader.ReadSingle(); m_Local2Parent.m[0,2] = _Reader.ReadSingle(); m_Local2Parent.m[0,3] = _Reader.ReadSingle(); m_Local2Parent.m[1,0] = _Reader.ReadSingle(); m_Local2Parent.m[1,1] = _Reader.ReadSingle(); m_Local2Parent.m[1,2] = _Reader.ReadSingle(); m_Local2Parent.m[1,3] = _Reader.ReadSingle(); m_Local2Parent.m[2,0] = _Reader.ReadSingle(); m_Local2Parent.m[2,1] = _Reader.ReadSingle(); m_Local2Parent.m[2,2] = _Reader.ReadSingle(); m_Local2Parent.m[2,3] = _Reader.ReadSingle(); m_Local2Parent.m[3,0] = _Reader.ReadSingle(); m_Local2Parent.m[3,1] = _Reader.ReadSingle(); m_Local2Parent.m[3,2] = _Reader.ReadSingle(); m_Local2Parent.m[3,3] = _Reader.ReadSingle(); // Read specific data LoadSpecific( _Reader ); // Read children int ChildrenCount = _Reader.ReadInt32(); for ( int ChildIndex=0; ChildIndex < ChildrenCount; ChildIndex++ ) { NODE_TYPE ChildType = (NODE_TYPE) _Reader.ReadByte(); switch ( ChildType ) { case NODE_TYPE.NODE: new Node( _Owner, this, _Reader ); break; case NODE_TYPE.MESH: new Mesh( _Owner, this, _Reader ); break; case NODE_TYPE.LIGHT: new Light( _Owner, this, _Reader ); break; case NODE_TYPE.CAMERA: new Camera( _Owner, this, _Reader ); break; } } }
protected Matrix4x4 m_PreviousLocal2World = Matrix4x4.Identity; // The object transform matrix from the previous frame #endregion Fields #region Constructors /// <summary> /// Creates a new scene node /// </summary> /// <param name="_Owner"></param> /// <param name="_ID"></param> /// <param name="_Name"></param> /// <param name="_Parent"></param> /// <param name="_Local2Parent"></param> internal Node( Scene _Owner, int _ID, string _Name, Node _Parent, Matrix4x4 _Local2Parent ) { m_Owner = _Owner; m_ID = _ID; m_Name = _Name; m_Parent = _Parent; m_Local2Parent = _Local2Parent; // Append the node to its parent if ( _Parent != null ) _Parent.AddChild( this ); }
/// <summary> /// Creates a new scene node /// </summary> /// <param name="_Owner"></param> /// <param name="_ID"></param> /// <param name="_Name"></param> /// <param name="_Parent"></param> /// <param name="_Local2Parent"></param> internal Node(Scene _Owner, int _ID, string _Name, Node _Parent, Matrix4x4 _Local2Parent) { m_Owner = _Owner; m_ID = _ID; m_Name = _Name; m_Parent = _Parent; m_Local2Parent = _Local2Parent; // Append the node to its parent if (_Parent != null) { _Parent.AddChild(this); } }
/// <summary> /// Creates a scene node from a stream /// </summary> /// <param name="_Owner"></param> /// <param name="_Parent"></param> /// <param name="_Reader"></param> internal Node(Scene _Owner, Node _Parent, System.IO.BinaryReader _Reader) { m_Owner = _Owner; // m_NodeType = _Reader.ReadInt32(); // Don't read back the node type as it has already been consumed by the parent m_ID = _Reader.ReadInt32(); m_Owner.RegisterNodeID(this); m_Name = _Reader.ReadString(); m_Parent = _Parent; if (_Parent != null) { m_Parent.AddChild(this); } // Read the matrix m_Local2Parent.m[0, 0] = _Reader.ReadSingle(); m_Local2Parent.m[0, 1] = _Reader.ReadSingle(); m_Local2Parent.m[0, 2] = _Reader.ReadSingle(); m_Local2Parent.m[0, 3] = _Reader.ReadSingle(); m_Local2Parent.m[1, 0] = _Reader.ReadSingle(); m_Local2Parent.m[1, 1] = _Reader.ReadSingle(); m_Local2Parent.m[1, 2] = _Reader.ReadSingle(); m_Local2Parent.m[1, 3] = _Reader.ReadSingle(); m_Local2Parent.m[2, 0] = _Reader.ReadSingle(); m_Local2Parent.m[2, 1] = _Reader.ReadSingle(); m_Local2Parent.m[2, 2] = _Reader.ReadSingle(); m_Local2Parent.m[2, 3] = _Reader.ReadSingle(); m_Local2Parent.m[3, 0] = _Reader.ReadSingle(); m_Local2Parent.m[3, 1] = _Reader.ReadSingle(); m_Local2Parent.m[3, 2] = _Reader.ReadSingle(); m_Local2Parent.m[3, 3] = _Reader.ReadSingle(); // Read specific data LoadSpecific(_Reader); // Read children int ChildrenCount = _Reader.ReadInt32(); for (int ChildIndex = 0; ChildIndex < ChildrenCount; ChildIndex++) { NODE_TYPE ChildType = (NODE_TYPE)_Reader.ReadByte(); switch (ChildType) { case NODE_TYPE.NODE: new Node(_Owner, this, _Reader); break; case NODE_TYPE.MESH: new Mesh(_Owner, this, _Reader); break; case NODE_TYPE.LIGHT: new Light(_Owner, this, _Reader); break; case NODE_TYPE.CAMERA: new Camera(_Owner, this, _Reader); break; } } }