Example #1
0
        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;
        }