添加对 Core 的直接引用

This commit is contained in:
OLDREDSTONE
2025-03-25 15:49:57 +08:00
parent 24907abedb
commit 06c19bf10a
296 changed files with 24961 additions and 2 deletions
@@ -0,0 +1,60 @@
using System;
using Microsoft.VisualBasic.CompilerServices;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RhythmBase.Adofai.Components;
using RhythmBase.Adofai.Events;
using RhythmBase.Adofai.Utils;
using RhythmBase.Settings;
namespace RhythmBase.Adofai.Converters
{
internal class ADBaseEventConverter<TEvent>(ADLevel level, LevelReadOrWriteSettings inputSettings) : JsonConverter<TEvent> where TEvent : ADBaseEvent
{
public override bool CanRead
{
get
{
return _canread;
}
}
public override bool CanWrite
{
get
{
return _canwrite;
}
}
public override void WriteJson(JsonWriter writer, TEvent? value, JsonSerializer serializer) => throw new NotImplementedException();
public override TEvent ReadJson(JsonReader reader, Type objectType, TEvent? existingValue, bool hasExistingValue, JsonSerializer serializer) => GetDeserializedObject((JObject)JToken.ReadFrom(reader), objectType, existingValue, hasExistingValue, serializer);
public virtual TEvent GetDeserializedObject(JObject jobj, Type objectType, TEvent existingValue, bool hasExistingValue, JsonSerializer serializer)
{
Type SubClassType = Utils.Utils.ADConvertToType(jobj["eventType"].ToObject<string>());
_canread = false;
existingValue = Conversions.ToGenericParameter<TEvent>((SubClassType != null) ? jobj.ToObject(SubClassType, serializer) : jobj.ToObject<ADCustomEvent>(serializer));
_canread = true;
return existingValue;
}
public virtual JObject SetSerializedObject(TEvent value, JsonSerializer serializer)
{
_canwrite = false;
JObject JObj = JObject.FromObject(value, serializer);
_canwrite = true;
JObj.Remove("type");
JToken s = JObj.First;
s.AddBeforeSelf(new JProperty("eventType", value.Type.ToString()));
return JObj;
}
protected readonly ADLevel level = level;
protected readonly LevelReadOrWriteSettings settings = inputSettings;
protected bool _canread = true;
protected bool _canwrite = true;
}
}
@@ -0,0 +1,42 @@
using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RhythmBase.Adofai.Components;
using RhythmBase.Adofai.Events;
using RhythmBase.Adofai.Utils;
using RhythmBase.Settings;
namespace RhythmBase.Adofai.Converters
{
internal class ADBaseTileEventConverter<TEvent>(ADLevel level, LevelReadOrWriteSettings inputSettings) : ADBaseEventConverter<TEvent>(level, inputSettings) where TEvent : ADBaseTileEvent
{
public override TEvent GetDeserializedObject(JObject jobj, Type objectType, TEvent existingValue, bool hasExistingValue, JsonSerializer serializer)
{
JToken jtoken = jobj["floor"];
int? parentIndex = (jtoken != null) ? new int?(jtoken.ToObject<int>()) : null;
_canread = false;
if (Utils.Utils.ADConvertToType(jobj["eventType"].ToObject<string>()) == typeof(ADCustomEvent))
{
existingValue = (TEvent)(object)new ADCustomTileEventConverter(level, settings).GetDeserializedObject(jobj, objectType, null, hasExistingValue, serializer);
}
else
{
jobj.Remove("floor");
existingValue = base.GetDeserializedObject(jobj, objectType, existingValue, hasExistingValue, serializer);
}
_canread = true;
if (parentIndex != null)
{
existingValue.Parent = level[parentIndex.Value];
existingValue.Parent.Add((ADBaseTileEvent)(object)existingValue);
}
return existingValue;
}
public override JObject SetSerializedObject(TEvent value, JsonSerializer serializer)
{
JObject jobj = base.SetSerializedObject(value, serializer);
JToken s = jobj.First;
s.AddBeforeSelf(new JProperty("floor", level.tileOrder.IndexOf(value.Parent)));
return jobj;
}
}
}
@@ -0,0 +1,16 @@
using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RhythmBase.Adofai.Components;
using RhythmBase.Adofai.Events;
using RhythmBase.Settings;
namespace RhythmBase.Adofai.Converters
{
internal class ADCustomEventConverter(ADLevel level, LevelReadOrWriteSettings settings) : ADBaseEventConverter<ADCustomEvent>(level, settings)
{
public override ADCustomEvent GetDeserializedObject(JObject jobj, Type objectType, ADCustomEvent existingValue, bool hasExistingValue, JsonSerializer serializer) => new()
{
Data = jobj
};
}
}
@@ -0,0 +1,17 @@
using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RhythmBase.Adofai.Components;
using RhythmBase.Adofai.Events;
using RhythmBase.Settings;
namespace RhythmBase.Adofai.Converters
{
internal class ADCustomTileEventConverter(ADLevel level, LevelReadOrWriteSettings settings) : ADBaseTileEventConverter<ADCustomTileEvent>(level, settings)
{
public override ADCustomTileEvent GetDeserializedObject(JObject jobj, Type objectType, ADCustomTileEvent existingValue, bool hasExistingValue, JsonSerializer serializer) => new()
{
Parent = level[jobj["floor"].ToObject<int>()],
Data = jobj
};
}
}
@@ -0,0 +1,87 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Serialization;
using RhythmBase.Adofai.Components;
using RhythmBase.Adofai.Events;
using RhythmBase.Adofai.Utils;
using RhythmBase.Extensions;
using RhythmBase.Converters;
using RhythmBase.Settings;
namespace RhythmBase.Adofai.Converters
{
internal class ADLevelConverter(string location, LevelReadOrWriteSettings settings) : JsonConverter<ADLevel>
{
public override void WriteJson(JsonWriter writer, ADLevel? value, JsonSerializer serializer)
{
JsonSerializerSettings AllInOneSerializer = new()
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Formatting = Formatting.None
};
IList<JsonConverter> converters = AllInOneSerializer.Converters;
converters.Add(new StringEnumConverter());
converters.Add(new ColorConverter());
writer.Formatting = settings.Indented ? Formatting.Indented : Formatting.None;
writer.WriteStartObject();
writer.WritePropertyName("angleData");
writer.WriteStartArray();
foreach (ADTile item in value!)
writer.WriteRawValue(JsonConvert.SerializeObject(item.Angle, Formatting.None));
writer.WriteEndArray();
writer.WritePropertyName("settings");
writer.WriteRawValue(JsonConvert.SerializeObject(value.Settings, Formatting.Indented, AllInOneSerializer));
writer.WritePropertyName("actions");
writer.WriteStartArray();
foreach (ADTile item2 in value)
writer.WriteRawValue(JsonConvert.SerializeObject(item2, Formatting.None, AllInOneSerializer));
writer.WriteEndArray();
writer.WritePropertyName("decorations");
writer.WriteStartArray();
foreach (ADBaseEvent item3 in value.Decorations)
writer.WriteRawValue(JsonConvert.SerializeObject(item3, Formatting.None, AllInOneSerializer));
writer.WriteEndArray();
writer.WriteEndObject();
writer.Close();
}
public override ADLevel ReadJson(JsonReader reader, Type objectType, ADLevel? existingValue, bool hasExistingValue, JsonSerializer serializer)
{
ADLevel outLevel = new()
{
_path = fileLocation
};
JsonSerializer AllInOneSerializer = outLevel.GetSerializer(settings);
JArray JActions = [];
JArray JDecorations = [];
while (reader.Read())
{
string name = (string)reader.Value!;
reader.Read();
object left = name;
switch (name)
{
case "settings":
JObject jobj = JObject.Load(reader);
outLevel.Settings = jobj.ToObject<ADSettings>(AllInOneSerializer)!;
break;
case "angleData":
JArray jobj2 = JArray.Load(reader);
//outLevel.AddRange(jobj2.ToObject<List<ADTile>>(AllInOneSerializer)!);
break;
case "actions":
JActions = JArray.Load(reader);
break;
case "decorations":
JDecorations = JArray.Load(reader);
break;
}
}
reader.Close();
JActions.ToObject<List<ADBaseTileEvent>>(AllInOneSerializer);
outLevel.Decorations.AddRange(JDecorations.ToObject<List<ADBaseEvent>>(AllInOneSerializer)!);
return outLevel;
}
private readonly string fileLocation = location;
private readonly LevelReadOrWriteSettings settings = settings;
}
}
@@ -0,0 +1,20 @@
using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RhythmBase.Adofai.Components;
using RhythmBase.Adofai.Events;
namespace RhythmBase.Adofai.Converters
{
internal class ADTileConverter(ADLevel level) : JsonConverter<ADTile>
{
public override void WriteJson(JsonWriter writer, ADTile value, JsonSerializer serializer) => throw new NotImplementedException();
public override ADTile ReadJson(JsonReader reader, Type objectType, ADTile existingValue, bool hasExistingValue, JsonSerializer serializer) => new()
{
Angle = JToken.Load(reader).ToObject<float>(),
Parent = level
};
private readonly ADLevel level = level;
}
}