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

◆ MoveInWorld()

void Terraria.Item.MoveInWorld ( float gravity,
float maxFallSpeed,
ref Vector2 wetVelocity,
int i )
inlineprivate

Definition at line 48716 of file Item.cs.

48717 {
48719 {
48720 velocity.X *= 0.95f;
48721 if ((double)velocity.X < 0.1 && (double)velocity.X > -0.1)
48722 {
48723 velocity.X = 0f;
48724 }
48725 velocity.Y *= 0.95f;
48726 if ((double)velocity.Y < 0.1 && (double)velocity.Y > -0.1)
48727 {
48728 velocity.Y = 0f;
48729 }
48730 }
48731 else
48732 {
48733 bool flag = false;
48734 if (shimmered && active)
48735 {
48736 int num = 50;
48737 for (int j = 0; j < 400; j++)
48738 {
48739 if (i == j || !Main.item[j].active || !Main.item[j].shimmered)
48740 {
48741 continue;
48742 }
48743 if (num-- <= 0)
48744 {
48745 break;
48746 }
48747 float num2 = (width + Main.item[j].width) / 2;
48748 if (!(Math.Abs(base.Center.X - Main.item[j].Center.X) <= num2) || !(Math.Abs(base.Center.Y - Main.item[j].Center.Y) <= num2))
48749 {
48750 continue;
48751 }
48752 flag = true;
48753 float num3 = Vector2.Distance(base.Center, Main.item[j].Center);
48754 num2 /= num3;
48755 if (num2 > 10f)
48756 {
48757 num2 = 10f;
48758 }
48759 if (base.Center.X < Main.item[j].Center.X)
48760 {
48761 if (velocity.X > -3f * num2)
48762 {
48763 velocity.X -= 0.1f * num2;
48764 }
48765 if (Main.item[j].velocity.X < 3f)
48766 {
48767 Main.item[j].velocity.X += 0.1f * num2;
48768 }
48769 }
48770 else if (base.Center.X > Main.item[j].Center.X)
48771 {
48772 if (velocity.X < 3f * num2)
48773 {
48774 velocity.X += 0.1f * num2;
48775 }
48776 if (Main.item[j].velocity.X > -3f)
48777 {
48778 Main.item[j].velocity.X -= 0.1f * num2;
48779 }
48780 }
48781 else if (i < j)
48782 {
48783 if (velocity.X > -3f * num2)
48784 {
48785 velocity.X -= 0.1f * num2;
48786 }
48787 if (Main.item[j].velocity.X < 3f * num2)
48788 {
48789 Main.item[j].velocity.X += 0.1f * num2;
48790 }
48791 }
48792 }
48793 }
48794 velocity.Y += gravity;
48795 if (velocity.Y > maxFallSpeed)
48796 {
48797 velocity.Y = maxFallSpeed;
48798 }
48799 velocity.X *= 0.95f;
48800 if ((double)velocity.X < 0.1 && (double)velocity.X > -0.1)
48801 {
48802 velocity.X = 0f;
48803 }
48804 if (flag)
48805 {
48806 velocity.X *= 0.8f;
48807 }
48808 }
48809 bool flag2 = Collision.LavaCollision(position, width, height);
48810 if (flag2)
48811 {
48812 lavaWet = true;
48813 }
48814 bool num4 = Collision.WetCollision(position, width, height);
48815 if (Collision.honey)
48816 {
48817 honeyWet = true;
48818 }
48819 if (Collision.shimmer)
48820 {
48821 shimmerWet = true;
48822 }
48823 if (num4)
48824 {
48825 if (!wet)
48826 {
48827 if (wetCount == 0)
48828 {
48829 wetCount = 20;
48830 if (!flag2)
48831 {
48832 if (shimmerWet)
48833 {
48834 for (int k = 0; k < 10; k++)
48835 {
48836 int num5 = Dust.NewDust(new Vector2(position.X - 6f, position.Y + (float)(height / 2) - 8f), width + 12, 24, 308);
48837 Main.dust[num5].velocity.Y -= 4f;
48838 Main.dust[num5].velocity.X *= 2.5f;
48839 Main.dust[num5].scale = 0.8f;
48840 Main.dust[num5].noGravity = true;
48841 switch (Main.rand.Next(6))
48842 {
48843 case 0:
48844 Main.dust[num5].color = new Color(255, 255, 210);
48845 break;
48846 case 1:
48847 Main.dust[num5].color = new Color(190, 245, 255);
48848 break;
48849 case 2:
48850 Main.dust[num5].color = new Color(255, 150, 255);
48851 break;
48852 default:
48853 Main.dust[num5].color = new Color(190, 175, 255);
48854 break;
48855 }
48856 }
48857 SoundEngine.PlaySound(19, (int)position.X, (int)position.Y, 4);
48858 }
48859 else if (honeyWet)
48860 {
48861 for (int l = 0; l < 5; l++)
48862 {
48863 int num6 = Dust.NewDust(new Vector2(position.X - 6f, position.Y + (float)(height / 2) - 8f), width + 12, 24, 152);
48864 Main.dust[num6].velocity.Y -= 1f;
48865 Main.dust[num6].velocity.X *= 2.5f;
48866 Main.dust[num6].scale = 1.3f;
48867 Main.dust[num6].alpha = 100;
48868 Main.dust[num6].noGravity = true;
48869 }
48870 SoundEngine.PlaySound(19, (int)position.X, (int)position.Y);
48871 }
48872 else
48873 {
48874 for (int m = 0; m < 10; m++)
48875 {
48876 int num7 = Dust.NewDust(new Vector2(position.X - 6f, position.Y + (float)(height / 2) - 8f), width + 12, 24, Dust.dustWater());
48877 Main.dust[num7].velocity.Y -= 4f;
48878 Main.dust[num7].velocity.X *= 2.5f;
48879 Main.dust[num7].scale *= 0.8f;
48880 Main.dust[num7].alpha = 100;
48881 Main.dust[num7].noGravity = true;
48882 }
48883 SoundEngine.PlaySound(19, (int)position.X, (int)position.Y);
48884 }
48885 }
48886 else
48887 {
48888 for (int n = 0; n < 5; n++)
48889 {
48890 int num8 = Dust.NewDust(new Vector2(position.X - 6f, position.Y + (float)(height / 2) - 8f), width + 12, 24, 35);
48891 Main.dust[num8].velocity.Y -= 1.5f;
48892 Main.dust[num8].velocity.X *= 2.5f;
48893 Main.dust[num8].scale = 1.3f;
48894 Main.dust[num8].alpha = 100;
48895 Main.dust[num8].noGravity = true;
48896 }
48897 SoundEngine.PlaySound(19, (int)position.X, (int)position.Y);
48898 }
48899 }
48900 wet = true;
48901 }
48902 }
48903 else if (wet)
48904 {
48905 wet = false;
48906 if (wetCount == 0)
48907 {
48908 wetCount = 20;
48909 if (!lavaWet)
48910 {
48911 if (shimmerWet)
48912 {
48913 for (int num9 = 0; num9 < 10; num9++)
48914 {
48915 int num10 = Dust.NewDust(new Vector2(position.X - 6f, position.Y + (float)(height / 2) - 8f), width + 12, 24, 308);
48916 Main.dust[num10].velocity.Y -= 4f;
48917 Main.dust[num10].velocity.X *= 2.5f;
48918 Main.dust[num10].scale = 0.8f;
48919 Main.dust[num10].noGravity = true;
48920 switch (Main.rand.Next(6))
48921 {
48922 case 0:
48923 Main.dust[num10].color = new Color(255, 255, 210);
48924 break;
48925 case 1:
48926 Main.dust[num10].color = new Color(190, 245, 255);
48927 break;
48928 case 2:
48929 Main.dust[num10].color = new Color(255, 150, 255);
48930 break;
48931 default:
48932 Main.dust[num10].color = new Color(190, 175, 255);
48933 break;
48934 }
48935 }
48936 SoundEngine.PlaySound(19, (int)position.X, (int)position.Y, 5);
48937 }
48938 else if (honeyWet)
48939 {
48940 for (int num11 = 0; num11 < 5; num11++)
48941 {
48942 int num12 = Dust.NewDust(new Vector2(position.X - 6f, position.Y + (float)(height / 2) - 8f), width + 12, 24, 152);
48943 Main.dust[num12].velocity.Y -= 1f;
48944 Main.dust[num12].velocity.X *= 2.5f;
48945 Main.dust[num12].scale = 1.3f;
48946 Main.dust[num12].alpha = 100;
48947 Main.dust[num12].noGravity = true;
48948 }
48949 SoundEngine.PlaySound(19, (int)position.X, (int)position.Y);
48950 }
48951 else
48952 {
48953 for (int num13 = 0; num13 < 10; num13++)
48954 {
48955 int num14 = Dust.NewDust(new Vector2(position.X - 6f, position.Y + (float)(height / 2)), width + 12, 24, Dust.dustWater());
48956 Main.dust[num14].velocity.Y -= 4f;
48957 Main.dust[num14].velocity.X *= 2.5f;
48958 Main.dust[num14].scale *= 0.8f;
48959 Main.dust[num14].alpha = 100;
48960 Main.dust[num14].noGravity = true;
48961 }
48962 SoundEngine.PlaySound(19, (int)position.X, (int)position.Y);
48963 }
48964 }
48965 else
48966 {
48967 for (int num15 = 0; num15 < 5; num15++)
48968 {
48969 int num16 = Dust.NewDust(new Vector2(position.X - 6f, position.Y + (float)(height / 2) - 8f), width + 12, 24, 35);
48970 Main.dust[num16].velocity.Y -= 1.5f;
48971 Main.dust[num16].velocity.X *= 2.5f;
48972 Main.dust[num16].scale = 1.3f;
48973 Main.dust[num16].alpha = 100;
48974 Main.dust[num16].noGravity = true;
48975 }
48976 SoundEngine.PlaySound(19, (int)position.X, (int)position.Y);
48977 }
48978 }
48979 }
48980 if (!wet)
48981 {
48982 lavaWet = false;
48983 honeyWet = false;
48984 shimmerWet = false;
48985 }
48986 if (wetCount > 0)
48987 {
48988 wetCount--;
48989 }
48990 if (wet)
48991 {
48992 if (wet)
48993 {
48995 velocity = Collision.TileCollision(position, velocity, width, height);
48996 if (velocity.X != vector.X)
48997 {
48998 wetVelocity.X = velocity.X;
48999 }
49000 if (velocity.Y != vector.Y)
49001 {
49002 wetVelocity.Y = velocity.Y;
49003 }
49004 }
49005 }
49006 else
49007 {
49008 velocity = Collision.TileCollision(position, velocity, width, height);
49009 }
49010 Vector4 vector2 = Collision.SlopeCollision(position, velocity, width, height, gravity);
49011 position.X = vector2.X;
49012 position.Y = vector2.Y;
49013 velocity.X = vector2.Z;
49014 velocity.Y = vector2.W;
49015 Collision.StepConveyorBelt(this, 1f);
49016 }
static double Abs(double value)
static void PlaySound(int type, Vector2 position, int style=1)
bool honeyWet
Definition Entity.cs:34
bool shimmerWet
Definition Entity.cs:32
Vector2 velocity
Definition Entity.cs:16
Vector2 position
Definition Entity.cs:14
byte wetCount
Definition Entity.cs:36
static bool[] ItemNoGravity
Definition ItemID.cs:1050
bool shimmered
Definition Item.cs:322
static float Distance(Vector2 value1, Vector2 value2)
Definition Vector2.cs:91

References System.Math.Abs(), Terraria.Entity.active, Microsoft.Xna.Framework.Vector2.Distance(), Terraria.Main.dust, Terraria.Dust.dustWater(), Terraria.Entity.height, Terraria.Collision.honey, Terraria.Entity.honeyWet, Terraria.Main.item, Terraria.ID.ItemID.Sets.ItemNoGravity, Terraria.Collision.LavaCollision(), Terraria.Entity.lavaWet, Terraria.Dust.NewDust(), Terraria.Audio.SoundEngine.PlaySound(), Terraria.Entity.position, Terraria.Main.rand, Terraria.Collision.shimmer, Terraria.Item.shimmered, Terraria.Entity.shimmerWet, Terraria.Collision.SlopeCollision(), Terraria.Collision.StepConveyorBelt(), Terraria.Collision.TileCollision(), Terraria.Item.type, Terraria.Entity.velocity, Terraria.Entity.wet, Terraria.Collision.WetCollision(), Terraria.Entity.wetCount, Terraria.Entity.width, Microsoft.Xna.Framework.Vector2.X, and Microsoft.Xna.Framework.Vector2.Y.

Referenced by Terraria.Item.UpdateItem().