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

◆ AI_115_LadyBugs()

void Terraria.NPC.AI_115_LadyBugs ( )
inlineprivate

Definition at line 40794 of file NPC.cs.

40795 {
40796 if (Main.netMode != 1)
40797 {
40798 if (ai[1] == 0f)
40799 {
40800 ai[1] = Main.rand.NextFloat() * 0.2f + 0.7f;
40801 netUpdate = true;
40802 }
40803 if ((localAI[0] -= 1f) <= 0f)
40804 {
40805 localAI[0] = Main.rand.Next(60, 181);
40806 if (Main.rand.Next(5) == 0)
40807 {
40808 if (ai[2] == 0f)
40809 {
40810 ai[2] = 1f;
40811 ai[0] = 0f;
40812 netUpdate = true;
40813 }
40814 else if (ai[2] == 1f)
40815 {
40816 TargetClosest();
40817 ai[2] = 0f;
40818 ai[0] = Main.rand.NextFloat() * ((float)Math.PI * 2f);
40819 if (Distance(Main.player[target].Center) > 700f)
40820 {
40821 ai[0] = AngleTo(Main.player[target].Center) + Main.rand.NextFloatDirection() * 0.3f;
40822 }
40823 netUpdate = true;
40824 }
40825 }
40826 TargetClosest();
40827 ai[0] = Main.rand.NextFloat() * ((float)Math.PI * 2f);
40828 if (Distance(Main.player[target].Center) > 700f)
40829 {
40830 ai[0] = AngleTo(Main.player[target].Center) + Main.rand.NextFloatDirection() * 0.3f;
40831 }
40832 netUpdate = true;
40833 }
40834 }
40835 scale = ai[1];
40836 if (ai[2] == 0f)
40837 {
40838 Vector2 value = ai[0].ToRotationVector2() * 1f;
40839 value.X += Main.windSpeedTarget * 0.8f;
40840 velocity = Vector2.Lerp(velocity, value, 0.0125f);
40841 if (velocity.Y > 0f)
40842 {
40843 int num = 4;
40844 int num2 = (int)base.Center.X / 16;
40845 int num3 = (int)base.Center.Y / 16;
40846 for (int i = num3; i < num3 + num; i++)
40847 {
40848 if (Main.tile[num2, i] != null && ((Main.tile[num2, i].nactive() && Main.tileSolid[Main.tile[num2, i].type]) || Main.tile[num2, i].liquid > 0))
40849 {
40850 ai[0] = 0f - ai[0];
40851 if (velocity.Y > 0f)
40852 {
40853 velocity.Y *= 0.9f;
40854 }
40855 }
40856 }
40857 }
40858 if (velocity.Y < 0f)
40859 {
40860 int num4 = 30;
40861 bool flag = false;
40862 int num5 = (int)base.Center.X / 16;
40863 int num6 = (int)base.Center.Y / 16;
40864 for (int j = num6; j < num6 + num4; j++)
40865 {
40866 if (Main.tile[num5, j] != null && ((Main.tile[num5, j].nactive() && Main.tileSolid[Main.tile[num5, j].type]) || Main.tile[num5, j].liquid > 0))
40867 {
40868 flag = true;
40869 }
40870 }
40871 if (!flag)
40872 {
40873 ai[0] = 0f - ai[0];
40874 if (velocity.Y < 0f)
40875 {
40876 velocity.Y *= 0.9f;
40877 }
40878 }
40879 }
40880 if (collideX)
40881 {
40882 ai[0] = 0f - ai[0] + (float)Math.PI;
40883 velocity.X *= -0.2f;
40884 }
40885 }
40886 else
40887 {
40888 if (velocity.Y > 0f)
40889 {
40890 int num7 = 4;
40891 int num8 = (int)base.Center.X / 16 + direction;
40892 int num9 = (int)base.Center.Y / 16;
40893 for (int k = num9; k < num9 + num7; k++)
40894 {
40895 if (Main.tile[num8, k] != null && Main.tile[num8, k].liquid > 0)
40896 {
40897 TargetClosest();
40898 velocity.Y = -1f;
40899 ai[2] = 0f;
40900 ai[0] = Main.rand.NextFloat() * ((float)Math.PI / 4f) - (float)Math.PI / 2f;
40901 if (Distance(Main.player[target].Center) > 700f)
40902 {
40903 ai[0] = AngleTo(Main.player[target].Center) + Main.rand.NextFloatDirection() * 0.3f;
40904 }
40905 netUpdate = true;
40906 return;
40907 }
40908 }
40909 }
40910 if (velocity.Y != 0f)
40911 {
40912 velocity.X *= 0.98f;
40913 velocity.Y = MathHelper.Lerp(velocity.Y, 2f, 0.005f);
40914 }
40915 else
40916 {
40918 velocity.Y += 0.2f;
40919 if (collideX)
40920 {
40921 direction *= -1;
40922 velocity.X *= -0.2f;
40923 netUpdate = true;
40924 }
40925 }
40926 }
40927 direction = ((velocity.X > 0f) ? 1 : (-1));
40928 }
static float Lerp(float value1, float value2, float amount)
Definition MathHelper.cs:53
const double PI
Definition Math.cs:16
float AngleTo(Vector2 Destination)
Definition Entity.cs:177
Vector2 velocity
Definition Entity.cs:16
float Distance(Vector2 Other)
Definition Entity.cs:187
float[] localAI
Definition NPC.cs:449
void TargetClosest(bool faceTarget=true)
Definition NPC.cs:69934
float[] ai
Definition NPC.cs:447
float value
Definition NPC.cs:523
float scale
Definition NPC.cs:493
bool collideX
Definition NPC.cs:511
bool netUpdate
Definition NPC.cs:507
int target
Definition NPC.cs:459
static Vector2 Lerp(Vector2 value1, Vector2 value2, float amount)
Definition Vector2.cs:227

References Terraria.NPC.ai, Terraria.Entity.AngleTo(), Terraria.NPC.collideX, Terraria.Entity.direction, Terraria.Entity.Distance(), Microsoft.Xna.Framework.MathHelper.Lerp(), Microsoft.Xna.Framework.Vector2.Lerp(), Terraria.NPC.localAI, Terraria.Main.netMode, Terraria.NPC.netUpdate, System.Math.PI, Terraria.Main.player, Terraria.Main.rand, Terraria.NPC.scale, Terraria.NPC.target, Terraria.NPC.TargetClosest(), Terraria.Main.tile, Terraria.Main.tileSolid, Microsoft.Xna.Framework.Vector2.UnitX, Terraria.NPC.value, Terraria.Entity.velocity, and Microsoft.Xna.Framework.Vector2.Y.

Referenced by Terraria.NPC.AI().