terraria-source-code/Localization/NetworkText.cs
2021-10-26 12:45:26 -04:00

156 lines
5.4 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Terraria.Localization.NetworkText
// 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 System;
using System.IO;
using System.Text;
namespace Terraria.Localization
{
public class NetworkText
{
public static readonly NetworkText Empty = NetworkText.FromLiteral("");
private NetworkText[] _substitutions;
private string _text;
private NetworkText.Mode _mode;
private NetworkText(string text, NetworkText.Mode mode)
{
this._text = text;
this._mode = mode;
}
private static NetworkText[] ConvertSubstitutionsToNetworkText(object[] substitutions)
{
NetworkText[] networkTextArray = new NetworkText[substitutions.Length];
for (int index = 0; index < substitutions.Length; ++index)
{
if (!(substitutions[index] is NetworkText networkText2))
networkText2 = NetworkText.FromLiteral(substitutions[index].ToString());
networkTextArray[index] = networkText2;
}
return networkTextArray;
}
public static NetworkText FromFormattable(string text, params object[] substitutions) => new NetworkText(text, NetworkText.Mode.Formattable)
{
_substitutions = NetworkText.ConvertSubstitutionsToNetworkText(substitutions)
};
public static NetworkText FromLiteral(string text) => new NetworkText(text, NetworkText.Mode.Literal);
public static NetworkText FromKey(string key, params object[] substitutions) => new NetworkText(key, NetworkText.Mode.LocalizationKey)
{
_substitutions = NetworkText.ConvertSubstitutionsToNetworkText(substitutions)
};
public int GetMaxSerializedSize()
{
int num = 0 + 1 + (4 + Encoding.UTF8.GetByteCount(this._text));
if (this._mode != NetworkText.Mode.Literal)
{
++num;
for (int index = 0; index < this._substitutions.Length; ++index)
num += this._substitutions[index].GetMaxSerializedSize();
}
return num;
}
public void Serialize(BinaryWriter writer)
{
writer.Write((byte) this._mode);
writer.Write(this._text);
this.SerializeSubstitutionList(writer);
}
private void SerializeSubstitutionList(BinaryWriter writer)
{
if (this._mode == NetworkText.Mode.Literal)
return;
writer.Write((byte) this._substitutions.Length);
for (int index = 0; index < (this._substitutions.Length & (int) byte.MaxValue); ++index)
this._substitutions[index].Serialize(writer);
}
public static NetworkText Deserialize(BinaryReader reader)
{
NetworkText.Mode mode = (NetworkText.Mode) reader.ReadByte();
NetworkText networkText = new NetworkText(reader.ReadString(), mode);
networkText.DeserializeSubstitutionList(reader);
return networkText;
}
public static NetworkText DeserializeLiteral(BinaryReader reader)
{
NetworkText.Mode mode = (NetworkText.Mode) reader.ReadByte();
NetworkText networkText = new NetworkText(reader.ReadString(), mode);
networkText.DeserializeSubstitutionList(reader);
if (mode != NetworkText.Mode.Literal)
networkText.SetToEmptyLiteral();
return networkText;
}
private void DeserializeSubstitutionList(BinaryReader reader)
{
if (this._mode == NetworkText.Mode.Literal)
return;
this._substitutions = new NetworkText[(int) reader.ReadByte()];
for (int index = 0; index < this._substitutions.Length; ++index)
this._substitutions[index] = NetworkText.Deserialize(reader);
}
private void SetToEmptyLiteral()
{
this._mode = NetworkText.Mode.Literal;
this._text = string.Empty;
this._substitutions = (NetworkText[]) null;
}
public override string ToString()
{
try
{
switch (this._mode)
{
case NetworkText.Mode.Literal:
return this._text;
case NetworkText.Mode.Formattable:
return string.Format(this._text, (object[]) this._substitutions);
case NetworkText.Mode.LocalizationKey:
return Language.GetTextValue(this._text, (object[]) this._substitutions);
default:
return this._text;
}
}
catch (Exception ex)
{
string str = "NetworkText.ToString() threw an exception.\n" + this.ToDebugInfoString() + "\n" + "Exception: " + (object) ex;
this.SetToEmptyLiteral();
}
return this._text;
}
private string ToDebugInfoString(string linePrefix = "")
{
string str = string.Format("{0}Mode: {1}\n{0}Text: {2}\n", (object) linePrefix, (object) this._mode, (object) this._text);
if (this._mode == NetworkText.Mode.LocalizationKey)
str += string.Format("{0}Localized Text: {1}\n", (object) linePrefix, (object) Language.GetTextValue(this._text));
if (this._mode != NetworkText.Mode.Literal)
{
for (int index = 0; index < this._substitutions.Length; ++index)
str = str + string.Format("{0}Substitution {1}:\n", (object) linePrefix, (object) index) + this._substitutions[index].ToDebugInfoString(linePrefix + "\t");
}
return str;
}
private enum Mode : byte
{
Literal,
Formattable,
LocalizationKey,
}
}
}