Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
StrayMethods.cs
Go to the documentation of this file.
1using System;
3
4namespace Terraria;
5
6public class StrayMethods
7{
8 public static bool CountSandHorizontally(int i, int j, bool[] fittingTypes, int requiredTotalSpread = 4, int spreadInEachAxis = 5)
9 {
10 if (!WorldGen.InWorld(i, j, 2))
11 {
12 return false;
13 }
14 int num = 0;
15 int num2 = 0;
16 int num3 = i - 1;
17 while (num < spreadInEachAxis && num3 > 0)
18 {
19 Tile tile = Main.tile[num3, j];
20 if (tile.active() && fittingTypes[tile.type] && !WorldGen.SolidTileAllowBottomSlope(num3, j - 1))
21 {
22 num++;
23 }
24 else if (!tile.active())
25 {
26 break;
27 }
28 num3--;
29 }
30 num3 = i + 1;
31 while (num2 < spreadInEachAxis && num3 < Main.maxTilesX - 1)
32 {
33 Tile tile2 = Main.tile[num3, j];
34 if (tile2.active() && fittingTypes[tile2.type] && !WorldGen.SolidTileAllowBottomSlope(num3, j - 1))
35 {
36 num2++;
37 }
38 else if (!tile2.active())
39 {
40 break;
41 }
42 num3++;
43 }
44 return num + num2 + 1 >= requiredTotalSpread;
45 }
46
47 public static bool CanSpawnSandstormHostile(Vector2 position, int expandUp, int expandDown)
48 {
49 bool result = true;
50 Point point = position.ToTileCoordinates();
51 for (int i = -1; i <= 1; i++)
52 {
53 Collision.ExpandVertically(point.X + i, point.Y, out var topY, out var bottomY, expandUp, expandDown);
54 topY++;
55 bottomY--;
56 if (bottomY - topY < 20)
57 {
58 result = false;
59 break;
60 }
61 }
62 return result;
63 }
64
65 public static bool CanSpawnSandstormFriendly(Vector2 position, int expandUp, int expandDown)
66 {
67 bool result = true;
68 Point point = position.ToTileCoordinates();
69 for (int i = -1; i <= 1; i++)
70 {
71 Collision.ExpandVertically(point.X + i, point.Y, out var topY, out var bottomY, expandUp, expandDown);
72 topY++;
73 bottomY--;
74 if (bottomY - topY < 10)
75 {
76 result = false;
77 break;
78 }
79 }
80 return result;
81 }
82
83 public static void CheckArenaScore(Vector2 arenaCenter, out Point xLeftEnd, out Point xRightEnd, int walkerWidthInTiles = 5, int walkerHeightInTiles = 10)
84 {
85 bool flag = false;
86 Point point = arenaCenter.ToTileCoordinates();
87 xLeftEnd = (xRightEnd = point);
88 Collision.ExpandVertically(point.X, point.Y, out var _, out var bottomY, 0, 4);
89 point.Y = bottomY;
90 if (flag)
91 {
92 Dust.QuickDust(point, Color.Blue).scale = 5f;
93 }
94 SendWalker(point, walkerHeightInTiles, -1, out var _, out var lastIteratedFloorSpot, 120, flag);
95 SendWalker(point, walkerHeightInTiles, 1, out var _, out var lastIteratedFloorSpot2, 120, flag);
96 lastIteratedFloorSpot.X++;
97 lastIteratedFloorSpot2.X--;
98 if (flag)
99 {
100 Dust.QuickDustLine(lastIteratedFloorSpot.ToWorldCoordinates(), lastIteratedFloorSpot2.ToWorldCoordinates(), 50f, Color.Pink);
101 }
102 xLeftEnd = lastIteratedFloorSpot;
103 xRightEnd = lastIteratedFloorSpot2;
104 }
105
106 public static void SendWalker(Point startFloorPosition, int height, int direction, out int distanceCoveredInTiles, out Point lastIteratedFloorSpot, int maxDistance = 100, bool showDebug = false)
107 {
108 distanceCoveredInTiles = 0;
109 startFloorPosition.Y--;
110 lastIteratedFloorSpot = startFloorPosition;
111 for (int i = 0; i < maxDistance; i++)
112 {
113 for (int j = 0; j < 3; j++)
114 {
115 if (!WorldGen.SolidTile3(startFloorPosition.X, startFloorPosition.Y))
116 {
117 break;
118 }
119 startFloorPosition.Y--;
120 }
121 Collision.ExpandVertically(startFloorPosition.X, startFloorPosition.Y, out var topY, out var bottomY, height, 2);
122 topY++;
123 bottomY--;
124 if (!WorldGen.SolidTile3(startFloorPosition.X, bottomY + 1))
125 {
126 Collision.ExpandVertically(startFloorPosition.X, bottomY, out var topY2, out var bottomY2, 0, 6);
127 if (showDebug)
128 {
129 Dust.QuickBox(new Vector2(startFloorPosition.X * 16 + 8, topY2 * 16), new Vector2(startFloorPosition.X * 16 + 8, bottomY2 * 16), 1, Color.Blue, null);
130 }
131 if (!WorldGen.SolidTile3(startFloorPosition.X, bottomY2))
132 {
133 break;
134 }
135 }
136 if (bottomY - topY < height - 1)
137 {
138 break;
139 }
140 if (showDebug)
141 {
142 Dust.QuickDust(startFloorPosition, Color.Green).scale = 1f;
143 Dust.QuickBox(new Vector2(startFloorPosition.X * 16 + 8, topY * 16), new Vector2(startFloorPosition.X * 16 + 8, bottomY * 16 + 16), 1, Color.Red, null);
144 }
145 distanceCoveredInTiles += direction;
146 startFloorPosition.X += direction;
147 startFloorPosition.Y = bottomY;
148 lastIteratedFloorSpot = startFloorPosition;
149 if (Math.Abs(distanceCoveredInTiles) >= maxDistance)
150 {
151 break;
152 }
153 }
154 distanceCoveredInTiles = Math.Abs(distanceCoveredInTiles);
155 }
156}
static double Abs(double value)
static void ExpandVertically(int startX, int startY, out int topY, out int bottomY, int maxExpandUp=100, int maxExpandDown=100)
static void QuickDustLine(Vector2 start, Vector2 end, float splits, Color color)
Definition Dust.cs:329
static void QuickBox(Vector2 topLeft, Vector2 bottomRight, int divisions, Color color, Action< Dust > manipulator)
Definition Dust.cs:273
static Dust QuickDust(int x, int y, Color color)
Definition Dust.cs:263
static int maxTilesX
Definition Main.cs:1114
static Tile[,] tile
Definition Main.cs:1675
static bool CanSpawnSandstormFriendly(Vector2 position, int expandUp, int expandDown)
static bool CanSpawnSandstormHostile(Vector2 position, int expandUp, int expandDown)
static void SendWalker(Point startFloorPosition, int height, int direction, out int distanceCoveredInTiles, out Point lastIteratedFloorSpot, int maxDistance=100, bool showDebug=false)
static void CheckArenaScore(Vector2 arenaCenter, out Point xLeftEnd, out Point xRightEnd, int walkerWidthInTiles=5, int walkerHeightInTiles=10)
static bool CountSandHorizontally(int i, int j, bool[] fittingTypes, int requiredTotalSpread=4, int spreadInEachAxis=5)
ushort type
Definition Tile.cs:8
bool active()
Definition Tile.cs:565
static bool SolidTile3(int i, int j)
static bool SolidTileAllowBottomSlope(int i, int j)
static bool InWorld(int x, int y, int fluff=0)
Definition WorldGen.cs:5816