using System.Collections.Generic; using Continentis.MainGame.Character; using UnityEngine; namespace Continentis.MainGame.Card { public partial class CardLogicBase { public bool HasTag(string tag) { return functionalTags.Contains(tag) || elementalTags.Contains(tag); } public bool HasKeyword(string keyword) { return contentSubmodule.keywords.Contains(keyword); } } public partial class CardLogicBase { /// /// 获取最终伤害 /// /// 目标 /// 元素标签,若为null则使用卡牌的元素标签 protected virtual int GetFinalDamage(CharacterBase target, List elementalTags = null) { elementalTags ??= this.elementalTags; float elementalAmplifier = 1; foreach (var element in elementalTags) //计算元素伤害加成 { elementalAmplifier *= user.attributeSubmodule.GetCurrentGeneralAttribute(element + "DamageDealtMultiplier", 1); elementalAmplifier *= target.attributeSubmodule.GetCurrentGeneralAttribute(element + "DamageGainMultiplier", 1); } float finalDamage = attributeSubmodule.GetRoundCurrentAttribute("Damage") * elementalAmplifier * attributeSubmodule.GetCurrentAttribute("FinalDamageDealtMultiplier", 1) * target.attributeSubmodule.GetCurrentGeneralAttribute("FinalDamageGainMultiplier", 1); return Mathf.RoundToInt(finalDamage); } } #region Attributes public partial class CardLogicBase { /// /// 设置可变属性值 /// /// 属性名,通常为 /// 是否为叠加,true为叠加,false为覆盖,true时,originalValue为外部传入值 /// 原始伤害值,仅在additive为true时有效,否则此值被覆盖为BaseAttribute /// 伤害增量 public void SetVariableAttribute(string attributeName, bool additive, int originalValue, int baseOffset) { string baseName = "Base" + attributeName; string baseOffsetName = baseName + "Offset"; if (!additive) originalValue = GetAttribute(baseName); SetAttribute(attributeName, originalValue); SetAttribute(baseOffsetName, baseOffset); ModifyAttribute(attributeName, baseOffset); } /// /// 获取卡牌的属性值 /// public int GetAttribute(string attributeName) { return attributeSubmodule.GetRoundCurrentAttribute(attributeName); } /// /// 设置卡牌的属性值 /// public void SetAttribute(string attributeName, int value) { attributeSubmodule.attributeGroup.current[attributeName] = value; } /// /// 修改卡牌的属性值 /// public void ModifyAttribute(string attributeName, int delta) { attributeSubmodule.attributeGroup.current[attributeName] += delta; } } #endregion public partial class CardLogicBase { /// /// 检查是否有足够的体力 /// protected virtual bool CheckEnoughStamina() { int staminaCost = attributeSubmodule.GetRoundCurrentAttribute("StaminaCost"); return user.attributeSubmodule.generalAttributeGroup.current["Stamina"] >= staminaCost; } /// /// 消耗体力 /// protected virtual void ConsumeStamina() { int staminaCost = attributeSubmodule.GetRoundCurrentAttribute("StaminaCost"); user.attributeSubmodule.generalAttributeGroup.current["Stamina"] -= staminaCost; } /// /// 检查是否有足够的魔法 /// protected virtual bool CheckEnoughMana() { int manaCost = attributeSubmodule.GetRoundCurrentAttribute("ManaCost"); return user.attributeSubmodule.generalAttributeGroup.current["Mana"] >= manaCost; } /// /// 消耗魔法 /// protected virtual void ConsumeMana() { int manaCost = attributeSubmodule.GetRoundCurrentAttribute("ManaCost"); user.attributeSubmodule.generalAttributeGroup.current["Mana"] -= manaCost; } } }