public override void WriteXml(System.Xml.XmlWriter writer)
        {
            if (!TrashSoupGame.Instance.EditorMode)
            {
                contentPath = "../../../../TrashSoupContent/Materials/";
            }
            else
            {
                contentPath = "../../../TrashSoup/TrashSoupContent/Materials/";
            }
            base.WriteXml(writer);

            writer.WriteElementString("LODState", LODState.ToString());

            writer.WriteStartElement("LODs");
            foreach (String path in Paths)
            {
                if (path != null)
                {
                    writer.WriteElementString("ModelPath", path);
                }
                else
                {
                    writer.WriteElementString("ModelPath", "");
                }
            }
            writer.WriteEndElement();

            writer.WriteStartElement("Materials");
            foreach (Material mat in Mat)
            {
                if (mat != null)
                {
                    if (mat.Name == "testSBMat2")
                    {
                        XmlSerializer serializer = new XmlSerializer(typeof(SkyboxMaterial));
                        using (FileStream file = new FileStream(Path.GetFullPath(contentPath) + mat.Name + ".xml", FileMode.Create))
                        {
                            serializer.Serialize(file, mat);
                        }
                    }
                    if (mat.Name == "testWaterMat")
                    {
                        XmlSerializer serializer = new XmlSerializer(typeof(WaterMaterial));
                        using (FileStream file = new FileStream(Path.GetFullPath(contentPath) + mat.Name + ".xml", FileMode.Create))
                        {
                            serializer.Serialize(file, mat);
                        }
                    }
                    if (mat.Name == "testMirrorMat")
                    {
                        XmlSerializer serializer = new XmlSerializer(typeof(MirrorMaterial));
                        using (FileStream file = new FileStream(Path.GetFullPath(contentPath) + mat.Name + ".xml", FileMode.Create))
                        {
                            serializer.Serialize(file, mat);
                        }
                    }
                    if (mat.Name != "testSBMat2" && mat.Name != "testWaterMat" && mat.Name != "testMirrorMat")
                    {
                        XmlSerializer serializer = new XmlSerializer(typeof(Material));
                        using (FileStream file = new FileStream(Path.GetFullPath(contentPath) + mat.Name + ".xml", FileMode.Create))
                        {
                            serializer.Serialize(file, mat);
                        }
                    }

                    //writer.WriteStartElement("Material");

                    writer.WriteElementString("Name", mat.Name);

                    //writer.WriteElementString("EffectPath", ResourceManager.Instance.Effects.FirstOrDefault(x => x.Value == mat.MyEffect).Key);

                    //(mat as IXmlSerializable).WriteXml(writer);
                    //writer.WriteEndElement();
                }
            }
            writer.WriteEndElement();

            writer.WriteElementString("LodControlled", XmlConvert.ToString(LodControlled));
        }
Example #2
0
    IEnumerator CheckForLOD()
    {
        while (true)
        {
            yield return(new WaitForSeconds(0.5f));

            bool changed = false;

            if (Camera.main != null)
            {
                float distance = Mathf.Abs((transform.position - Camera.main.transform.position).magnitude);
                if (distance < 30)
                {
                    if ((state != LODState.High))
                    {
                        mf.mesh = LODMesh_High;
                        state   = LODState.High;
                        changed = true;
                    }
                }
                else if (distance < 50)
                {
                    if (state != LODState.Medium)
                    {
                        if (hasSubmeshes)
                        {
                            for (int i = 0; i < mf.mesh.subMeshCount - 1; i++)
                            {
                                mf.mesh.SetTriangles(LODMesh_Medium.GetTriangles(i), i);
                            }
                        }
                        else
                        {
                            mf.mesh = LODMesh_Medium;
                        }
                        state   = LODState.Medium;
                        changed = true;
                    }
                }
                else
                {
                    if (state != LODState.Low)
                    {
                        if (hasSubmeshes)
                        {
                            for (int i = 0; i < mf.mesh.subMeshCount - 1; i++)
                            {
                                mf.mesh.SetTriangles(LODMesh_Low.GetTriangles(i), i);
                            }
                        }
                        else
                        {
                            mf.mesh = LODMesh_Low;
                        }
                        state   = LODState.Low;
                        changed = true;
                    }
                }
            }

            if (changed)
            {
                //mf.mesh.RecalculateNormals();
                //mf.mesh.RecalculateBounds();
            }
        }
    }