Ejemplo n.º 1
0
    protected virtual void OnPopulateMesh(VertexHelper vh)
    {
        UIVertex uiVertex = (UIVertex)null;
        Vector3  vector3_1;

        // ISSUE: explicit reference operation
        ((Vector3)@vector3_1).\u002Ector(-1f, 1f, 0.0f);
        Vector3 vector3_2;

        // ISSUE: explicit reference operation
        ((Vector3)@vector3_2).\u002Ector(1f, 1f, 0.0f);
        Vector3 vector3_3;

        // ISSUE: explicit reference operation
        ((Vector3)@vector3_3).\u002Ector(-1f, -1f, 0.0f);
        Vector3 vector3_4;

        // ISSUE: explicit reference operation
        ((Vector3)@vector3_4).\u002Ector(1f, -1f, 0.0f);
        Vector2 vector2_1;

        // ISSUE: explicit reference operation
        ((Vector2)@vector2_1).\u002Ector(0.0f, 1f);
        Vector2 vector2_2;

        // ISSUE: explicit reference operation
        ((Vector2)@vector2_2).\u002Ector(1f, 1f);
        Vector2 vector2_3;

        // ISSUE: explicit reference operation
        ((Vector2)@vector2_3).\u002Ector(0.0f, 0.0f);
        Vector2 vector2_4;

        // ISSUE: explicit reference operation
        ((Vector2)@vector2_4).\u002Ector(1f, 0.0f);
        Vector2 vector2_5;

        // ISSUE: explicit reference operation
        ((Vector2)@vector2_5).\u002Ector(0.0f, 0.0f);
        float num1 = 1f;
        float num2 = 1f;
        float num3 = 1f;
        int   num4 = 1;
        int   num5 = 0;

        vh.Clear();
        if (this.textureSheetAnimationEnable)
        {
            num1        = 1f / (float)this.textureSheetAnimation.TilesX;
            num2        = 1f / (float)this.textureSheetAnimation.TilesY;
            vector2_2.x = (__Null)(double)(vector2_4.x = (__Null)num1);
            vector2_3.y = (__Null)(double)(vector2_4.y = (__Null)(1f - num2));
            num3        = this.textureSheetAnimation.Animation != UIParticleSystem.TextureSheetAnimation.AnimationRow.WholeSheet ? (float)this.textureSheetAnimation.TilesX : (float)(this.textureSheetAnimation.TilesX * this.textureSheetAnimation.TilesY);
            num4        = Mathf.FloorToInt(num3);
        }
        if (this.RenderMode == UIParticleSystem.ParticleRenderMode.Billboard)
        {
            for (int index = this.mParticles.Count - 1; index >= 0; --index)
            {
                UIParticleSystem.Particle mParticle = this.mParticles[index];
                Quaternion quaternion = Quaternion.AngleAxis(mParticle.rotation, Vector3.get_forward());
                float      size       = mParticle.size;
                float      num6       = (float)(1.0 - (double)mParticle.lifetime / (double)mParticle.startLifetime);
                Color32    color32    = mParticle.color;
                if (this.textureSheetAnimationEnable)
                {
                    int num7 = Mathf.FloorToInt(this.textureSheetAnimation.FrameOverTime.Evaluate(num6) * num3) * this.textureSheetAnimation.Cycles % num4;
                    vector2_5.x = (__Null)((double)(num7 % this.textureSheetAnimation.TilesX) * (double)num1);
                    vector2_5.y = this.textureSheetAnimation.Animation != UIParticleSystem.TextureSheetAnimation.AnimationRow.WholeSheet ? (__Null)(1.0 - (double)(mParticle.randomSeed % this.textureSheetAnimation.TilesY) * (double)num2) : (__Null)(1.0 - (double)(num7 / this.textureSheetAnimation.TilesY) * (double)num2);
                }
                if (this.sizeOverLifetimeEnable)
                {
                    size *= this.sizeOverLifetime.Evaluate(num6);
                }
                if (this.colorOverLifetimeEnable)
                {
                    color32 = Color32.op_Implicit(Color.op_Multiply(Color32.op_Implicit(color32), this.colorOverLifetime.Evaluate(num6)));
                }
                uiVertex.position = (__Null)Vector3.op_Addition(mParticle.position, Vector3.op_Multiply(Quaternion.op_Multiply(quaternion, vector3_1), size));
                uiVertex.color    = (__Null)color32;
                uiVertex.uv0      = (__Null)Vector2.op_Addition(vector2_5, vector2_1);
                vh.AddVert(uiVertex);
                uiVertex.position = (__Null)Vector3.op_Addition(mParticle.position, Vector3.op_Multiply(Quaternion.op_Multiply(quaternion, vector3_2), size));
                uiVertex.color    = (__Null)color32;
                uiVertex.uv0      = (__Null)Vector2.op_Addition(vector2_5, vector2_2);
                vh.AddVert(uiVertex);
                uiVertex.position = (__Null)Vector3.op_Addition(mParticle.position, Vector3.op_Multiply(Quaternion.op_Multiply(quaternion, vector3_4), size));
                uiVertex.color    = (__Null)color32;
                uiVertex.uv0      = (__Null)Vector2.op_Addition(vector2_5, vector2_4);
                vh.AddVert(uiVertex);
                uiVertex.position = (__Null)Vector3.op_Addition(mParticle.position, Vector3.op_Multiply(Quaternion.op_Multiply(quaternion, vector3_3), size));
                uiVertex.color    = (__Null)color32;
                uiVertex.uv0      = (__Null)Vector2.op_Addition(vector2_5, vector2_3);
                vh.AddVert(uiVertex);
                vh.AddTriangle(num5, num5 + 1, num5 + 2);
                vh.AddTriangle(num5 + 2, num5 + 3, num5);
                num5 += 4;
            }
        }
        else
        {
            for (int index = this.mParticles.Count - 1; index >= 0; --index)
            {
                UIParticleSystem.Particle mParticle = this.mParticles[index];
                float   size    = mParticle.size;
                float   num6    = (float)(1.0 - (double)mParticle.lifetime / (double)mParticle.startLifetime);
                Color32 color32 = mParticle.color;
                if (this.sizeOverLifetimeEnable)
                {
                    size *= this.sizeOverLifetime.Evaluate(num6);
                }
                Vector2 vector2_6;
                Vector2 right;
                // ISSUE: explicit reference operation
                if ((double)((Vector2)@mParticle.visualVelocity).get_sqrMagnitude() > 0.0)
                {
                    // ISSUE: explicit reference operation
                    float num7 = this.m_StretchBillboard.LengthScale * (float)(1.0 + (double)((Vector3)@mParticle.velocity).get_magnitude() * (double)this.m_StretchBillboard.SpeedScale);
                    // ISSUE: explicit reference operation
                    vector2_6 = ((Vector2)@mParticle.visualVelocity).get_normalized();
                    // ISSUE: explicit reference operation
                    ((Vector2)@right).\u002Ector((float)vector2_6.y * size, (float)-vector2_6.x * size);
                    vector2_6 = Vector2.op_Multiply(vector2_6, size * 2f * num7);
                }
                else
                {
                    vector2_6 = Vector2.get_up();
                    right     = Vector2.get_right();
                }
                if (this.textureSheetAnimationEnable)
                {
                    int num7 = Mathf.FloorToInt(this.textureSheetAnimation.FrameOverTime.Evaluate(num6) * num3) * this.textureSheetAnimation.Cycles % num4;
                    vector2_5.x = (__Null)((double)(num7 % this.textureSheetAnimation.TilesX) * (double)num1);
                    vector2_5.y = this.textureSheetAnimation.Animation != UIParticleSystem.TextureSheetAnimation.AnimationRow.WholeSheet ? (__Null)(1.0 - (double)(mParticle.randomSeed % this.textureSheetAnimation.TilesY) * (double)num2) : (__Null)(1.0 - (double)(num7 / this.textureSheetAnimation.TilesY) * (double)num2);
                }
                if (this.colorOverLifetimeEnable)
                {
                    color32 = Color32.op_Implicit(Color.op_Multiply(Color32.op_Implicit(color32), this.colorOverLifetime.Evaluate(num6)));
                }
                // ISSUE: explicit reference operation
                // ISSUE: cast to a reference type
                // ISSUE: explicit reference operation
                (^ (Vector3&)@uiVertex.position).x = mParticle.position.x - right.x;
                // ISSUE: explicit reference operation
                // ISSUE: cast to a reference type
                // ISSUE: explicit reference operation
                (^ (Vector3&)@uiVertex.position).y = mParticle.position.y - right.y;
                uiVertex.color = (__Null)color32;
                uiVertex.uv0   = (__Null)Vector2.op_Addition(vector2_5, vector2_1);
                vh.AddVert(uiVertex);
                // ISSUE: explicit reference operation
                // ISSUE: cast to a reference type
                // ISSUE: explicit reference operation
                (^ (Vector3&)@uiVertex.position).x = mParticle.position.x + right.x;
                // ISSUE: explicit reference operation
                // ISSUE: cast to a reference type
                // ISSUE: explicit reference operation
                (^ (Vector3&)@uiVertex.position).y = mParticle.position.y + right.y;
                uiVertex.color = (__Null)color32;
                uiVertex.uv0   = (__Null)Vector2.op_Addition(vector2_5, vector2_2);
                vh.AddVert(uiVertex);
                // ISSUE: explicit reference operation
                // ISSUE: cast to a reference type
                // ISSUE: explicit reference operation
                (^ (Vector3&)@uiVertex.position).x = mParticle.position.x + right.x - vector2_6.x;
                // ISSUE: explicit reference operation
                // ISSUE: cast to a reference type
                // ISSUE: explicit reference operation
                (^ (Vector3&)@uiVertex.position).y = mParticle.position.y + right.y - vector2_6.y;
                uiVertex.color = (__Null)color32;
                uiVertex.uv0   = (__Null)Vector2.op_Addition(vector2_5, vector2_4);
                vh.AddVert(uiVertex);
                // ISSUE: explicit reference operation
                // ISSUE: cast to a reference type
                // ISSUE: explicit reference operation
                (^ (Vector3&)@uiVertex.position).x = mParticle.position.x - right.x - vector2_6.x;
                // ISSUE: explicit reference operation
                // ISSUE: cast to a reference type
                // ISSUE: explicit reference operation
                (^ (Vector3&)@uiVertex.position).y = mParticle.position.y - right.y - vector2_6.y;
                uiVertex.color = (__Null)color32;
                uiVertex.uv0   = (__Null)Vector2.op_Addition(vector2_5, vector2_3);
                vh.AddVert(uiVertex);
                vh.AddTriangle(num5, num5 + 1, num5 + 2);
                vh.AddTriangle(num5 + 2, num5 + 3, num5);
                num5 += 4;
            }
        }
    }
