コード例 #1
0
        private void loadTemplate(Template target)
        {
            XmlTextReader reader = new XmlTextReader(target.pointer);

            target.meshes    = new List <string> {
            };
            target.pmeshes   = new List <string> {
            };
            target.materials = new List <string> {
            };

            target.isStatic = false;
            target.useType  = Template.UseType.Model;

            while (reader.Read())
            {
                // parsing data in template tag
                if (reader.Name == "template")
                {
                    while (reader.MoveToNextAttribute())
                    {
                        if (reader.Name == "name")
                        {
                            target.name = reader.Value;
                        }

                        if (reader.Name == "type")
                        {
                            switch (reader.Value)
                            {
                            case "animated":
                                target.useType = Template.UseType.Animated;
                                break;

                            case "meta":
                                target.useType = Template.UseType.Meta;
                                break;

                            default:
                                target.useType = Template.UseType.Model;
                                break;
                            }
                        }
                    }

                    gameWindow.log("parsing template: " + target.name);
                    reader.MoveToElement();

                    while (reader.Read())
                    {
                        if (reader.Name == "template")
                        {
                            break;
                        }

                        if (reader.Name == "static")
                        {
                            target.isStatic = true;
                        }

                        if (reader.Name == "material" && reader.HasAttributes)
                        {
                            while (reader.MoveToNextAttribute())
                            {
                                if (reader.Name == "source")
                                {
                                    target.materials.Add(reader.Value);
                                    gameWindow.log("material: " + reader.Value);
                                }
                            }
                        }

                        if (reader.Name == "mesh" && reader.HasAttributes)
                        {
                            while (reader.MoveToNextAttribute())
                            {
                                if (reader.Name == "source")
                                {
                                    target.meshes.Add(reader.Value);
                                    gameWindow.log("mesh: " + reader.Value);
                                }
                            }
                        }

                        if (reader.Name == "pmesh" && reader.HasAttributes)
                        {
                            while (reader.MoveToNextAttribute())
                            {
                                if (reader.Name == "source")
                                {
                                    target.pmeshes.Add(reader.Value);
                                    gameWindow.log("phys mesh: " + reader.Value);
                                }
                            }
                        }

                        if (reader.Name == "position" && reader.HasAttributes)
                        {
                            while (reader.MoveToNextAttribute())
                            {
                                if (reader.Name == "offset")
                                {
                                    target.positionOffset = GenericMethods.FloatFromString(reader.Value);
                                    gameWindow.log("offset: " + reader.Value);
                                }
                            }
                        }

                        if (reader.Name == "volume" && reader.HasAttributes)
                        {
                            while (reader.MoveToNextAttribute())
                            {
                                if (reader.Name == "radius")
                                {
                                    target.volumeRadius = GenericMethods.FloatFromString(reader.Value);
                                    gameWindow.log("radius: " + reader.Value);
                                }
                            }
                        }

                        if (reader.Name == "light" && reader.HasAttributes)
                        {
                            while (reader.MoveToNextAttribute())
                            {
                                target.hasLight = true;

                                if (reader.Name == "color")
                                {
                                    target.lightColor = GenericMethods.VectorFromString(reader.Value);
                                }
                            }
                        }

                        if (reader.Name == "normal")
                        {
                            target.normal = true;
                        }

                        target.loaded = true;
                        templates[target.identifier] = target;
                    }
                }
            }
        }
