156 lines
5.4 KiB
C#
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,
|
|
}
|
|
}
|
|
}
|