Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
AmbientWindSystem.cs
Go to the documentation of this file.
4
6
7public class AmbientWindSystem
8{
10
12
13 private int _updatesCounter;
14
15 public void Update()
16 {
17 if (!Main.LocalPlayer.ZoneGraveyard)
18 {
19 return;
20 }
23 int num = tileWorkSpace.X + tileWorkSpace.Width;
24 int num2 = tileWorkSpace.Y + tileWorkSpace.Height;
25 for (int i = tileWorkSpace.X; i < num; i++)
26 {
27 for (int j = tileWorkSpace.Y; j < num2; j++)
28 {
30 }
31 }
32 if (_updatesCounter % 30 == 0)
33 {
35 }
36 }
37
38 private void SpawnAirborneWind()
39 {
40 foreach (Point item in _spotsForAirboneWind)
41 {
42 SpawnAirborneCloud(item.X, item.Y);
43 }
45 }
46
48 {
49 Point point = Main.LocalPlayer.Center.ToTileCoordinates();
50 int num = 120;
51 int num2 = 30;
52 return new Rectangle(point.X - num / 2, point.Y - num2 / 2, num, num2);
53 }
54
55 private void TrySpawningWind(int x, int y)
56 {
57 if (!WorldGen.InWorld(x, y, 10) || Main.tile[x, y] == null)
58 {
59 return;
60 }
61 TestAirCloud(x, y);
62 Tile tile = Main.tile[x, y];
63 if (!tile.active() || tile.slope() > 0 || tile.halfBrick() || !Main.tileSolid[tile.type])
64 {
65 return;
66 }
67 tile = Main.tile[x, y - 1];
68 if (!WorldGen.SolidTile(tile) && _random.Next(120) == 0)
69 {
70 SpawnFloorCloud(x, y);
71 if (_random.Next(3) == 0)
72 {
73 SpawnFloorCloud(x, y - 1);
74 }
75 }
76 }
77
78 private void SpawnAirborneCloud(int x, int y)
79 {
80 int num = _random.Next(2, 6);
81 float num2 = 1.1f;
82 float num3 = 2.2f;
83 float num4 = 0.023561945f * _random.NextFloatDirection();
84 float num5 = 0.023561945f * _random.NextFloatDirection();
85 while (num5 > -0.011780973f && num5 < 0.011780973f)
86 {
87 num5 = 0.023561945f * _random.NextFloatDirection();
88 }
89 if (_random.Next(4) == 0)
90 {
91 num = _random.Next(9, 16);
92 num2 = 1.1f;
93 num3 = 1.2f;
94 }
95 else if (_random.Next(4) == 0)
96 {
97 num = _random.Next(9, 16);
98 num2 = 1.1f;
99 num3 = 0.2f;
100 }
101 Vector2 vector = new Vector2(-10f, 0f);
102 Vector2 vector2 = new Point(x, y).ToWorldCoordinates();
103 num4 -= num5 * (float)num * 0.5f;
104 float num6 = num4;
105 for (int i = 0; i < num; i++)
106 {
107 if (Main.rand.Next(10) == 0)
108 {
109 num5 *= _random.NextFloatDirection();
110 }
111 Vector2 vector3 = _random.NextVector2Circular(4f, 4f);
112 int type = 1091 + _random.Next(2) * 2;
113 float num7 = 1.4f;
114 float num8 = num2 + _random.NextFloat() * num3;
115 float num9 = num6 + num5;
116 Vector2 vector4 = Vector2.UnitX.RotatedBy(num9) * num7;
118 vector2 += vector4 * 6.5f * num8;
119 num6 = num9;
120 }
121 }
122
123 private void SpawnFloorCloud(int x, int y)
124 {
125 Vector2 position = new Point(x, y - 1).ToWorldCoordinates();
126 int type = _random.Next(1087, 1090);
127 float num = 16f * _random.NextFloat();
128 position.Y -= num;
129 if (num < 4f)
130 {
131 type = 1090;
132 }
133 float num2 = 0.4f;
134 float scale = 0.8f + _random.NextFloat() * 0.2f;
135 Gore.NewGorePerfect(position, Vector2.UnitX * num2 * Main.WindForVisuals, type, scale);
136 }
137
138 private void TestAirCloud(int x, int y)
139 {
140 if (_random.Next(120000) != 0)
141 {
142 return;
143 }
144 for (int i = -2; i <= 2; i++)
145 {
146 if (i != 0)
147 {
148 Tile t = Main.tile[x + i, y];
149 if (!DoesTileAllowWind(t))
150 {
151 return;
152 }
153 t = Main.tile[x, y + i];
154 if (!DoesTileAllowWind(t))
155 {
156 return;
157 }
158 }
159 }
160 _spotsForAirboneWind.Add(new Point(x, y));
161 }
162
163 private bool DoesTileAllowWind(Tile t)
164 {
165 if (t.active())
166 {
167 return !Main.tileSolid[t.type];
168 }
169 return true;
170 }
171}
static Gore NewGorePerfect(Vector2 Position, Vector2 Velocity, int Type, float Scale=1f)
Definition Gore.cs:1275
static float WindForVisuals
Definition Main.cs:2827
static bool[] tileSolid
Definition Main.cs:1471
static Tile[,] tile
Definition Main.cs:1675
static UnifiedRandom rand
Definition Main.cs:1387
static Player LocalPlayer
Definition Main.cs:2829
ushort type
Definition Tile.cs:8
bool active()
Definition Tile.cs:565
byte slope()
Definition Tile.cs:684
bool halfBrick()
Definition Tile.cs:650
static bool SolidTile(Tile testTile)
static bool InWorld(int x, int y, int fluff=0)
Definition WorldGen.cs:5816