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

◆ StickyMovement()

void Terraria.Player.StickyMovement ( )
inline

Definition at line 21844 of file Player.cs.

21845 {
21846 if (shimmering)
21847 {
21848 return;
21849 }
21850 bool flag = false;
21851 if (mount.Type > 0 && MountID.Sets.Cart[mount.Type] && Math.Abs(velocity.X) > 5f)
21852 {
21853 flag = true;
21854 }
21855 int num = width / 2;
21856 int num2 = height / 2;
21857 new Vector2(position.X + (float)(width / 2) - (float)(num / 2), position.Y + (float)(height / 2) - (float)(num2 / 2));
21858 Vector2 vector = Collision.StickyTiles(position, velocity, width, height);
21859 if (vector.Y != -1f && vector.X != -1f)
21860 {
21861 int num3 = (int)vector.X;
21862 int num4 = (int)vector.Y;
21863 int type = Main.tile[num3, num4].type;
21864 if (whoAmI == Main.myPlayer && type == 51 && (velocity.X != 0f || velocity.Y != 0f))
21865 {
21866 stickyBreak++;
21867 if (stickyBreak > Main.rand.Next(20, 100) || flag)
21868 {
21869 stickyBreak = 0;
21870 WorldGen.KillTile(num3, num4);
21871 if (Main.netMode == 1 && !Main.tile[num3, num4].active() && Main.netMode == 1)
21872 {
21873 NetMessage.SendData(17, -1, -1, null, 0, num3, num4);
21874 }
21875 }
21876 }
21877 if (flag)
21878 {
21879 return;
21880 }
21881 fallStart = (int)(position.Y / 16f);
21882 if (type != 229)
21883 {
21884 jump = 0;
21885 }
21886 if (velocity.X > 1f)
21887 {
21888 velocity.X = 1f;
21889 }
21890 if (velocity.X < -1f)
21891 {
21892 velocity.X = -1f;
21893 }
21894 if ((double)velocity.X > 0.75 || (double)velocity.X < -0.75)
21895 {
21896 velocity.X *= 0.85f;
21897 }
21898 else
21899 {
21900 velocity.X *= 0.6f;
21901 }
21902 if (gravDir == -1f)
21903 {
21904 if (velocity.Y < -1f)
21905 {
21906 velocity.Y = -1f;
21907 }
21908 if (velocity.Y > 5f)
21909 {
21910 velocity.Y = 5f;
21911 }
21912 if (velocity.Y > 0f)
21913 {
21914 velocity.Y *= 0.96f;
21915 }
21916 else
21917 {
21918 velocity.Y *= 0.3f;
21919 }
21920 }
21921 else
21922 {
21923 if (velocity.Y > 1f)
21924 {
21925 velocity.Y = 1f;
21926 }
21927 if (velocity.Y < -5f)
21928 {
21929 velocity.Y = -5f;
21930 }
21931 if (velocity.Y < 0f)
21932 {
21933 velocity.Y *= 0.96f;
21934 }
21935 else
21936 {
21937 velocity.Y *= 0.3f;
21938 }
21939 }
21940 if (type != 229 || Main.rand.Next(5) != 0 || (!((double)velocity.Y > 0.15) && !(velocity.Y < 0f)))
21941 {
21942 return;
21943 }
21944 if ((float)(num3 * 16) < position.X + (float)(width / 2))
21945 {
21946 int num5 = Dust.NewDust(new Vector2(position.X - 4f, num4 * 16), 4, 16, 153, 0f, 0f, 50);
21947 Main.dust[num5].scale += (float)Main.rand.Next(0, 6) * 0.1f;
21948 Main.dust[num5].velocity *= 0.1f;
21949 Main.dust[num5].noGravity = true;
21950 }
21951 else
21952 {
21953 int num6 = Dust.NewDust(new Vector2(position.X + (float)width - 2f, num4 * 16), 4, 16, 153, 0f, 0f, 50);
21954 Main.dust[num6].scale += (float)Main.rand.Next(0, 6) * 0.1f;
21955 Main.dust[num6].velocity *= 0.1f;
21956 Main.dust[num6].noGravity = true;
21957 }
21958 if (Main.tile[num3, num4 + 1] != null && Main.tile[num3, num4 + 1].type == 229 && position.Y + (float)height > (float)((num4 + 1) * 16))
21959 {
21960 if ((float)(num3 * 16) < position.X + (float)(width / 2))
21961 {
21962 int num7 = Dust.NewDust(new Vector2(position.X - 4f, num4 * 16 + 16), 4, 16, 153, 0f, 0f, 50);
21963 Main.dust[num7].scale += (float)Main.rand.Next(0, 6) * 0.1f;
21964 Main.dust[num7].velocity *= 0.1f;
21965 Main.dust[num7].noGravity = true;
21966 }
21967 else
21968 {
21969 int num8 = Dust.NewDust(new Vector2(position.X + (float)width - 2f, num4 * 16 + 16), 4, 16, 153, 0f, 0f, 50);
21970 Main.dust[num8].scale += (float)Main.rand.Next(0, 6) * 0.1f;
21971 Main.dust[num8].velocity *= 0.1f;
21972 Main.dust[num8].noGravity = true;
21973 }
21974 }
21975 if (Main.tile[num3, num4 + 2] != null && Main.tile[num3, num4 + 2].type == 229 && position.Y + (float)height > (float)((num4 + 2) * 16))
21976 {
21977 if ((float)(num3 * 16) < position.X + (float)(width / 2))
21978 {
21979 int num9 = Dust.NewDust(new Vector2(position.X - 4f, num4 * 16 + 32), 4, 16, 153, 0f, 0f, 50);
21980 Main.dust[num9].scale += (float)Main.rand.Next(0, 6) * 0.1f;
21981 Main.dust[num9].velocity *= 0.1f;
21982 Main.dust[num9].noGravity = true;
21983 }
21984 else
21985 {
21986 int num10 = Dust.NewDust(new Vector2(position.X + (float)width - 2f, num4 * 16 + 32), 4, 16, 153, 0f, 0f, 50);
21987 Main.dust[num10].scale += (float)Main.rand.Next(0, 6) * 0.1f;
21988 Main.dust[num10].velocity *= 0.1f;
21989 Main.dust[num10].noGravity = true;
21990 }
21991 }
21992 }
21993 else
21994 {
21995 stickyBreak = 0;
21996 }
21997 }
static double Abs(double value)
Vector2 velocity
Definition Entity.cs:16
Vector2 position
Definition Entity.cs:14
static bool[] Cart
Definition MountID.cs:9

References System.Math.Abs(), Terraria.ID.MountID.Sets.Cart, Terraria.Main.dust, Terraria.WorldGen.KillTile(), Terraria.Main.myPlayer, Terraria.Main.netMode, Terraria.Dust.NewDust(), Terraria.Main.rand, Terraria.NetMessage.SendData(), Terraria.Collision.StickyTiles(), Terraria.Main.tile, and System.type.