/*HandleDamage * public bool HandleDamage(float atkPoint, FSMbase target, StatusBase status, out float ResultAttackPoint) { * int p = random.Next(100); * bool r = false; * atkPoint *= status.getCurrentStat(STAT.AtkPoint); * if (p < status.getCurrentStat(STAT.CriticalPoint)) * { * atkPoint *= status.getCurrentStat(STAT.CriticalDamage); * r = true; * } * target.TakeAttack(atkPoint); * ResultAttackPoint = atkPoint; * return r; * } * public bool HandleDamage(float atkPoint, FSMbase target, int hitEffectNum, StatusBase status, int cri_hitEffectNum = 0) * { * bool r = HandleDamage(atkPoint, target, status, out atkPoint); * if (!r) * defaultEffect(target, hitEffectNum); * else * defaultEffect(target, cri_hitEffectNum); * return r; * } */ public void SimpleDamage(float Dmg, IHitable target) { //TODO : cri계산?? target.TakeAttack(Dmg, false); var mHit = target as HitableBase; if (mHit == null) { effectManager.defaultEffect(target, 0); } }
public void HandleAttack(attackFunc attack, IHitable target, FSMbase sender, float attackPoint, bool cancelAttack = false, bool isKnockBack = false) { AttackMessage m = attack.Invoke(target, sender, attackPoint); if (!m.criCalculated) { m.CriCalculate(sender.status.getCurrentStat(STAT.CriticalPoint), sender.status.getCurrentStat(STAT.CriticalDamage)); } m.CalcDefense(target, sender); target.TakeAttack(m.FinalDamage, cancelAttack); if (isKnockBack) { target.TakeKnockBack(m.knockBackForce, m.knockBackDir); } var mHit = target as HitableBase; if (effectManager != null) { if (mHit == null) { effectManager.defaultEffect(target, m.isCritical ? m.critEffectType : m.effectType); } } }