コード例 #2
0
        public void loadMaterialXml(Material target)
        {
            XmlTextReader reader = new XmlTextReader(target.pointer);

            //target.envMapAlphaBaseTexture = false;

            gameWindow.log("parsing material: " + target.name);

            while (reader.Read())
            {
                // parsing data in material tag
                if (reader.Name == "material" && reader.HasAttributes)
                {
                    while (reader.MoveToNextAttribute())
                    {
                        if (reader.Name == "shader")
                        {
                            target.shader = gameWindow.shaderLoader.getShader(reader.Value);
                        }

                        else if (reader.Name == "ssnshader")
                        {
                            target.ssnshader = gameWindow.shaderLoader.getShader(reader.Value);
                        }

                        else if (reader.Name == "selection")
                        {
                            target.selectionshader = gameWindow.shaderLoader.getShader(reader.Value);
                        }

                        else if (reader.Name == "shadow")
                        {
                            target.shadowshader = gameWindow.shaderLoader.getShader(reader.Value);
                        }

                        else if (reader.Name == "definfo")
                        {
                            target.definfoshader = gameWindow.shaderLoader.getShader(reader.Value);
                        }
                    }
                    gameWindow.log("shader: " + target.shader.name);
                    reader.MoveToElement();
                }

                // parsing textures
                if (reader.Name == "textures" && reader.HasAttributes)
                {
                    while (reader.MoveToNextAttribute())
                    {
                        Texture tmpTex = gameWindow.textureLoader.getTexture(reader.Value);

                        if (reader.Name == "base")
                        {
                            target.setTexture(Material.TexType.baseTexture, tmpTex);
                        }

                        else if (reader.Name == "base2")
                        {
                            target.setTexture(Material.TexType.base2Texture, tmpTex);
                        }

                        else if (reader.Name == "base3")
                        {
                            target.setTexture(Material.TexType.base3Texture, tmpTex);
                        }

                        else if (reader.Name == "normal")
                        {
                            target.setTexture(Material.TexType.normalTexture, tmpTex);
                        }

                        else if (reader.Name == "reflection")
                        {
                            target.setTexture(Material.TexType.reflectionTexture, tmpTex);
                        }

                        else if (reader.Name == "definfo")
                        {
                            target.setTexture(Material.TexType.definfoTexture, tmpTex);
                        }

                        else if (reader.Name == "emit")
                        {
                            target.setTexture(Material.TexType.emitTexture, tmpTex);
                        }
                    }
                    gameWindow.log("base: " + target.getTextureName(Material.TexType.baseTexture));
                    gameWindow.log("normal: " + target.getTextureName(Material.TexType.normalTexture));
                    reader.MoveToElement();
                }

                // parsing envmap data
                if (reader.Name == "envmap")
                {
                    target.propertys.useEnv = true;
                    if (reader.HasAttributes)
                    {
                        while (reader.MoveToNextAttribute())
                        {
                            if (reader.Name == "source")
                            {
                                if (reader.Value == "normalalpha")
                                {
                                    target.propertys.envMapAlphaNormalTexture = true;
                                }

                                else if (reader.Value == "basealpha")
                                {
                                    target.propertys.envMapAlphaBaseTexture = true;
                                }

                                else
                                {
                                    target.setTexture(Material.TexType.envMapTexture, gameWindow.textureLoader.getTexture(reader.Value));
                                }
                            }
                            else if (reader.Name == "tint")
                            {
                                target.propertys.envMapTint = GenericMethods.VectorFromString(reader.Value);
                            }
                        }
                        reader.MoveToElement();
                    }
                }

                /* -- moved to textures
                 * // parsing specular data
                 * if (reader.Name == "specmap")
                 * {
                 *  target.propertys.useSpec = true;
                 *  if (reader.HasAttributes)
                 *  {
                 *      while (reader.MoveToNextAttribute())
                 *      {
                 *          if (reader.Name == "source")
                 *          {
                 *              if (reader.Value == "normalalpha")
                 *                  target.propertys.specMapAlphaNormalTexture = true;
                 *
                 *              else if (reader.Value == "basealpha")
                 *                  target.propertys.specMapAlphaBaseTexture = true;
                 *
                 *              else
                 *                  target.setTexture(Material.TexType.specMapTexture, gameWindow.textureLoader.getTexture(reader.Value));
                 *
                 *          }
                 *          else if (reader.Name == "tint")
                 *          {
                 *              target.propertys.specMapTint = GenericMethods.VectorFromString(reader.Value);
                 *          }
                 *          else if (reader.Name == "exp")
                 *          {
                 *              target.propertys.specExp = GenericMethods.FloatFromString(reader.Value);
                 *          }
                 *      }
                 *      reader.MoveToElement();
                 *  }
                 * }
                 */

                // parsing emit data
                if (reader.Name == "emit")
                {
                    target.propertys.useEmit = true;
                    if (reader.HasAttributes)
                    {
                        while (reader.MoveToNextAttribute())
                        {
                            if (reader.Name == "source")
                            {
                                if (reader.Value == "normalalpha")
                                {
                                    target.propertys.emitMapAlphaNormalTexture = true;
                                }

                                else if (reader.Value == "basealpha")
                                {
                                    target.propertys.emitMapAlphaBaseTexture = true;
                                }

                                else
                                {
                                    target.setTexture(Material.TexType.emitMapTexture, gameWindow.textureLoader.getTexture(reader.Value));
                                }
                            }
                            else if (reader.Name == "tint")
                            {
                                target.propertys.emitMapTint = GenericMethods.VectorFromString(reader.Value);
                            }
                        }
                        reader.MoveToElement();
                    }
                }

                // parsing transparency data
                if (reader.Name == "transparency")
                {
                    target.propertys.useAlpha = true;
                    if (reader.HasAttributes)
                    {
                        while (reader.MoveToNextAttribute())
                        {
                            if (reader.Name == "refraction")
                            {
                                target.propertys.refStrength = GenericMethods.FloatFromString(reader.Value);
                            }

                            if (reader.Name == "blur")
                            {
                                target.propertys.blurStrength = GenericMethods.FloatFromString(reader.Value);
                            }

                            if (reader.Name == "fresnel")
                            {
                                target.propertys.fresnelStrength = GenericMethods.FloatFromString(reader.Value);
                            }
                        }
                        reader.MoveToElement();
                    }
                }

                // parsing lighting data
                if (reader.Name == "lighted")
                {
                    target.propertys.useLight = true;
                }

                // parsing nucull
                if (reader.Name == "nocull")
                {
                    target.propertys.noCull = true;
                }

                // parsing nucull
                if (reader.Name == "nodepthmask")
                {
                    target.propertys.noDepthMask = true;
                }

                // parsing additive
                if (reader.Name == "additive")
                {
                    target.propertys.additive = true;
                }

                // parsing fresnel data
                if (reader.Name == "fresnel" && reader.HasAttributes)
                {
                    while (reader.MoveToNextAttribute())
                    {
                        if (reader.Name == "exp")
                        {
                            target.propertys.fresnelExp = GenericMethods.FloatFromString(reader.Value);
                        }

                        else if (reader.Name == "strength")
                        {
                            target.propertys.fresnelStr = GenericMethods.FloatFromString(reader.Value);
                        }
                    }
                    reader.MoveToElement();
                }


                target.loaded = true;
                materials[target.identifier] = target;
            }
        }
