/// <summary> /// 计算单个效果 /// </summary> /// <param name="releaser">释放者</param> /// <param name="target">目标</param> /// <param name="battleSkill">技能</param> /// <param name="mainEffect">是否主要伤害</param> /// <returns>技能结果</returns> public BattleUnitSkillResult CalcSingle(BattleUnit releaser, BattleUnit target, SO_BattleSkill battleSkill, bool mainEffect) { BattleUnitSkillResult result = new BattleUnitSkillResult(); result.battleUnit = target; result.battleSkill = battleSkill; result.syncAttribute = new BattleUnitSyncAttribute(); //简单计算生命值 switch (battleSkill.damageType) { case BattleSkillDamageType.Physical: case BattleSkillDamageType.Magic: result.syncAttribute.hpChanged = -(Mathf.Max(0, releaser.battleUnitAttribute.Atk - target.battleUnitAttribute.Def + battleSkill.mainValue)); //能量不变 result.syncAttribute.energyChanged = 0; result.syncAttribute.currentEnergy = target.battleUnitAttribute.energy; break; case BattleSkillDamageType.Heal: result.syncAttribute.hpChanged = Mathf.Min(battleSkill.mainValue, target.battleUnitAttribute.maxHp - target.battleUnitAttribute.hp); //能量不变 result.syncAttribute.energyChanged = 0; result.syncAttribute.currentEnergy = target.battleUnitAttribute.energy; break; default: break; } //hp变化 target.battleUnitAttribute.hp += result.syncAttribute.hpChanged; target.battleUnitAttribute.hp = Mathf.Clamp(target.battleUnitAttribute.hp, 0, target.battleUnitAttribute.maxHp); //记录变化 result.syncAttribute.currentHP = target.battleUnitAttribute.hp; return(result); }
//技能命中时 private IEnumerator OnSkillDamage(BattleUnitSkillResult skillResult) { if (skillResult == null) { yield return(null); } //播放掉血特效 EffectDamageLabel damageEffect = EffectManager.Instance.CreateEffectByName <EffectDamageLabel>(EGameConstL.Effect_DamageLabel, EffectPlayType.WorldPosition); if (damageEffect != null) { damageEffect.SortingLayer = EGameConstL.SortingLayer_Battle_Effect; damageEffect.gameObject.SetActive(true); damageEffect.transform.position = unitRenderer.transform.position; damageEffect.SetDamage(skillResult.syncAttribute.hpChanged, skillResult.battleSkill.damageType); } //更新血条 skillResult.battleUnit.battleUnitRenderer.RefreshAttribute(skillResult.syncAttribute); //判断是否跪了 if (skillResult.syncAttribute.currentHP <= 0) { yield return(EGameConstL.WaitForHalfSecond); //离场 yield return(skillResult.battleUnit.battleUnitRenderer.PlayDefeatedAction()); } }
//技能命中时 private IEnumerator OnSkillDamage(BattleUnitSkillResult skillResult) { if (skillResult == null) { yield return(null); } PlayDamageLabel(skillResult.syncAttribute.hpChanged, skillResult.battleSkill.damageType); //更新血条 skillResult.battleUnit.battleUnitRenderer.RefreshAttribute(skillResult.syncAttribute); //判断是否跪了 if (skillResult.syncAttribute.currentHP <= 0) { yield return(EGameConstL.WaitForHalfSecond); //离场 yield return(skillResult.battleUnit.battleUnitRenderer.PlayDefeatedAction()); } }