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

◆ TupleHitLineWall()

static Tuple< int, int > Terraria.Collision.TupleHitLineWall ( int x1,
int y1,
int x2,
int y2 )
inlinestatic

Definition at line 936 of file Collision.cs.

937 {
938 int num = x1;
939 int num2 = y1;
940 int num3 = x2;
941 int num4 = y2;
942 if (num <= 1)
943 {
944 num = 1;
945 }
946 if (num >= Main.maxTilesX)
947 {
948 num = Main.maxTilesX - 1;
949 }
950 if (num3 <= 1)
951 {
952 num3 = 1;
953 }
954 if (num3 >= Main.maxTilesX)
955 {
956 num3 = Main.maxTilesX - 1;
957 }
958 if (num2 <= 1)
959 {
960 num2 = 1;
961 }
962 if (num2 >= Main.maxTilesY)
963 {
964 num2 = Main.maxTilesY - 1;
965 }
966 if (num4 <= 1)
967 {
968 num4 = 1;
969 }
970 if (num4 >= Main.maxTilesY)
971 {
972 num4 = Main.maxTilesY - 1;
973 }
974 float num5 = Math.Abs(num - num3);
975 float num6 = Math.Abs(num2 - num4);
976 if (num5 == 0f && num6 == 0f)
977 {
978 return new Tuple<int, int>(num, num2);
979 }
980 float num7 = 1f;
981 float num8 = 1f;
982 if (num5 == 0f || num6 == 0f)
983 {
984 if (num5 == 0f)
985 {
986 num7 = 0f;
987 }
988 if (num6 == 0f)
989 {
990 num8 = 0f;
991 }
992 }
993 else if (num5 > num6)
994 {
995 num7 = num5 / num6;
996 }
997 else
998 {
999 num8 = num6 / num5;
1000 }
1001 float num9 = 0f;
1002 float num10 = 0f;
1003 int num11 = 1;
1004 if (num2 < num4)
1005 {
1006 num11 = 2;
1007 }
1008 int num12 = (int)num5;
1009 int num13 = (int)num6;
1010 int num14 = Math.Sign(num3 - num);
1011 int num15 = Math.Sign(num4 - num2);
1012 bool flag = false;
1013 bool flag2 = false;
1014 try
1015 {
1016 do
1017 {
1018 switch (num11)
1019 {
1020 case 2:
1021 {
1022 num9 += num7;
1023 int num17 = (int)num9;
1024 num9 %= 1f;
1025 for (int j = 0; j < num17; j++)
1026 {
1027 _ = Main.tile[num, num2];
1028 if (HitWallSubstep(num, num2))
1029 {
1030 return new Tuple<int, int>(num, num2);
1031 }
1032 if (num12 == 0 && num13 == 0)
1033 {
1034 flag = true;
1035 break;
1036 }
1037 num += num14;
1038 num12--;
1039 if (num12 == 0 && num13 == 0 && num17 == 1)
1040 {
1041 flag2 = true;
1042 }
1043 }
1044 if (num13 != 0)
1045 {
1046 num11 = 1;
1047 }
1048 break;
1049 }
1050 case 1:
1051 {
1052 num10 += num8;
1053 int num16 = (int)num10;
1054 num10 %= 1f;
1055 for (int i = 0; i < num16; i++)
1056 {
1057 _ = Main.tile[num, num2];
1058 if (HitWallSubstep(num, num2))
1059 {
1060 return new Tuple<int, int>(num, num2);
1061 }
1062 if (num12 == 0 && num13 == 0)
1063 {
1064 flag = true;
1065 break;
1066 }
1067 num2 += num15;
1068 num13--;
1069 if (num12 == 0 && num13 == 0 && num16 == 1)
1070 {
1071 flag2 = true;
1072 }
1073 }
1074 if (num12 != 0)
1075 {
1076 num11 = 2;
1077 }
1078 break;
1079 }
1080 }
1081 if (Main.tile[num, num2] == null)
1082 {
1083 return new Tuple<int, int>(-1, -1);
1084 }
1085 _ = Main.tile[num, num2];
1086 if (HitWallSubstep(num, num2))
1087 {
1088 return new Tuple<int, int>(num, num2);
1089 }
1090 }
1091 while (!(flag || flag2));
1092 return new Tuple<int, int>(num, num2);
1093 }
1094 catch
1095 {
1096 return new Tuple<int, int>(-1, -1);
1097 }
1098 }
static double Abs(double value)
static int Sign(decimal value)
Definition Math.cs:1202
static bool HitWallSubstep(int x, int y)

References System.Math.Abs(), Terraria.Collision.HitWallSubstep(), Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, System.Math.Sign(), and Terraria.Main.tile.

Referenced by Terraria.GameContent.SmartCursorHelper.Step_Hammers().