Terraria 1.4.0.5 Source Code
This commit is contained in:
commit
05205f009e
1059 changed files with 563450 additions and 0 deletions
150
GameContent/Biomes/DunesBiome.cs
Normal file
150
GameContent/Biomes/DunesBiome.cs
Normal file
|
@ -0,0 +1,150 @@
|
|||
// Decompiled with JetBrains decompiler
|
||||
// Type: Terraria.GameContent.Biomes.DunesBiome
|
||||
// Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null
|
||||
// MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83
|
||||
// Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe
|
||||
|
||||
using Microsoft.Xna.Framework;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using Terraria.GameContent.Biomes.Desert;
|
||||
using Terraria.WorldBuilding;
|
||||
|
||||
namespace Terraria.GameContent.Biomes
|
||||
{
|
||||
public class DunesBiome : MicroBiome
|
||||
{
|
||||
[JsonProperty("SingleDunesWidth")]
|
||||
private WorldGenRange _singleDunesWidth = WorldGenRange.Empty;
|
||||
[JsonProperty("HeightScale")]
|
||||
private float _heightScale = 1f;
|
||||
|
||||
public int MaximumWidth => this._singleDunesWidth.ScaledMaximum * 2;
|
||||
|
||||
public override bool Place(Point origin, StructureMap structures)
|
||||
{
|
||||
int height1 = (int) ((double) GenBase._random.Next(60, 100) * (double) this._heightScale);
|
||||
int height2 = (int) ((double) GenBase._random.Next(60, 100) * (double) this._heightScale);
|
||||
int random1 = this._singleDunesWidth.GetRandom(GenBase._random);
|
||||
int random2 = this._singleDunesWidth.GetRandom(GenBase._random);
|
||||
DunesBiome.DunesDescription fromPlacement1 = DunesBiome.DunesDescription.CreateFromPlacement(new Point(origin.X - random1 / 2 + 30, origin.Y), random1, height1);
|
||||
DunesBiome.DunesDescription fromPlacement2 = DunesBiome.DunesDescription.CreateFromPlacement(new Point(origin.X + random2 / 2 - 30, origin.Y), random2, height2);
|
||||
this.PlaceSingle(fromPlacement1, structures);
|
||||
this.PlaceSingle(fromPlacement2, structures);
|
||||
return true;
|
||||
}
|
||||
|
||||
private void PlaceSingle(DunesBiome.DunesDescription description, StructureMap structures)
|
||||
{
|
||||
int num1 = GenBase._random.Next(3) + 8;
|
||||
for (int index = 0; index < num1 - 1; ++index)
|
||||
{
|
||||
int num2 = (int) (2.0 / (double) num1 * (double) description.Area.Width);
|
||||
int num3 = (int) ((double) index / (double) num1 * (double) description.Area.Width + (double) description.Area.Left) + num2 * 2 / 5 + GenBase._random.Next(-5, 6);
|
||||
float num4 = (float) (1.0 - (double) Math.Abs((float) index / (float) (num1 - 2) - 0.5f) * 2.0);
|
||||
DunesBiome.PlaceHill(num3 - num2 / 2, num3 + num2 / 2, (float) ((double) num4 * 0.300000011920929 + 0.200000002980232) * this._heightScale, description);
|
||||
}
|
||||
int num5 = GenBase._random.Next(2) + 1;
|
||||
for (int index = 0; index < num5; ++index)
|
||||
{
|
||||
int num6 = description.Area.Width / 2;
|
||||
int num7 = description.Area.Center.X + GenBase._random.Next(-10, 11);
|
||||
DunesBiome.PlaceHill(num7 - num6 / 2, num7 + num6 / 2, 0.8f * this._heightScale, description);
|
||||
}
|
||||
structures.AddStructure(description.Area, 20);
|
||||
}
|
||||
|
||||
private static void PlaceHill(
|
||||
int startX,
|
||||
int endX,
|
||||
float scale,
|
||||
DunesBiome.DunesDescription description)
|
||||
{
|
||||
Point startPoint = new Point(startX, (int) description.Surface[startX]);
|
||||
Point endPoint = new Point(endX, (int) description.Surface[endX]);
|
||||
Point point1 = new Point((startPoint.X + endPoint.X) / 2, (startPoint.Y + endPoint.Y) / 2 - (int) (35.0 * (double) scale));
|
||||
int num = (endPoint.X - point1.X) / 4;
|
||||
int minValue = (endPoint.X - point1.X) / 16;
|
||||
if (description.WindDirection == DunesBiome.WindDirection.Left)
|
||||
point1.X -= WorldGen.genRand.Next(minValue, num + 1);
|
||||
else
|
||||
point1.X += WorldGen.genRand.Next(minValue, num + 1);
|
||||
Point point2 = new Point(0, (int) ((double) scale * 12.0));
|
||||
Point point3 = new Point(point2.X / -2, point2.Y / -2);
|
||||
DunesBiome.PlaceCurvedLine(startPoint, point1, description.WindDirection != DunesBiome.WindDirection.Left ? point3 : point2, description);
|
||||
DunesBiome.PlaceCurvedLine(point1, endPoint, description.WindDirection == DunesBiome.WindDirection.Left ? point3 : point2, description);
|
||||
}
|
||||
|
||||
private static void PlaceCurvedLine(
|
||||
Point startPoint,
|
||||
Point endPoint,
|
||||
Point anchorOffset,
|
||||
DunesBiome.DunesDescription description)
|
||||
{
|
||||
Point p = new Point((startPoint.X + endPoint.X) / 2, (startPoint.Y + endPoint.Y) / 2);
|
||||
p.X += anchorOffset.X;
|
||||
p.Y += anchorOffset.Y;
|
||||
Vector2 vector2_1 = startPoint.ToVector2();
|
||||
Vector2 vector2_2 = endPoint.ToVector2();
|
||||
Vector2 vector2_3 = p.ToVector2();
|
||||
float num1 = (float) (0.5 / ((double) vector2_2.X - (double) vector2_1.X));
|
||||
Point point1 = new Point(-1, -1);
|
||||
for (float amount = 0.0f; (double) amount <= 1.0; amount += num1)
|
||||
{
|
||||
Point point2 = Vector2.Lerp(Vector2.Lerp(vector2_1, vector2_3, amount), Vector2.Lerp(vector2_3, vector2_2, amount), amount).ToPoint();
|
||||
if (!(point2 == point1))
|
||||
{
|
||||
point1 = point2;
|
||||
int num2 = description.Area.Width / 2 - Math.Abs(point2.X - description.Area.Center.X);
|
||||
int num3 = (int) description.Surface[point2.X] + (int) (Math.Sqrt((double) num2) * 3.0);
|
||||
for (int index = point2.Y - 10; index < point2.Y; ++index)
|
||||
{
|
||||
if (GenBase._tiles[point2.X, index].active() && GenBase._tiles[point2.X, index].type != (ushort) 53)
|
||||
GenBase._tiles[point2.X, index].ClearEverything();
|
||||
}
|
||||
for (int y = point2.Y; y < num3; ++y)
|
||||
{
|
||||
GenBase._tiles[point2.X, y].ResetToType((ushort) 53);
|
||||
Tile.SmoothSlope(point2.X, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class DunesDescription
|
||||
{
|
||||
public bool IsValid { get; private set; }
|
||||
|
||||
public SurfaceMap Surface { get; private set; }
|
||||
|
||||
public Microsoft.Xna.Framework.Rectangle Area { get; private set; }
|
||||
|
||||
public DunesBiome.WindDirection WindDirection { get; private set; }
|
||||
|
||||
private DunesDescription()
|
||||
{
|
||||
}
|
||||
|
||||
public static DunesBiome.DunesDescription CreateFromPlacement(
|
||||
Point origin,
|
||||
int width,
|
||||
int height)
|
||||
{
|
||||
Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle(origin.X - width / 2, origin.Y - height / 2, width, height);
|
||||
return new DunesBiome.DunesDescription()
|
||||
{
|
||||
Area = rectangle,
|
||||
IsValid = true,
|
||||
Surface = SurfaceMap.FromArea(rectangle.Left - 20, rectangle.Width + 40),
|
||||
WindDirection = WorldGen.genRand.Next(2) == 0 ? DunesBiome.WindDirection.Left : DunesBiome.WindDirection.Right
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
private enum WindDirection
|
||||
{
|
||||
Left,
|
||||
Right,
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue