AttackMessage rushHandle(IHitable target, FSMbase sender, float attackPoint) { m.FinalDamage = sender.status.getCurrentStat(STAT.AtkPoint) * attackPoint; target.status.AddBuff(new Pierced(pierceTime, target)); Vector2 dir = (target.transform.position - sender.transform.position).normalized; Vector3 v3Original = chargeDir; Quaternion firstRotation = Quaternion.FromToRotation(v3Original, dir); float dirDot = firstRotation.eulerAngles.z; Vector3 v3Dest; Quaternion qUpDir; float reflectionValue = 0; if (dirDot >= 0 && dirDot < 180) { qUpDir = Quaternion.Euler(0, 0, 90); } else { qUpDir = Quaternion.Euler(0, 0, -90); reflectionValue = 180; } v3Original = qUpDir * v3Original; float secondRotation = Quaternion.FromToRotation(dir, v3Original).eulerAngles.z * 0.5f; v3Dest = Quaternion.Euler(0, 0, dirDot + secondRotation + reflectionValue) * chargeDir; v3Dest.Normalize(); m.CalcKnockBack(v3Dest, 3); return(m); }
AttackMessage stingHandle(IHitable target, FSMbase sender, float attackPoint) { m.effectType = EffectType.SMALL; m.critEffectType = EffectType.CRIT; m.FinalDamage = sender.status.getCurrentStat(STAT.AtkPoint) * attackPoint; return(m); }
AttackMessage flameHandle(IHitable target, FSMbase sender, float attackPoint) { m.FinalDamage = sender.status.getCurrentStat(STAT.AtkPoint) * attackPoint; target.status.AddBuff(new Burn(burnTime, burnDmg, target)); return(m); }
AttackMessage ThunderHandle(IHitable target, FSMbase sender, float attackPoint) { m.effectType = EffectType.MID; m.critEffectType = EffectType.CRIT; m.FinalDamage = sender.status.getCurrentStat(STAT.AtkPoint) * attackPoint; target.status.AddBuff(new Electrified(1, target)); return(m); }
AttackMessage AttackHandle(IHitable target, FSMbase sender, float attackPoint) { m.FinalDamage = sender.status.getCurrentStat(STAT.AtkPoint) * attackPoint; if (tempAtkCount == 1) { m.CalcKnockBack(target, sender, 1); } if (m.CriCalculate(sender.status.getCurrentStat(STAT.CriticalPoint), sender.status.getCurrentStat(STAT.CriticalDamage))) { target.status.AddBuff(new Bleeding(5, 3, target)); } return(m); }
AttackMessage attackHandle(IHitable target, FSMbase sender, float attackPoint) { m.FinalDamage = sender.status.getCurrentStat(STAT.AtkPoint) * attackPoint; m.CalcKnockBack(target, sender, 1); //20퍼센트 확률로 감전 int r = UnityEngine.Random.Range(0, 100); if (r < 20) { target.status.AddBuff(new Electrified(1, target)); } return(m); }
AttackMessage TouchHandle(IHitable target, FSMbase sender, float attackPoint) { m.effectType = EffectType.SMALL; m.critEffectType = EffectType.CRIT; m.FinalDamage = sender.status.getCurrentStat(STAT.AtkPoint) * attackPoint; if (m.CriCalculate(sender.status.getCurrentStat(STAT.CriticalPoint), sender.status.getCurrentStat(STAT.CriticalDamage))) { target.status.AddBuff(new Bleeding(5, 3, target)); } targetStuned = new Buff(3, BUFF.Stuned, target, true, true); target.status.AddBuff(targetStuned); return(m); }
AttackMessage GroundHandle(IHitable target, FSMbase sender, float attackPoint) { m.effectType = EffectType.SMALL; m.critEffectType = EffectType.SMALL; m.FinalDamage = sender.status.getCurrentStat(STAT.AtkPoint) * attackPoint; m.CalcKnockBack(target, sender, 2); int r = UnityEngine.Random.Range(0, 100); if (r < 20) { target.status.AddBuff(new Electrified(1, target)); } return(m); }
public void CalcDefense(IHitable target, FSMbase sender) { if (target.status.IsBuff(BUFF.Bleeding)) { FinalDamage *= 1.3f; } if (!target.status.IsBuff(BUFF.Pierced)) { FinalDamage -= FinalDamage * target.status.getCurrentStat(STAT.DefensePoint); } else { FinalDamage *= 1.2f; } }
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); } } }
AttackMessage bulletHandle(IHitable target, FSMbase sender, float attackPoint) { m.FinalDamage = sender.status.getCurrentStat(STAT.AtkPoint) * attackPoint; target.status.AddBuff(new Poisoned(5, 3, target)); return(m); }
AttackMessage stingHandle(IHitable target, FSMbase sender, float attackPoint) { m.FinalDamage = sender.status.getCurrentStat(STAT.AtkPoint) * attackPoint; return(m); }
public void CalcKnockBack(IHitable target, FSMbase sender, float knockBackForce) { this.knockBackForce = knockBackForce; knockBackDir = (target.transform.position - sender.transform.position).normalized; }