Terraria.Mount.UpdateEffects C# (CSharp) Method

UpdateEffects() public method

public UpdateEffects ( Player mountedPlayer ) : void
mountedPlayer Player
return void
        public void UpdateEffects(Player mountedPlayer)
        {
            mountedPlayer.autoJump = this.AutoJump;
            switch (this._type)
            {
                case 8:
                    if (mountedPlayer.ownedProjectileCounts[453] >= 1)
                        break;
                    this._abilityActive = false;
                    break;
                case 9:
                    Vector2 center = mountedPlayer.Center;
                    Vector2 vector2_1 = center;
                    bool flag1 = false;
                    float num1 = 1500f;
                    for (int index = 0; index < 200; ++index)
                    {
                        NPC npc = Main.npc[index];
                        if (npc.CanBeChasedBy((object)this, false))
                        {
                            float num2 = Vector2.Distance(npc.Center, vector2_1);
                            if (((double)Vector2.Distance(vector2_1, vector2_1) > (double)num2 && (double)num2 < (double)num1 || !flag1) && Collision.CanHitLine(center, 0, 0, npc.position, npc.width, npc.height))
                            {
                                num1 = num2;
                                vector2_1 = npc.Center;
                                flag1 = true;
                            }
                        }
                    }
                    bool flag2 = flag1;
                    float num3 = Math.Abs(Utils.ToRotation(vector2_1 - center));
                    if (mountedPlayer.direction == 1 && (double)num3 > 1.04719759490799)
                        flag2 = false;
                    else if (mountedPlayer.direction == -1 && (double)num3 < 2.09439514610459)
                        flag2 = false;
                    else if (!Collision.CanHitLine(center, 0, 0, vector2_1, 0, 0))
                        flag2 = false;
                    if (flag2)
                    {
                        if (this._abilityCooldown == 0 && mountedPlayer.whoAmI == Main.myPlayer)
                        {
                            this.AimAbility(mountedPlayer, vector2_1);
                            this.StopAbilityCharge();
                            this.UseAbility(mountedPlayer, vector2_1, false);
                            break;
                        }
                        this.AimAbility(mountedPlayer, vector2_1);
                        this._abilityCharging = true;
                        break;
                    }
                    this._abilityCharging = false;
                    this.ResetHeadPosition();
                    break;
                case 10:
                    mountedPlayer.doubleJumpUnicorn = true;
                    if ((double)Math.Abs(mountedPlayer.velocity.X) > (double)mountedPlayer.mount.DashSpeed - (double)mountedPlayer.mount.RunSpeed / 2.0)
                        mountedPlayer.noKnockback = true;
                    if (mountedPlayer.itemAnimation <= 0 || mountedPlayer.inventory[mountedPlayer.selectedItem].itemId != 1260)
                        break;
                    AchievementsHelper.HandleSpecialEvent(mountedPlayer, 5);
                    break;
                case 11:
                    Vector3 vector3_1 = new Vector3(0.4f, 0.12f, 0.15f);
                    float num4 = (float)(1.0 + (double)Math.Abs(mountedPlayer.velocity.X) / (double)this.RunSpeed * 2.5);
                    mountedPlayer.statDefense += (int)(2.0 * (double)num4);
                    int num5 = Math.Sign(mountedPlayer.velocity.X);
                    if (num5 == 0)
                        num5 = mountedPlayer.direction;
                    if (Main.netMode != 2)
                    {
                        Vector3 vector3_2 = vector3_1 * num4;
                        Lighting.AddLight(mountedPlayer.Center, vector3_2.X, vector3_2.Y, vector3_2.Z);
                        Lighting.AddLight(mountedPlayer.Top, vector3_2.X, vector3_2.Y, vector3_2.Z);
                        Lighting.AddLight(mountedPlayer.Bottom, vector3_2.X, vector3_2.Y, vector3_2.Z);
                        Lighting.AddLight(mountedPlayer.Left, vector3_2.X, vector3_2.Y, vector3_2.Z);
                        Lighting.AddLight(mountedPlayer.Right, vector3_2.X, vector3_2.Y, vector3_2.Z);
                        float num2 = -24f;
                        if (mountedPlayer.direction != num5)
                            num2 = -22f;
                        if (num5 == -1)
                            ++num2;
                        Vector2 vector2_2 = Utils.RotatedBy(new Vector2(num2 * (float)num5, -19f), (double)mountedPlayer.fullRotation, new Vector2());
                        Vector2 vector2_3 = Utils.RotatedBy(new Vector2(MathHelper.Lerp(0.0f, -8f, mountedPlayer.fullRotation / 0.7853982f), MathHelper.Lerp(0.0f, 2f, Math.Abs(mountedPlayer.fullRotation / 0.7853982f))), (double)mountedPlayer.fullRotation, new Vector2());
                        if (num5 == Math.Sign(mountedPlayer.fullRotation))
                            vector2_3 *= MathHelper.Lerp(1f, 0.6f, Math.Abs(mountedPlayer.fullRotation / 0.7853982f));
                        Vector2 vector2_4 = mountedPlayer.Bottom + vector2_2 + vector2_3;
                        Vector2 vector2_5 = mountedPlayer.oldPosition + mountedPlayer.Size * new Vector2(0.5f, 1f) + vector2_2 + vector2_3;
                        if ((double)Vector2.Distance(vector2_4, vector2_5) > 3.0)
                        {
                            int num6 = (int)Vector2.Distance(vector2_4, vector2_5) / 3;
                            if ((double)Vector2.Distance(vector2_4, vector2_5) % 3.0 != 0.0)
                                ++num6;
                            for (float num7 = 1f; (double)num7 <= (double)num6; ++num7)
                            {
                                Dust dust = Main.dust[Dust.NewDust(mountedPlayer.Center, 0, 0, 182, 0.0f, 0.0f, 0, new Color(), 1f)];
                                dust.position = Vector2.Lerp(vector2_5, vector2_4, num7 / (float)num6);
                                dust.noGravity = true;
                                dust.velocity = Vector2.Zero;
                                dust.customData = (object)mountedPlayer;
                                dust.shader = GameShaders.Armor.GetSecondaryShader(mountedPlayer.cMinecart, mountedPlayer);
                            }
                        }
                        else
                        {
                            Dust dust = Main.dust[Dust.NewDust(mountedPlayer.Center, 0, 0, 182, 0.0f, 0.0f, 0, new Color(), 1f)];
                            dust.position = vector2_4;
                            dust.noGravity = true;
                            dust.velocity = Vector2.Zero;
                            dust.customData = (object)mountedPlayer;
                            dust.shader = GameShaders.Armor.GetSecondaryShader(mountedPlayer.cMinecart, mountedPlayer);
                        }
                    }
                    if (mountedPlayer.whoAmI != Main.myPlayer || (double)mountedPlayer.velocity.X == 0.0)
                        break;
                    Vector2 minecartMechPoint = Mount.GetMinecartMechPoint(mountedPlayer, 20, -19);
                    int num8 = 60;
                    int num9 = 0;
                    float num10 = 0.0f;
                    for (int index1 = 0; index1 < 200; ++index1)
                    {
                        NPC npc = Main.npc[index1];
                        if (npc.active && npc.immune[mountedPlayer.whoAmI] <= 0 && (!npc.dontTakeDamage && (double)npc.Distance(minecartMechPoint) < 300.0) && (npc.CanBeChasedBy((object)mountedPlayer, false) && Collision.CanHitLine(npc.position, npc.width, npc.height, minecartMechPoint, 0, 0)) && (double)Math.Abs(MathHelper.WrapAngle(MathHelper.WrapAngle(npc.AngleFrom(minecartMechPoint)) - MathHelper.WrapAngle((double)mountedPlayer.fullRotation + (double)num5 == -1.0 ? 3.141593f : 0.0f))) < 0.785398185253143)
                        {
                            Vector2 v = npc.position + npc.Size * Utils.RandomVector2(Main.rand, 0.0f, 1f) - minecartMechPoint;
                            num10 += Utils.ToRotation(v);
                            ++num9;
                            int index2 = Projectile.NewProjectile(minecartMechPoint.X, minecartMechPoint.Y, v.X, v.Y, 591, 0, 0.0f, mountedPlayer.whoAmI, (float)mountedPlayer.whoAmI, 0.0f);
                            Main.projectile[index2].Center = npc.Center;
                            Main.projectile[index2].damage = num8;
                            Main.projectile[index2].Damage();
                            Main.projectile[index2].damage = 0;
                            Main.projectile[index2].Center = minecartMechPoint;
                        }
                    }
                    break;
                case 12:
                    if (mountedPlayer.MountFishronSpecial)
                    {
                        Vector3 vector3_2 = Colors.CurrentLiquidColor.ToVector3() * 0.4f;
                        Point point = Utils.ToTileCoordinates(mountedPlayer.Center + Vector2.UnitX * (float)mountedPlayer.direction * 20f + mountedPlayer.velocity * 10f);
                        if (!WorldGen.SolidTile(point.X, point.Y))
                            Lighting.AddLight(point.X, point.Y, vector3_2.X, vector3_2.Y, vector3_2.Z);
                        else
                            Lighting.AddLight(mountedPlayer.Center + Vector2.UnitX * (float)mountedPlayer.direction * 20f, vector3_2.X, vector3_2.Y, vector3_2.Z);
                        mountedPlayer.meleeDamage += 0.15f;
                        mountedPlayer.rangedDamage += 0.15f;
                        mountedPlayer.magicDamage += 0.15f;
                        mountedPlayer.minionDamage += 0.15f;
                        mountedPlayer.thrownDamage += 0.15f;
                    }
                    if (mountedPlayer.statLife <= mountedPlayer.statLifeMax2 / 2)
                        mountedPlayer.MountFishronSpecialCounter = 60f;
                    if (!mountedPlayer.wet)
                        break;
                    mountedPlayer.MountFishronSpecialCounter = 300f;
                    break;
            }
        }