mirror of
https://github.com/Facepunch/sbox-public.git
synced 2026-02-08 13:40:58 -05:00
This commit imports the C# engine code and game files, excluding C++ source code. [Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
96 lines
2.2 KiB
C#
96 lines
2.2 KiB
C#
using System.Text.Json.Serialization;
|
|
|
|
namespace Sandbox.Internal.JsonConvert
|
|
{
|
|
internal class Vector2Converter : JsonConverter<Vector2>
|
|
{
|
|
public override Vector2 Read( ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options )
|
|
{
|
|
if ( reader.TokenType == JsonTokenType.String )
|
|
{
|
|
return Vector2.Parse( reader.GetString() );
|
|
}
|
|
|
|
if ( reader.TokenType == JsonTokenType.StartArray )
|
|
{
|
|
reader.Read();
|
|
|
|
Vector2 v = default;
|
|
|
|
if ( reader.TokenType == JsonTokenType.Number )
|
|
{
|
|
v.x = reader.GetSingle();
|
|
reader.Read();
|
|
}
|
|
|
|
if ( reader.TokenType == JsonTokenType.Number )
|
|
{
|
|
v.y = reader.GetSingle();
|
|
reader.Read();
|
|
}
|
|
|
|
while ( reader.TokenType != JsonTokenType.EndArray )
|
|
{
|
|
reader.Read();
|
|
}
|
|
|
|
return v;
|
|
}
|
|
|
|
if ( reader.TokenType == JsonTokenType.StartObject )
|
|
{
|
|
reader.Read();
|
|
|
|
Vector2 v = default;
|
|
|
|
while ( reader.TokenType != JsonTokenType.EndObject )
|
|
{
|
|
if ( reader.TokenType == JsonTokenType.PropertyName )
|
|
{
|
|
var name = reader.GetString();
|
|
reader.Read();
|
|
|
|
if ( reader.TokenType == JsonTokenType.Number )
|
|
{
|
|
var val = reader.GetSingle();
|
|
if ( name == "x" ) v.x = val;
|
|
if ( name == "y" ) v.y = val;
|
|
}
|
|
reader.Read();
|
|
}
|
|
else
|
|
{
|
|
reader.Read();
|
|
}
|
|
}
|
|
|
|
return v;
|
|
}
|
|
|
|
Log.Warning( $"Vector2FromJson - unable to read from {reader.TokenType}" );
|
|
|
|
return default;
|
|
}
|
|
|
|
public override void Write( Utf8JsonWriter writer, Vector2 val, JsonSerializerOptions options )
|
|
{
|
|
writer.WriteStringValue( $"{val.x:0.#################################},{val.y:0.#################################}" );
|
|
}
|
|
public override Vector2 ReadAsPropertyName( ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options )
|
|
{
|
|
return Vector2.Parse( reader.GetString() );
|
|
}
|
|
|
|
public override void WriteAsPropertyName( Utf8JsonWriter writer, Vector2 value, JsonSerializerOptions options )
|
|
{
|
|
writer.WritePropertyName( value.ToString() );
|
|
}
|
|
|
|
public override bool CanConvert( Type typeToConvert )
|
|
{
|
|
return typeToConvert == typeof( Vector2 ) || typeToConvert == typeof( string );
|
|
}
|
|
|
|
}
|
|
}
|