Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros

◆ UpdateEffects()

void Terraria.Mount.UpdateEffects ( Player mountedPlayer)
inline

Definition at line 4057 of file Mount.cs.

4058 {
4059 mountedPlayer.autoJump = AutoJump;
4060 _shouldSuperCart = MountID.Sets.Cart[_type] && mountedPlayer.UsingSuperCart;
4061 if (_shouldSuperCart)
4062 {
4064 float num = 1f + Math.Abs(mountedPlayer.velocity.X) / RunSpeed * 2.5f;
4065 mountedPlayer.statDefense += (int)(2f * num);
4066 }
4067 switch (_type)
4068 {
4069 case 23:
4070 {
4071 Vector2 pos3 = mountedPlayer.Center + GetWitchBroomTrinketOriginOffset(mountedPlayer) + (GetWitchBroomTrinketRotation(mountedPlayer) + (float)Math.PI / 2f).ToRotationVector2() * 11f;
4072 Vector3 rgb = new Vector3(1f, 0.75f, 0.5f) * 0.85f;
4073 Vector2 vector11 = mountedPlayer.RotatedRelativePoint(pos3);
4074 Lighting.AddLight(vector11, rgb);
4075 if (Main.rand.Next(45) == 0)
4076 {
4077 Vector2 vector12 = Main.rand.NextVector2Circular(4f, 4f);
4078 Dust dust2 = Dust.NewDustPerfect(vector11 + vector12, 43, Vector2.Zero, 254, new Color(255, 255, 0, 255), 0.3f);
4079 if (vector12 != Vector2.Zero)
4080 {
4081 dust2.velocity = vector11.DirectionTo(dust2.position) * 0.2f;
4082 }
4083 dust2.fadeIn = 0.3f;
4084 dust2.noLightEmittence = true;
4085 dust2.customData = mountedPlayer;
4086 dust2.shader = GameShaders.Armor.GetSecondaryShader(mountedPlayer.cMount, mountedPlayer);
4087 }
4088 float num13 = 0.1f;
4089 num13 += mountedPlayer.velocity.Length() / 30f;
4090 Vector2 pos4 = mountedPlayer.Center + new Vector2(18f - 20f * Main.rand.NextFloat() * (float)mountedPlayer.direction, 12f);
4091 Vector2 pos5 = mountedPlayer.Center + new Vector2(52 * mountedPlayer.direction, -6f);
4092 pos4 = mountedPlayer.RotatedRelativePoint(pos4);
4093 pos5 = mountedPlayer.RotatedRelativePoint(pos5);
4094 if (!(Main.rand.NextFloat() <= num13))
4095 {
4096 break;
4097 }
4098 float num14 = Main.rand.NextFloat();
4099 for (float num15 = 0f; num15 < 1f; num15 += 0.125f)
4100 {
4101 if (Main.rand.Next(15) == 0)
4102 {
4103 Vector2 spinningpoint = ((float)Math.PI * 2f * num15 + num14).ToRotationVector2() * new Vector2(0.5f, 1f) * 4f;
4104 spinningpoint = spinningpoint.RotatedBy(mountedPlayer.fullRotation);
4105 Dust dust3 = Dust.NewDustPerfect(pos4 + spinningpoint, 43, Vector2.Zero, 254, new Color(255, 255, 0, 255), 0.3f);
4106 dust3.velocity = spinningpoint * 0.025f + pos5.DirectionTo(dust3.position) * 0.5f;
4107 dust3.fadeIn = 0.3f;
4108 dust3.noLightEmittence = true;
4109 dust3.shader = GameShaders.Armor.GetSecondaryShader(mountedPlayer.cMount, mountedPlayer);
4110 }
4111 }
4112 break;
4113 }
4114 case 25:
4116 break;
4117 case 26:
4119 break;
4120 case 27:
4122 break;
4123 case 28:
4125 break;
4126 case 29:
4128 break;
4129 case 30:
4131 break;
4132 case 31:
4134 break;
4135 case 9:
4136 case 46:
4137 {
4138 if (_type == 46)
4139 {
4140 mountedPlayer.hasJumpOption_Santank = true;
4141 }
4142 Vector2 center = mountedPlayer.Center;
4144 bool flag = false;
4145 float num9 = 1500f;
4146 float num10 = 850f;
4147 for (int i = 0; i < 200; i++)
4148 {
4149 NPC nPC = Main.npc[i];
4150 if (!nPC.CanBeChasedBy(this))
4151 {
4152 continue;
4153 }
4154 Vector2 v = nPC.Center - center;
4155 float num11 = v.Length();
4156 if (num11 < num10 && ((Vector2.Distance(vector10, center) > num11 && num11 < num9) || !flag))
4157 {
4158 bool flag2 = true;
4159 float num12 = Math.Abs(v.ToRotation());
4160 if (mountedPlayer.direction == 1 && (double)num12 > 1.047197594907988)
4161 {
4162 flag2 = false;
4163 }
4164 else if (mountedPlayer.direction == -1 && (double)num12 < 2.0943951461045853)
4165 {
4166 flag2 = false;
4167 }
4168 if (Collision.CanHitLine(center, 0, 0, nPC.position, nPC.width, nPC.height) && flag2)
4169 {
4170 num9 = num11;
4171 vector10 = nPC.Center;
4172 flag = true;
4173 }
4174 }
4175 }
4176 if (flag)
4177 {
4178 bool flag3 = _abilityCooldown == 0;
4179 if (_type == 46)
4180 {
4181 flag3 = _abilityCooldown % 10 == 0;
4182 }
4183 if (flag3 && mountedPlayer.whoAmI == Main.myPlayer)
4184 {
4186 if (_abilityCooldown == 0)
4187 {
4189 }
4191 }
4192 else
4193 {
4195 _abilityCharging = true;
4196 }
4197 }
4198 else
4199 {
4200 _abilityCharging = false;
4202 }
4203 break;
4204 }
4205 case 10:
4206 mountedPlayer.hasJumpOption_Unicorn = true;
4207 if (Math.Abs(mountedPlayer.velocity.X) > mountedPlayer.mount.DashSpeed - mountedPlayer.mount.RunSpeed / 2f)
4208 {
4209 mountedPlayer.noKnockback = true;
4210 }
4211 if (mountedPlayer.itemAnimation > 0 && mountedPlayer.inventory[mountedPlayer.selectedItem].type == 1260)
4212 {
4214 }
4215 break;
4216 case 47:
4217 mountedPlayer.hasJumpOption_WallOfFleshGoat = true;
4218 if (Math.Abs(mountedPlayer.velocity.X) > mountedPlayer.mount.DashSpeed - mountedPlayer.mount.RunSpeed / 2f)
4219 {
4220 mountedPlayer.noKnockback = true;
4221 }
4222 break;
4223 case 14:
4224 mountedPlayer.hasJumpOption_Basilisk = true;
4225 if (Math.Abs(mountedPlayer.velocity.X) > mountedPlayer.mount.DashSpeed - mountedPlayer.mount.RunSpeed / 2f)
4226 {
4227 mountedPlayer.noKnockback = true;
4228 }
4229 break;
4230 case 40:
4231 case 41:
4232 case 42:
4233 if (Math.Abs(mountedPlayer.velocity.X) > mountedPlayer.mount.DashSpeed - mountedPlayer.mount.RunSpeed / 2f)
4234 {
4235 mountedPlayer.noKnockback = true;
4236 }
4237 break;
4238 case 12:
4239 if (mountedPlayer.MountFishronSpecial)
4240 {
4242 vector9 *= 0.4f;
4243 Point point = (mountedPlayer.Center + Vector2.UnitX * mountedPlayer.direction * 20f + mountedPlayer.velocity * 10f).ToTileCoordinates();
4244 if (!WorldGen.SolidTile(point.X, point.Y))
4245 {
4246 Lighting.AddLight(point.X, point.Y, vector9.X, vector9.Y, vector9.Z);
4247 }
4248 else
4249 {
4250 Lighting.AddLight(mountedPlayer.Center + Vector2.UnitX * mountedPlayer.direction * 20f, vector9.X, vector9.Y, vector9.Z);
4251 }
4252 mountedPlayer.meleeDamage += 0.15f;
4253 mountedPlayer.rangedDamage += 0.15f;
4254 mountedPlayer.magicDamage += 0.15f;
4255 mountedPlayer.minionDamage += 0.15f;
4256 }
4257 if (mountedPlayer.statLife <= mountedPlayer.statLifeMax2 / 2)
4258 {
4259 mountedPlayer.MountFishronSpecialCounter = 60f;
4260 }
4261 if (mountedPlayer.wet || (Main.raining && WorldGen.InAPlaceWithWind(mountedPlayer.position, mountedPlayer.width, mountedPlayer.height)))
4262 {
4263 mountedPlayer.MountFishronSpecialCounter = 420f;
4264 }
4265 break;
4266 case 8:
4267 if (mountedPlayer.ownedProjectileCounts[453] < 1)
4268 {
4269 _abilityActive = false;
4270 }
4271 break;
4272 case 11:
4273 {
4274 Vector3 vector4 = new Vector3(0.4f, 0.12f, 0.15f);
4275 float num4 = 1f + Math.Abs(mountedPlayer.velocity.X) / RunSpeed * 2.5f;
4276 int num5 = Math.Sign(mountedPlayer.velocity.X);
4277 if (num5 == 0)
4278 {
4279 num5 = mountedPlayer.direction;
4280 }
4281 if (Main.netMode == 2)
4282 {
4283 break;
4284 }
4285 vector4 *= num4;
4286 Lighting.AddLight(mountedPlayer.Center, vector4.X, vector4.Y, vector4.Z);
4287 Lighting.AddLight(mountedPlayer.Top, vector4.X, vector4.Y, vector4.Z);
4288 Lighting.AddLight(mountedPlayer.Bottom, vector4.X, vector4.Y, vector4.Z);
4289 Lighting.AddLight(mountedPlayer.Left, vector4.X, vector4.Y, vector4.Z);
4290 Lighting.AddLight(mountedPlayer.Right, vector4.X, vector4.Y, vector4.Z);
4291 float num6 = -24f;
4292 if (mountedPlayer.direction != num5)
4293 {
4294 num6 = -22f;
4295 }
4296 if (num5 == -1)
4297 {
4298 num6 += 1f;
4299 }
4300 Vector2 vector5 = new Vector2(num6 * (float)num5, -19f).RotatedBy(mountedPlayer.fullRotation);
4301 Vector2 vector6 = new Vector2(MathHelper.Lerp(0f, -8f, mountedPlayer.fullRotation / ((float)Math.PI / 4f)), MathHelper.Lerp(0f, 2f, Math.Abs(mountedPlayer.fullRotation / ((float)Math.PI / 4f)))).RotatedBy(mountedPlayer.fullRotation);
4302 if (num5 == Math.Sign(mountedPlayer.fullRotation))
4303 {
4304 vector6 *= MathHelper.Lerp(1f, 0.6f, Math.Abs(mountedPlayer.fullRotation / ((float)Math.PI / 4f)));
4305 }
4306 Vector2 vector7 = mountedPlayer.Bottom + vector5 + vector6;
4307 Vector2 vector8 = mountedPlayer.oldPosition + mountedPlayer.Size * new Vector2(0.5f, 1f) + vector5 + vector6;
4308 if (Vector2.Distance(vector7, vector8) > 3f)
4309 {
4310 int num7 = (int)Vector2.Distance(vector7, vector8) / 3;
4311 if (Vector2.Distance(vector7, vector8) % 3f != 0f)
4312 {
4313 num7++;
4314 }
4315 for (float num8 = 1f; num8 <= (float)num7; num8 += 1f)
4316 {
4317 Dust obj = Main.dust[Dust.NewDust(mountedPlayer.Center, 0, 0, 182)];
4318 obj.position = Vector2.Lerp(vector8, vector7, num8 / (float)num7);
4319 obj.noGravity = true;
4320 obj.velocity = Vector2.Zero;
4321 obj.customData = mountedPlayer;
4322 obj.shader = GameShaders.Armor.GetSecondaryShader(mountedPlayer.cMinecart, mountedPlayer);
4323 }
4324 }
4325 else
4326 {
4327 Dust obj2 = Main.dust[Dust.NewDust(mountedPlayer.Center, 0, 0, 182)];
4328 obj2.position = vector7;
4329 obj2.noGravity = true;
4330 obj2.velocity = Vector2.Zero;
4331 obj2.customData = mountedPlayer;
4332 obj2.shader = GameShaders.Armor.GetSecondaryShader(mountedPlayer.cMinecart, mountedPlayer);
4333 }
4334 break;
4335 }
4336 case 22:
4337 {
4338 mountedPlayer.lavaMax += 420;
4339 Vector2 vector = mountedPlayer.Center + new Vector2(20f, 10f) * mountedPlayer.Directions;
4340 Vector2 pos = vector + mountedPlayer.velocity;
4341 Vector2 pos2 = vector + new Vector2(-1f, -0.5f) * mountedPlayer.Directions;
4342 vector = mountedPlayer.RotatedRelativePoint(vector);
4343 pos = mountedPlayer.RotatedRelativePoint(pos);
4344 pos2 = mountedPlayer.RotatedRelativePoint(pos2);
4345 Vector2 value = mountedPlayer.shadowPos[2] - mountedPlayer.position + vector;
4346 Vector2 vector2 = pos - vector;
4347 vector += vector2;
4348 value += vector2;
4349 Vector2 vector3 = pos - pos2;
4350 float num2 = MathHelper.Clamp(mountedPlayer.velocity.Length() / 5f, 0f, 1f);
4351 for (float num3 = 0f; num3 <= 1f; num3 += 0.1f)
4352 {
4353 if (!(Main.rand.NextFloat() < num2))
4354 {
4355 Dust dust = Dust.NewDustPerfect(Vector2.Lerp(value, vector, num3), 65, Main.rand.NextVector2Circular(0.5f, 0.5f) * num2);
4356 dust.scale = 0.6f;
4357 dust.fadeIn = 0f;
4358 dust.customData = mountedPlayer;
4359 dust.velocity *= -1f;
4360 dust.noGravity = true;
4361 dust.velocity -= vector3;
4362 dust.shader = GameShaders.Armor.GetSecondaryShader(mountedPlayer.cMinecart, mountedPlayer);
4363 if (Main.rand.Next(10) == 0)
4364 {
4365 dust.fadeIn = 1.3f;
4366 dust.velocity = Main.rand.NextVector2Circular(3f, 3f) * num2;
4367 }
4368 }
4369 }
4370 break;
4371 }
4372 case 16:
4373 mountedPlayer.ignoreWater = true;
4374 break;
4375 case 24:
4376 DelegateMethods.v3_1 = new Vector3(0.1f, 0.3f, 1f) * 0.4f;
4377 Utils.PlotTileLine(mountedPlayer.MountedCenter, mountedPlayer.MountedCenter + mountedPlayer.velocity * 6f, 40f, DelegateMethods.CastLightOpen);
4378 Utils.PlotTileLine(mountedPlayer.Left, mountedPlayer.Right, 40f, DelegateMethods.CastLightOpen);
4379 break;
4380 case 36:
4382 break;
4383 case 32:
4385 break;
4386 case 34:
4388 break;
4389 case 37:
4390 mountedPlayer.canFloatInWater = true;
4391 mountedPlayer.accFlipper = true;
4392 break;
4393 case 13:
4394 case 15:
4395 case 17:
4396 case 18:
4397 case 19:
4398 case 20:
4399 case 21:
4400 case 33:
4401 case 35:
4402 case 38:
4403 case 39:
4404 case 43:
4405 case 44:
4406 case 45:
4407 break;
4408 }
4409 }
static float Lerp(float value1, float value2, float amount)
Definition MathHelper.cs:53
static float Clamp(float value, float min, float max)
Definition MathHelper.cs:46
static double Abs(double value)
const double PI
Definition Math.cs:16
static int Sign(decimal value)
Definition Math.cs:1202
static void HandleSpecialEvent(Player player, int eventID)
static ArmorShaderDataSet Armor
Definition GameShaders.cs:7
static Color CurrentLiquidColor
Definition Colors.cs:98
static bool[] Cart
Definition MountID.cs:9
bool _abilityCharging
Definition Mount.cs:313
void CastSuperCartLaser(Player mountedPlayer)
Definition Mount.cs:4411
int _abilityCooldown
Definition Mount.cs:317
bool AimAbility(Player mountedPlayer, Vector2 mousePosition)
Definition Mount.cs:4548
void DoConfettiMinecartEffect(Player mountedPlayer)
Definition Mount.cs:4023
void UseAbility(Player mountedPlayer, Vector2 mousePosition, bool toggleOn)
Definition Mount.cs:2716
float GetWitchBroomTrinketRotation(Player player)
Definition Mount.cs:3003
void DoSteamMinecartEffect(Player mountedPlayer, int dustType)
Definition Mount.cs:3968
void ResetHeadPosition()
Definition Mount.cs:4496
bool _shouldSuperCart
Definition Mount.cs:325
Vector2 GetWitchBroomTrinketOriginOffset(Player player)
Definition Mount.cs:3018
float RunSpeed
Definition Mount.cs:404
void DoExhaustMinecartEffect(Player mountedPlayer, int dustType)
Definition Mount.cs:3987
void StopAbilityCharge()
Definition Mount.cs:2432
bool _abilityActive
Definition Mount.cs:321
void DoGemMinecartEffect(Player mountedPlayer, int dustType)
Definition Mount.cs:3951
bool AutoJump
Definition Mount.cs:466
static float Distance(Vector2 value1, Vector2 value2)
Definition Vector2.cs:91
static Vector2 Lerp(Vector2 value1, Vector2 value2, float amount)
Definition Vector2.cs:227

