new file: .gitattributes new file: Charts/track.json new file: ProjectOnrinto.csproj new file: ProjectOnrinto.sln new file: Scenes/Audio/audio_stream_player.tscn new file: Scenes/Game/level.tscn new file: Scenes/Prefabs/beat.tscn new file: Scripts/Core/GameManager.cs new file: Scripts/Core/GameManager.cs.uid new file: Scripts/Core/MusicClock.cs new file: Scripts/Core/MusicClock.cs.uid new file: Scripts/Core/TrackGenerator.cs new file: Scripts/Core/TrackGenerator.cs.uid new file: Scripts/Data/ChartEvent.cs new file: Scripts/Data/ChartEvent.cs.uid new file: Scripts/Data/JsonConverter.cs new file: Scripts/Data/JsonConverter.cs.uid new file: Scripts/Data/TrackData.cs new file: Scripts/Data/TrackData.cs.uid new file: Scripts/GameObjects/NoteObject.cs new file: Scripts/GameObjects/NoteObject.cs.uid new file: icon.svg new file: icon.svg.import new file: project.godot
46 lines
1.3 KiB
C#
46 lines
1.3 KiB
C#
using Godot;
|
|
using System;
|
|
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
|
|
//unread...
|
|
|
|
namespace Onrinto.Chart;
|
|
|
|
public class Vector2Converter : JsonConverter<Vector2>
|
|
{
|
|
public override Vector2 Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
|
{
|
|
// 预设默认值
|
|
float x = 0;
|
|
float y = 0;
|
|
|
|
if (reader.TokenType != JsonTokenType.StartObject)
|
|
throw new JsonException("预期一个对象来解析 Vector2");
|
|
|
|
while (reader.Read())
|
|
{
|
|
if (reader.TokenType == JsonTokenType.EndObject)
|
|
return new Vector2(x, y);
|
|
|
|
if (reader.TokenType == JsonTokenType.PropertyName)
|
|
{
|
|
string propertyName = reader.GetString()?.ToLower(); // 统一转小写处理
|
|
reader.Read();
|
|
|
|
if (propertyName == "x") x = (float)reader.GetDouble();
|
|
else if (propertyName == "y") y = (float)reader.GetDouble();
|
|
}
|
|
}
|
|
|
|
return new Vector2(x, y);
|
|
}
|
|
|
|
public override void Write(Utf8JsonWriter writer, Vector2 value, JsonSerializerOptions options)
|
|
{
|
|
writer.WriteStartObject();
|
|
writer.WriteNumber("x", value.X);
|
|
writer.WriteNumber("y", value.Y);
|
|
writer.WriteEndObject();
|
|
}
|
|
} |