Ejemplo n.º 2
0
    public void AdvanceTime(float dt)
    {
        dt            *= this.playbackSpeed;
        this.mPrevTime = this.mTime;
        this.mTime    += dt;
        if ((double)this.mTime >= (double)this.duration)
        {
            if (this.loop)
            {
                this.mTime     = 0.0f;
                this.mPrevTime = 0.0f;
            }
            else
            {
                this.mTime = this.duration;
            }
        }
        for (int index = this.mParticles.Count - 1; index >= 0; --index)
        {
            UIParticleSystem.Particle mParticle = this.mParticles[index];
            mParticle.lifetime -= dt;
            if ((double)mParticle.lifetime <= 0.0)
            {
                this.mParticles.RemoveAt(index);
                this.mDeadParticles.Add(mParticle);
            }
            else
            {
                float num1 = (float)(1.0 - (double)mParticle.lifetime / (double)mParticle.startLifetime);
                UIParticleSystem.Particle particle1 = mParticle;
                particle1.position  = Vector3.op_Addition(particle1.position, Vector3.op_Multiply(mParticle.velocity, dt));
                mParticle.rotation += mParticle.angularVelocity * dt;
                if ((double)this.gravityMultipler > 0.0)
                {
                    UIParticleSystem.Particle particle2 = mParticle;
                    particle2.velocity = Vector3.op_Addition(particle2.velocity, Vector3.op_Multiply(Physics.get_gravity(), dt));
                }
                mParticle.visualVelocity = Vector2.op_Implicit(mParticle.velocity);
                if (this.velocityOverLifetimeEnable)
                {
                    float num2 = this.velocityOverLifetime.X.Evaluate(num1) * this.velocityOverLifetime.ScaleX;
                    float num3 = this.velocityOverLifetime.Y.Evaluate(num1) * this.velocityOverLifetime.ScaleY;
                    // ISSUE: explicit reference operation
                    // ISSUE: variable of a reference type
                    Vector3& local1 = @mParticle.position;
                    // ISSUE: explicit reference operation
                    // ISSUE: explicit reference operation
                    (^ local1).x = (__Null)((^ local1).x + (double)dt * (double)num2);
                    // ISSUE: explicit reference operation
                    // ISSUE: variable of a reference type
                    Vector3& local2 = @mParticle.position;
                    // ISSUE: explicit reference operation
                    // ISSUE: explicit reference operation
                    (^ local2).y = (__Null)((^ local2).y + (double)dt * (double)num3);
                    // ISSUE: explicit reference operation
                    // ISSUE: variable of a reference type
                    Vector2& local3 = @mParticle.visualVelocity;
                    // ISSUE: explicit reference operation
                    // ISSUE: explicit reference operation
                    (^ local3).x = (__Null)((^ local3).x + (double)num2);
                    // ISSUE: explicit reference operation
                    // ISSUE: variable of a reference type
                    Vector2& local4 = @mParticle.visualVelocity;
                    // ISSUE: explicit reference operation
                    // ISSUE: explicit reference operation
                    (^ local4).y = (__Null)((^ local4).y + (double)num3);
                }
                if (this.rotationOverLifetimeEnable)
                {
                    mParticle.rotation = mParticle.startRotation + this.rotationOverLifetime.Evaluate(num1);
                }
            }
        }
        if (!this.emit)
        {
            return;
        }
        if (this.burstEnable)
        {
            for (int index = 0; index < this.burst.Points.Length; ++index)
            {
                if ((double)this.mPrevTime <= (double)this.burst.Points[index].Time && (double)this.burst.Points[index].Time < (double)this.mTime)
                {
                    this.mSpawnCount += (float)this.burst.Points[index].Count;
                }
            }
        }
        if (0.0 <= (double)this.mTime && (double)this.mTime < (double)this.duration)
        {
            this.mSpawnCount += this.emissionRate * dt;
        }
        if ((double)this.mSpawnCount >= 1.0)
        {
            int num = Mathf.FloorToInt(this.mSpawnCount);
            for (int index = 0; index < num && this.mParticles.Count < this.maxParticles; ++index)
            {
                UIParticleSystem.Particle particle1;
                if (this.mDeadParticles.Count > 0)
                {
                    particle1 = this.mDeadParticles[this.mDeadParticles.Count - 1];
                    this.mDeadParticles.RemoveAt(this.mDeadParticles.Count - 1);
                }
                else
                {
                    particle1 = new UIParticleSystem.Particle();
                }
                particle1.randomSeed      = Random.Range(0, (int)ushort.MaxValue);
                particle1.startLifetime   = particle1.lifetime = this.startLifetime.Evaluate();
                particle1.color           = Color32.op_Implicit(this.startColor.Evaluate());
                particle1.rotation        = particle1.startRotation = this.startRotation.Evaluate();
                particle1.size            = this.startSize.Evaluate();
                particle1.angularVelocity = !this.angularVelocityEnable ? 0.0f : this.angularVelocity.Evaluate();
                switch (this.emitterType)
                {
                case UIParticleSystem.EmitterTypes.Cone:
                    particle1.velocity = Quaternion.op_Multiply(Quaternion.AngleAxis(this.coneEmitter.Angle.Evaluate() + this.emitterRotation, Vector3.get_forward()), Vector2.op_Implicit(Vector2.get_up()));
                    // ISSUE: explicit reference operation
                    particle1.position = Vector3.op_Multiply(((Vector3)@particle1.velocity).get_normalized(), this.coneEmitter.Radius.Evaluate());
                    if (this.coneEmitter.RandomDirection)
                    {
                        particle1.velocity = Quaternion.op_Multiply(Quaternion.AngleAxis(Random.get_value() * 360f, Vector3.get_forward()), Vector2.op_Implicit(Vector2.get_up()));
                        break;
                    }
                    break;

                case UIParticleSystem.EmitterTypes.Sphere:
                    if (this.sphereEmitter.RandomDirection)
                    {
                        particle1.velocity = Quaternion.op_Multiply(Quaternion.AngleAxis(Random.get_value() * 360f, Vector3.get_forward()), Vector2.op_Implicit(Vector2.get_up()));
                        particle1.position = Vector3.op_Multiply(Quaternion.op_Multiply(Quaternion.AngleAxis(Random.get_value() * 360f, Vector3.get_forward()), Vector2.op_Implicit(Vector2.get_up())), this.sphereEmitter.Radius.Evaluate());
                    }
                    else
                    {
                        particle1.velocity = Quaternion.op_Multiply(Quaternion.AngleAxis(Random.get_value() * 360f, Vector3.get_forward()), Vector2.op_Implicit(Vector2.get_up()));
                        // ISSUE: explicit reference operation
                        particle1.position = Vector3.op_Multiply(((Vector3)@particle1.velocity).get_normalized(), this.sphereEmitter.Radius.Evaluate());
                    }
                    if (this.sphereEmitter.Inverse)
                    {
                        particle1.velocity = Vector3.op_UnaryNegation(particle1.velocity);
                        break;
                    }
                    break;

                case UIParticleSystem.EmitterTypes.Box:
                    particle1.velocity = !this.boxEmitter.RandomDirection ? Quaternion.op_Multiply(Quaternion.AngleAxis(this.emitterRotation, Vector3.get_forward()), Vector2.op_Implicit(Vector2.get_up())) : Quaternion.op_Multiply(Quaternion.AngleAxis(Random.get_value() * 360f, Vector3.get_forward()), Vector2.op_Implicit(Vector2.get_up()));
                    particle1.position = new Vector3((Random.get_value() - 0.5f) * this.boxEmitter.Width, (Random.get_value() - 0.5f) * this.boxEmitter.Height, 0.0f);
                    break;
                }
                UIParticleSystem.Particle particle2 = particle1;
                particle2.velocity = Vector3.op_Multiply(particle2.velocity, this.startSpeed.Evaluate());
                this.mParticles.Add(particle1);
            }
            this.mSpawnCount -= (float)num;
        }
        this.SetVerticesDirty();
    }