예제 #1
0
    public List <FlatSubParticle> update_particles(float aDelta)
    {
        List <FlatSubParticle>           removed  = new List <FlatSubParticle>();
        LinkedListNode <FlatSubParticle> starting = mParticles.First;

        while (starting != null)
        {
            LinkedListNode <FlatSubParticle> operating = starting;
            FlatSubParticle e = starting.Value;
            e.pos += e.vel * aDelta;
            e.vel += Gravity * aDelta;
            e.timer.update(aDelta);
            starting = starting.Next;
            if (e.timer.isExpired())
            {
                mParticles.Remove(operating);
                removed.Add(operating.Value);
            }

            //update the element
            e.element.HardPosition = e.pos;
            if (UseColor)
            {
                float lambda = Mathf.Clamp01(e.timer.getLinear());
                e.element.HardColor = StartColor * (1 - lambda) + EndColor * lambda;
            }

            e.element.update(aDelta);
        }
        return(removed);
    }
예제 #2
0
    public FlatSubParticle add_particle(FlatElementBase aParticle, Vector3 aPos, Vector3 aVel, float aLifetime, string aId)
    {
        FlatSubParticle addMe = new FlatSubParticle();

        addMe.id      = aId;
        addMe.pos     = aPos;
        addMe.vel     = aVel;
        addMe.element = aParticle;
        addMe.timer   = new QuTimer(0, aLifetime);
        mParticles.AddLast(addMe);
        return(addMe);
    }