Compare commits
3 Commits
c12d4a3754
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| fd68071416 | |||
| a530eba460 | |||
| 32f0038e34 |
@@ -2615,7 +2615,7 @@ namespace Convention
|
|||||||
{
|
{
|
||||||
return reader.ReadBoolean();
|
return reader.ReadBoolean();
|
||||||
}
|
}
|
||||||
public static void WriteInt(BinaryWriter writer, int data)
|
public static void WriteInt(BinaryWriter writer, in int data)
|
||||||
{
|
{
|
||||||
writer.Write(data);
|
writer.Write(data);
|
||||||
}
|
}
|
||||||
@@ -2623,7 +2623,7 @@ namespace Convention
|
|||||||
{
|
{
|
||||||
return reader.ReadInt32();
|
return reader.ReadInt32();
|
||||||
}
|
}
|
||||||
public static void WriteFloat(BinaryWriter writer, float data)
|
public static void WriteFloat(BinaryWriter writer, in float data)
|
||||||
{
|
{
|
||||||
writer.Write(data);
|
writer.Write(data);
|
||||||
}
|
}
|
||||||
@@ -2631,7 +2631,7 @@ namespace Convention
|
|||||||
{
|
{
|
||||||
return reader.ReadSingle();
|
return reader.ReadSingle();
|
||||||
}
|
}
|
||||||
public static void WriteChar(BinaryWriter writer, char data)
|
public static void WriteChar(BinaryWriter writer, in char data)
|
||||||
{
|
{
|
||||||
writer.Write(data);
|
writer.Write(data);
|
||||||
}
|
}
|
||||||
@@ -2639,15 +2639,15 @@ namespace Convention
|
|||||||
{
|
{
|
||||||
return reader.ReadChar();
|
return reader.ReadChar();
|
||||||
}
|
}
|
||||||
public static void WriteString(BinaryWriter writer, string data)
|
public static void WriteString(BinaryWriter writer, in string data)
|
||||||
{
|
{
|
||||||
writer.Write(data);
|
writer.Write(data ?? "");
|
||||||
}
|
}
|
||||||
public static string ReadString(BinaryReader reader)
|
public static string ReadString(BinaryReader reader)
|
||||||
{
|
{
|
||||||
return reader.ReadString();
|
return reader.ReadString();
|
||||||
}
|
}
|
||||||
public static void WriteVec3(BinaryWriter writer, Vector3 data)
|
public static void WriteVec3(BinaryWriter writer, in Vector3 data)
|
||||||
{
|
{
|
||||||
writer.Write(data.x);
|
writer.Write(data.x);
|
||||||
writer.Write(data.y);
|
writer.Write(data.y);
|
||||||
@@ -2661,7 +2661,7 @@ namespace Convention
|
|||||||
z = reader.ReadSingle();
|
z = reader.ReadSingle();
|
||||||
return new Vector3(x, y, z);
|
return new Vector3(x, y, z);
|
||||||
}
|
}
|
||||||
public static void WriteVec2(BinaryWriter writer, Vector2 data)
|
public static void WriteVec2(BinaryWriter writer, in Vector2 data)
|
||||||
{
|
{
|
||||||
writer.Write(data.x);
|
writer.Write(data.x);
|
||||||
writer.Write(data.y);
|
writer.Write(data.y);
|
||||||
@@ -2673,6 +2673,22 @@ namespace Convention
|
|||||||
y = reader.ReadSingle();
|
y = reader.ReadSingle();
|
||||||
return new Vector2(x, y);
|
return new Vector2(x, y);
|
||||||
}
|
}
|
||||||
|
public static void WriteColor(BinaryWriter writer, in Color data)
|
||||||
|
{
|
||||||
|
writer.Write(data.r);
|
||||||
|
writer.Write(data.g);
|
||||||
|
writer.Write(data.b);
|
||||||
|
writer.Write(data.a);
|
||||||
|
}
|
||||||
|
public static Color ReadColor(BinaryReader reader)
|
||||||
|
{
|
||||||
|
float r, g, b, a;
|
||||||
|
r = reader.ReadSingle();
|
||||||
|
g = reader.ReadSingle();
|
||||||
|
b = reader.ReadSingle();
|
||||||
|
a = reader.ReadSingle();
|
||||||
|
return new(r, g, b, a);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -2680,7 +2696,7 @@ namespace Convention
|
|||||||
|
|
||||||
#region Int
|
#region Int
|
||||||
|
|
||||||
public static void SerializeNativeArray(BinaryWriter writer, NativeArray<int> array, int start = 0, int end = int.MaxValue)
|
public static void SerializeNativeArray(BinaryWriter writer, in NativeArray<int> array, int start = 0, int end = int.MaxValue)
|
||||||
{
|
{
|
||||||
int e = Mathf.Min(array.Length, end);
|
int e = Mathf.Min(array.Length, end);
|
||||||
writer.Write(e - start);
|
writer.Write(e - start);
|
||||||
@@ -2689,18 +2705,18 @@ namespace Convention
|
|||||||
writer.Write(array[start++]);
|
writer.Write(array[start++]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static int DeserializeNativeArray(BinaryReader reader, ref NativeArray<int> array, int start = 0)
|
public static int DeserializeNativeArray(BinaryReader reader, ref NativeArray<int> array)
|
||||||
{
|
{
|
||||||
int count = reader.ReadInt32();
|
int count = reader.ReadInt32();
|
||||||
if (array.Length < count)
|
if (array.Length < count)
|
||||||
array.ResizeArray(count);
|
array.ResizeArray(count);
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
array[start + i] = reader.ReadInt32();
|
array[i] = reader.ReadInt32();
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
public static void SerializeArray(BinaryWriter writer, int[] array, int start = 0, int end = int.MaxValue)
|
public static void SerializeArray(BinaryWriter writer, in int[] array, int start = 0, int end = int.MaxValue)
|
||||||
{
|
{
|
||||||
int e = Mathf.Min(array.Length, end);
|
int e = Mathf.Min(array.Length, end);
|
||||||
writer.Write(e - start);
|
writer.Write(e - start);
|
||||||
@@ -2709,13 +2725,13 @@ namespace Convention
|
|||||||
writer.Write(array[start++]);
|
writer.Write(array[start++]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static int[] DeserializeIntArray(BinaryReader reader, int start = 0)
|
public static int[] DeserializeIntArray(BinaryReader reader)
|
||||||
{
|
{
|
||||||
int count = reader.ReadInt32();
|
int count = reader.ReadInt32();
|
||||||
int[] array = new int[count];
|
int[] array = new int[count];
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
array[start + i] = reader.ReadInt32();
|
array[i] = reader.ReadInt32();
|
||||||
}
|
}
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
@@ -2724,7 +2740,7 @@ namespace Convention
|
|||||||
|
|
||||||
#region Float
|
#region Float
|
||||||
|
|
||||||
public static void SerializeNativeArray(BinaryWriter writer, NativeArray<float> array, int start = 0, int end = int.MaxValue)
|
public static void SerializeNativeArray(BinaryWriter writer, in NativeArray<float> array, int start = 0, int end = int.MaxValue)
|
||||||
{
|
{
|
||||||
int e = Mathf.Min(array.Length, end);
|
int e = Mathf.Min(array.Length, end);
|
||||||
writer.Write(e - start);
|
writer.Write(e - start);
|
||||||
@@ -2733,18 +2749,18 @@ namespace Convention
|
|||||||
writer.Write(array[start++]);
|
writer.Write(array[start++]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static int DeserializeNativeArray(BinaryReader reader, ref NativeArray<float> array, int start = 0)
|
public static int DeserializeNativeArray(BinaryReader reader, ref NativeArray<float> array)
|
||||||
{
|
{
|
||||||
int count = reader.ReadInt32();
|
int count = reader.ReadInt32();
|
||||||
if (array.Length < count)
|
if (array.Length < count)
|
||||||
array.ResizeArray(count);
|
array.ResizeArray(count);
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
array[start + i] = reader.ReadSingle();
|
array[i] = reader.ReadSingle();
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
public static void SerializeArray(BinaryWriter writer, float[] array, int start = 0, int end = int.MaxValue)
|
public static void SerializeArray(BinaryWriter writer, in float[] array, int start = 0, int end = int.MaxValue)
|
||||||
{
|
{
|
||||||
int e = Mathf.Min(array.Length, end);
|
int e = Mathf.Min(array.Length, end);
|
||||||
writer.Write(e - start);
|
writer.Write(e - start);
|
||||||
@@ -2753,13 +2769,13 @@ namespace Convention
|
|||||||
writer.Write(array[start++]);
|
writer.Write(array[start++]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static float[] DeserializeFloatArray(BinaryReader reader, int start = 0)
|
public static float[] DeserializeFloatArray(BinaryReader reader)
|
||||||
{
|
{
|
||||||
int count = reader.ReadInt32();
|
int count = reader.ReadInt32();
|
||||||
float[] array = new float[count];
|
float[] array = new float[count];
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
array[start + i] = reader.ReadSingle();
|
array[i] = reader.ReadSingle();
|
||||||
}
|
}
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
@@ -2768,22 +2784,22 @@ namespace Convention
|
|||||||
|
|
||||||
#region String
|
#region String
|
||||||
|
|
||||||
public static void SerializeArray(BinaryWriter writer, string[] array, int start = 0, int end = int.MaxValue)
|
public static void SerializeArray(BinaryWriter writer, in string[] array, int start = 0, int end = int.MaxValue)
|
||||||
{
|
{
|
||||||
int e = Mathf.Min(array.Length, end);
|
int e = Mathf.Min(array.Length, end);
|
||||||
writer.Write(e - start);
|
writer.Write(e - start);
|
||||||
while (start < e)
|
while (start < e)
|
||||||
{
|
{
|
||||||
writer.Write(array[start++]);
|
writer.Write(array[start++] ?? "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static string[] DeserializeStringArray(BinaryReader reader, int start = 0)
|
public static string[] DeserializeStringArray(BinaryReader reader)
|
||||||
{
|
{
|
||||||
int count = reader.ReadInt32();
|
int count = reader.ReadInt32();
|
||||||
string[] array = new string[count];
|
string[] array = new string[count];
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
array[start + i] = reader.ReadString();
|
array[i] = reader.ReadString();
|
||||||
}
|
}
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
@@ -2792,7 +2808,7 @@ namespace Convention
|
|||||||
|
|
||||||
#region Vector3
|
#region Vector3
|
||||||
|
|
||||||
public static void SerializeNativeArray(BinaryWriter writer, NativeArray<Vector3> array, int start = 0, int end = int.MaxValue)
|
public static void SerializeNativeArray(BinaryWriter writer, in NativeArray<Vector3> array, int start = 0, int end = int.MaxValue)
|
||||||
{
|
{
|
||||||
int e = Mathf.Min(array.Length, end);
|
int e = Mathf.Min(array.Length, end);
|
||||||
writer.Write(e - start);
|
writer.Write(e - start);
|
||||||
@@ -2804,7 +2820,7 @@ namespace Convention
|
|||||||
start++;
|
start++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static int DeserializeNativeArray(BinaryReader reader, ref NativeArray<Vector3> array, int start = 0)
|
public static int DeserializeNativeArray(BinaryReader reader, ref NativeArray<Vector3> array)
|
||||||
{
|
{
|
||||||
int count = reader.ReadInt32();
|
int count = reader.ReadInt32();
|
||||||
if (array.Length < count)
|
if (array.Length < count)
|
||||||
@@ -2815,11 +2831,11 @@ namespace Convention
|
|||||||
x = reader.ReadSingle();
|
x = reader.ReadSingle();
|
||||||
y = reader.ReadSingle();
|
y = reader.ReadSingle();
|
||||||
z = reader.ReadSingle();
|
z = reader.ReadSingle();
|
||||||
array[start + i] = new(x, y, z);
|
array[i] = new(x, y, z);
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
public static void SerializeArray(BinaryWriter writer, Vector3[] array, int start = 0, int end = int.MaxValue)
|
public static void SerializeArray(BinaryWriter writer, in Vector3[] array, int start = 0, int end = int.MaxValue)
|
||||||
{
|
{
|
||||||
int e = Mathf.Min(array.Length, end);
|
int e = Mathf.Min(array.Length, end);
|
||||||
writer.Write(e - start);
|
writer.Write(e - start);
|
||||||
@@ -2850,7 +2866,7 @@ namespace Convention
|
|||||||
|
|
||||||
#region Vector2
|
#region Vector2
|
||||||
|
|
||||||
public static void SerializeNativeArray(BinaryWriter writer, NativeArray<Vector2> array, int start = 0, int end = int.MaxValue)
|
public static void SerializeNativeArray(BinaryWriter writer, in NativeArray<Vector2> array, int start = 0, int end = int.MaxValue)
|
||||||
{
|
{
|
||||||
int e = Mathf.Min(array.Length, end);
|
int e = Mathf.Min(array.Length, end);
|
||||||
writer.Write(e - start);
|
writer.Write(e - start);
|
||||||
@@ -2861,7 +2877,7 @@ namespace Convention
|
|||||||
start++;
|
start++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static int DeserializeNativeArray(BinaryReader reader, ref NativeArray<Vector2> array, int start = 0)
|
public static int DeserializeNativeArray(BinaryReader reader, ref NativeArray<Vector2> array)
|
||||||
{
|
{
|
||||||
int count = reader.ReadInt32();
|
int count = reader.ReadInt32();
|
||||||
if (array.Length < count)
|
if (array.Length < count)
|
||||||
@@ -2871,11 +2887,11 @@ namespace Convention
|
|||||||
{
|
{
|
||||||
x = reader.ReadSingle();
|
x = reader.ReadSingle();
|
||||||
y = reader.ReadSingle();
|
y = reader.ReadSingle();
|
||||||
array[start + i] = new(x, y);
|
array[i] = new(x, y);
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
public static void SerializeArray(BinaryWriter writer, Vector2[] array, int start = 0, int end = int.MaxValue)
|
public static void SerializeArray(BinaryWriter writer, in Vector2[] array, int start = 0, int end = int.MaxValue)
|
||||||
{
|
{
|
||||||
int e = Mathf.Min(array.Length, end);
|
int e = Mathf.Min(array.Length, end);
|
||||||
writer.Write(e - start);
|
writer.Write(e - start);
|
||||||
@@ -2886,7 +2902,7 @@ namespace Convention
|
|||||||
start++;
|
start++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static Vector2[] DeserializeVec2Array(BinaryReader reader, int start = 0)
|
public static Vector2[] DeserializeVec2Array(BinaryReader reader)
|
||||||
{
|
{
|
||||||
int count = reader.ReadInt32();
|
int count = reader.ReadInt32();
|
||||||
Vector2[] array = new Vector2[count];
|
Vector2[] array = new Vector2[count];
|
||||||
@@ -2895,7 +2911,55 @@ namespace Convention
|
|||||||
{
|
{
|
||||||
x = reader.ReadSingle();
|
x = reader.ReadSingle();
|
||||||
y = reader.ReadSingle();
|
y = reader.ReadSingle();
|
||||||
array[start + i] = new(x, y);
|
array[i] = new(x, y);
|
||||||
|
}
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Color
|
||||||
|
|
||||||
|
public static void SerializeNativeArray(BinaryWriter writer, in NativeArray<Color> array, int start = 0, int end = int.MaxValue)
|
||||||
|
{
|
||||||
|
int e = Mathf.Min(array.Length, end);
|
||||||
|
writer.Write(e - start);
|
||||||
|
while (start < e)
|
||||||
|
{
|
||||||
|
WriteColor(writer, array[start]);
|
||||||
|
start++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static int DeserializeNativeArray(BinaryReader reader, ref NativeArray<Color> array)
|
||||||
|
{
|
||||||
|
int count = reader.ReadInt32();
|
||||||
|
if (array.Length < count)
|
||||||
|
array.ResizeArray(count);
|
||||||
|
float x, y, z;
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
array[i] = ReadColor(reader);
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
public static void SerializeArray(BinaryWriter writer, in Color[] array, int start = 0, int end = int.MaxValue)
|
||||||
|
{
|
||||||
|
int e = Mathf.Min(array.Length, end);
|
||||||
|
writer.Write(e - start);
|
||||||
|
while (start < e)
|
||||||
|
{
|
||||||
|
WriteColor(writer, array[start]);
|
||||||
|
start++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static Color[] DeserializeVec3Array(BinaryReader reader)
|
||||||
|
{
|
||||||
|
int count = reader.ReadInt32();
|
||||||
|
Color[] array = new Color[count];
|
||||||
|
float x, y, z;
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
array[i] = ReadColor(reader);
|
||||||
}
|
}
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
@@ -2904,4 +2968,74 @@ namespace Convention
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static partial class Utility
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 获取类型的友好显示名称,支持泛型、数组等复杂类型
|
||||||
|
/// </summary>
|
||||||
|
public static string GetFriendlyName(this Type type)
|
||||||
|
{
|
||||||
|
if (type == null) return null;
|
||||||
|
|
||||||
|
// 处理泛型类型
|
||||||
|
if (type.IsGenericType)
|
||||||
|
{
|
||||||
|
// 特殊处理可空类型(Nullable<T>)
|
||||||
|
if (type.IsNullable())
|
||||||
|
{
|
||||||
|
return $"{GetFriendlyName(type.GetGenericArguments()[0])}?";
|
||||||
|
}
|
||||||
|
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
// 获取类型基础名称(移除 `1, `2 等后缀)
|
||||||
|
string baseName = type.Name.Contains('`') ? type.Name[..type.Name.IndexOf('`')] : type.Name;
|
||||||
|
sb.Append(baseName);
|
||||||
|
sb.Append('<');
|
||||||
|
|
||||||
|
// 递归处理泛型参数
|
||||||
|
Type[] args = type.GetGenericArguments();
|
||||||
|
for (int i = 0; i < args.Length; i++)
|
||||||
|
{
|
||||||
|
if (i > 0) sb.Append(", ");
|
||||||
|
sb.Append(GetFriendlyName(args[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
sb.Append('>');
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理数组类型
|
||||||
|
if (type.IsArray)
|
||||||
|
{
|
||||||
|
string elementName = GetFriendlyName(type.GetElementType());
|
||||||
|
int rank = type.GetArrayRank();
|
||||||
|
return rank == 1 ? $"{elementName}[]" : $"{elementName}[{new string(',', rank - 1)}]";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理指针类型
|
||||||
|
if (type.IsPointer)
|
||||||
|
{
|
||||||
|
return $"{GetFriendlyName(type.GetElementType())}*";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理引用类型(ref/out 参数)
|
||||||
|
if (type.IsByRef)
|
||||||
|
{
|
||||||
|
return $"{GetFriendlyName(type.GetElementType())}&";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 普通类型直接返回名称
|
||||||
|
return type.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 判断是否为可空类型
|
||||||
|
/// </summary>
|
||||||
|
public static bool IsNullable(this Type type)
|
||||||
|
{
|
||||||
|
return type.IsGenericType &&
|
||||||
|
type.GetGenericTypeDefinition() == typeof(Nullable<>);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user