using System; using GeometryTD.Definition; using GeometryTD.CustomUtility; using UnityGameFramework.Runtime; namespace GeometryTD.DataTable { /// /// 轴承组件表 /// public class DRBearingComp : DataRowBase { private int m_Id = 0; /// /// 获取轴承组件编号 /// public override int Id => m_Id; /// /// 获取轴承组件实体编号 /// public int EntityId { get; private set; } /// /// 获取轴承组件名 /// public string Name { get; private set; } /// /// 获取轴承组件旋转速度数组 /// public float[] RotateSpeed { get; private set; } /// /// 获取轴承组件每级提升旋转速度 /// public float RotateSpeedPerLevel { get; private set; } /// /// 获取攻击范围 /// public float[] AttackRange { get; private set; } /// /// 获取每级提升攻击范围 /// public float AttackRangePerLevel { get; private set; } /// /// 获取属性约束 /// public string Constraint { get; private set; } /// /// 获取可能出现的 Tag /// public TagType[] PossibleTag { get; private set; } public override bool ParseDataRow(string dataRowString, object userData) { string[] columnStrings = dataRowString.Split(DataTableExtension.DataSplitSeparators); for (int i = 0; i < columnStrings.Length; i++) { columnStrings[i] = columnStrings[i].Trim(DataTableExtension.DataTrimSeparators); } int index = 0; index++; m_Id = int.Parse(columnStrings[index++]); index++; EntityId = int.Parse(columnStrings[index++]); Name = columnStrings[index++]; RotateSpeed = GenerateFloatArray(columnStrings[index++]); RotateSpeedPerLevel = float.Parse(columnStrings[index++]); AttackRange = GenerateFloatArray(columnStrings[index++]); AttackRangePerLevel = float.Parse(columnStrings[index++]); Constraint = columnStrings[index++]; PossibleTag = GeneratePossibleTag(columnStrings[index++]); return true; } private float[] GenerateFloatArray(string raw) { if (!raw.StartsWith('[') || !raw.EndsWith(']')) { throw new ArgumentException("Input must be enclosed in square brackets."); } if (raw.Length == 2) return new float[] { }; string[] raws = raw.Substring(1, raw.Length - 2).Split(","); int length = raws.Length; var array = new float[length]; for (int i = 0; i < length; i++) { array[i] = float.Parse(raws[i]); } return array; } private TagType[] GeneratePossibleTag(string raw) { if (!raw.StartsWith('[') || !raw.EndsWith(']')) { throw new ArgumentException("Input must be enclosed in square brackets."); } if (raw.Length == 2) return new TagType[] { }; string[] tagTypes = raw.Substring(1, raw.Length - 2).Split(","); int length = tagTypes.Length; var tags = new TagType[length]; for (int i = 0; i < length; i++) { tags[i] = EnumUtility.Get(tagTypes[i]); } return tags; } } }