This commit is contained in:
parent
0287c1a2fc
commit
01e7e4e35e
|
@ -23,33 +23,35 @@ namespace BITKit
|
||||||
public static string GetDisplayName(this object self)
|
public static string GetDisplayName(this object self)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
if (self.GetType().GetCustomAttribute<DisplayNameAttribute>() is { } displayNameAttribute)
|
var type = self is Type t? t: self.GetType();
|
||||||
|
if (type.GetCustomAttribute<DisplayNameAttribute>() is { } displayNameAttribute)
|
||||||
{
|
{
|
||||||
return displayNameAttribute.DisplayName;
|
return displayNameAttribute.DisplayName;
|
||||||
}
|
}
|
||||||
#if NET5_0_OR_GREATER
|
#if NET5_0_OR_GREATER
|
||||||
if (self.GetType().GetCustomAttribute<DisplayAttribute>() is { } displayAttribute)
|
if (type.GetCustomAttribute<DisplayAttribute>() is { } displayAttribute)
|
||||||
{
|
{
|
||||||
return displayAttribute.Name;
|
return displayAttribute.Name;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
if (self is Enum)
|
if (self is not Enum) return self.ToString();
|
||||||
{
|
|
||||||
var field = self.GetType().GetField(self.ToString()!);
|
var field = self.GetType().GetField(self.ToString()!);
|
||||||
|
|
||||||
|
if(field is null) return self.ToString();
|
||||||
|
|
||||||
if (field.GetCustomAttribute<DisplayNameAttribute>() is DisplayNameAttribute displayNameAttribute)
|
if (field.GetCustomAttribute<DisplayNameAttribute>() is { } displayNameAttribute)
|
||||||
{
|
{
|
||||||
return displayNameAttribute.DisplayName;
|
return displayNameAttribute.DisplayName;
|
||||||
}
|
|
||||||
#if NET5_0_OR_GREATER
|
|
||||||
if (field.GetCustomAttribute<DisplayAttribute>() is DisplayAttribute displayAttribute)
|
|
||||||
{
|
|
||||||
return displayAttribute.Name;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#if NET5_0_OR_GREATER
|
||||||
|
if (field.GetCustomAttribute<DisplayAttribute>() is { } displayAttribute)
|
||||||
|
{
|
||||||
|
return displayAttribute.Name;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return self.ToString();
|
return self.ToString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,7 +66,7 @@ namespace BITKit
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
return JsonConvert.SerializeObject(this);
|
return JsonConvert.SerializeObject(this,Formatting.Indented);
|
||||||
}
|
}
|
||||||
|
|
||||||
[JsonProperty("status_code")] public int StatusCode = 200;
|
[JsonProperty("status_code")] public int StatusCode = 200;
|
||||||
|
|
|
@ -16,6 +16,34 @@ namespace BITKit
|
||||||
public T Value { get; set; }=default;
|
public T Value { get; set; }=default;
|
||||||
public object Obj { get => Value; set => Value = (T)value; }
|
public object Obj { get => Value; set => Value = (T)value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class PropertyWrapper<T> : IWrapper<T>
|
||||||
|
{
|
||||||
|
private readonly PropertyInfo _field;
|
||||||
|
private readonly object _target;
|
||||||
|
public event Action<T, T> OnValueChanged;
|
||||||
|
public PropertyWrapper(PropertyInfo field, object target)
|
||||||
|
{
|
||||||
|
_field = field;
|
||||||
|
_target = target ?? throw new ArgumentNullException(nameof(target));
|
||||||
|
}
|
||||||
|
public T Value
|
||||||
|
{
|
||||||
|
get => (T)_field.GetValue(_target);
|
||||||
|
set
|
||||||
|
{
|
||||||
|
var prev = Value;
|
||||||
|
_field.SetValue(_target, value);
|
||||||
|
OnValueChanged?.Invoke(prev, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public object Obj
|
||||||
|
{
|
||||||
|
get => _field.GetValue(_target);
|
||||||
|
set => _field.SetValue(_target, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
public class FieldWrapper<T> : IWrapper<T>
|
public class FieldWrapper<T> : IWrapper<T>
|
||||||
{
|
{
|
||||||
private readonly FieldInfo _field;
|
private readonly FieldInfo _field;
|
||||||
|
|
|
@ -5,6 +5,82 @@ using Unity.Mathematics;
|
||||||
#if NET5_0_OR_GREATER
|
#if NET5_0_OR_GREATER
|
||||||
namespace BITKit
|
namespace BITKit
|
||||||
{
|
{
|
||||||
|
public class Int3JsonConvertJsonConverter : JsonConverter<int3>
|
||||||
|
{
|
||||||
|
public override void WriteJson(JsonWriter writer, int3 value, JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
writer.WriteStartObject();
|
||||||
|
|
||||||
|
writer.WritePropertyName(nameof(value.x));
|
||||||
|
writer.WriteValue(value.x);
|
||||||
|
|
||||||
|
writer.WritePropertyName(nameof(value.y));
|
||||||
|
writer.WriteValue(value.y);
|
||||||
|
|
||||||
|
writer.WritePropertyName(nameof(value.z));
|
||||||
|
writer.WriteValue(value.z);
|
||||||
|
|
||||||
|
writer.WriteEndObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int3 ReadJson(JsonReader reader, Type objectType, int3 existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
var result = new int3(0, 0, 0); // 默认值为 (0, 0, 0)
|
||||||
|
|
||||||
|
while (reader.TokenType != JsonToken.EndObject)
|
||||||
|
{
|
||||||
|
reader.Read();
|
||||||
|
if (reader.TokenType != JsonToken.PropertyName) continue;
|
||||||
|
|
||||||
|
var property = reader.Value.ToString();
|
||||||
|
if (property == nameof(int3.x)) result.x = (int)reader.ReadAsInt32()!;
|
||||||
|
if (property == nameof(int3.y)) result.y = (int)reader.ReadAsInt32()!;
|
||||||
|
if (property == nameof(int3.z)) result.z = (int)reader.ReadAsInt32()!;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public class Int4JsonConvertJsonConverter : JsonConverter<int4>
|
||||||
|
{
|
||||||
|
public override void WriteJson(JsonWriter writer, int4 value, JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
writer.WriteStartObject();
|
||||||
|
|
||||||
|
writer.WritePropertyName(nameof(value.x));
|
||||||
|
writer.WriteValue(value.x);
|
||||||
|
|
||||||
|
writer.WritePropertyName(nameof(value.y));
|
||||||
|
writer.WriteValue(value.y);
|
||||||
|
|
||||||
|
writer.WritePropertyName(nameof(value.z));
|
||||||
|
writer.WriteValue(value.z);
|
||||||
|
|
||||||
|
writer.WritePropertyName(nameof(value.w));
|
||||||
|
writer.WriteValue(value.w);
|
||||||
|
|
||||||
|
writer.WriteEndObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int4 ReadJson(JsonReader reader, Type objectType, int4 existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
var result = new int4(0, 0, 0, 0); // 默认值为 (0, 0, 0, 0)
|
||||||
|
|
||||||
|
while (reader.TokenType != JsonToken.EndObject)
|
||||||
|
{
|
||||||
|
reader.Read();
|
||||||
|
if (reader.TokenType != JsonToken.PropertyName) continue;
|
||||||
|
|
||||||
|
var property = reader.Value.ToString();
|
||||||
|
if (property == nameof(int4.x)) result.x = (int)reader.ReadAsInt32()!;
|
||||||
|
if (property == nameof(int4.y)) result.y = (int)reader.ReadAsInt32()!;
|
||||||
|
if (property == nameof(int4.z)) result.z = (int)reader.ReadAsInt32()!;
|
||||||
|
if (property == nameof(int4.w)) result.w = (int)reader.ReadAsInt32()!;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
public class Float2JsonConvertJsonConverter:JsonConverter<float2>
|
public class Float2JsonConvertJsonConverter:JsonConverter<float2>
|
||||||
{
|
{
|
||||||
public override void WriteJson(JsonWriter writer, float2 value, JsonSerializer serializer)
|
public override void WriteJson(JsonWriter writer, float2 value, JsonSerializer serializer)
|
||||||
|
@ -37,6 +113,42 @@ namespace BITKit
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public class Float3JsonConvertJsonConverter : JsonConverter<float3>
|
||||||
|
{
|
||||||
|
public override void WriteJson(JsonWriter writer, float3 value, JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
writer.WriteStartObject();
|
||||||
|
|
||||||
|
writer.WritePropertyName(nameof(value.x));
|
||||||
|
writer.WriteValue((double)value.x); // 将 float 转为 double,避免精度问题
|
||||||
|
|
||||||
|
writer.WritePropertyName(nameof(value.y));
|
||||||
|
writer.WriteValue((double)value.y); // 将 float 转为 double
|
||||||
|
|
||||||
|
writer.WritePropertyName(nameof(value.z));
|
||||||
|
writer.WriteValue((double)value.z); // 将 float 转为 double
|
||||||
|
|
||||||
|
writer.WriteEndObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override float3 ReadJson(JsonReader reader, Type objectType, float3 existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
var result = float3.zero; // 默认值为 (0, 0, 0)
|
||||||
|
|
||||||
|
while (reader.TokenType != JsonToken.EndObject)
|
||||||
|
{
|
||||||
|
reader.Read();
|
||||||
|
if (reader.TokenType != JsonToken.PropertyName) continue;
|
||||||
|
|
||||||
|
var property = reader.Value.ToString();
|
||||||
|
if (property == nameof(float3.x)) result.x = (float)reader.ReadAsDouble()!;
|
||||||
|
if (property == nameof(float3.y)) result.y = (float)reader.ReadAsDouble()!;
|
||||||
|
if (property == nameof(float3.z)) result.z = (float)reader.ReadAsDouble()!;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
public class Float4JsonConvertJsonConverter:JsonConverter<float4>
|
public class Float4JsonConvertJsonConverter:JsonConverter<float4>
|
||||||
{
|
{
|
||||||
public override void WriteJson(JsonWriter writer, float4 value, JsonSerializer serializer)
|
public override void WriteJson(JsonWriter writer, float4 value, JsonSerializer serializer)
|
||||||
|
|
|
@ -61,6 +61,7 @@ namespace BITKit.UX
|
||||||
get=>_currentTab;
|
get=>_currentTab;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
|
if(_currentTab == value)return;
|
||||||
_currentTab = value;
|
_currentTab = value;
|
||||||
SetTabs(value);
|
SetTabs(value);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue