Пример #1
0
 public override void OnAttack(AttackInfo ai)
 {
     m_attack.RemoveResistence(physResist);
     m_attack.RemoveResistence(lightningResist);
     physResist         = null;
     m_attack.CanTarget = true;
 }
Пример #2
0
    void TakeDoT(HitboxDoT hbdot)
    {
        Resistence r = GetAverageResistences(hbdot.Element);
        float      d = hbdot.Damage - (hbdot.Damage * (r.Percentage / 100f));

        DamageObj(d * ScaledTime.deltaTime);
        if (Health <= 0f)
        {
            Killer = hbdot.Creator;
        }
        if (hbdot.IsFixedKnockback)
        {
            Vector2 kb = hbdot.Knockback - (hbdot.Knockback * Mathf.Min(1f, (r.KnockbackResist / 100f)));
            if (GetComponent <BasicPhysics>() != null)
            {
                GetComponent <BasicPhysics>().AddToVelocity(kb * ScaledTime.deltaTime);
            }
        }
        else
        {
            Vector3 otherPos  = gameObject.transform.position;
            float   angle     = Mathf.Atan2(transform.position.y - otherPos.y, transform.position.x - otherPos.x); //*180.0f / Mathf.PI;
            float   magnitude = hbdot.Knockback.magnitude;
            float   forceX    = Mathf.Cos(angle) * magnitude;
            float   forceY    = Mathf.Sin(angle) * magnitude;
            Vector2 force     = new Vector2(-forceX, -forceY);
            if (GetComponent <BasicPhysics>() != null)
            {
                GetComponent <BasicPhysics>().AddToVelocity(force * ScaledTime.deltaTime);
            }
        }
    }
Пример #3
0
    private void ApplyHitToPhysicsSS(Hitbox hb)
    {
        Resistence r  = GetAverageResistences(hb.Element);
        Vector2    kb = hb.Knockback - (hb.Knockback * Mathf.Min(1f, (r.KnockbackResist / 100f)));

        if (!m_movementController)
        {
            return;
        }

        if (hb.IsFixedKnockback)
        {
            m_movementController.AddToVelocity(kb);
            return;
        }

        Vector3 hitVector = transform.position - hb.transform.position;
        float   angle     = Mathf.Atan2(hitVector.y, hitVector.x);  //*180.0f / Mathf.PI;
        Vector2 force     = new Vector2(Mathf.Cos(angle), Mathf.Sin(angle));

        force.Scale(new Vector2(kb.magnitude, kb.magnitude));
        float counterF = m_movementController.Velocity.y * (1 / Time.deltaTime);

        if (counterF < 0)
        {
            force.y = force.y - counterF;
        }

        m_movementController.AddToVelocity(force);
    }
Пример #4
0
    private Resistence GetAverageResistences(List <ElementType> le)
    {
        Resistence newR       = new Resistence();
        int        numResists = 0;

        foreach (ElementType et in le)
        {
            Resistence pr = GetResistence(et);
            newR.Percentage      += pr.Percentage;
            newR.KnockbackResist += pr.KnockbackResist;
            newR.StunResist      += pr.StunResist;
            numResists++;
        }
        if (numResists > 0)
        {
            newR.Percentage      /= numResists;
            newR.KnockbackResist /= numResists;
            newR.StunResist      /= numResists;
        }
        else
        {
            newR.Percentage      = 0f;
            newR.KnockbackResist = 0f;
            newR.StunResist      = 0f;
        }
        return(newR);
    }
Пример #5
0
 // Use this for initialization
 public override void OnAddProperty()
 {
     physResist = GetComponent <Attackable>().AddResistence(ElementType.PHYSICAL, 100.0f, false, false, 0f, 100f, 100f);
     fireResist = GetComponent <Attackable>().AddResistence(ElementType.FIRE, 100.0f, false, false, 0f, 100f, 100f);
     elecResist = GetComponent <Attackable>().AddResistence(ElementType.LIGHTNING, 100.0f, false, false, 0f, 100f, 100f);
     bioResist  = GetComponent <Attackable>().AddResistence(ElementType.BIOLOGICAL, 100.0f, false, false, 0f, 100f, 100f);
     psyResist  = GetComponent <Attackable>().AddResistence(ElementType.PSYCHIC, 100.0f, false, false, 0f, 100f, 100f);
 }
Пример #6
0
    public Resistence AddResistence(ElementType element, float percentage, bool overflow = false, bool isTimed = false, float duration = 0f,
                                    float resistStun = 0f, float resistKnockback = 0f)
    {
        Resistence r = newResist(element, percentage, overflow, isTimed, duration, resistStun, resistKnockback);

        AddResistence(r);
        return(r);
    }
Пример #7
0
 public override void OnAddProperty()
 {
     m_attack = GetComponent <Attackable> ();
     m_fight  = GetComponent <Fighter> ();
     Debug.Log("Setting Faction Type");
     physResist         = m_attack.AddResistence(ElementType.PHYSICAL, 100.0f, false, false, 0f, 100.0f, 100.0f);
     lightningResist    = m_attack.AddResistence(ElementType.LIGHTNING, 100.0f, false, false, 0f, 100.0f, 100.0f);
     m_oldCanTarget     = m_attack.CanTarget;
     m_attack.CanTarget = false;
 }
