Files
Continentis/Assets/Scripts/MainGame/Character/CharacterAssistanceFunctions.cs
SoulliesOfficial dd2657573a 卡牌更新
2026-04-08 04:48:35 -04:00

147 lines
4.7 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using UnityEngine;
namespace Continentis.MainGame.Character
{
#region Fraction
public partial class CharacterBase
{
public bool IsOpponent(CharacterBase other)
{
if (this.fraction is Fraction.Player or Fraction.Ally)
{
return other.fraction is Fraction.Enemy or Fraction.Neutral;
}
else if (this.fraction is Fraction.Enemy)
{
return other.fraction is Fraction.Player or Fraction.Ally or Fraction.Neutral;
}
else // Neutral
{
return other.fraction is Fraction.Player or Fraction.Ally or Fraction.Enemy;
}
}
public bool IsAlly(CharacterBase other)
{
if (this.fraction is Fraction.Player or Fraction.Ally)
{
return other.fraction is Fraction.Player or Fraction.Ally;
}
else if (this.fraction is Fraction.Enemy)
{
return other.fraction is Fraction.Enemy;
}
else // Neutral
{
return other.fraction is Fraction.Neutral;
}
}
}
#endregion
#region Attributes
public partial class CharacterBase
{
/// <summary>
/// 获取角色的属性值
/// </summary>
public int GetAttribute(string attributeName, int defaultValue = 0)
{
if (attributeSubmodule.generalAttributeGroup.current.ContainsKey(attributeName))
{
return attributeSubmodule.GetGeneralAttribute(attributeName);
}
Debug.LogWarning($"Attribute {attributeName} not found in attribute group.");
return defaultValue;
}
/// <summary>
/// 获取角色的原始属性值
/// 如果属性名包含“Multiplier”默认值改为1
/// </summary>
public float GetRawAttribute(string attributeName, float defaultValue = 0)
{
if (attributeSubmodule.generalAttributeGroup.current.TryGetValue(attributeName, out float attribute))
{
return attribute;
}
Debug.LogWarning($"Attribute {attributeName} not found in attribute group.");
if(attributeName.Contains("Multiplier"))
{
defaultValue = 1f;
}
return defaultValue;
}
/// <summary>
/// 设置角色的属性值
/// </summary>
public void SetAttribute(string attributeName, int value)
{
if (attributeSubmodule.generalAttributeGroup.current.ContainsKey(attributeName))
{
attributeSubmodule.generalAttributeGroup.current[attributeName] = value;
return;
}
Debug.LogWarning($"Attribute {attributeName} not found in attribute group.");
}
/// <summary>
/// 修改角色的属性值
/// </summary>
public void ModifyAttribute(string attributeName, int delta)
{
if (attributeSubmodule.generalAttributeGroup.current.ContainsKey(attributeName))
{
attributeSubmodule.generalAttributeGroup.current[attributeName] += delta;
return;
}
Debug.LogWarning($"Attribute {attributeName} not found in attribute group.");
}
/// <summary>
/// 修改角色的属性值并进行范围限制
/// </summary>
/// <returns>实际的添加或减少的数值(可能因为范围限制而小于 delta</returns>
public int ModifyAndClampAttribute(string attributeName, int delta, int min = 0, int max = int.MaxValue)
{
int currentAttribute = GetAttribute(attributeName);
int actualModifiedValue = delta;
if (delta < 0)
{
actualModifiedValue = Mathf.Min(-delta, currentAttribute - min);
}
else if (delta > 0)
{
actualModifiedValue = Mathf.Min(delta, max - currentAttribute);
}
ModifyAttribute(attributeName, delta);
ClampAttribute(attributeName, min, max);
return actualModifiedValue;
}
public void ClampAttribute(string attributeName, int min, int max)
{
if (GetAttribute(attributeName) < min)
{
SetAttribute(attributeName, min);
}
else if (GetAttribute(attributeName) > max)
{
SetAttribute(attributeName, max);
}
}
}
#endregion
}