コード例 #3
0
ファイル: GameObject.cs プロジェクト: scifiboi/ultraSandbox
        protected void genericLoad(ref XmlTextReader reader, string type)
        {
            if (reader.Name == PhysModel.nodename)
            {
                string childname = scene.getUniqueName();

                while (reader.MoveToNextAttribute())
                {
                    if (reader.Name == "name")
                    {
                        childname = reader.Value;
                    }
                }

                GameObject child = new PhysModel(this);
                child.Name = childname;
                child.load(ref reader, "pmodel");
            }

            if (reader.Name == AnimatedModel.nodename)
            {
                string childname = scene.getUniqueName();

                while (reader.MoveToNextAttribute())
                {
                    if (reader.Name == "name")
                    {
                        childname = reader.Value;
                    }
                }

                GameObject child = new AnimatedModel(this);
                child.Name = childname;
                child.load(ref reader, "animodel");
            }

            if (reader.Name == MetaModel.nodename)
            {
                string childname = scene.getUniqueName();

                while (reader.MoveToNextAttribute())
                {
                    if (reader.Name == "name")
                    {
                        childname = reader.Value;
                    }
                }

                GameObject child = new MetaModel(this);
                child.Name = childname;
                child.load(ref reader, "metamodel");
            }

            if (reader.Name == LightSpot.nodename)
            {
                string childname = scene.getUniqueName();

                while (reader.MoveToNextAttribute())
                {
                    if (reader.Name == "name")
                    {
                        childname = reader.Value;
                    }
                }

                GameObject child = new LightSpot(this);
                child.Name = childname;
                child.load(ref reader, "lamp");
            }

            if (reader.Name == "position" && reader.NodeType != XmlNodeType.EndElement)
            {
                reader.Read();
                Position = GenericMethods.VectorFromString(reader.Value);
            }

            if (reader.Name == "direction" && reader.NodeType != XmlNodeType.EndElement)
            {
                reader.Read();
                PointingDirection = GenericMethods.VectorFromString(reader.Value);
            }

            if (reader.Name == "color" && reader.NodeType != XmlNodeType.EndElement)
            {
                reader.Read();
                Color = new Vector4(GenericMethods.VectorFromString(reader.Value), 1);
            }

            if (reader.Name == "rotation" && reader.NodeType != XmlNodeType.EndElement)
            {
                reader.Read();
                Orientation = GenericMethods.ToOpenTKMatrix(GenericMethods.JMatrixFromString(reader.Value));
            }
        }