Example #1
0
        public override void Update(int timeLastFrame)
        {
            // generate particle
            if (m_isEmitting)
            {
                m_accumulateMillionSecond += timeLastFrame;
                // timeLastFrame past, so generateNum particles will be generated
                int generateNum = (int)(m_accumulateMillionSecond * m_generateRatePerSecond / 1000.0);
                m_accumulateMillionSecond -= (int)(generateNum * 1000 / (float)m_generateRatePerSecond);
                OneShot(generateNum);
            }

            // update living particle
            CatComponent particleUpdateBase = m_gameObject.GetComponent(m_particleUpdateComponentName);

            if (particleUpdateBase != null && particleUpdateBase is IParticleUpdater)
            {
                IParticleUpdater particleUpdate = (IParticleUpdater)particleUpdateBase;
                foreach (Particle particle in m_particles)
                {
                    if (particle.m_lifeInMS > 0)
                    {
                        particleUpdate.ParticleUpdate(timeLastFrame, particle, this);
                    }
                }
            }
        }
        private void UpdateTopologyParameters()
        {
            ITopologyUpdater oldTopologyUpdater = TopologyUpdater;
            IParticleUpdater oldParticleUpdater = ParticleUpdater;

            ClearTopologyParameters();
            if (Problem != null)
            {
                IParticleUpdater defaultParticleUpdater = null;
                if (TopologyInitializer != null)
                {
                    foreach (ITopologyUpdater topologyUpdater in ApplicationManager.Manager.GetInstances <ITopologyUpdater>())
                    {
                        TopologyUpdaterParameter.ValidValues.Add(topologyUpdater);
                    }
                    defaultParticleUpdater = Problem.Operators.OfType <ILocalParticleUpdater>().FirstOrDefault();
                    foreach (IParticleUpdater particleUpdater in Problem.Operators.OfType <ILocalParticleUpdater>().OrderBy(x => x.Name))
                    {
                        ParticleUpdaterParameter.ValidValues.Add(particleUpdater);
                    }
                }
                else
                {
                    defaultParticleUpdater = Problem.Operators.OfType <IGlobalParticleUpdater>().FirstOrDefault();
                    foreach (IParticleUpdater particleUpdater in Problem.Operators.OfType <IGlobalParticleUpdater>().OrderBy(x => x.Name))
                    {
                        ParticleUpdaterParameter.ValidValues.Add(particleUpdater);
                    }
                }
                if (oldTopologyUpdater != null)
                {
                    ITopologyUpdater newTopologyUpdater = TopologyUpdaterParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldParticleUpdater.GetType());
                    if (newTopologyUpdater != null)
                    {
                        TopologyUpdater = newTopologyUpdater;
                    }
                }
                if (oldParticleUpdater != null)
                {
                    IParticleUpdater newParticleUpdater = ParticleUpdaterParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldParticleUpdater.GetType());
                    if (newParticleUpdater != null)
                    {
                        ParticleUpdater = newParticleUpdater;
                    }
                    else
                    {
                        oldParticleUpdater = null;
                    }
                }
                if (oldParticleUpdater == null && defaultParticleUpdater != null)
                {
                    ParticleUpdater = defaultParticleUpdater;
                }

                ParameterizeTopologyUpdaters();
            }
        }
Example #3
0
 /// <summary>
 /// 移除粒子更新器
 /// </summary>
 /// <param name="updater"></param>
 public virtual void RemoveParticleUpdater(IParticleUpdater updater)
 {
     _updaters.Remove(updater);
 }
Example #4
0
 /// <summary>
 /// 添加粒子更新器
 /// </summary>
 /// <param name="updater"></param>
 public virtual void AddParticleUpdater(IParticleUpdater updater)
 {
     _updaters.Add(updater);
 }