public override void Load(XmlElement xmlNode) { base.Load(xmlNode); if (xmlNode.HasAttribute("Occluder")) { isOccluder = bool.Parse(xmlNode.GetAttribute("Occluder")); } if (xmlNode.HasAttribute("IgnoreDepth")) { ignoreDepth = bool.Parse(xmlNode.GetAttribute("IgnoreDepth")); } if (xmlNode.HasAttribute("AddToPhysicsEngine")) { AddToPhysicsEngine = bool.Parse(xmlNode.GetAttribute("AddToPhysicsEngine")); } int i = 0; if (xmlNode.ChildNodes[i].Name.Equals("ModelCreationInfo")) { XmlElement modelInfo = (XmlElement)xmlNode.ChildNodes[i]; if (modelInfo.HasAttribute("ResourceName")) { if (!modelInfo.HasAttribute("ModelLoaderName")) { throw new GoblinException("ModelLoaderName attribute is required if " + "ResourceName attribute is specified"); } String assetName = Path.ChangeExtension(modelInfo.GetAttribute("ResourceName"), null); IModelLoader loader = (IModelLoader)Activator.CreateInstance(Type.GetType( modelInfo.GetAttribute("ModelLoaderName"))); model = (IModel)loader.Load("", assetName); } else { if (!modelInfo.HasAttribute("CustomShapeParameters")) { throw new GoblinException("CustomShapeParameters attribute must be " + "specified if ResourceName is not specified"); } String[] primShapeParams = modelInfo.GetAttribute("CustomShapeParameters").Split(','); model = (IModel)Activator.CreateInstance(Type.GetType(xmlNode.ChildNodes[i + 1].Name), primShapeParams); } model.Load((XmlElement)xmlNode.ChildNodes[i + 1]); i += 2; } material = (Material)Activator.CreateInstance(Type.GetType(xmlNode.ChildNodes[i].Name)); material.Load((XmlElement)xmlNode.ChildNodes[i]); physicsProperties = (IPhysicsObject)Activator.CreateInstance(Type.GetType( xmlNode.ChildNodes[i + 1].Name)); physicsProperties.Load((XmlElement)xmlNode.ChildNodes[i + 1]); physicsProperties.Container = this; if (model is IPhysicsMeshProvider) { physicsProperties.MeshProvider = (IPhysicsMeshProvider)model; } physicsProperties.Model = model; }