Пример #8
0
    public HitResult TakeHit(HitInfo hi)
    {
        ExecuteEvents.Execute <ICustomMessageTarget> (gameObject, null, (x, y) => x.OnHit(hi, hi.Creator));
        HitboxDoT hd = hi.mHitbox as HitboxDoT;

        if (hd != null)
        {
            TakeDoT(hd);
            return(HitResult.NONE);
        }
        if (GetComponent <AIBase>())
        {
            GetComponent <AIBase> ().OnHit(hi);
        }
        Resistence r = GetAverageResistences(hi.Element);
        float      d;

        //Debug.Log ("Damage; " + hi.Damage + " r: " + r.Percentage);
        d = hi.Damage - (hi.Damage * (r.Percentage / 100f));
        float fD = hi.FocusDamage;

        d = DamageObj(d);

        ApplyHitToPhysicsSS(hi);
        float s = hi.Stun - (hi.Stun * Mathf.Min(1f, (r.StunResist / 100f)));

        if (hi.Stun > 0f && m_fighter)
        {
            if (s <= 0f)
            {
                return(HitResult.BLOCKED);
            }
            m_fighter.RegisterStun(s, true, hi, (d >= 0f && fD >= 0f));
        }
        if (Health <= 0f)
        {
            Killer = hi.Creator;
        }
        if (d == 0f && fD == 0f)
        {
            return(HitResult.NONE);
        }
        else if (d < 0f)
        {
            return(HitResult.HIT);
        }
        else if (fD >= 0f)
        {
            return(HitResult.FOCUSHIT);
        }
        else
        {
            return(HitResult.HEAL);
        }
    }
Пример #9
0
    // Start is called before the first frame update

    public override void OnUpdate()
    {
        if (m_attack != null && m_fight != null &&
            !m_fight.IsAttacking() && m_fight.StunTime <= 0f)
        {
            if (physResist == null)
            {
                physResist         = m_attack.AddResistence(ElementType.PHYSICAL, 100.0f, false, false, 0f, 100.0f, 100.0f);
                lightningResist    = m_attack.AddResistence(ElementType.LIGHTNING, 100.0f, false, false, 0f, 100.0f, 100.0f);
                m_attack.CanTarget = false;
            }
        }
    }
Пример #10
0
 public override void OnAddProperty()
 {
     physResist      = GetComponent <Attackable>().AddResistence(ElementType.PHYSICAL, 25.0f, false, false, 0.0f, 70.0f, 70.0f);
     fireResist      = GetComponent <Attackable>().AddResistence(ElementType.FIRE, 100.0f, false, false, 0.0f, 0.0f, 100.0f);
     lightningResist = GetComponent <Attackable>().AddResistence(ElementType.LIGHTNING, -25.0f, false, false, 0.0f, -25.0f, 100.0f);
     if (GetComponent <BasicMovement> () != null)
     {
         GetComponent <BasicMovement> ().SetMoveSpeed(GetComponent <BasicMovement> ().MoveSpeed / 1.25f);
         GetComponent <BasicMovement> ().SetJumpData(GetComponent <BasicMovement> ().JumpHeight / 1.5f, GetComponent <BasicMovement> ().TimeToJumpApex);
     }
     fx = GetComponent <PropertyHolder> ().AddBodyEffect(FXBody.Instance.FXIron);
     //   GetComponent<PhysicsSS>().SetGravityScale(-2.0f);
 }
Пример #11
0
    public void ClearResistence(ElementType element)
    {
        foreach (Resistence r in Resistences)
        {
            if (r.Element == element)
            {
                Resistences.Remove(r);
            }
        }
        Resistence re = new Resistence();

        re.Element = element;
        m_fullResistences[element] = re;
    }
Пример #12
0
    private Resistence newResist(ElementType element, float percentage, bool overflow = false, bool isTimed = false, float duration = 0f,
                                 float resistStun = 0f, float resistKnockback = 0f)
    {
        Resistence r = new Resistence();

        r.Element         = element;
        r.Percentage      = percentage;
        r.Duration        = duration;
        r.StunResist      = resistStun;
        r.KnockbackResist = resistKnockback;
        r.Timed           = isTimed;
        r.AvoidOverflow   = overflow;
        return(r);
    }
Пример #13
0
 internal void InitResistences()
 {
     m_fullResistences.Clear();
     for (int i = 0; i < 5; i++)
     {
         Resistence r = new Resistence();
         r.Element = (ElementType)i;
         m_fullResistences.Add((ElementType)i, r);
     }
     foreach (Resistence r in Resistences)
     {
         AddResistence(r);
     }
     AddResistence(ElementType.BIOLOGICAL, 100f, false, false);
 }
