public void ReadConfig()
 {
     if (effectConfig != null)
     {
         Texture t = null;
         if (configValues != null)
         {
             t = configValues.texture;
         }
         if (effectConfig.name.ToLower().IndexOf(".pex") > -1)
         {
             configValues = PexConfig.ParsePexConfig(effectConfig.ToString());
         }
         else if (effectConfig.name.ToLower().IndexOf(".plist") > -1)
         {
             configValues = PlistConfig.ParsePlistConfig(effectConfig.ToString());
         }
         configValues.texture = t;
         if (Emitter != null)
         {
             Emitter.Stop(true);
         }
         Init();
         effectConfig = null;
     }
 }
 void OnDestroy()
 {
     if (m_Particle2D != null)
     {
         m_Particle2D.Destroy();
     }
     material     = null;
     configValues = null;
     effectConfig = null;
 }
示例#3
0
 public void Destroy()
 {
     m_Mesh             = null;
     m_Uvs              = null;
     m_transform        = null;
     m_Triangles        = null;
     m_Colors           = null;
     m_particleConfigVO = null;
     m_Vertices         = null;
     m_Particles        = null;
 }
    protected override void OnDestroy()
    {
        if (m_Particle2D != null)
        {
            m_Particle2D.Destroy();
            m_Particle2D = null;
        }
        material     = null;
        configValues = null;
        effectConfig = null;

        base.OnDestroy();
    }
示例#5
0
    public static Particle2DConfig ParsePlistConfig(string plist)
    {
        Particle2DConfig vo     = new Particle2DConfig();
        XmlDocument      xmlDoc = new XmlDocument();

        xmlDoc.LoadXml(plist);
        XmlNode     root     = xmlDoc.SelectSingleNode("plist/dict");
        XmlNodeList nodeList = root.ChildNodes;

        foreach (XmlNode xn in nodeList)
        {
            XmlElement xe = (XmlElement)xn;
            ParseXMLElement(vo, xe);
        }
        return(vo);
    }
示例#6
0
    public static Particle2DConfig ParsePexConfig(string pex)
    {
        pex = pex.ToLower();
        Particle2DConfig vo     = new Particle2DConfig();
        XmlDocument      xmlDoc = new XmlDocument();

        xmlDoc.LoadXml(pex);
        XmlNode     root     = xmlDoc.SelectSingleNode("particleemitterconfig");
        XmlNodeList nodeList = root.ChildNodes;

        foreach (XmlNode xn in nodeList)
        {
            XmlElement xe = (XmlElement)xn;
            ParseXMLElement(vo, xe);
        }
        return(vo);
    }
示例#7
0
 public void SetParticle2DConfigVO(Particle2DConfig config, bool prewarm = false)
 {
     m_particleConfigVO = config;
     if (m_particleConfigVO.isLooop)
     {
         emissionTime = float.MaxValue;
     }
     else
     {
         emissionTime = m_particleConfigVO.defaultDuration;
     }
     capacity = m_particleConfigVO.maxParticles;
     UpdateEmissionRate();
     if (Application.isPlaying && prewarm && m_particleConfigVO.isLooop)
     {
         float lifespan = m_particleConfigVO.lifespan + m_particleConfigVO.lifespanVariance * (Random.value * 2.0f - 1.0f);
         if (lifespan < 0f)
         {
             lifespan = 0f;
         }
         AdvanceTime(lifespan);
     }
 }
