Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
Cloud.cs
Go to the documentation of this file.
1
using
Microsoft.Xna.Framework
;
2
using
Microsoft.Xna.Framework.Graphics
;
3
using
Terraria.GameContent
;
4
using
Terraria.Utilities
;
5
6
namespace
Terraria
;
7
8
public
class
Cloud
9
{
10
public
Vector2
position
;
11
12
public
float
scale
;
13
14
public
float
rotation
;
15
16
public
float
rSpeed
;
17
18
public
float
sSpeed
;
19
20
public
bool
active
;
21
22
public
SpriteEffects
spriteDir
;
23
24
public
int
type
;
25
26
public
int
width
;
27
28
public
int
height
;
29
30
public
float
Alpha
;
31
32
public
bool
kill
;
33
34
private
static
UnifiedRandom
rand
=
new
UnifiedRandom
();
35
36
public
static
void
resetClouds
()
37
{
38
if
(!
Main
.
dedServ
)
39
{
40
Main.windSpeedCurrent =
Main
.
windSpeedTarget
;
41
for
(
int
i = 0; i < 200; i++)
42
{
43
Main
.
cloud
[i].active =
false
;
44
}
45
for
(
int
j = 0; j <
Main
.
numClouds
; j++)
46
{
47
addCloud
();
48
Main
.
cloud
[j].Alpha = 1f;
49
}
50
for
(
int
k = 0; k < 200; k++)
51
{
52
Main
.
cloud
[k].Alpha = 1f;
53
}
54
}
55
}
56
57
public
static
void
addCloud
()
58
{
59
if
(
Main
.
netMode
== 2)
60
{
61
return
;
62
}
63
int
num = -1;
64
for
(
int
i = 0; i < 200; i++)
65
{
66
if
(!
Main
.
cloud
[i].active)
67
{
68
num = i;
69
break
;
70
}
71
}
72
if
(num < 0)
73
{
74
return
;
75
}
76
Main
.
cloud
[num].kill =
false
;
77
Main
.
cloud
[num].rSpeed = 0f;
78
Main
.
cloud
[num].sSpeed = 0f;
79
Main
.
cloud
[num].scale = (float)
rand
.Next(70, 131) * 0.01f;
80
Main
.
cloud
[num].rotation = (float)
rand
.Next(-10, 11) * 0.01f;
81
Main
.
cloud
[num].width = (int)((
float
)
TextureAssets
.
Cloud
[
Main
.
cloud
[num].type].Width() *
Main
.
cloud
[num].scale);
82
Main
.
cloud
[num].height = (int)((
float
)
TextureAssets
.
Cloud
[
Main
.
cloud
[num].type].Height() *
Main
.
cloud
[num].scale);
83
Main
.
cloud
[num].Alpha = 0f;
84
Main
.
cloud
[num].spriteDir =
SpriteEffects
.None;
85
if
(
rand
.Next(2) == 0)
86
{
87
Main
.
cloud
[num].spriteDir =
SpriteEffects
.FlipHorizontally;
88
}
89
float
num2 =
Main
.
windSpeedCurrent
;
90
if
(!
Main
.
gameMenu
)
91
{
92
num2 = Main.windSpeedCurrent -
Main
.
player
[
Main
.
myPlayer
].velocity.X * 0.1f;
93
}
94
int
num3 = 0;
95
int
num4 = 0;
96
if
(num2 > 0f)
97
{
98
num3 -= 200;
99
}
100
if
(num2 < 0f)
101
{
102
num4 += 200;
103
}
104
int
num5 = 300;
105
float
x =
rand
.Next(num3 - num5,
Main
.
screenWidth
+ num4 + num5);
106
Main
.
cloud
[num].Alpha = 0f;
107
Main
.
cloud
[num].position.Y =
rand
.Next((
int
)((float)(-
Main
.
screenHeight
) * 0.25f), (
int
)((float)
Main
.
screenHeight
* 0.15f));
108
if
(
rand
.Next(3) == 0)
109
{
110
Main
.
cloud
[num].position.Y -=
rand
.Next((
int
)((float)
Main
.
screenHeight
* 0.1f));
111
}
112
Main
.
cloud
[num].type =
rand
.Next(4);
113
if
((
Main
.
cloudAlpha
> 0f &&
rand
.Next(4) != 0) || (
Main
.
cloudBGActive
>= 1f &&
rand
.Next(2) == 0))
114
{
115
Main
.
cloud
[num].type =
rand
.Next(18, 22);
116
if
((
double
)
Main
.
cloud
[num].scale >= 1.15)
117
{
118
Main
.
cloud
[num].position.Y -= 150f;
119
}
120
if
(
Main
.
cloud
[num].scale >= 1f)
121
{
122
Main
.
cloud
[num].position.Y -= 150f;
123
}
124
}
125
else
if
(
Main
.
cloudBGActive
<= 0f &&
Main
.
cloudAlpha
== 0f &&
Main
.
cloud
[num].scale < 1f &&
Main
.
cloud
[num].position.Y < (
float
)(-
Main
.
screenHeight
) * 0.15f && (
double
)Main.numClouds <= 80.0)
126
{
127
Main
.
cloud
[num].type =
rand
.Next(9, 14);
128
}
129
else
if
((((
double
)
Main
.
cloud
[num].scale < 1.15 &&
Main
.
cloud
[num].position.Y < (float)(-
Main
.
screenHeight
) * 0.3f) || ((
double
)
Main
.
cloud
[num].scale < 0.85 &&
Main
.
cloud
[num].position.Y < (float)
Main
.
screenHeight
* 0.15f)) && ((
double
)Main.numClouds > 70.0 || Main.cloudBGActive >= 1f))
130
{
131
Main
.
cloud
[num].type =
rand
.Next(4, 9);
132
}
133
else
if
(
Main
.
cloud
[num].position.Y > (
float
)(-
Main
.
screenHeight
) * 0.15f &&
rand
.Next(2) == 0 && (double)
Main
.
numClouds
> 20.0)
134
{
135
Main
.
cloud
[num].type =
rand
.Next(14, 18);
136
}
137
if
(
rand
.Next((
Main
.
dontStarveWorld
||
Main
.
tenthAnniversaryWorld
) ? 25 : 150) == 0)
138
{
139
Main
.
cloud
[num].type =
RollRareCloud
();
140
}
141
else
if
(
Main
.
tenthAnniversaryWorld
&&
rand
.Next(3) == 0)
142
{
143
Main
.
cloud
[num].type =
RollRareCloud
();
144
}
145
if
((
double
)
Main
.
cloud
[num].scale > 1.2)
146
{
147
Main
.
cloud
[num].position.Y += 100f;
148
}
149
if
((
double
)
Main
.
cloud
[num].scale > 1.3)
150
{
151
Main
.
cloud
[num].scale = 1.3f;
152
}
153
if
((
double
)
Main
.
cloud
[num].scale < 0.7)
154
{
155
Main
.
cloud
[num].scale = 0.7f;
156
}
157
Main
.
cloud
[num].active =
true
;
158
Main
.
cloud
[num].position.X = x;
159
if
(
Main
.
cloud
[num].position.X > (
float
)(
Main
.
screenWidth
+ 400))
160
{
161
Main
.
cloud
[num].Alpha = 1f;
162
}
163
if
(
Main
.
cloud
[num].position.X + (
float
)
TextureAssets
.
Cloud
[
Main
.
cloud
[num].type].Width() *
Main
.
cloud
[num].scale < -400f)
164
{
165
Main
.
cloud
[num].Alpha = 1f;
166
}
167
Rectangle
rectangle =
new
Rectangle
((
int
)
Main
.
cloud
[num].position.X, (
int
)
Main
.
cloud
[num].position.Y,
Main
.
cloud
[num].width,
Main
.
cloud
[num].height);
168
for
(
int
j = 0; j < 200; j++)
169
{
170
if
(num != j &&
Main
.
cloud
[j].active)
171
{
172
Rectangle
value =
new
Rectangle
((
int
)
Main
.
cloud
[j].position.X, (
int
)
Main
.
cloud
[j].position.Y,
Main
.
cloud
[j].width,
Main
.
cloud
[j].height);
173
if
(rectangle.
Intersects
(value))
174
{
175
Main
.
cloud
[num].active =
false
;
176
}
177
}
178
}
179
}
180
181
private
static
int
RollRareCloud
()
182
{
183
int
num = -1;
184
bool
flag =
false
;
185
while
(!flag)
186
{
187
num = ((!
Main
.
tenthAnniversaryWorld
) ?
rand
.Next(22, 41) :
rand
.Next(22, 37));
188
switch
(num)
189
{
190
default
:
191
flag =
true
;
192
break
;
193
case
31:
194
flag =
NPC
.
downedBoss3
;
195
break
;
196
case
36:
197
flag = NPC.downedBoss2 &&
WorldGen
.
crimson
;
198
break
;
199
case
25:
200
case
26:
201
flag =
NPC
.
downedBoss1
;
202
break
;
203
case
30:
204
case
35:
205
flag =
Main
.
hardMode
;
206
break
;
207
case
28:
208
if
(
rand
.Next(10) == 0)
209
{
210
flag =
true
;
211
}
212
break
;
213
case
37:
214
case
38:
215
case
39:
216
case
40:
217
if
(
Main
.
dontStarveWorld
||
rand
.Next(10) == 0)
218
{
219
flag =
true
;
220
}
221
break
;
222
}
223
}
224
return
num;
225
}
226
227
public
Color
cloudColor
(
Color
bgColor)
228
{
229
float
num =
scale
*
Alpha
;
230
if
(num > 1f)
231
{
232
num = 1f;
233
}
234
float
num2 = (int)((
float
)(int)bgColor.
R
* num);
235
float
num3 = (int)((
float
)(int)bgColor.
G
* num);
236
float
num4 = (int)((
float
)(int)bgColor.
B
* num);
237
float
num5 = (int)((
float
)(int)bgColor.
A
* num);
238
return
new
Color
((
byte
)num2, (
byte
)num3, (
byte
)num4, (
byte
)num5);
239
}
240
241
public
object
Clone
()
242
{
243
return
MemberwiseClone();
244
}
245
246
public
static
void
UpdateClouds
()
247
{
248
if
(
Main
.
netMode
== 2)
249
{
250
return
;
251
}
252
int
num = 0;
253
for
(
int
i = 0; i < 200; i++)
254
{
255
if
(
Main
.
cloud
[i].active)
256
{
257
Main
.
cloud
[i].Update();
258
if
(!
Main
.
cloud
[i].kill)
259
{
260
num++;
261
}
262
}
263
}
264
for
(
int
j = 0; j < 200; j++)
265
{
266
if
(
Main
.
cloud
[j].active)
267
{
268
if
(j > 1 && (!
Main
.
cloud
[j - 1].active || (
double
)
Main
.
cloud
[j - 1].scale > (
double
)
Main
.
cloud
[j].scale + 0.02))
269
{
270
Cloud
cloud = (
Cloud
)
Main
.
cloud
[j - 1].Clone();
271
Main
.
cloud
[j - 1] = (
Cloud
)
Main
.
cloud
[j].Clone();
272
Main
.
cloud
[j] = cloud;
273
}
274
if
(j < 199 && (!
Main
.
cloud
[j].active || (
double
)
Main
.
cloud
[j + 1].scale < (double)
Main
.
cloud
[j].scale - 0.02))
275
{
276
Cloud
cloud2 = (
Cloud
)
Main
.
cloud
[j + 1].Clone();
277
Main
.
cloud
[j + 1] = (
Cloud
)
Main
.
cloud
[j].Clone();
278
Main
.
cloud
[j] = cloud2;
279
}
280
}
281
}
282
if
(num <
Main
.
numClouds
)
283
{
284
addCloud
();
285
}
286
else
if
(num >
Main
.
numClouds
)
287
{
288
int
num2 =
rand
.Next(num);
289
int
num3 = 0;
290
while
(
Main
.
cloud
[num2].kill && num3 < 100)
291
{
292
num3++;
293
num2 =
rand
.Next(num);
294
}
295
Main
.
cloud
[num2].kill =
true
;
296
}
297
}
298
299
public
void
Update
()
300
{
301
if
(
WorldGen
.
drunkWorldGenText
&&
Main
.
gameMenu
)
302
{
303
type
= 28;
304
}
305
if
(
scale
== 1f)
306
{
307
scale
-= 0.0001f;
308
}
309
if
((
double
)
scale
== 1.15)
310
{
311
scale
-= 0.0001f;
312
}
313
float
num = 0.13f;
314
if
(
scale
< 1f)
315
{
316
num = 0.07f;
317
float
num2 =
scale
+ 0.15f;
318
num2 = (num2 + 1f) / 2f;
319
num2 *= num2;
320
num *= num2;
321
}
322
else
if
((
double
)
scale
<= 1.15)
323
{
324
num = 0.19f;
325
float
num3 =
scale
- 0.075f;
326
num3 *= num3;
327
num *= num3;
328
}
329
else
330
{
331
num = 0.23f;
332
float
num4 =
scale
- 0.15f - 0.075f;
333
num4 *= num4;
334
num *= num4;
335
}
336
position.X += Main.windSpeedCurrent * 9f * num * (float)
Main
.
dayRate
;
337
float
num5 = Main.screenPosition.X -
Main
.
screenLastPosition
.X;
338
position.X -= num5 * num;
339
float
num6 = 600f;
340
if
(
Main
.
bgAlphaFrontLayer
[4] == 1f &&
position
.
Y
> 200f)
341
{
342
kill
=
true
;
343
Alpha
-= 0.005f * (float)
Main
.
dayRate
;
344
}
345
if
(!
kill
)
346
{
347
if
(
Alpha
< 1f)
348
{
349
Alpha
+= 0.001f * (float)
Main
.
dayRate
;
350
if
(
Alpha
> 1f)
351
{
352
Alpha
= 1f;
353
}
354
}
355
}
356
else
357
{
358
Alpha
-= 0.001f * (float)
Main
.
dayRate
;
359
if
(
Alpha
<= 0f)
360
{
361
active
=
false
;
362
}
363
}
364
if
(
position
.
X
+ (
float
)
TextureAssets
.
Cloud
[
type
].Width() * scale < 0f - num6 || position.X > (
float
)
Main
.
screenWidth
+ num6)
365
{
366
active
=
false
;
367
}
368
rSpeed
+= (float)
rand
.Next(-10, 11) * 2E-05f;
369
if
((
double
)
rSpeed
> 0.0002)
370
{
371
rSpeed
= 0.0002f;
372
}
373
if
((
double
)
rSpeed
< -0.0002)
374
{
375
rSpeed
= -0.0002f;
376
}
377
if
((
double
)
rotation
> 0.02)
378
{
379
rotation
= 0.02f;
380
}
381
if
((
double
)
rotation
< -0.02)
382
{
383
rotation
= -0.02f;
384
}
385
rotation
+=
rSpeed
;
386
width
= (int)((
float
)
TextureAssets
.
Cloud
[
type
].Width() *
scale
);
387
height
= (int)((
float
)
TextureAssets
.
Cloud
[
type
].Height() *
scale
);
388
if
(
type
>= 9 &&
type
<= 13 && (
Main
.
cloudAlpha
> 0f ||
Main
.
cloudBGActive
>= 1f))
389
{
390
kill
=
true
;
391
}
392
}
393
}
Terraria.Cloud.active
bool active
Definition
Cloud.cs:20
Terraria.Cloud.spriteDir
SpriteEffects spriteDir
Definition
Cloud.cs:22
Terraria.Cloud.resetClouds
static void resetClouds()
Definition
Cloud.cs:36
Terraria.Cloud.type
int type
Definition
Cloud.cs:24
Terraria.Cloud.scale
float scale
Definition
Cloud.cs:12
Terraria.Cloud.Clone
object Clone()
Definition
Cloud.cs:241
Terraria.Cloud.addCloud
static void addCloud()
Definition
Cloud.cs:57
Terraria.Cloud.rotation
float rotation
Definition
Cloud.cs:14
Terraria.Cloud.Update
void Update()
Definition
Cloud.cs:299
Terraria.Cloud.rand
static UnifiedRandom rand
Definition
Cloud.cs:34
Terraria.Cloud.Alpha
float Alpha
Definition
Cloud.cs:30
Terraria.Cloud.position
Vector2 position
Definition
Cloud.cs:10
Terraria.Cloud.UpdateClouds
static void UpdateClouds()
Definition
Cloud.cs:246
Terraria.Cloud.height
int height
Definition
Cloud.cs:28
Terraria.Cloud.sSpeed
float sSpeed
Definition
Cloud.cs:18
Terraria.Cloud.rSpeed
float rSpeed
Definition
Cloud.cs:16
Terraria.Cloud.cloudColor
Color cloudColor(Color bgColor)
Definition
Cloud.cs:227
Terraria.Cloud.kill
bool kill
Definition
Cloud.cs:32
Terraria.Cloud.RollRareCloud
static int RollRareCloud()
Definition
Cloud.cs:181
Terraria.Cloud.width
int width
Definition
Cloud.cs:26
Terraria.Cloud
Definition
Cloud.cs:9
Terraria.GameContent.TextureAssets.Cloud
static Asset< Texture2D >[] Cloud
Definition
TextureAssets.cs:404
Terraria.GameContent.TextureAssets
Definition
TextureAssets.cs:8
Terraria.Main.cloud
static Cloud[] cloud
Definition
Main.cs:1374
Terraria.Main.windSpeedCurrent
static float windSpeedCurrent
Definition
Main.cs:1360
Terraria.Main.cloudAlpha
static float cloudAlpha
Definition
Main.cs:1302
Terraria.Main.windSpeedTarget
static float windSpeedTarget
Definition
Main.cs:1362
Terraria.Main.numClouds
static int numClouds
Definition
Main.cs:1356
Terraria.Main.myPlayer
static int myPlayer
Definition
Main.cs:1801
Terraria.Main.netMode
static int netMode
Definition
Main.cs:2095
Terraria.Main.dedServ
static bool dedServ
Definition
Main.cs:1226
Terraria.Main.screenLastPosition
static Vector2 screenLastPosition
Definition
Main.cs:1717
Terraria.Main.screenHeight
static int screenHeight
Definition
Main.cs:1721
Terraria.Main.bgAlphaFrontLayer
static float[] bgAlphaFrontLayer
Definition
Main.cs:812
Terraria.Main.dontStarveWorld
static bool dontStarveWorld
Definition
Main.cs:345
Terraria.Main.tenthAnniversaryWorld
static bool tenthAnniversaryWorld
Definition
Main.cs:343
Terraria.Main.dayRate
static int dayRate
Definition
Main.cs:746
Terraria.Main.screenWidth
static int screenWidth
Definition
Main.cs:1719
Terraria.Main.cloudBGActive
static float cloudBGActive
Definition
Main.cs:628
Terraria.Main.gameMenu
static bool gameMenu
Definition
Main.cs:1926
Terraria.Main.hardMode
static bool hardMode
Definition
Main.cs:1022
Terraria.Main.player
static Player[] player
Definition
Main.cs:1803
Terraria.Main
Definition
Main.cs:79
Terraria.NPC.downedBoss1
static bool downedBoss1
Definition
NPC.cs:345
Terraria.NPC.downedBoss3
static bool downedBoss3
Definition
NPC.cs:349
Terraria.NPC
Definition
NPC.cs:30
Terraria.Utilities.UnifiedRandom
Definition
UnifiedRandom.cs:7
Terraria.WorldGen.crimson
static bool crimson
Definition
WorldGen.cs:932
Terraria.WorldGen.drunkWorldGenText
static bool drunkWorldGenText
Definition
WorldGen.cs:1166
Terraria.WorldGen
Definition
WorldGen.cs:32
Microsoft.Xna.Framework.Graphics.SurfaceFormat.Color
@ Color
Microsoft.Xna.Framework.Graphics.SpriteEffects
SpriteEffects
Definition
SpriteEffects.cs:7
Microsoft.Xna.Framework.Graphics
Definition
AlphaTestEffect.cs:1
Microsoft.Xna.Framework
Definition
AlphaTestEffect.cs:1
Terraria.GameContent
Definition
AchievementsHelper.cs:1
Terraria.Utilities
Definition
ExtensionFilter.cs:1
Terraria
Definition
Achievement.cs:7
Microsoft.Xna.Framework.Color.A
byte A
Definition
Color.cs:52
Microsoft.Xna.Framework.Color.R
byte R
Definition
Color.cs:16
Microsoft.Xna.Framework.Color.B
byte B
Definition
Color.cs:40
Microsoft.Xna.Framework.Color.G
byte G
Definition
Color.cs:28
Microsoft.Xna.Framework.Color
Definition
Color.cs:12
Microsoft.Xna.Framework.Rectangle.Intersects
bool Intersects(Rectangle value)
Definition
Rectangle.cs:129
Microsoft.Xna.Framework.Rectangle
Definition
Rectangle.cs:12
Microsoft.Xna.Framework.Vector2.X
float X
Definition
Vector2.cs:14
Microsoft.Xna.Framework.Vector2.Y
float Y
Definition
Vector2.cs:17
Microsoft.Xna.Framework.Vector2
Definition
Vector2.cs:12
source
Terraria
Cloud.cs
Generated by
1.10.0