Browse Source

枚举

main
coffee 5 months ago
parent
commit
b9c9da8ba2
  1. 5
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TBool.cs
  2. 11
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs
  3. 31
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TEnum.cs
  4. 3
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TEnum.cs.meta
  5. 5
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TFloat.cs
  6. 5
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TInt.cs
  7. 5
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TList.cs
  8. 5
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TString.cs
  9. 1
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TType.cs
  10. 5
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TVector2.cs
  11. 10
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TVector3.cs
  12. 27
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.TType.cs
  13. 6
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs
  14. BIN
      Assets/_Project/ExcelResolver/Excel/hero.xlsx
  15. 27
      Assets/_Project/ScriptableObject/Excel/Hero_1.asset
  16. 23
      Assets/_Project/ScriptableObject/Excel/Hero_2.asset
  17. 23
      Assets/_Project/ScriptableObject/Excel/Hero_3.asset
  18. 18
      Assets/_Project/Scripts/ExcelResolverEnum.cs
  19. 3
      Assets/_Project/Scripts/ExcelResolverEnum.cs.meta
  20. 7
      Assets/_Project/Scripts/Generator/Excel/Hero.cs

5
Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TBool.cs

@ -4,14 +4,15 @@ namespace Tools.ExcelResolver.Editor
{ {
internal class TBool : TType internal class TBool : TType
{ {
public TBool(string typeText) : base(typeText) { } public TBool() { }
public TBool(string typeText = null) : base(typeText) { }
internal override Type RealType => typeof(bool); internal override Type RealType => typeof(bool);
internal override object DefaultValue => false; internal override object DefaultValue => false;
internal override string FieldWriteFormat => "System.Boolean"; internal override string FieldWriteFormat => "System.Boolean";
internal override bool String2TType(string typeText) internal override bool String2TType(string typeText)
{ {
return string.Equals(typeText, "bool", StringComparison.OrdinalIgnoreCase); return string.Equals(typeText.Trim(), "bool", StringComparison.OrdinalIgnoreCase);
} }
internal override object TryParseFrom(string cellText) internal override object TryParseFrom(string cellText)

11
Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs

@ -6,13 +6,14 @@ namespace Tools.ExcelResolver.Editor
{ {
internal class TDict : TType internal class TDict : TType
{ {
public TDict(string typeText) : base(typeText) public TDict() { }
public TDict(string typeText = null) : base(typeText)
{ {
String2TType(typeText); String2TType(typeText);
} }
internal override Type RealType => typeof(Dictionary<,>).MakeGenericType(KeyType?.RealType ?? typeof(object), ValueType?.RealType ?? typeof(object)); internal override Type RealType => typeof(Dictionary<,>).MakeGenericType(KeyType.RealType, ValueType.RealType);
internal override string FieldWriteFormat => $"Dictionary<{KeyType?.RealType.Name ?? "object"}, {ValueType?.RealType.Name ?? "object"}>"; internal override string FieldWriteFormat => $"Dictionary<{KeyType.RealType.Name}, {ValueType.RealType.Name}>";
internal override object DefaultValue => Activator.CreateInstance(typeof(Dictionary<,>).MakeGenericType(KeyType?.RealType ?? typeof(object), ValueType?.RealType ?? typeof(object))); internal override object DefaultValue => Activator.CreateInstance(typeof(Dictionary<,>).MakeGenericType(KeyType.RealType, ValueType.RealType));
// 键和值的类型 // 键和值的类型
internal TType KeyType { get; set; } internal TType KeyType { get; set; }
@ -21,7 +22,7 @@ namespace Tools.ExcelResolver.Editor
internal override bool String2TType(string typeText) internal override bool String2TType(string typeText)
{ {
var split = typeText.Split(',', StringSplitOptions.RemoveEmptyEntries); var split = typeText.Split(',', StringSplitOptions.RemoveEmptyEntries);
if (split.Length != 3 || !string.Equals(split[0], "dict", StringComparison.OrdinalIgnoreCase)) if (split.Length != 3 || !string.Equals(split[0].Trim(), "dict", StringComparison.OrdinalIgnoreCase))
{ {
return false; return false;
} }

31
Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TEnum.cs

@ -0,0 +1,31 @@
using System;
namespace Tools.ExcelResolver.Editor
{
internal class TEnum : TType
{
public TEnum() { }
public TEnum(string typeText = null, Type enumType = null) : base(typeText)
{
RealType = enumType;
FieldWriteFormat = RealType.Name;
}
internal override Type RealType { get; }
internal override object DefaultValue => 0;
internal override string FieldWriteFormat { get; }
internal override bool String2TType(string typeText)
{
return false;
}
internal override object TryParseFrom(string cellText)
{
if (Enum.TryParse(RealType, cellText, true, out var result))
{
return result;
}
return null;
}
}
}

3
Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TEnum.cs.meta

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 47d4bdd2042649beb4d0f93fd4369ad8
timeCreated: 1737819504

5
Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TFloat.cs

@ -4,14 +4,15 @@ namespace Tools.ExcelResolver.Editor
{ {
internal class TFloat : TType internal class TFloat : TType
{ {
public TFloat(string typeText) : base(typeText) { } public TFloat() { }
public TFloat(string typeText = null) : base(typeText) { }
internal override Type RealType => typeof(float); internal override Type RealType => typeof(float);
internal override object DefaultValue => 0.0f; internal override object DefaultValue => 0.0f;
internal override string FieldWriteFormat => "System.Single"; internal override string FieldWriteFormat => "System.Single";
internal override bool String2TType(string typeText) internal override bool String2TType(string typeText)
{ {
return string.Equals(typeText, "float", StringComparison.OrdinalIgnoreCase); return string.Equals(typeText.Trim(), "float", StringComparison.OrdinalIgnoreCase);
} }

5
Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TInt.cs

@ -4,14 +4,15 @@ namespace Tools.ExcelResolver.Editor
{ {
internal class TInt : TType internal class TInt : TType
{ {
public TInt(string typeText) : base(typeText) { } public TInt() { }
public TInt(string typeText = null) : base(typeText) { }
internal override Type RealType => typeof(int); internal override Type RealType => typeof(int);
internal override object DefaultValue => 0; internal override object DefaultValue => 0;
internal override string FieldWriteFormat => "System.Int32"; internal override string FieldWriteFormat => "System.Int32";
internal override bool String2TType(string typeText) internal override bool String2TType(string typeText)
{ {
return string.Equals(typeText, "int", StringComparison.OrdinalIgnoreCase); return string.Equals(typeText.Trim(), "int", StringComparison.OrdinalIgnoreCase);
} }
internal override object TryParseFrom(string cellText) internal override object TryParseFrom(string cellText)

5
Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TList.cs

@ -6,7 +6,8 @@ namespace Tools.ExcelResolver.Editor
{ {
internal class TList : TType internal class TList : TType
{ {
public TList(string typeText) : base(typeText) public TList() { }
public TList(string typeText = null) : base(typeText)
{ {
String2TType(typeText); String2TType(typeText);
} }
@ -19,7 +20,7 @@ namespace Tools.ExcelResolver.Editor
internal override bool String2TType(string typeText) internal override bool String2TType(string typeText)
{ {
var split = typeText.Split(','); var split = typeText.Split(',');
if (split.Length < 2 || !split[0].StartsWith("list")) if (split.Length < 2 || !split[0].StartsWith("list", StringComparison.OrdinalIgnoreCase))
{ {
return false; return false;
} }

5
Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TString.cs

@ -4,14 +4,15 @@ namespace Tools.ExcelResolver.Editor
{ {
internal class TString : TType internal class TString : TType
{ {
public TString(string typeText) : base(typeText) { } public TString() { }
public TString(string typeText = null) : base(typeText) { }
internal override Type RealType => typeof(string); internal override Type RealType => typeof(string);
internal override object DefaultValue => string.Empty; internal override object DefaultValue => string.Empty;
internal override string FieldWriteFormat => "System.string"; internal override string FieldWriteFormat => "System.string";
internal override bool String2TType(string typeText) internal override bool String2TType(string typeText)
{ {
return string.Equals(typeText, "string", StringComparison.OrdinalIgnoreCase); return string.Equals(typeText.Trim(), "string", StringComparison.OrdinalIgnoreCase);
} }
internal override object TryParseFrom(string cellText) internal override object TryParseFrom(string cellText)

1
Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TType.cs

@ -28,7 +28,6 @@ namespace Tools.ExcelResolver.Editor
/// <returns></returns> /// <returns></returns>
internal abstract object TryParseFrom(string cellText); internal abstract object TryParseFrom(string cellText);
internal TType(string typeText = null) internal TType(string typeText = null)
{ {
var type = typeText?.Split(',', StringSplitOptions.RemoveEmptyEntries); var type = typeText?.Split(',', StringSplitOptions.RemoveEmptyEntries);

5
Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TVector2.cs

@ -5,14 +5,15 @@ namespace Tools.ExcelResolver.Editor
{ {
internal class TVector2 : TType internal class TVector2 : TType
{ {
public TVector2(string typeText) : base(typeText) { } public TVector2() { }
public TVector2(string typeText = null) : base(typeText) { }
internal override Type RealType => typeof(Vector2); internal override Type RealType => typeof(Vector2);
internal override object DefaultValue => Vector2.zero; internal override object DefaultValue => Vector2.zero;
internal override string FieldWriteFormat => "Vector2"; internal override string FieldWriteFormat => "Vector2";
internal override bool String2TType(string typeText) internal override bool String2TType(string typeText)
{ {
return string.Equals(typeText, "vector2", StringComparison.OrdinalIgnoreCase); return string.Equals(typeText.Trim(), "vector2", StringComparison.OrdinalIgnoreCase);
} }
internal override object TryParseFrom(string cellText) internal override object TryParseFrom(string cellText)

10
Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TVector3.cs

@ -5,23 +5,19 @@ namespace Tools.ExcelResolver.Editor
{ {
internal class TVector3 : TType internal class TVector3 : TType
{ {
public TVector3(string typeText) : base(typeText) { } public TVector3() { }
public TVector3(string typeText = null) : base(typeText) { }
internal override Type RealType => typeof(Vector3); internal override Type RealType => typeof(Vector3);
internal override object DefaultValue => Vector3.zero; internal override object DefaultValue => Vector3.zero;
internal override string FieldWriteFormat => "Vector3"; internal override string FieldWriteFormat => "Vector3";
internal override bool String2TType(string typeText) internal override bool String2TType(string typeText)
{ {
return string.Equals(typeText, "vector3", StringComparison.OrdinalIgnoreCase); return string.Equals(typeText.Trim(), "vector3", StringComparison.OrdinalIgnoreCase);
} }
internal override object TryParseFrom(string cellText) internal override object TryParseFrom(string cellText)
{ {
if (!cellText.StartsWith("(") || !cellText.EndsWith(")"))
{
return null;
}
cellText = cellText[1..^1]; cellText = cellText[1..^1];
var split = cellText.Split(','); var split = cellText.Split(',');
if (split.Length != 3) if (split.Length != 3)

27
Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.TType.cs

@ -8,6 +8,7 @@ namespace Tools.ExcelResolver.Editor
internal static partial class ExcelResolverUtil internal static partial class ExcelResolverUtil
{ {
private static TType[] _allTTypes; private static TType[] _allTTypes;
private static Type[] _enumTypes;
private static ExcelRange _currentCell; private static ExcelRange _currentCell;
private static string _currentClassName; private static string _currentClassName;
@ -16,7 +17,21 @@ namespace Tools.ExcelResolver.Editor
return Assembly.GetAssembly(typeof(TType)) return Assembly.GetAssembly(typeof(TType))
.GetTypes() .GetTypes()
.Where(t => t.IsSubclassOf(typeof(TType)) && !t.IsAbstract) .Where(t => t.IsSubclassOf(typeof(TType)) && !t.IsAbstract)
.Select(t => Activator.CreateInstance(t, string.Empty) as TType) .Select(t => Activator.CreateInstance(t) as TType)
.ToArray();
}
internal static Type[] GetAllEnumTypes()
{
return AppDomain.CurrentDomain.GetAssemblies()
.Where(a => a.GetName().Name
// is "UnityEngine"
is "Assembly-CSharp")
// or "Assembly-CSharp-firstpass"
// or "Assembly-CSharp-Editor"
// or "Assembly-CSharp-Editor-firstpass")
.SelectMany(a => a.GetTypes())
.Where(t => t.IsEnum)
.ToArray(); .ToArray();
} }
@ -29,7 +44,6 @@ namespace Tools.ExcelResolver.Editor
{ {
_currentCell = cell ?? _currentCell; _currentCell = cell ?? _currentCell;
_currentClassName = className ?? _currentClassName; _currentClassName = className ?? _currentClassName;
targetText = targetText.ToLower();
_allTTypes ??= GetAllTTypes(); _allTTypes ??= GetAllTTypes();
foreach (var tType in _allTTypes) foreach (var tType in _allTTypes)
@ -39,6 +53,15 @@ namespace Tools.ExcelResolver.Editor
return Activator.CreateInstance(tType.GetType(), targetText) as TType; return Activator.CreateInstance(tType.GetType(), targetText) as TType;
} }
} }
_enumTypes ??= GetAllEnumTypes();
foreach (var enumType in _enumTypes)
{
if (string.Equals(enumType.Name, targetText, StringComparison.OrdinalIgnoreCase))
{
return Activator.CreateInstance(typeof(TEnum), targetText, enumType) as TType;
}
}
throw new Exception($"type定义错误 " + throw new Exception($"type定义错误 " +
$"className: '<color=cyan>{_currentClassName}</color>' " + $"className: '<color=cyan>{_currentClassName}</color>' " +

6
Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs

@ -3,6 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using UnityEngine; using UnityEngine;
/*
* ExcelResolverUtil.TType.cs不同TType是用来定义生成的代码的字段的(id, name)
* (Hero)
*/
namespace Tools.ExcelResolver.Editor namespace Tools.ExcelResolver.Editor
{ {
internal static partial class ExcelResolverUtil internal static partial class ExcelResolverUtil

BIN
Assets/_Project/ExcelResolver/Excel/hero.xlsx

Binary file not shown.

27
Assets/_Project/ScriptableObject/Excel/Hero_1.asset

@ -23,12 +23,18 @@ MonoBehaviour:
SerializationNodes: SerializationNodes:
- Name: attribute - Name: attribute
Entry: 7 Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.Int32, Data: 0|System.Collections.Generic.Dictionary`2[[Tools.ExcelResolver.Attribute,
mscorlib]], mscorlib Assembly-CSharp],[System.Int32, mscorlib]], mscorlib
- Name: comparer - Name: comparer
Entry: 7 Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32, Data: 1|System.Collections.Generic.EnumEqualityComparer`1[[Tools.ExcelResolver.Attribute,
mscorlib]], mscorlib Assembly-CSharp]], mscorlib
- Name:
Entry: 12
Data: 0
- Name:
Entry: 13
Data:
- Name: - Name:
Entry: 8 Entry: 8
Data: Data:
@ -40,7 +46,7 @@ MonoBehaviour:
Data: Data:
- Name: $k - Name: $k
Entry: 3 Entry: 3
Data: 1 Data: 0
- Name: $v - Name: $v
Entry: 3 Entry: 3
Data: 500 Data: 500
@ -52,7 +58,7 @@ MonoBehaviour:
Data: Data:
- Name: $k - Name: $k
Entry: 3 Entry: 3
Data: 2 Data: 1
- Name: $v - Name: $v
Entry: 3 Entry: 3
Data: 300 Data: 300
@ -70,8 +76,12 @@ MonoBehaviour:
Data: 2|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.Single, Data: 2|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.Single,
mscorlib]], mscorlib mscorlib]], mscorlib
- Name: comparer - Name: comparer
Entry: 9 Entry: 7
Data: 1 Data: 3|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
mscorlib]], mscorlib
- Name:
Entry: 8
Data:
- Name: - Name:
Entry: 12 Entry: 12
Data: 2 Data: 2
@ -119,3 +129,4 @@ MonoBehaviour:
- {x: 1, y: 2} - {x: 1, y: 2}
- {x: 1, y: 2} - {x: 1, y: 2}
- {x: 1, y: 2} - {x: 1, y: 2}
color: 1

23
Assets/_Project/ScriptableObject/Excel/Hero_2.asset

@ -23,12 +23,18 @@ MonoBehaviour:
SerializationNodes: SerializationNodes:
- Name: attribute - Name: attribute
Entry: 7 Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.Int32, Data: 0|System.Collections.Generic.Dictionary`2[[Tools.ExcelResolver.Attribute,
mscorlib]], mscorlib Assembly-CSharp],[System.Int32, mscorlib]], mscorlib
- Name: comparer - Name: comparer
Entry: 7 Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32, Data: 1|System.Collections.Generic.EnumEqualityComparer`1[[Tools.ExcelResolver.Attribute,
mscorlib]], mscorlib Assembly-CSharp]], mscorlib
- Name:
Entry: 12
Data: 0
- Name:
Entry: 13
Data:
- Name: - Name:
Entry: 8 Entry: 8
Data: Data:
@ -46,8 +52,12 @@ MonoBehaviour:
Data: 2|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.Single, Data: 2|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.Single,
mscorlib]], mscorlib mscorlib]], mscorlib
- Name: comparer - Name: comparer
Entry: 9 Entry: 7
Data: 1 Data: 3|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
mscorlib]], mscorlib
- Name:
Entry: 8
Data:
- Name: - Name:
Entry: 12 Entry: 12
Data: 0 Data: 0
@ -67,3 +77,4 @@ MonoBehaviour:
pos: {x: 0, y: 0, z: 0} pos: {x: 0, y: 0, z: 0}
ches: {x: 0, y: 0} ches: {x: 0, y: 0}
attack_target: [] attack_target: []
color: 0

23
Assets/_Project/ScriptableObject/Excel/Hero_3.asset

@ -23,12 +23,18 @@ MonoBehaviour:
SerializationNodes: SerializationNodes:
- Name: attribute - Name: attribute
Entry: 7 Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.Int32, Data: 0|System.Collections.Generic.Dictionary`2[[Tools.ExcelResolver.Attribute,
mscorlib]], mscorlib Assembly-CSharp],[System.Int32, mscorlib]], mscorlib
- Name: comparer - Name: comparer
Entry: 7 Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32, Data: 1|System.Collections.Generic.EnumEqualityComparer`1[[Tools.ExcelResolver.Attribute,
mscorlib]], mscorlib Assembly-CSharp]], mscorlib
- Name:
Entry: 12
Data: 0
- Name:
Entry: 13
Data:
- Name: - Name:
Entry: 8 Entry: 8
Data: Data:
@ -58,8 +64,12 @@ MonoBehaviour:
Data: 2|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.Single, Data: 2|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.Single,
mscorlib]], mscorlib mscorlib]], mscorlib
- Name: comparer - Name: comparer
Entry: 9 Entry: 7
Data: 1 Data: 3|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
mscorlib]], mscorlib
- Name:
Entry: 8
Data:
- Name: - Name:
Entry: 12 Entry: 12
Data: 0 Data: 0
@ -80,3 +90,4 @@ MonoBehaviour:
ches: {x: 5, y: 12} ches: {x: 5, y: 12}
attack_target: attack_target:
- {x: 1, y: 2} - {x: 1, y: 2}
color: 23

18
Assets/_Project/Scripts/ExcelResolverEnum.cs

@ -0,0 +1,18 @@
namespace Tools.ExcelResolver
{
public enum CustomizeColor
{
yellow = 0,
red = 1,
green = 2,
blue = 3,
}
public enum Attribute
{
hp = 0,
atk = 1,
speed = 2,
def = 3,
}
}

3
Assets/_Project/Scripts/ExcelResolverEnum.cs.meta

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 81d32f9fda7b4ebaaf639491e017be02
timeCreated: 1737819941

7
Assets/_Project/Scripts/Generator/Excel/Hero.cs

@ -73,11 +73,16 @@ namespace Tools.ExcelResolver
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public Dictionary<Int32, Int32> attribute; public Dictionary<Attribute, Int32> attribute;
/// <summary> /// <summary>
/// 你好 /// 你好
/// </summary> /// </summary>
public Dictionary<Int32, Single> nihao; public Dictionary<Int32, Single> nihao;
/// <summary>
///
/// </summary>
public CustomizeColor color;
} }
} }

Loading…
Cancel
Save