示例#8
0
    private static void ParseXMLElement(Particle2DConfig vo, XmlElement config)
    {
        if (config.Name.Equals("sourcepositionvariance"))
        {
            vo.emitterXVariance = float.Parse(config.GetAttribute("x"));
            vo.emitterYVariance = float.Parse(config.GetAttribute("y"));
        }
        else if (config.Name.Equals("gravity"))
        {
            vo.gravityX = float.Parse(config.GetAttribute("x"));
            vo.gravityY = -float.Parse(config.GetAttribute("y"));
        }
        else if (config.Name.Equals("emittertype"))
        {
            vo.emitterType = (Particle2D.EmitterType)(int.Parse(config.GetAttribute("value")));
        }
        else if (config.Name.Equals("particlelifespan"))
        {
            vo.lifespan = Mathf.Max(0.01f, float.Parse(config.GetAttribute("value")));
        }
        else if (config.Name.Equals("particlelifespanvariance"))
        {
            vo.lifespanVariance = float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("startparticlesize"))
        {
            vo.startSize = float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("startparticlesizevariance"))
        {
            vo.startSizeVariance = float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("finishparticlesize"))
        {
            vo.endSize = float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("finishparticlesizevariance"))
        {
            vo.endSizeVariance = float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("angle"))
        {
            vo.emitAngle = -Mathf.Deg2Rad * float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("anglevariance"))
        {
            vo.emitAngleVariance = -Mathf.Deg2Rad * float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("rotationstart"))
        {
            vo.startRotation = -Mathf.Deg2Rad * float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("rotationstartvariance"))
        {
            vo.startRotationVariance = -Mathf.Deg2Rad * float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("rotationend"))
        {
            vo.endRotation = -Mathf.Deg2Rad * float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("rotationendvariance"))
        {
            vo.endRotationVariance = -Mathf.Deg2Rad * float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("speed"))
        {
            vo.speed = float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("speedvariance"))
        {
            vo.speedVariance = float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("radialacceleration"))
        {
            vo.radialAcceleration = float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("radialaccelvariance"))
        {
            vo.radialAccelerationVariance = float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("tangentialacceleration"))
        {
            vo.tangentialAcceleration = -float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("tangentialaccelvariance"))
        {
            vo.tangentialAccelerationVariance = -float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("maxradius"))
        {
            vo.maxRadius = float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("maxradiusvariance"))
        {
            vo.maxRadiusVariance = float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("minradius"))
        {
            vo.minRadius = float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("minradiusvariance"))
        {
            vo.minRadiusVariance = float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("rotatepersecond"))
        {
            vo.rotatePerSecond = Mathf.Deg2Rad * float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("rotatepersecondvariance"))
        {
            vo.rotatePerSecondVariance = Mathf.Deg2Rad * float.Parse(config.GetAttribute("value"));
        }
        else if (config.Name.Equals("startcolor"))
        {
            vo.startColor.r = float.Parse(config.GetAttribute("red"));
            vo.startColor.g = float.Parse(config.GetAttribute("green"));
            vo.startColor.b = float.Parse(config.GetAttribute("blue"));
            vo.startColor.a = float.Parse(config.GetAttribute("alpha"));
        }
        else if (config.Name.Equals("startcolorvariance"))
        {
            vo.startColorVariance.r = float.Parse(config.GetAttribute("red"));
            vo.startColorVariance.g = float.Parse(config.GetAttribute("green"));
            vo.startColorVariance.b = float.Parse(config.GetAttribute("blue"));
            vo.startColorVariance.a = float.Parse(config.GetAttribute("alpha"));
        }
        else if (config.Name.Equals("finishcolor"))
        {
            vo.endColor.r = float.Parse(config.GetAttribute("red"));
            vo.endColor.g = float.Parse(config.GetAttribute("green"));
            vo.endColor.b = float.Parse(config.GetAttribute("blue"));
            vo.endColor.a = float.Parse(config.GetAttribute("alpha"));
        }
        else if (config.Name.Equals("finishcolorvariance"))
        {
            vo.endColorVariance.r = float.Parse(config.GetAttribute("red"));
            vo.endColorVariance.g = float.Parse(config.GetAttribute("green"));
            vo.endColorVariance.b = float.Parse(config.GetAttribute("blue"));
            vo.endColorVariance.a = float.Parse(config.GetAttribute("alpha"));
        }
        else if (config.Name.Equals("duration"))
        {
            vo.defaultDuration = float.Parse(config.GetAttribute("value"));
            if (vo.defaultDuration <= 0)
            {
                vo.isLooop = true;
            }
        }
        else if (config.Name.Equals("maxparticles"))
        {
            vo.maxParticles = Mathf.FloorToInt(float.Parse(config.GetAttribute("value")));
        }
//		else if(config.Name.Equals("blendfuncsource")){
//			vo.srcFactor = GetBlendFunc(int.Parse(config.GetAttribute("value")));
//		}
//		else if(config.Name.Equals("blendfuncdestination")){
//			vo.dstFactor = GetBlendFunc(int.Parse(config.GetAttribute("value")));
//		}

        // compatibility with future Particle Designer versions
        // (might fix some of the uppercase/lowercase typos)
        if (float.IsNaN(vo.endSizeVariance) && config.Name.Equals("finishparticlesizevariance"))
        {
            vo.endSizeVariance = float.Parse(config.GetAttribute("value"));
        }
        if (float.IsNaN(vo.lifespan) && config.Name.Equals("particlelifespan"))
        {
            vo.lifespan = Mathf.Max(0.01f, float.Parse(config.GetAttribute("value")));
        }
        if (float.IsNaN(vo.lifespanVariance) && config.Name.Equals("particlelifespanvariance"))
        {
            vo.lifespanVariance = float.Parse(config.GetAttribute("value"));
        }
        if (float.IsNaN(vo.minRadiusVariance))
        {
            vo.minRadiusVariance = 0.0f;
        }
    }