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