Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros
MahoganyTreeBiome.cs
Go to the documentation of this file.
1using System;
6
8
10{
11 public override bool Place(Point origin, StructureMap structures)
12 {
13 if (!WorldUtils.Find(new Point(origin.X - 3, origin.Y), Searches.Chain(new Searches.Down(200), new Conditions.IsSolid().AreaAnd(6, 1)), out var result))
14 {
15 return false;
16 }
17 if (!WorldUtils.Find(new Point(result.X, result.Y - 5), Searches.Chain(new Searches.Up(120), new Conditions.IsSolid().AreaOr(6, 1)), out var result2) || result.Y - 5 - result2.Y > 60)
18 {
19 return false;
20 }
21 if (result.Y - result2.Y < 30)
22 {
23 return false;
24 }
25 if (!structures.CanPlace(new Rectangle(result.X - 30, result.Y - 60, 60, 90)))
26 {
27 return false;
28 }
29 if (!WorldGen.drunkWorldGen || WorldGen.genRand.Next(50) > 0)
30 {
32 WorldUtils.Gen(new Point(result.X - 25, result.Y - 25), new Shapes.Rectangle(50, 50), new Actions.TileScanner(0, 59, 60, 147, 1).Output(dictionary));
33 int num = dictionary[0] + dictionary[1];
34 int num2 = dictionary[59] + dictionary[60];
35 if (dictionary[147] > num2 || num > num2 || num2 < 50)
36 {
37 return false;
38 }
39 }
40 int num3 = (result.Y - result2.Y - 9) / 5;
41 int num4 = num3 * 5;
42 int num5 = 0;
43 double num6 = GenBase._random.NextDouble() + 1.0;
44 double num7 = GenBase._random.NextDouble() + 2.0;
45 if (GenBase._random.Next(2) == 0)
46 {
47 num7 = 0.0 - num7;
48 }
49 for (int i = 0; i < num3; i++)
50 {
51 int num8 = (int)(Math.Sin((double)(i + 1) / 12.0 * num6 * 3.1415927410125732) * num7);
52 int num9 = ((num8 < num5) ? (num8 - num5) : 0);
53 WorldUtils.Gen(new Point(result.X + num5 + num9, result.Y - (i + 1) * 5), new Shapes.Rectangle(6 + Math.Abs(num8 - num5), 7), Actions.Chain(new Modifiers.SkipTiles(21, 467, 226, 237), new Modifiers.SkipWalls(87), new Actions.RemoveWall(), new Actions.SetTile(383), new Actions.SetFrames()));
54 WorldUtils.Gen(new Point(result.X + num5 + num9 + 2, result.Y - (i + 1) * 5), new Shapes.Rectangle(2 + Math.Abs(num8 - num5), 5), Actions.Chain(new Modifiers.SkipTiles(21, 467, 226, 237), new Modifiers.SkipWalls(87), new Actions.ClearTile(frameNeighbors: true), new Actions.PlaceWall(78)));
55 WorldUtils.Gen(new Point(result.X + num5 + 2, result.Y - i * 5), new Shapes.Rectangle(2, 2), Actions.Chain(new Modifiers.SkipTiles(21, 467, 226, 237), new Modifiers.SkipWalls(87), new Actions.ClearTile(frameNeighbors: true), new Actions.PlaceWall(78)));
56 num5 = num8;
57 }
58 int num10 = 6;
59 if (num7 < 0.0)
60 {
61 num10 = 0;
62 }
64 for (int j = 0; j < 2; j++)
65 {
66 double num11 = ((double)j + 1.0) / 3.0;
67 int num12 = num10 + (int)(Math.Sin((double)num3 * num11 / 12.0 * num6 * 3.1415927410125732) * num7);
68 double num13 = GenBase._random.NextDouble() * 0.7853981852531433 - 0.7853981852531433 - 0.2;
69 if (num10 == 0)
70 {
71 num13 -= 1.5707963705062866;
72 }
73 WorldUtils.Gen(new Point(result.X + num12, result.Y - (int)((double)(num3 * 5) * num11)), new ShapeBranch(num13, GenBase._random.Next(12, 16)).OutputEndpoints(list), Actions.Chain(new Modifiers.SkipTiles(21, 467, 226, 237), new Modifiers.SkipWalls(87), new Actions.SetTile(383), new Actions.SetFrames(frameNeighbors: true)));
74 num10 = 6 - num10;
75 }
76 int num14 = (int)(Math.Sin((double)num3 / 12.0 * num6 * 3.1415927410125732) * num7);
77 WorldUtils.Gen(new Point(result.X + 6 + num14, result.Y - num4), new ShapeBranch(-0.6853981852531433, GenBase._random.Next(16, 22)).OutputEndpoints(list), Actions.Chain(new Modifiers.SkipTiles(21, 467, 226, 237), new Modifiers.SkipWalls(87), new Actions.SetTile(383), new Actions.SetFrames(frameNeighbors: true)));
78 WorldUtils.Gen(new Point(result.X + num14, result.Y - num4), new ShapeBranch(-2.45619455575943, GenBase._random.Next(16, 22)).OutputEndpoints(list), Actions.Chain(new Modifiers.SkipTiles(21, 467, 226, 237), new Modifiers.SkipWalls(87), new Actions.SetTile(383), new Actions.SetFrames(frameNeighbors: true)));
79 foreach (Point item in list)
80 {
81 WorldUtils.Gen(item, new Shapes.Circle(4), Actions.Chain(new Modifiers.Blotches(4, 2), new Modifiers.SkipTiles(383, 21, 467, 226, 237), new Modifiers.SkipWalls(78, 87), new Actions.SetTile(384), new Actions.SetFrames(frameNeighbors: true)));
82 }
83 for (int k = 0; k < 4; k++)
84 {
85 double angle = (double)k / 3.0 * 2.0 + 0.57075;
86 WorldUtils.Gen(result, new ShapeRoot(angle, GenBase._random.Next(40, 60)), Actions.Chain(new Modifiers.SkipTiles(21, 467, 226, 237), new Modifiers.SkipWalls(87), new Actions.SetTile(383, setSelfFrames: true)));
87 }
88 WorldGen.AddBuriedChest(result.X + 3, result.Y - 1, (GenBase._random.Next(4) != 0) ? WorldGen.GetNextJungleChestItem() : 0, notNearOtherChests: false, 10, trySlope: false, 0);
89 structures.AddProtectedStructure(new Rectangle(result.X - 30, result.Y - 30, 60, 60));
90 return true;
91 }
92}
static double Abs(double value)
static double Sin(double a)
override bool Place(Point origin, StructureMap structures)
ShapeBranch OutputEndpoints(List< Point > endpoints)
TileScanner Output(Dictionary< ushort, int > resultsOutput)
Definition Actions.cs:86
static GenAction Chain(params GenAction[] actions)
Definition Actions.cs:470
static UnifiedRandom _random
Definition GenBase.cs:9
GenCondition AreaOr(int width, int height)
GenCondition AreaAnd(int width, int height)
static GenSearch Chain(GenSearch search, params GenCondition[] conditions)
Definition Searches.cs:123
bool CanPlace(Rectangle area, int padding=0)
static bool Find(Point origin, GenSearch search, out Point result)
Definition WorldUtils.cs:27
static bool Gen(Point origin, GenShape shape, GenAction action)
Definition WorldUtils.cs:17
static UnifiedRandom genRand
Definition WorldGen.cs:1215
static bool AddBuriedChest(Point point, int contain=0, bool notNearOtherChests=false, int Style=-1)
static bool drunkWorldGen
Definition WorldGen.cs:1154
static int GetNextJungleChestItem()
Definition WorldGen.cs:6298