terraria-source-code/GameContent/TreeTopsInfo.cs
2021-10-26 12:45:26 -04:00

183 lines
5.7 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Terraria.GameContent.TreeTopsInfo
// 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 System.IO;
using Terraria.ID;
using Terraria.Utilities;
namespace Terraria.GameContent
{
public class TreeTopsInfo
{
private int[] _variations = new int[13];
public void Save(BinaryWriter writer)
{
writer.Write(this._variations.Length);
for (int index = 0; index < this._variations.Length; ++index)
writer.Write(this._variations[index]);
}
public void Load(BinaryReader reader, int loadVersion)
{
if (loadVersion < 211)
{
this.CopyExistingWorldInfo();
}
else
{
int num = reader.ReadInt32();
for (int index = 0; index < num && index < this._variations.Length; ++index)
this._variations[index] = reader.ReadInt32();
}
}
public void SyncSend(BinaryWriter writer)
{
for (int index = 0; index < this._variations.Length; ++index)
writer.Write((byte) this._variations[index]);
}
public void SyncReceive(BinaryReader reader)
{
for (int areaID = 0; areaID < this._variations.Length; ++areaID)
{
int variation = this._variations[areaID];
this._variations[areaID] = (int) reader.ReadByte();
if (this._variations[areaID] != variation)
this.DoTreeFX(areaID);
}
}
public int GetTreeStyle(int areaId) => this._variations[areaId];
public void RandomizeTreeStyleBasedOnWorldPosition(UnifiedRandom rand, Vector2 worldPosition)
{
Point pt = new Point((int) ((double) worldPosition.X / 16.0), (int) ((double) worldPosition.Y / 16.0) + 1);
Tile tileSafely = Framing.GetTileSafely(pt);
if (!tileSafely.active())
return;
int areaId = -1;
if (tileSafely.type == (ushort) 70)
areaId = 11;
else if (tileSafely.type == (ushort) 53 && WorldGen.oceanDepths(pt.X, pt.Y))
areaId = 10;
else if (tileSafely.type == (ushort) 23)
areaId = 4;
else if (tileSafely.type == (ushort) 199)
areaId = 8;
else if (tileSafely.type == (ushort) 109 || tileSafely.type == (ushort) 492)
areaId = 7;
else if (tileSafely.type == (ushort) 53)
areaId = 9;
else if (tileSafely.type == (ushort) 147)
areaId = 6;
else if (tileSafely.type == (ushort) 60)
areaId = 5;
else if (tileSafely.type == (ushort) 2 || tileSafely.type == (ushort) 477)
areaId = pt.X >= Main.treeX[0] ? (pt.X >= Main.treeX[1] ? (pt.X >= Main.treeX[2] ? 3 : 2) : 1) : 0;
if (areaId <= -1)
return;
this.RandomizeTreeStyle(rand, areaId);
}
public void RandomizeTreeStyle(UnifiedRandom rand, int areaId)
{
int variation = this._variations[areaId];
bool flag = false;
while (this._variations[areaId] == variation)
{
switch (areaId)
{
case 0:
case 1:
case 2:
case 3:
this._variations[areaId] = rand.Next(6);
break;
case 4:
this._variations[areaId] = rand.Next(5);
break;
case 5:
this._variations[areaId] = rand.Next(6);
break;
case 6:
this._variations[areaId] = rand.NextFromList<int>(0, 1, 2, 21, 22, 3, 31, 32, 4, 41, 42, 5, 6, 7);
break;
case 7:
this._variations[areaId] = rand.Next(5);
break;
case 8:
this._variations[areaId] = rand.Next(6);
break;
case 9:
this._variations[areaId] = rand.Next(5);
break;
case 10:
this._variations[areaId] = rand.Next(6);
break;
case 11:
this._variations[areaId] = rand.Next(4);
break;
default:
flag = true;
break;
}
if (flag)
break;
}
if (variation == this._variations[areaId])
return;
if (Main.netMode == 2)
NetMessage.SendData(7);
else
this.DoTreeFX(areaId);
}
private void DoTreeFX(int areaID)
{
}
public void CopyExistingWorldInfoForWorldGeneration() => this.CopyExistingWorldInfo();
private void CopyExistingWorldInfo()
{
this._variations[0] = Main.treeStyle[0];
this._variations[1] = Main.treeStyle[1];
this._variations[2] = Main.treeStyle[2];
this._variations[3] = Main.treeStyle[3];
this._variations[4] = WorldGen.corruptBG;
this._variations[5] = WorldGen.jungleBG;
this._variations[6] = WorldGen.snowBG;
this._variations[7] = WorldGen.hallowBG;
this._variations[8] = WorldGen.crimsonBG;
this._variations[9] = WorldGen.desertBG;
this._variations[10] = WorldGen.oceanBG;
this._variations[11] = WorldGen.mushroomBG;
this._variations[12] = WorldGen.underworldBG;
}
public class AreaId
{
public static SetFactory Factory = new SetFactory(13);
public const int Forest1 = 0;
public const int Forest2 = 1;
public const int Forest3 = 2;
public const int Forest4 = 3;
public const int Corruption = 4;
public const int Jungle = 5;
public const int Snow = 6;
public const int Hallow = 7;
public const int Crimson = 8;
public const int Desert = 9;
public const int Ocean = 10;
public const int GlowingMushroom = 11;
public const int Underworld = 12;
public const int Count = 13;
}
}
}