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

◆ Place()

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

Definition at line 180 of file MarbleBiome.cs.

181 {
182 if (WorldGen.BiomeTileCheck(origin.X, origin.Y))
183 {
184 return false;
185 }
186 if (_slabs == null)
187 {
188 _slabs = new Slab[56, 26];
189 }
190 int num = GenBase._random.Next(80, 150) / 3;
191 int num2 = GenBase._random.Next(40, 60) / 3;
192 int num3 = (num2 * 3 - GenBase._random.Next(20, 30)) / 3;
193 origin.X -= num * 3 / 2;
194 origin.Y -= num2 * 3 / 2;
195 for (int i = -1; i < num + 1; i++)
196 {
197 double num4 = (double)(i - num / 2) / (double)num + 0.5;
198 int num5 = (int)((0.5 - Math.Abs(num4 - 0.5)) * 5.0) - 2;
199 for (int j = -1; j < num2 + 1; j++)
200 {
201 bool hasWall = true;
202 bool flag = false;
203 bool flag2 = IsGroupSolid(i * 3 + origin.X, j * 3 + origin.Y, 3);
204 int num6 = Math.Abs(j - num2 / 2) - num3 / 4 + num5;
205 if (num6 > 3)
206 {
207 flag = flag2;
208 hasWall = false;
209 }
210 else if (num6 > 0)
211 {
212 flag = j - num2 / 2 > 0 || flag2;
213 hasWall = j - num2 / 2 < 0 || num6 <= 2;
214 }
215 else if (num6 == 0)
216 {
217 flag = GenBase._random.Next(2) == 0 && (j - num2 / 2 > 0 || flag2);
218 }
219 if (Math.Abs(num4 - 0.5) > 0.35 + GenBase._random.NextDouble() * 0.1 && !flag2)
220 {
221 hasWall = false;
222 flag = false;
223 }
224 _slabs[i + 1, j + 1] = Slab.Create(flag ? new SlabState(SlabStates.Solid) : new SlabState(SlabStates.Empty), hasWall);
225 }
226 }
227 for (int k = 0; k < num; k++)
228 {
229 for (int l = 0; l < num2; l++)
230 {
231 SmoothSlope(k + 1, l + 1);
232 }
233 }
234 int num7 = num / 2;
235 int num8 = num2 / 2;
236 int num9 = (num8 + 1) * (num8 + 1);
237 double value = GenBase._random.NextDouble() * 2.0 - 1.0;
238 double num10 = GenBase._random.NextDouble() * 2.0 - 1.0;
239 double value2 = GenBase._random.NextDouble() * 2.0 - 1.0;
240 double num11 = 0.0;
241 for (int m = 0; m <= num; m++)
242 {
243 double num12 = (double)num8 / (double)num7 * (double)(m - num7);
244 int num13 = Math.Min(num8, (int)Math.Sqrt(Math.Max(0.0, (double)num9 - num12 * num12)));
245 num11 = ((m >= num / 2) ? (num11 + Utils.Lerp(num10, value2, (double)m / (double)(num / 2) - 1.0)) : (num11 + Utils.Lerp(value, num10, (double)m / (double)(num / 2))));
246 for (int n = num8 - num13; n <= num8 + num13; n++)
247 {
248 PlaceSlab(_slabs[m + 1, n + 1], m * 3 + origin.X, n * 3 + origin.Y + (int)num11, 3);
249 }
250 }
251 structures.AddStructure(new Rectangle(origin.X, origin.Y, num * 3, num2 * 3), 8);
252 return true;
253 }
static byte Min(byte val1, byte val2)
Definition Math.cs:912
static double Sqrt(double d)
static double Abs(double value)
static byte Max(byte val1, byte val2)
Definition Math.cs:738
static bool IsGroupSolid(int x, int y, int scale)
delegate bool SlabState(int x, int y, int scale)
void PlaceSlab(Slab slab, int originX, int originY, int scale)
static UnifiedRandom _random
Definition GenBase.cs:9
void AddStructure(Rectangle area, int padding=0)
static Slab Create(SlabState state, bool hasWall)

References Terraria.WorldBuilding.GenBase._random, Terraria.GameContent.Biomes.MarbleBiome._slabs, System.Math.Abs(), Terraria.WorldBuilding.StructureMap.AddStructure(), Terraria.WorldGen.BiomeTileCheck(), Terraria.GameContent.Biomes.MarbleBiome.Slab.Create(), Terraria.GameContent.Biomes.MarbleBiome.SlabStates.Empty(), Terraria.GameContent.Biomes.MarbleBiome.IsGroupSolid(), Terraria.Utils.Lerp(), System.Math.Max(), System.Math.Min(), Terraria.GameContent.Biomes.MarbleBiome.PlaceSlab(), Terraria.GameContent.Biomes.MarbleBiome.SlabState(), Terraria.GameContent.Biomes.MarbleBiome.SmoothSlope(), Terraria.GameContent.Biomes.MarbleBiome.SlabStates.Solid(), System.Math.Sqrt(), System.value, Microsoft.Xna.Framework.Point.X, and Microsoft.Xna.Framework.Point.Y.