/// <summary>
        /// Adds RMB models to block node.
        /// </summary>
        /// <param name="block">DFBlock.</param>
        /// <param name="blockNode">BlockNode.</param>
        private void AddRMBModels(ref DFBlock block, BlockNode blockNode)
        {
            // Iterate through all subrecords
            float degrees;

            foreach (DFBlock.RmbSubRecord subRecord in block.RmbBlock.SubRecords)
            {
                // Create subrecord node
                SceneNode subrecordNode = new SceneNode();
                degrees = subRecord.YRotation / rotationDivisor;
                subrecordNode.Position = new Vector3(subRecord.XPos, 0f, -rmbSide + subRecord.ZPos);
                subrecordNode.Rotation = new Vector3(0f, MathHelper.ToRadians(degrees), 0f);
                blockNode.Add(subrecordNode);

                // Iterate through models in this subrecord
                foreach (DFBlock.RmbBlock3dObjectRecord obj in subRecord.Exterior.Block3dObjectRecords)
                {
                    // Create model node
                    ModelNode modelNode = CreateModelNode(obj.ModelIdNum);
                    degrees            = obj.YRotation / rotationDivisor;
                    modelNode.Position = new Vector3(obj.XPos, -obj.YPos, -obj.ZPos);
                    modelNode.Rotation = new Vector3(0f, MathHelper.ToRadians(degrees), 0f);
                    subrecordNode.Add(modelNode);
                }
            }
        }
예제 #2
0
 /// <summary>
 /// Adds a node to the scene.
 /// </summary>
 /// <param name="parent">Parent node, or NULL for root.</param>
 /// <param name="node">SceneNode to add to parent.</param>
 public void AddNode(SceneNode parent, SceneNode node)
 {
     if (parent == null)
     {
         root.Add(node);
     }
     else
     {
         parent.Add(node);
     }
 }