Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
 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);
 }
Exemplo n.º 3
0
    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);
    }
Exemplo n.º 4
0
    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);
    }
Exemplo n.º 5
0
 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);
 }
Exemplo n.º 6
0
    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);
    }
Exemplo n.º 7
0
    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);
    }
Exemplo n.º 8
0
    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);
    }
Exemplo n.º 9
0
 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;
     }
 }
Exemplo n.º 10
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);
            }
        }
    }
Exemplo n.º 11
0
 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);
 }
Exemplo n.º 12
0
    AttackMessage stingHandle(IHitable target, FSMbase sender, float attackPoint)
    {
        m.FinalDamage = sender.status.getCurrentStat(STAT.AtkPoint) * attackPoint;

        return(m);
    }
Exemplo n.º 13
0
 public void CalcKnockBack(IHitable target, FSMbase sender, float knockBackForce)
 {
     this.knockBackForce = knockBackForce;
     knockBackDir        = (target.transform.position - sender.transform.position).normalized;
 }