Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Place()

override bool Terraria.GameContent.Biomes.MahoganyTreeBiome.Place ( Point origin,
StructureMap structures )
inline

Definition at line 11 of file MahoganyTreeBiome.cs.

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 }
static double Abs(double value)
static double Sin(double a)
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
void AddProtectedStructure(Rectangle area, int padding=0)
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

References Terraria.WorldBuilding.GenBase._random, System.Math.Abs(), Terraria.WorldGen.AddBuriedChest(), Terraria.WorldBuilding.GenCondition.AreaAnd(), Terraria.WorldBuilding.GenCondition.AreaOr(), Terraria.WorldBuilding.StructureMap.CanPlace(), Terraria.WorldBuilding.Searches.Chain(), Terraria.WorldBuilding.Actions.Chain(), System.dictionary, Terraria.WorldGen.drunkWorldGen, Terraria.WorldBuilding.WorldUtils.Find(), Terraria.WorldBuilding.WorldUtils.Gen(), Terraria.WorldGen.genRand, Terraria.WorldGen.GetNextJungleChestItem(), System.item, System.list, Terraria.WorldBuilding.Actions.TileScanner.Output(), Terraria.GameContent.Generation.ShapeBranch.OutputEndpoints(), System.Math.Sin(), Microsoft.Xna.Framework.Point.X, and Microsoft.Xna.Framework.Point.Y.