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

◆ AI_002_FloatingEye()

void Terraria.NPC.AI_002_FloatingEye ( )
inlineprivate

Definition at line 45577 of file NPC.cs.

45578 {
45579 if ((type == 170 || type == 171 || type == 180) && Main.rand.Next(1000) == 0)
45580 {
45581 SoundEngine.PlaySound(29, (int)position.X, (int)position.Y, 9);
45582 }
45583 noGravity = true;
45584 if (!noTileCollide)
45585 {
45586 if (collideX)
45587 {
45588 velocity.X = oldVelocity.X * -0.5f;
45589 if (direction == -1 && velocity.X > 0f && velocity.X < 2f)
45590 {
45591 velocity.X = 2f;
45592 }
45593 if (direction == 1 && velocity.X < 0f && velocity.X > -2f)
45594 {
45595 velocity.X = -2f;
45596 }
45597 }
45598 if (collideY)
45599 {
45600 velocity.Y = oldVelocity.Y * -0.5f;
45601 if (velocity.Y > 0f && velocity.Y < 1f)
45602 {
45603 velocity.Y = 1f;
45604 }
45605 if (velocity.Y < 0f && velocity.Y > -1f)
45606 {
45607 velocity.Y = -1f;
45608 }
45609 }
45610 }
45612 {
45613 EncourageDespawn(10);
45614 directionY = -1;
45615 if (velocity.Y > 0f)
45616 {
45617 direction = 1;
45618 }
45619 direction = -1;
45620 if (velocity.X > 0f)
45621 {
45622 direction = 1;
45623 }
45624 }
45625 else
45626 {
45627 TargetClosest();
45628 }
45629 if (type == 170 || type == 171 || type == 180)
45630 {
45631 if (Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
45632 {
45633 if (ai[1] > 0f && !Collision.SolidCollision(position, width, height))
45634 {
45635 ai[1] = 0f;
45636 ai[0] = 0f;
45637 netUpdate = true;
45638 }
45639 }
45640 else if (ai[1] == 0f)
45641 {
45642 ai[0] += 1f;
45643 }
45644 if (ai[0] >= 300f)
45645 {
45646 ai[1] = 1f;
45647 ai[0] = 0f;
45648 netUpdate = true;
45649 }
45650 if (ai[1] == 0f)
45651 {
45652 alpha = 0;
45653 noTileCollide = false;
45654 }
45655 else
45656 {
45657 wet = false;
45658 alpha = 200;
45659 noTileCollide = true;
45660 }
45661 rotation = velocity.Y * 0.1f * (float)direction;
45662 TargetClosest();
45663 if (direction == -1 && velocity.X > -4f && position.X > Main.player[target].position.X + (float)Main.player[target].width)
45664 {
45665 velocity.X -= 0.08f;
45666 if (velocity.X > 4f)
45667 {
45668 velocity.X -= 0.04f;
45669 }
45670 else if (velocity.X > 0f)
45671 {
45672 velocity.X -= 0.2f;
45673 }
45674 if (velocity.X < -4f)
45675 {
45676 velocity.X = -4f;
45677 }
45678 }
45679 else if (direction == 1 && velocity.X < 4f && position.X + (float)width < Main.player[target].position.X)
45680 {
45681 velocity.X += 0.08f;
45682 if (velocity.X < -4f)
45683 {
45684 velocity.X += 0.04f;
45685 }
45686 else if (velocity.X < 0f)
45687 {
45688 velocity.X += 0.2f;
45689 }
45690 if (velocity.X > 4f)
45691 {
45692 velocity.X = 4f;
45693 }
45694 }
45695 if (directionY == -1 && (double)velocity.Y > -2.5 && position.Y > Main.player[target].position.Y + (float)Main.player[target].height)
45696 {
45697 velocity.Y -= 0.1f;
45698 if ((double)velocity.Y > 2.5)
45699 {
45700 velocity.Y -= 0.05f;
45701 }
45702 else if (velocity.Y > 0f)
45703 {
45704 velocity.Y -= 0.15f;
45705 }
45706 if ((double)velocity.Y < -2.5)
45707 {
45708 velocity.Y = -2.5f;
45709 }
45710 }
45711 else if (directionY == 1 && (double)velocity.Y < 2.5 && position.Y + (float)height < Main.player[target].position.Y)
45712 {
45713 velocity.Y += 0.1f;
45714 if ((double)velocity.Y < -2.5)
45715 {
45716 velocity.Y += 0.05f;
45717 }
45718 else if (velocity.Y < 0f)
45719 {
45720 velocity.Y += 0.15f;
45721 }
45722 if ((double)velocity.Y > 2.5)
45723 {
45724 velocity.Y = 2.5f;
45725 }
45726 }
45727 }
45728 else if (type == 116)
45729 {
45730 TargetClosest();
45731 Lighting.AddLight((int)(position.X + (float)(width / 2)) / 16, (int)(position.Y + (float)(height / 2)) / 16, 0.3f, 0.2f, 0.1f);
45732 if (direction == -1 && velocity.X > -6f)
45733 {
45734 velocity.X -= 0.1f;
45735 if (velocity.X > 6f)
45736 {
45737 velocity.X -= 0.1f;
45738 }
45739 else if (velocity.X > 0f)
45740 {
45741 velocity.X -= 0.2f;
45742 }
45743 if (velocity.X < -6f)
45744 {
45745 velocity.X = -6f;
45746 }
45747 }
45748 else if (direction == 1 && velocity.X < 6f)
45749 {
45750 velocity.X += 0.1f;
45751 if (velocity.X < -6f)
45752 {
45753 velocity.X += 0.1f;
45754 }
45755 else if (velocity.X < 0f)
45756 {
45757 velocity.X += 0.2f;
45758 }
45759 if (velocity.X > 6f)
45760 {
45761 velocity.X = 6f;
45762 }
45763 }
45764 if (directionY == -1 && (double)velocity.Y > -2.5)
45765 {
45766 velocity.Y -= 0.04f;
45767 if ((double)velocity.Y > 2.5)
45768 {
45769 velocity.Y -= 0.05f;
45770 }
45771 else if (velocity.Y > 0f)
45772 {
45773 velocity.Y -= 0.15f;
45774 }
45775 if ((double)velocity.Y < -2.5)
45776 {
45777 velocity.Y = -2.5f;
45778 }
45779 }
45780 else if (directionY == 1 && (double)velocity.Y < 1.5)
45781 {
45782 velocity.Y += 0.04f;
45783 if ((double)velocity.Y < -2.5)
45784 {
45785 velocity.Y += 0.05f;
45786 }
45787 else if (velocity.Y < 0f)
45788 {
45789 velocity.Y += 0.15f;
45790 }
45791 if ((double)velocity.Y > 2.5)
45792 {
45793 velocity.Y = 2.5f;
45794 }
45795 }
45796 if (Main.rand.Next(40) == 0)
45797 {
45799 int num = Dust.NewDust(new Vector2(position.X, position.Y + (float)height * 0.25f), width, (int)((float)height * 0.5f), 5, velocity.X, 2f);
45800 Main.dust[num].velocity.X *= 0.5f;
45801 Main.dust[num].velocity.Y *= 0.1f;
45803 }
45804 }
45805 else if (type == 133)
45806 {
45807 if ((double)life < (double)lifeMax * 0.5)
45808 {
45809 if (direction == -1 && velocity.X > -6f)
45810 {
45811 velocity.X -= 0.1f;
45812 if (velocity.X > 6f)
45813 {
45814 velocity.X -= 0.1f;
45815 }
45816 else if (velocity.X > 0f)
45817 {
45818 velocity.X += 0.05f;
45819 }
45820 if (velocity.X < -6f)
45821 {
45822 velocity.X = -6f;
45823 }
45824 }
45825 else if (direction == 1 && velocity.X < 6f)
45826 {
45827 velocity.X += 0.1f;
45828 if (velocity.X < -6f)
45829 {
45830 velocity.X += 0.1f;
45831 }
45832 else if (velocity.X < 0f)
45833 {
45834 velocity.X -= 0.05f;
45835 }
45836 if (velocity.X > 6f)
45837 {
45838 velocity.X = 6f;
45839 }
45840 }
45841 if (directionY == -1 && velocity.Y > -4f)
45842 {
45843 velocity.Y -= 0.1f;
45844 if (velocity.Y > 4f)
45845 {
45846 velocity.Y -= 0.1f;
45847 }
45848 else if (velocity.Y > 0f)
45849 {
45850 velocity.Y += 0.05f;
45851 }
45852 if (velocity.Y < -4f)
45853 {
45854 velocity.Y = -4f;
45855 }
45856 }
45857 else if (directionY == 1 && velocity.Y < 4f)
45858 {
45859 velocity.Y += 0.1f;
45860 if (velocity.Y < -4f)
45861 {
45862 velocity.Y += 0.1f;
45863 }
45864 else if (velocity.Y < 0f)
45865 {
45866 velocity.Y -= 0.05f;
45867 }
45868 if (velocity.Y > 4f)
45869 {
45870 velocity.Y = 4f;
45871 }
45872 }
45873 }
45874 else
45875 {
45876 if (direction == -1 && velocity.X > -4f)
45877 {
45878 velocity.X -= 0.1f;
45879 if (velocity.X > 4f)
45880 {
45881 velocity.X -= 0.1f;
45882 }
45883 else if (velocity.X > 0f)
45884 {
45885 velocity.X += 0.05f;
45886 }
45887 if (velocity.X < -4f)
45888 {
45889 velocity.X = -4f;
45890 }
45891 }
45892 else if (direction == 1 && velocity.X < 4f)
45893 {
45894 velocity.X += 0.1f;
45895 if (velocity.X < -4f)
45896 {
45897 velocity.X += 0.1f;
45898 }
45899 else if (velocity.X < 0f)
45900 {
45901 velocity.X -= 0.05f;
45902 }
45903 if (velocity.X > 4f)
45904 {
45905 velocity.X = 4f;
45906 }
45907 }
45908 if (directionY == -1 && (double)velocity.Y > -1.5)
45909 {
45910 velocity.Y -= 0.04f;
45911 if ((double)velocity.Y > 1.5)
45912 {
45913 velocity.Y -= 0.05f;
45914 }
45915 else if (velocity.Y > 0f)
45916 {
45917 velocity.Y += 0.03f;
45918 }
45919 if ((double)velocity.Y < -1.5)
45920 {
45921 velocity.Y = -1.5f;
45922 }
45923 }
45924 else if (directionY == 1 && (double)velocity.Y < 1.5)
45925 {
45926 velocity.Y += 0.04f;
45927 if ((double)velocity.Y < -1.5)
45928 {
45929 velocity.Y += 0.05f;
45930 }
45931 else if (velocity.Y < 0f)
45932 {
45933 velocity.Y -= 0.03f;
45934 }
45935 if ((double)velocity.Y > 1.5)
45936 {
45937 velocity.Y = 1.5f;
45938 }
45939 }
45940 }
45941 }
45942 else
45943 {
45944 float num2 = 4f;
45945 float num3 = 1.5f;
45946 num2 *= 1f + (1f - scale);
45947 num3 *= 1f + (1f - scale);
45948 if (direction == -1 && velocity.X > 0f - num2)
45949 {
45950 velocity.X -= 0.1f;
45951 if (velocity.X > num2)
45952 {
45953 velocity.X -= 0.1f;
45954 }
45955 else if (velocity.X > 0f)
45956 {
45957 velocity.X += 0.05f;
45958 }
45959 if (velocity.X < 0f - num2)
45960 {
45961 velocity.X = 0f - num2;
45962 }
45963 }
45964 else if (direction == 1 && velocity.X < num2)
45965 {
45966 velocity.X += 0.1f;
45967 if (velocity.X < 0f - num2)
45968 {
45969 velocity.X += 0.1f;
45970 }
45971 else if (velocity.X < 0f)
45972 {
45973 velocity.X -= 0.05f;
45974 }
45975 if (velocity.X > num2)
45976 {
45977 velocity.X = num2;
45978 }
45979 }
45980 if (directionY == -1 && velocity.Y > 0f - num3)
45981 {
45982 velocity.Y -= 0.04f;
45983 if (velocity.Y > num3)
45984 {
45985 velocity.Y -= 0.05f;
45986 }
45987 else if (velocity.Y > 0f)
45988 {
45989 velocity.Y += 0.03f;
45990 }
45991 if (velocity.Y < 0f - num3)
45992 {
45993 velocity.Y = 0f - num3;
45994 }
45995 }
45996 else if (directionY == 1 && velocity.Y < num3)
45997 {
45998 velocity.Y += 0.04f;
45999 if (velocity.Y < 0f - num3)
46000 {
46001 velocity.Y += 0.05f;
46002 }
46003 else if (velocity.Y < 0f)
46004 {
46005 velocity.Y -= 0.03f;
46006 }
46007 if (velocity.Y > num3)
46008 {
46009 velocity.Y = num3;
46010 }
46011 }
46012 }
46013 if ((type == 2 || type == 133 || type == 190 || type == 191 || type == 192 || type == 193 || type == 194) && Main.rand.Next(40) == 0)
46014 {
46016 int num4 = Dust.NewDust(new Vector2(position.X, position.Y + (float)height * 0.25f), width, (int)((float)height * 0.5f), 5, velocity.X, 2f);
46017 Main.dust[num4].velocity.X *= 0.5f;
46018 Main.dust[num4].velocity.Y *= 0.1f;
46020 }
46021 if (wet && type != 170 && type != 171 && type != 172)
46022 {
46023 if (velocity.Y > 0f)
46024 {
46025 velocity.Y *= 0.95f;
46026 }
46027 velocity.Y -= 0.5f;
46028 if (velocity.Y < -4f)
46029 {
46030 velocity.Y = -4f;
46031 }
46032 TargetClosest();
46033 }
46034 }
static void PlaySound(int type, Vector2 position, int style=1)
Vector2 velocity
Definition Entity.cs:16
Vector2 position
Definition Entity.cs:14
Vector2 netOffset
Definition NPC.cs:103
void EncourageDespawn(int despawnTime)
Definition NPC.cs:1390
int lifeMax
Definition NPC.cs:479
void TargetClosest(bool faceTarget=true)
Definition NPC.cs:69934
bool noGravity
Definition NPC.cs:503
float[] ai
Definition NPC.cs:447
float scale
Definition NPC.cs:493
static bool DespawnEncouragement_AIStyle2_FloatingEye_IsDiscouraged(int npcID, Vector2 npcPosition, int target=255)
Definition NPC.cs:46056
bool collideX
Definition NPC.cs:511
bool collideY
Definition NPC.cs:513
int type
Definition NPC.cs:445
int alpha
Definition NPC.cs:489
float rotation
Definition NPC.cs:501
bool noTileCollide
Definition NPC.cs:505
int life
Definition NPC.cs:477
int directionY
Definition NPC.cs:443
bool netUpdate
Definition NPC.cs:507
int target
Definition NPC.cs:459

References Terraria.Lighting.AddLight(), Terraria.NPC.ai, Terraria.NPC.alpha, Terraria.Collision.CanHit(), Terraria.NPC.collideX, Terraria.NPC.collideY, Terraria.NPC.DespawnEncouragement_AIStyle2_FloatingEye_IsDiscouraged(), Terraria.Entity.direction, Terraria.NPC.directionY, Terraria.Main.dust, Terraria.NPC.EncourageDespawn(), Terraria.Entity.height, Terraria.NPC.life, Terraria.NPC.lifeMax, Terraria.NPC.netOffset, Terraria.NPC.netUpdate, Terraria.Dust.NewDust(), Terraria.NPC.noGravity, Terraria.NPC.noTileCollide, Terraria.Main.player, Terraria.Audio.SoundEngine.PlaySound(), Terraria.Entity.position, Terraria.Main.rand, Terraria.NPC.rotation, Terraria.NPC.scale, Terraria.Collision.SolidCollision(), Terraria.NPC.target, Terraria.NPC.TargetClosest(), Terraria.NPC.type, Microsoft.Xna.Framework.Graphics.Vector2, Terraria.Entity.velocity, Terraria.Entity.wet, Terraria.Entity.width, Microsoft.Xna.Framework.Vector2.X, and Microsoft.Xna.Framework.Vector2.Y.

Referenced by Terraria.NPC.AI().