using System;
using System.Text;
using GeometryTD.Definition;
namespace GeometryTD.CustomUtility
{
public static class ItemDescUtility
{
public static string BuildTowerDesc(TowerStatsData towerData)
{
StringBuilder sb = new StringBuilder();
// MuzzleComp
sb.Append("攻击伤害:");
for (int i = 0; i < towerData.AttackDamage.Length; i++)
{
if (i != 0) sb.Append("|");
sb.Append(towerData.AttackDamage[i]);
}
sb.Append('\n');
sb.Append($"伤害浮动:{towerData.DamageRandomRate:P0}\n");
sb.Append($"攻击方式:{ConvertAttackMethod(towerData.AttackMethodType)}\n");
// BearingComp
sb.Append("旋转速度:");
for (int i = 0; i < towerData.RotateSpeed.Length; i++)
{
if (i != 0) sb.Append("|");
sb.Append(towerData.RotateSpeed[i]);
}
sb.Append('\n');
sb.Append("攻击范围:");
for (int i = 0; i < towerData.AttackRange.Length; i++)
{
if (i != 0) sb.Append("|");
sb.Append(towerData.AttackRange[i]);
}
sb.Append('\n');
// BaseComp
sb.Append("攻击速度:");
for (int i = 0; i < towerData.AttackSpeed.Length; i++)
{
if (i != 0) sb.Append("|");
sb.Append(towerData.AttackSpeed[i]);
}
sb.Append('\n');
sb.Append($"伤害属性:{ConvertAttackProperty(towerData.AttackPropertyType)}\n");
return sb.ToString();
}
public static string BuildMuzzleDesc(MuzzleCompItemData muzzleData)
{
StringBuilder sb = new StringBuilder();
sb.Append("攻击伤害:");
for (int i = 0; i < muzzleData.AttackDamage.Length; i++)
{
if (i != 0) sb.Append("|");
sb.Append(muzzleData.AttackDamage[i]);
}
sb.Append('\n');
sb.Append($"伤害浮动:{muzzleData.DamageRandomRate:P0}\n");
sb.Append($"攻击方式:{ConvertAttackMethod(muzzleData.AttackMethodType)}\n");
return sb.ToString();
}
public static string BuildBearingDesc(BearingCompItemData bearingData)
{
StringBuilder sb = new StringBuilder();
sb.Append("旋转速度:");
for (int i = 0; i < bearingData.RotateSpeed.Length; i++)
{
if (i != 0) sb.Append("|");
sb.Append(bearingData.RotateSpeed[i]);
}
sb.Append('\n');
sb.Append("攻击范围:");
for (int i = 0; i < bearingData.AttackRange.Length; i++)
{
if (i != 0) sb.Append("|");
sb.Append(bearingData.AttackRange[i]);
}
sb.Append('\n');
return sb.ToString();
}
public static string BuildBaseDesc(BaseCompItemData baseData)
{
StringBuilder sb = new StringBuilder();
sb.Append("攻击速度:");
for (int i = 0; i < baseData.AttackSpeed.Length; i++)
{
if (i != 0) sb.Append("|");
sb.Append(baseData.AttackSpeed[i]);
}
sb.Append('\n');
sb.Append($"伤害属性:{ConvertAttackProperty(baseData.AttackPropertyType)}\n");
return sb.ToString();
}
public static string ConvertAttackMethod(AttackMethodType type)
{
return type switch
{
AttackMethodType.None => "无效",
AttackMethodType.NormalBullet => "发射子弹",
AttackMethodType.Range => "范围攻击",
_ => throw new ArgumentOutOfRangeException(nameof(type), type, null)
};
}
public static string ConvertAttackProperty(AttackPropertyType type)
{
return type switch
{
AttackPropertyType.None => "无效",
AttackPropertyType.Physics => "物理", //yellow
AttackPropertyType.Fire => "火", //red
AttackPropertyType.Water => "水", //cyan
AttackPropertyType.Earth => "自然", //lime
AttackPropertyType.Poison => "毒", //green
AttackPropertyType.Ice => "冰", //darkblue
_ => throw new ArgumentOutOfRangeException(nameof(type), type, null)
};
}
}
}