Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ AI_174_MultisegmentPet()

void Terraria.Projectile.AI_174_MultisegmentPet ( )
inlineprivate

Definition at line 37326 of file Projectile.cs.

37327 {
37328 Player player = Main.player[owner];
37329 if (!player.active)
37330 {
37331 active = false;
37332 return;
37333 }
37334 if (type == 883)
37335 {
37336 if (player.dead)
37337 {
37338 player.petFlagEaterOfWorldsPet = false;
37339 }
37340 if (player.petFlagEaterOfWorldsPet)
37341 {
37342 timeLeft = 2;
37343 }
37344 }
37345 if (type == 887)
37346 {
37347 if (player.dead)
37348 {
37349 player.petFlagDestroyerPet = false;
37350 }
37351 if (player.petFlagDestroyerPet)
37352 {
37353 timeLeft = 2;
37354 }
37355 }
37356 if (type == 893)
37357 {
37358 if (player.dead)
37359 {
37360 player.petFlagLunaticCultistPet = false;
37361 }
37362 if (player.petFlagLunaticCultistPet)
37363 {
37364 timeLeft = 2;
37365 }
37366 }
37367 Vector2 center = player.Center;
37368 if (Distance(center) > 2000f)
37369 {
37370 base.Center = center;
37372 netUpdate = true;
37373 }
37374 float num = (center - base.Center).Length();
37375 float num2 = Math.Min(12f, Math.Max(4f, player.velocity.Length()));
37376 velocity.Length();
37377 if (velocity == Vector2.Zero)
37378 {
37379 velocity.X = 2f * (float)player.direction;
37381 for (int i = 0; i < oldPos.Length; i++)
37382 {
37383 vector -= velocity;
37384 oldPos[i] = vector;
37385 }
37386 }
37387 if (!(num < 120f))
37388 {
37389 float targetAngle = AngleTo(center);
37390 float f = velocity.ToRotation().AngleTowards(targetAngle, MathHelper.ToRadians(5f));
37391 velocity = f.ToRotationVector2() * num2;
37392 }
37393 if (velocity.Length() > num2)
37394 {
37395 velocity = velocity.SafeNormalize(Vector2.Zero) * num2;
37396 }
37397 if (Math.Abs(velocity.Y) < 1f)
37398 {
37399 velocity.Y -= 0.1f;
37400 }
37401 rotation = velocity.ToRotation() + (float)Math.PI / 2f;
37402 int num3 = direction;
37403 direction = (spriteDirection = ((velocity.X > 0f) ? 1 : (-1)));
37404 if (num3 != direction)
37405 {
37406 netUpdate = true;
37407 }
37408 position.X = MathHelper.Clamp(position.X, 160f, Main.maxTilesX * 16 - 160);
37409 position.Y = MathHelper.Clamp(position.Y, 160f, Main.maxTilesY * 16 - 160);
37410 }
static float ToRadians(float degrees)
Definition MathHelper.cs:21
static float Clamp(float value, float min, float max)
Definition MathHelper.cs:46
static byte Min(byte val1, byte val2)
Definition Math.cs:912
static double Abs(double value)
const double PI
Definition Math.cs:16
static byte Max(byte val1, byte val2)
Definition Math.cs:738
float AngleTo(Vector2 Destination)
Definition Entity.cs:177
Vector2 velocity
Definition Entity.cs:16
float Distance(Vector2 Other)
Definition Entity.cs:187
Vector2 position
Definition Entity.cs:14

References System.Math.Abs(), Terraria.Entity.active, Terraria.Entity.Center, Microsoft.Xna.Framework.MathHelper.Clamp(), Terraria.Player.dead, Terraria.Entity.direction, Microsoft.Xna.Framework.Vector2.Length(), System.Math.Max(), Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, System.Math.Min(), Terraria.Player.petFlagDestroyerPet, Terraria.Player.petFlagEaterOfWorldsPet, Terraria.Player.petFlagLunaticCultistPet, System.Math.PI, Terraria.Main.player, Microsoft.Xna.Framework.MathHelper.ToRadians(), System.type, Terraria.Entity.velocity, Microsoft.Xna.Framework.Vector2.X, Microsoft.Xna.Framework.Vector2.Y, and Microsoft.Xna.Framework.Vector2.Zero.