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

◆ AI_118_Seahorses()

void Terraria.NPC.AI_118_Seahorses ( )
inlineprivate

Definition at line 40282 of file NPC.cs.

40283 {
40284 noGravity = wet;
40285 Collision.GetWaterLineIterate(base.Center.ToTileCoordinates(), out var waterLineHeight);
40286 bool flag = waterLineHeight > 0f && base.Top.Y - waterLineHeight < 20f;
40287 if (!wet)
40288 {
40289 if (velocity.Y == 0f)
40290 {
40291 velocity.X *= 0.95f;
40292 }
40293 rotation += (velocity.X + velocity.Y) / 2f * 0.05f;
40294 }
40295 else
40296 {
40297 ai[1] -= 1f;
40298 if (ai[1] <= 0f)
40299 {
40300 velocity += ai[0].ToRotationVector2() * 0.06f;
40301 float num = velocity.Length();
40302 if (num > 3f || num < -3f)
40303 {
40304 velocity.X = Math.Min(3f, Math.Max(-3f, velocity.X));
40305 ai[1] = Main.rand.Next(450, 600);
40306 ai[0] = Main.rand.NextFloat() * ((float)Math.PI * 2f);
40307 if (flag && ai[0] > (float)Math.PI)
40308 {
40309 ai[0] -= (float)Math.PI;
40310 }
40311 netUpdate = true;
40312 }
40313 }
40314 else
40315 {
40316 velocity *= 0.95f;
40317 }
40318 rotation = velocity.X * 0.1f;
40319 }
40320 bool flag2 = collideY && wet && (!flag || velocity.Y < 0f);
40321 if (collideX || flag2)
40322 {
40323 Vector2 v = ai[0].ToRotationVector2();
40324 if (collideX)
40325 {
40326 v.X *= -1f;
40327 }
40328 if (flag2)
40329 {
40330 v.Y *= -1f;
40331 }
40332 ai[0] = v.ToRotation();
40333 velocity = ai[0].ToRotationVector2() * velocity.Length();
40334 netUpdate = true;
40335 }
40336 }
static byte Min(byte val1, byte val2)
Definition Math.cs:912
const double PI
Definition Math.cs:16
static byte Max(byte val1, byte val2)
Definition Math.cs:738
Vector2 velocity
Definition Entity.cs:16
bool noGravity
Definition NPC.cs:503
float[] ai
Definition NPC.cs:447
bool collideX
Definition NPC.cs:511
bool collideY
Definition NPC.cs:513
float rotation
Definition NPC.cs:501
bool netUpdate
Definition NPC.cs:507

References Terraria.NPC.ai, Terraria.NPC.collideX, Terraria.NPC.collideY, Terraria.Collision.GetWaterLineIterate(), Microsoft.Xna.Framework.Vector2.Length(), System.Math.Max(), System.Math.Min(), Terraria.NPC.netUpdate, Terraria.NPC.noGravity, System.Math.PI, Terraria.Main.rand, Terraria.NPC.rotation, Terraria.Entity.velocity, Terraria.Entity.wet, Microsoft.Xna.Framework.Vector2.X, and Microsoft.Xna.Framework.Vector2.Y.

Referenced by Terraria.NPC.AI().