mirror of
https://github.com/milimoe/FunGame-Testing.git
synced 2025-12-05 00:06:05 +00:00
130 lines
4.9 KiB
C#
130 lines
4.9 KiB
C#
using System.Globalization;
|
|
using System.Windows.Data;
|
|
using Milimoe.FunGame.Core.Entity;
|
|
using Milimoe.FunGame.Core.Library.Constant;
|
|
|
|
namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting
|
|
{
|
|
public class FirstCharConverter : IValueConverter
|
|
{
|
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
|
{
|
|
if (value is string s && s.Length > 0)
|
|
{
|
|
return s[0].ToString().ToUpper();
|
|
}
|
|
return "?";
|
|
}
|
|
|
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
|
|
public class CharacterToStringWithLevelConverter : IValueConverter
|
|
{
|
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
|
{
|
|
if (value is Character character)
|
|
{
|
|
string name = character.ToString();
|
|
if (character.CharacterState == CharacterState.Casting)
|
|
{
|
|
name += " - 吟唱";
|
|
}
|
|
else if (character.CharacterState == CharacterState.PreCastSuperSkill)
|
|
{
|
|
name += " - 爆发技";
|
|
}
|
|
return name;
|
|
}
|
|
return "[未知角色]";
|
|
}
|
|
|
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
|
|
public class SkillItemFormatterConverter : IValueConverter
|
|
{
|
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
|
{
|
|
string name = "";
|
|
if (value is Skill skill)
|
|
{
|
|
Character? character = skill.Character;
|
|
name = $"【{(skill.IsSuperSkill ? "爆发技" : (skill.IsMagic ? "魔法" : "战技"))}】{skill.Name}";
|
|
if (skill.CurrentCD > 0)
|
|
{
|
|
name += $" - 冷却剩余 {skill.CurrentCD:0.##} 秒";
|
|
}
|
|
else if (skill.RealEPCost > 0 && skill.RealMPCost > 0 && character != null && character.EP < skill.RealEPCost && character.MP < skill.RealMPCost)
|
|
{
|
|
name += $" - 能量/魔法要求 {skill.RealEPCost:0.##} / {skill.RealMPCost:0.##} 点";
|
|
}
|
|
else if (skill.RealEPCost > 0 && character != null && character.EP < skill.RealEPCost)
|
|
{
|
|
name += $" - 能量不足,要求 {skill.RealEPCost:0.##} 点";
|
|
}
|
|
else if (skill.RealMPCost > 0 && character != null && character.MP < skill.RealMPCost)
|
|
{
|
|
name += $" - 魔法不足,要求 {skill.RealMPCost:0.##} 点";
|
|
}
|
|
}
|
|
else if (value is Item item)
|
|
{
|
|
name = item.Name;
|
|
}
|
|
else
|
|
{
|
|
name = value?.ToString() ?? name;
|
|
}
|
|
return name;
|
|
}
|
|
|
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 组合转换器:判断技能或物品是否可用。
|
|
/// 接收 Skill/Item 对象和当前 Character 对象。
|
|
/// </summary>
|
|
public class SkillUsabilityConverter : IMultiValueConverter
|
|
{
|
|
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
|
|
{
|
|
// values[0] 应该是 Skill 或 Item 对象
|
|
// values[1] 应该是 PlayerCharacter 对象
|
|
if (values.Length < 2 || values[1] is not Character character)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (values[0] is Skill s)
|
|
{
|
|
return s.Level > 0 && s.SkillType != SkillType.Passive && s.Enable && !s.IsInEffect && s.CurrentCD == 0 &&
|
|
((s.SkillType == SkillType.SuperSkill || s.SkillType == SkillType.Skill) && s.RealEPCost <= character.EP || s.SkillType == SkillType.Magic && s.RealMPCost <= character.MP);
|
|
}
|
|
else if (values[0] is Item i)
|
|
{
|
|
return i.IsActive && i.Skills.Active != null && i.Enable && i.IsInGameItem &&
|
|
i.Skills.Active.SkillType == SkillType.Item && i.Skills.Active.Enable && !i.Skills.Active.IsInEffect && i.Skills.Active.CurrentCD == 0 &&
|
|
i.Skills.Active.RealMPCost <= character.MP && i.Skills.Active.RealEPCost <= character.EP;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
}
|