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;
}
}