Пример #14
0
    public HitResult TakeHit(Hitbox hb)
    {
        ExecuteEvents.Execute <ICustomMessageTarget> (gameObject, null, (x, y) => x.OnHit(hb, hb.Creator));
        HitboxDoT hd = hb as HitboxDoT;

        if (hd != null)
        {
            TakeDoT(hd);
            return(HitResult.NONE);
        }
        if (GetComponent <AIFighter>())
        {
            GetComponent <AIFighter> ().OnHit(hb);
        }
        Resistence r = GetAverageResistences(hb.Element);
        float      d;

        d = hb.Damage - (hb.Damage * (r.Percentage / 100f));
        d = DamageObj(d);

        ApplyHitToPhysicsSS(hb);
        float s = hb.Stun - (hb.Stun * Mathf.Min(1f, (r.StunResist / 100f)));

        if (hb.Stun > 0f && m_fighter)
        {
            if (s <= 0f)
            {
                return(HitResult.BLOCKED);
            }
            m_fighter.RegisterStun(s, true, hb);
        }
        if (Health <= 0f)
        {
            Killer = hb.Creator;
        }
        if (d == 0f)
        {
            return(HitResult.NONE);
        }
        else if (d < 0f)
        {
            return(HitResult.HIT);
        }
        else
        {
            return(HitResult.HEAL);
        }
    }
Пример #15
0
    public void AddResistence(Resistence r)
    {
        Resistence fr    = m_fullResistences[r.Element];
        float      pDiff = r.Percentage;

        if (r.AvoidOverflow)
        {
            pDiff            = Mathf.Min(100f - fr.Percentage, r.Percentage);
            r.OverflowAmount = Mathf.Max(0f, r.Percentage - (100f - fr.Percentage));
        }
        fr.Percentage      += pDiff;
        fr.StunResist      += r.StunResist;
        fr.KnockbackResist += r.KnockbackResist;
        if (!Resistences.Contains(r))
        {
            Resistences.Add(r);
        }
    }
Пример #16
0
    public void RemoveResistence(Resistence r)
    {
        if (!Resistences.Contains(r))
        {
            return;
        }
        Resistence fr = m_fullResistences[r.Element];

        fr.Percentage      -= r.Percentage;
        fr.StunResist      -= r.StunResist;
        fr.KnockbackResist -= r.KnockbackResist;
        Resistences.Remove(r);
        foreach (Resistence or in Resistences)
        {
            if (or.Element == r.Element && r.AvoidOverflow)
            {
                float pDiff = Mathf.Min(100f - fr.Percentage, or.OverflowAmount);
                or.OverflowAmount = Mathf.Max(0f, or.OverflowAmount - (100f - fr.Percentage));
                fr.Percentage    += pDiff;
            }
        }
    }
Пример #17
0
    public void HandleDamage(float damage, DamageType type, Vector3 impactForce = new Vector3())
    {
        if (delta <= 0)
        {
            delta = DamageRatio;
            Resistence r      = resistences.FirstOrDefault(rest => rest.type == type);
            float      rValue = r?.value ?? 0;

            float finalDamage = damage * Mathf.Clamp(type.Multiplier, 0.1f, 99999) - (rValue + (cell?.CellSize() ?? 0) / 2f);

            Life = (int)(Life - finalDamage);

            rg.AddForce(impactForce);
            DamageFxInstance.SetActive(true);

            cell?.ThrowLifeEvent(Life);

            if (Life <= 0)
            {
                Die();
            }
        }
    }
Пример #18
0
    private void ApplyHitToPhysics(HitInfo hi)
    {
        Resistence r = GetAverageResistences(hi.Element);

        m_physics.FreezeInAir(hi.FreezeTime);

        Vector3 kb = hi.Knockback - (hi.Knockback * Mathf.Min(1f, (r.KnockbackResist / 100f)));

        if (!m_physics)
        {
            return;
        }
        if (hi.IsFixedKnockback)
        {
            if (kb.y != 0f && hi.ResetKnockback)
            {
                m_physics.CancelVerticalMomentum();
            }
            m_physics.AddToVelocity(kb);
            return;
        }

        Vector3 hitVector = transform.position - hi.mHitbox.transform.position;
        float   angle     = Mathf.Atan2(hitVector.y, hitVector.x); //*180.0f / Mathf.PI;
        Vector2 force     = new Vector2(Mathf.Cos(angle), Mathf.Sin(angle));

        force.Scale(new Vector2(kb.magnitude, kb.magnitude));
        float counterF = m_physics.m_trueVelocity.y * (1 / ScaledTime.deltaTime);

        if (counterF < 0)
        {
            force.y = force.y - counterF;
        }

        m_physics.AddToVelocity(force);
        hi.Knockback = force;
    }
Пример #19
0
 public override void OnAddProperty()
 {
     bioVulnerability = GetComponent <Attackable>().AddResistence(ElementType.BIOLOGICAL, -100.0f, false, false, 0.0f, 70.0f, 70.0f);
 }
Пример #20
0
 public override void OnAddProperty()
 {
     fireResist        = GetComponent <Attackable>().AddResistence(ElementType.FIRE, 25.0f);
     lightningWeakness = GetComponent <Attackable>().AddResistence(ElementType.LIGHTNING, -25.0f);
     fx = GetComponent <PropertyHolder> ().AddBodyEffect(FXBody.Instance.FXWet);
 }