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

◆ Step_Boulders()

static void Terraria.GameContent.SmartCursorHelper.Step_Boulders ( SmartCursorUsageInfo providedInfo,
ref int focusedX,
ref int focusedY )
inlinestaticprivate

Definition at line 863 of file SmartCursorHelper.cs.

864 {
865 if (providedInfo.item.createTile <= -1 || providedInfo.item.createTile >= TileID.Count || !TileID.Sets.Boulders[providedInfo.item.createTile] || focusedX != -1 || focusedY != -1)
866 {
867 return;
868 }
869 _targets.Clear();
870 for (int i = providedInfo.reachableStartX; i <= providedInfo.reachableEndX; i++)
871 {
872 for (int j = providedInfo.reachableStartY; j <= providedInfo.reachableEndY; j++)
873 {
874 Tile tile = Main.tile[i, j + 1];
875 Tile tile2 = Main.tile[i + 1, j + 1];
876 bool flag = true;
877 if (!tile2.nactive() || !tile.nactive())
878 {
879 flag = false;
880 }
881 if (tile2.slope() > 0 || tile.slope() > 0 || tile2.halfBrick() || tile.halfBrick())
882 {
883 flag = false;
884 }
885 if ((!Main.tileSolid[tile2.type] && !Main.tileTable[tile2.type]) || (!Main.tileSolid[tile.type] && !Main.tileTable[tile.type]))
886 {
887 flag = false;
888 }
889 if (Main.tileNoAttach[tile2.type] || Main.tileNoAttach[tile.type])
890 {
891 flag = false;
892 }
893 for (int k = i; k <= i + 1; k++)
894 {
895 for (int l = j - 1; l <= j; l++)
896 {
897 Tile tile3 = Main.tile[k, l];
898 if (tile3.active() && !Main.tileCut[tile3.type])
899 {
900 flag = false;
901 }
902 }
903 }
904 int x = i * 16;
905 int y = j * 16 - 16;
906 int width = 32;
907 int height = 32;
908 Rectangle value = new Rectangle(x, y, width, height);
909 for (int m = 0; m < 255; m++)
910 {
911 Player player = Main.player[m];
912 if (player.active && !player.dead && player.Hitbox.Intersects(value))
913 {
914 flag = false;
915 break;
916 }
917 }
918 if (flag)
919 {
920 _targets.Add(new Tuple<int, int>(i, j));
921 }
922 }
923 }
924 if (_targets.Count > 0)
925 {
926 float num = -1f;
928 for (int n = 0; n < _targets.Count; n++)
929 {
930 float num2 = Vector2.Distance(new Vector2(_targets[n].Item1, _targets[n].Item2) * 16f + Vector2.One * 8f, providedInfo.mouse);
931 if (num == -1f || num2 < num)
932 {
933 num = num2;
934 tuple = _targets[n];
935 }
936 }
937 if (Collision.InTileBounds(tuple.Item1, tuple.Item2, providedInfo.reachableStartX, providedInfo.reachableStartY, providedInfo.reachableEndX, providedInfo.reachableEndY))
938 {
939 focusedX = tuple.Item1;
940 focusedY = tuple.Item2;
941 }
942 }
943 _targets.Clear();
944 }
static List< Tuple< int, int > > _targets
static bool[] Boulders
Definition TileID.cs:123
static readonly ushort Count
Definition TileID.cs:1698
static float Distance(Vector2 value1, Vector2 value2)
Definition Vector2.cs:91

References Terraria.GameContent.SmartCursorHelper._targets, Terraria.Entity.active, Terraria.ID.TileID.Sets.Boulders, Terraria.ID.TileID.Count, Terraria.Player.dead, Microsoft.Xna.Framework.Vector2.Distance(), Terraria.Tile.halfBrick(), Terraria.Entity.Hitbox, Microsoft.Xna.Framework.Rectangle.Intersects(), Terraria.Collision.InTileBounds(), Terraria.Tile.nactive(), Microsoft.Xna.Framework.Vector2.One, Terraria.Main.player, Terraria.Tile.slope(), Terraria.Main.tile, Terraria.Main.tileCut, Terraria.Main.tileNoAttach, Terraria.Main.tileSolid, Terraria.Main.tileTable, Terraria.Tile.type, and System.value.

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