Browse Source

List泛型实现

master
coffee 5 months ago
parent
commit
9ce088b12f
  1. BIN
      Assets/ExcelResolver/Excel/hero.xlsx
  2. 6
      Assets/ScriptableObject/Excel/Hero_1.asset
  3. 2
      Assets/ScriptableObject/Excel/Hero_2.asset
  4. 3
      Assets/ScriptableObject/Excel/Hero_3.asset
  5. 2
      Assets/Scripts/Generator/Excel/Hero.cs
  6. 13
      Assets/Scripts/Test.cs
  7. 3
      Assets/Scripts/Test.cs.meta
  8. 29
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TList.cs

BIN
Assets/ExcelResolver/Excel/hero.xlsx

Binary file not shown.

6
Assets/ScriptableObject/Excel/Hero_1.asset

@ -21,4 +21,8 @@ MonoBehaviour:
speed: 1.2 speed: 1.2
pos: {x: 0, y: 1, z: 4} pos: {x: 0, y: 1, z: 4}
ches: {x: 0, y: 1} ches: {x: 0, y: 1}
attack_target: 01000000020000000300000004000000 attack_target:
- 0.5
- -2.6
- 3
- 4.5

2
Assets/ScriptableObject/Excel/Hero_2.asset

@ -21,4 +21,4 @@ MonoBehaviour:
speed: 0 speed: 0
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: []

3
Assets/ScriptableObject/Excel/Hero_3.asset

@ -21,4 +21,5 @@ MonoBehaviour:
speed: 1.1 speed: 1.1
pos: {x: 3, y: 2, z: 4} pos: {x: 3, y: 2, z: 4}
ches: {x: 5, y: 12} ches: {x: 5, y: 12}
attack_target: 02000000 attack_target:
- 2.5

2
Assets/Scripts/Generator/Excel/Hero.cs

@ -67,6 +67,6 @@ namespace Tools.ExcelResolver
/// <summary> /// <summary>
/// 攻击优先级 /// 攻击优先级
/// </summary> /// </summary>
public List<int> attack_target; public List<Single> attack_target;
} }
} }

13
Assets/Scripts/Test.cs

@ -0,0 +1,13 @@
using System;
using Tools.ExcelResolver;
using UnityEngine;
public class Test : MonoBehaviour
{
public Hero hero;
private void Start()
{
var a = hero.speed;
}
}

3
Assets/Scripts/Test.cs.meta

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: aec833e1dd444669b614d6c2222c59b6
timeCreated: 1737794427

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

@ -1,28 +1,28 @@
using System; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
namespace Tools.ExcelResolver.Editor namespace Tools.ExcelResolver.Editor
{ {
internal class TList : TType internal class TList : TType
{ {
internal override Type RealType => typeof(List<int>); internal override Type RealType => typeof(List<>).MakeGenericType(InnerType.RealType);
internal override string FieldWriteFormat => "List<int>"; internal override string FieldWriteFormat => $"List<{InnerType.RealType.Name}>";
internal override object DefaultValue => new List<int>(); internal override object DefaultValue => Activator.CreateInstance(typeof(List<>).MakeGenericType(InnerType.RealType));
internal TType InnerType { get; set; }
internal override bool String2TType(string typeText) internal override bool String2TType(string typeText)
{ {
var split = typeText.Split('|'); var split = typeText.Split(',');
if (split.Length != 2) if (split.Length < 2 || !string.Equals(split[0], "list", StringComparison.OrdinalIgnoreCase))
{ {
return false; return false;
} }
if (!string.Equals(split[0], "list", StringComparison.OrdinalIgnoreCase) || !string.Equals(split[1], "int", StringComparison.OrdinalIgnoreCase)) InnerType = ExcelResolverUtil.GetTTypeByString(split[1]);
{
return false;
}
return true; return InnerType != null;
} }
internal override object TryParseFrom(string cellText) internal override object TryParseFrom(string cellText)
@ -30,16 +30,17 @@ namespace Tools.ExcelResolver.Editor
var split = cellText.Split('|'); var split = cellText.Split('|');
if (split.Length > 0) if (split.Length > 0)
{ {
var list = new List<int>(); var list = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(InnerType.RealType));
foreach (var s in split) foreach (var s in split)
{ {
if (int.TryParse(s, out var result)) var parsedValue = InnerType.TryParseFrom(s);
if (parsedValue != null)
{ {
list.Add(result); list.Add(parsedValue);
} }
else else
{ {
return null; return null; // 任意一个解析失败则返回null
} }
} }

Loading…
Cancel
Save