Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
Modifiers.cs
Go to the documentation of this file.
1using System;
4
6
7public static class Modifiers
8{
9 public class ShapeScale : GenAction
10 {
11 private int _scale;
12
13 public ShapeScale(int scale)
14 {
15 _scale = scale;
16 }
17
18 public override bool Apply(Point origin, int x, int y, params object[] args)
19 {
20 bool flag = false;
21 for (int i = 0; i < _scale; i++)
22 {
23 for (int j = 0; j < _scale; j++)
24 {
25 flag |= !UnitApply(origin, (x - origin.X << 1) + i + origin.X, (y - origin.Y << 1) + j + origin.Y);
26 }
27 }
28 return !flag;
29 }
30 }
31
32 public class Expand : GenAction
33 {
34 private int _xExpansion;
35
36 private int _yExpansion;
37
38 public Expand(int expansion)
39 {
40 _xExpansion = expansion;
41 _yExpansion = expansion;
42 }
43
44 public Expand(int xExpansion, int yExpansion)
45 {
46 _xExpansion = xExpansion;
47 _yExpansion = yExpansion;
48 }
49
50 public override bool Apply(Point origin, int x, int y, params object[] args)
51 {
52 bool flag = false;
53 for (int i = -_xExpansion; i <= _xExpansion; i++)
54 {
55 for (int j = -_yExpansion; j <= _yExpansion; j++)
56 {
57 flag |= !UnitApply(origin, x + i, y + j, args);
58 }
59 }
60 return !flag;
61 }
62 }
63
64 public class RadialDither : GenAction
65 {
66 private double _innerRadius;
67
68 private double _outerRadius;
69
70 public RadialDither(double innerRadius, double outerRadius)
71 {
72 _innerRadius = innerRadius;
73 _outerRadius = outerRadius;
74 }
75
76 public override bool Apply(Point origin, int x, int y, params object[] args)
77 {
78 //IL_0019: Unknown result type (might be due to invalid IL or missing references)
79 //IL_001e: Unknown result type (might be due to invalid IL or missing references)
80 Vector2D val = default(Vector2D);
81 ((Vector2D)(ref val))._002Ector((double)origin.X, (double)origin.Y);
82 double num = Vector2D.Distance(new Vector2D((double)x, (double)y), val);
83 double num2 = Math.Max(0.0, Math.Min(1.0, (num - _innerRadius) / (_outerRadius - _innerRadius)));
84 if (GenBase._random.NextDouble() > num2)
85 {
86 return UnitApply(origin, x, y, args);
87 }
88 return Fail();
89 }
90 }
91
92 public class Blotches : GenAction
93 {
94 private int _minX;
95
96 private int _minY;
97
98 private int _maxX;
99
100 private int _maxY;
101
102 private double _chance;
103
104 public Blotches(int scale = 2, double chance = 0.3)
105 {
106 _minX = scale;
107 _minY = scale;
108 _maxX = scale;
109 _maxY = scale;
110 _chance = chance;
111 }
112
113 public Blotches(int xScale, int yScale, double chance = 0.3)
114 {
115 _minX = xScale;
116 _maxX = xScale;
117 _minY = yScale;
118 _maxY = yScale;
119 _chance = chance;
120 }
121
122 public Blotches(int leftScale, int upScale, int rightScale, int downScale, double chance = 0.3)
123 {
124 _minX = leftScale;
125 _maxX = rightScale;
126 _minY = upScale;
127 _maxY = downScale;
128 _chance = chance;
129 }
130
131 public override bool Apply(Point origin, int x, int y, params object[] args)
132 {
133 GenBase._random.NextDouble();
134 if (GenBase._random.NextDouble() < _chance)
135 {
136 bool flag = false;
137 int num = GenBase._random.Next(1 - _minX, 1);
138 int num2 = GenBase._random.Next(0, _maxX);
139 int num3 = GenBase._random.Next(1 - _minY, 1);
140 int num4 = GenBase._random.Next(0, _maxY);
141 for (int i = num; i <= num2; i++)
142 {
143 for (int j = num3; j <= num4; j++)
144 {
145 flag |= !UnitApply(origin, x + i, y + j, args);
146 }
147 }
148 return !flag;
149 }
150 return UnitApply(origin, x, y, args);
151 }
152 }
153
154 public class InShape : GenAction
155 {
156 private readonly ShapeData _shapeData;
157
158 public InShape(ShapeData shapeData)
159 {
160 _shapeData = shapeData;
161 }
162
163 public override bool Apply(Point origin, int x, int y, params object[] args)
164 {
165 if (!_shapeData.Contains(x - origin.X, y - origin.Y))
166 {
167 return Fail();
168 }
169 return UnitApply(origin, x, y, args);
170 }
171 }
172
173 public class NotInShape : GenAction
174 {
175 private readonly ShapeData _shapeData;
176
177 public NotInShape(ShapeData shapeData)
178 {
179 _shapeData = shapeData;
180 }
181
182 public override bool Apply(Point origin, int x, int y, params object[] args)
183 {
184 if (_shapeData.Contains(x - origin.X, y - origin.Y))
185 {
186 return Fail();
187 }
188 return UnitApply(origin, x, y, args);
189 }
190 }
191
192 public class Conditions : GenAction
193 {
194 private readonly GenCondition[] _conditions;
195
196 public Conditions(params GenCondition[] conditions)
197 {
198 _conditions = conditions;
199 }
200
201 public override bool Apply(Point origin, int x, int y, params object[] args)
202 {
203 bool flag = true;
204 for (int i = 0; i < _conditions.Length; i++)
205 {
206 flag &= _conditions[i].IsValid(x, y);
207 }
208 if (flag)
209 {
210 return UnitApply(origin, x, y, args);
211 }
212 return Fail();
213 }
214 }
215
216 public class OnlyWalls : GenAction
217 {
218 private ushort[] _types;
219
220 public OnlyWalls(params ushort[] types)
221 {
222 _types = types;
223 }
224
225 public override bool Apply(Point origin, int x, int y, params object[] args)
226 {
227 for (int i = 0; i < _types.Length; i++)
228 {
229 if (GenBase._tiles[x, y].wall == _types[i])
230 {
231 return UnitApply(origin, x, y, args);
232 }
233 }
234 return Fail();
235 }
236 }
237
238 public class OnlyTiles : GenAction
239 {
240 private ushort[] _types;
241
242 public OnlyTiles(params ushort[] types)
243 {
244 _types = types;
245 }
246
247 public override bool Apply(Point origin, int x, int y, params object[] args)
248 {
249 if (!GenBase._tiles[x, y].active())
250 {
251 return Fail();
252 }
253 for (int i = 0; i < _types.Length; i++)
254 {
255 if (GenBase._tiles[x, y].type == _types[i])
256 {
257 return UnitApply(origin, x, y, args);
258 }
259 }
260 return Fail();
261 }
262 }
263
264 public class IsTouching : GenAction
265 {
266 private static readonly int[] DIRECTIONS = new int[16]
267 {
268 0, -1, 1, 0, -1, 0, 0, 1, -1, -1,
269 1, -1, -1, 1, 1, 1
270 };
271
272 private bool _useDiagonals;
273
274 private ushort[] _tileIds;
275
276 public IsTouching(bool useDiagonals, params ushort[] tileIds)
277 {
278 _useDiagonals = useDiagonals;
279 _tileIds = tileIds;
280 }
281
282 public override bool Apply(Point origin, int x, int y, params object[] args)
283 {
284 int num = (_useDiagonals ? 16 : 8);
285 for (int i = 0; i < num; i += 2)
286 {
287 Tile tile = GenBase._tiles[x + DIRECTIONS[i], y + DIRECTIONS[i + 1]];
288 if (!tile.active())
289 {
290 continue;
291 }
292 for (int j = 0; j < _tileIds.Length; j++)
293 {
294 if (tile.type == _tileIds[j])
295 {
296 return UnitApply(origin, x, y, args);
297 }
298 }
299 }
300 return Fail();
301 }
302 }
303
304 public class NotTouching : GenAction
305 {
306 private static readonly int[] DIRECTIONS = new int[16]
307 {
308 0, -1, 1, 0, -1, 0, 0, 1, -1, -1,
309 1, -1, -1, 1, 1, 1
310 };
311
312 private bool _useDiagonals;
313
314 private ushort[] _tileIds;
315
316 public NotTouching(bool useDiagonals, params ushort[] tileIds)
317 {
318 _useDiagonals = useDiagonals;
319 _tileIds = tileIds;
320 }
321
322 public override bool Apply(Point origin, int x, int y, params object[] args)
323 {
324 int num = (_useDiagonals ? 16 : 8);
325 for (int i = 0; i < num; i += 2)
326 {
327 Tile tile = GenBase._tiles[x + DIRECTIONS[i], y + DIRECTIONS[i + 1]];
328 if (!tile.active())
329 {
330 continue;
331 }
332 for (int j = 0; j < _tileIds.Length; j++)
333 {
334 if (tile.type == _tileIds[j])
335 {
336 return Fail();
337 }
338 }
339 }
340 return UnitApply(origin, x, y, args);
341 }
342 }
343
345 {
346 private static readonly int[] DIRECTIONS = new int[16]
347 {
348 0, -1, 1, 0, -1, 0, 0, 1, -1, -1,
349 1, -1, -1, 1, 1, 1
350 };
351
352 private bool _useDiagonals;
353
354 public IsTouchingAir(bool useDiagonals = false)
355 {
356 _useDiagonals = useDiagonals;
357 }
358
359 public override bool Apply(Point origin, int x, int y, params object[] args)
360 {
361 int num = (_useDiagonals ? 16 : 8);
362 for (int i = 0; i < num; i += 2)
363 {
364 if (!GenBase._tiles[x + DIRECTIONS[i], y + DIRECTIONS[i + 1]].active())
365 {
366 return UnitApply(origin, x, y, args);
367 }
368 }
369 return Fail();
370 }
371 }
372
373 public class SkipTiles : GenAction
374 {
375 private ushort[] _types;
376
377 public SkipTiles(params ushort[] types)
378 {
379 _types = types;
380 }
381
382 public override bool Apply(Point origin, int x, int y, params object[] args)
383 {
384 if (!GenBase._tiles[x, y].active())
385 {
386 return UnitApply(origin, x, y, args);
387 }
388 for (int i = 0; i < _types.Length; i++)
389 {
390 if (GenBase._tiles[x, y].type == _types[i])
391 {
392 return Fail();
393 }
394 }
395 return UnitApply(origin, x, y, args);
396 }
397 }
398
399 public class HasLiquid : GenAction
400 {
401 private int _liquidType;
402
403 private int _liquidLevel;
404
405 public HasLiquid(int liquidLevel = -1, int liquidType = -1)
406 {
407 _liquidType = liquidType;
408 _liquidLevel = liquidLevel;
409 }
410
411 public override bool Apply(Point origin, int x, int y, params object[] args)
412 {
413 Tile tile = GenBase._tiles[x, y];
414 if ((_liquidType == -1 || _liquidType == tile.liquidType()) && ((_liquidLevel == -1 && tile.liquid != 0) || _liquidLevel == tile.liquid))
415 {
416 return UnitApply(origin, x, y, args);
417 }
418 return Fail();
419 }
420 }
421
422 public class SkipWalls : GenAction
423 {
424 private ushort[] _types;
425
426 public SkipWalls(params ushort[] types)
427 {
428 _types = types;
429 }
430
431 public override bool Apply(Point origin, int x, int y, params object[] args)
432 {
433 for (int i = 0; i < _types.Length; i++)
434 {
435 if (GenBase._tiles[x, y].wall == _types[i])
436 {
437 return Fail();
438 }
439 }
440 return UnitApply(origin, x, y, args);
441 }
442 }
443
444 public class IsEmpty : GenAction
445 {
446 public override bool Apply(Point origin, int x, int y, params object[] args)
447 {
448 if (!GenBase._tiles[x, y].active())
449 {
450 return UnitApply(origin, x, y, args);
451 }
452 return Fail();
453 }
454 }
455
456 public class IsSolid : GenAction
457 {
458 public override bool Apply(Point origin, int x, int y, params object[] args)
459 {
460 if (GenBase._tiles[x, y].active() && WorldGen.SolidOrSlopedTile(x, y))
461 {
462 return UnitApply(origin, x, y, args);
463 }
464 return Fail();
465 }
466 }
467
468 public class IsNotSolid : GenAction
469 {
470 public override bool Apply(Point origin, int x, int y, params object[] args)
471 {
472 if (!GenBase._tiles[x, y].active() || !WorldGen.SolidOrSlopedTile(x, y))
473 {
474 return UnitApply(origin, x, y, args);
475 }
476 return Fail();
477 }
478 }
479
481 {
482 private int _xMin;
483
484 private int _yMin;
485
486 private int _xMax;
487
488 private int _yMax;
489
490 public RectangleMask(int xMin, int xMax, int yMin, int yMax)
491 {
492 _xMin = xMin;
493 _yMin = yMin;
494 _xMax = xMax;
495 _yMax = yMax;
496 }
497
498 public override bool Apply(Point origin, int x, int y, params object[] args)
499 {
500 if (x >= _xMin + origin.X && x <= _xMax + origin.X && y >= _yMin + origin.Y && y <= _yMax + origin.Y)
501 {
502 return UnitApply(origin, x, y, args);
503 }
504 return Fail();
505 }
506 }
507
508 public class Offset : GenAction
509 {
510 private int _xOffset;
511
512 private int _yOffset;
513
514 public Offset(int x, int y)
515 {
516 _xOffset = x;
517 _yOffset = y;
518 }
519
520 public override bool Apply(Point origin, int x, int y, params object[] args)
521 {
522 return UnitApply(origin, x + _xOffset, y + _yOffset, args);
523 }
524 }
525
526 public class Dither : GenAction
527 {
528 private double _failureChance;
529
530 public Dither(double failureChance = 0.5)
531 {
532 _failureChance = failureChance;
533 }
534
535 public override bool Apply(Point origin, int x, int y, params object[] args)
536 {
537 if (GenBase._random.NextDouble() >= _failureChance)
538 {
539 return UnitApply(origin, x, y, args);
540 }
541 return Fail();
542 }
543 }
544
545 public class Flip : GenAction
546 {
547 private bool _flipX;
548
549 private bool _flipY;
550
551 public Flip(bool flipX, bool flipY)
552 {
553 _flipX = flipX;
554 _flipY = flipY;
555 }
556
557 public override bool Apply(Point origin, int x, int y, params object[] args)
558 {
559 if (_flipX)
560 {
561 x = origin.X * 2 - x;
562 }
563 if (_flipY)
564 {
565 y = origin.Y * 2 - y;
566 }
567 return UnitApply(origin, x, y, args);
568 }
569 }
570}
static byte Min(byte val1, byte val2)
Definition Math.cs:912
static byte Max(byte val1, byte val2)
Definition Math.cs:738
void liquidType(int liquidType)
Definition Tile.cs:233
byte liquid
Definition Tile.cs:12
ushort type
Definition Tile.cs:8
bool active()
Definition Tile.cs:565
bool UnitApply(Point origin, int x, int y, params object[] args)
Definition GenAction.cs:15
static UnifiedRandom _random
Definition GenBase.cs:9
Blotches(int xScale, int yScale, double chance=0.3)
Definition Modifiers.cs:113
Blotches(int scale=2, double chance=0.3)
Definition Modifiers.cs:104
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:131
Blotches(int leftScale, int upScale, int rightScale, int downScale, double chance=0.3)
Definition Modifiers.cs:122
Conditions(params GenCondition[] conditions)
Definition Modifiers.cs:196
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:201
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:535
Dither(double failureChance=0.5)
Definition Modifiers.cs:530
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:50
Expand(int xExpansion, int yExpansion)
Definition Modifiers.cs:44
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:557
Flip(bool flipX, bool flipY)
Definition Modifiers.cs:551
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:411
HasLiquid(int liquidLevel=-1, int liquidType=-1)
Definition Modifiers.cs:405
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:163
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:446
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:470
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:458
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:359
IsTouching(bool useDiagonals, params ushort[] tileIds)
Definition Modifiers.cs:276
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:282
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:182
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:322
NotTouching(bool useDiagonals, params ushort[] tileIds)
Definition Modifiers.cs:316
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:520
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:247
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:225
RadialDither(double innerRadius, double outerRadius)
Definition Modifiers.cs:70
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:76
RectangleMask(int xMin, int xMax, int yMin, int yMax)
Definition Modifiers.cs:490
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:498
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:18
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:382
override bool Apply(Point origin, int x, int y, params object[] args)
Definition Modifiers.cs:431
bool Contains(int x, int y)
Definition ShapeData.cs:45
static bool SolidOrSlopedTile(Tile tile)
static double Distance(Vector2D value1, Vector2D value2)
Definition Vector2D.cs:137