References Terraria.Mount._abilityActive, Terraria.Mount._abilityCharging, Terraria.Mount._abilityCooldown, Terraria.Mount._shouldSuperCart, Terraria.Mount._type, System.Math.Abs(), Terraria.Lighting.AddLight(), Terraria.Mount.AimAbility(), Terraria.Graphics.Shaders.GameShaders.Armor, Terraria.Mount.AutoJump, Terraria.Collision.CanHitLine(), Terraria.ID.MountID.Sets.Cart, Terraria.DelegateMethods.CastLightOpen(), Terraria.Mount.CastSuperCartLaser(), Microsoft.Xna.Framework.MathHelper.Clamp(), Terraria.ID.Colors.CurrentLiquidColor, Microsoft.Xna.Framework.Vector2.Distance(), Terraria.Mount.DoConfettiMinecartEffect(), Terraria.Mount.DoExhaustMinecartEffect(), Terraria.Mount.DoGemMinecartEffect(), Terraria.Mount.DoSteamMinecartEffect(), Terraria.Main.dust, Terraria.Mount.GetWitchBroomTrinketOriginOffset(), Terraria.Mount.GetWitchBroomTrinketRotation(), Terraria.GameContent.Achievements.AchievementsHelper.HandleSpecialEvent(), Terraria.WorldGen.InAPlaceWithWind(), Microsoft.Xna.Framework.Vector2.Length(), Microsoft.Xna.Framework.MathHelper.Lerp(), Microsoft.Xna.Framework.Vector2.Lerp(), Terraria.Main.myPlayer, Terraria.Main.netMode, Terraria.Dust.NewDust(), Terraria.Dust.NewDustPerfect(), Terraria.Main.npc, System.obj, System.Math.PI, Terraria.Utils.PlotTileLine(), Terraria.Main.raining, Terraria.Main.rand, Terraria.Mount.ResetHeadPosition(), Terraria.Mount.RunSpeed, System.Math.Sign(), Terraria.WorldGen.SolidTile(), Terraria.Mount.StopAbilityCharge(), Microsoft.Xna.Framework.Vector2.UnitX, Terraria.Mount.UseAbility(), System.value, Microsoft.Xna.Framework.Graphics.Vector2, Microsoft.Xna.Framework.Graphics.Vector3, Microsoft.Xna.Framework.Point.X, Microsoft.Xna.Framework.Point.Y, and Microsoft.Xna.Framework.Vector2.Zero.