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;
}
}
}