Example #1
0
        /// <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);
        }
Example #2
0
        //技能命中时
        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());
            }
        }
Example #3
0
        //技能命中时
        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());
            }
        }