示例#1
0
 protected override void OnTriggerStay2D(Collider2D collision)
 {
     if (collision.tag.Equals("Terrain"))
     {
         if (collision.gameObject.layer.Equals(LayerMask.NameToLayer("Wall")))
         {
             OnHitEvent.RemoveAllListeners();
             OnHitHeal.RemoveAllListeners();
             Destroy(gameObject);
         }
     }
     else
     {
         UnitController u = collision.transform.root.GetComponent <UnitController>();
         if (u.unitType != unitType && canDetect)
         {
             if (!ForwardHitList.Contains(u.gameObject) && !returning)
             {
                 onHit(u.gameObject);
             }
             else if (!ReturnHitList.Contains(u.gameObject) && returning)
             {
                 onHit(u.gameObject);
             }
             if (!StationaryHitList.Contains(u.gameObject) && stationary)
             {
                 StationaryHitList.Add(u.gameObject);
                 u.GetComponent <UnitStats>().TakeDamage(StationaryDamage);
             }
             OnHitHeal.RemoveAllListeners(); // heal can only trigger once per projectile
         }
     }
 }
示例#2
0
    protected override void onHit(GameObject g)
    {
        hitList.Add(g);
        UnitStats targetStats     = g.GetComponent <UnitStats>();
        float     increasedDamage = damage + damage * (1 - targetStats.PercentageHealth()); //deal increased damage equal to percentage missing health

        if (slowMulti > 1 && targetStats.isSlowed())
        {
            increasedDamage *= slowMulti;
        }
        targetStats.TakeDamage(increasedDamage);
        if (targetStats.CurrentHealth() <= 0)
        {
            owner.GetComponent <UnitStats>().GainArmor(armorOnKillAmount);
            owner.GetComponent <UnitStats>().Heal(healOnKillAmount);
        }
        if (bleed > 0)
        {
            targetStats.Bleed(bleed);
        }
        if (slow > 0)
        {
            targetStats.Slow(slow);
        }
        if (bleedConsumeMultiplier > 0)
        {
            targetStats.ConsumeBleed(bleedConsumeMultiplier);
        }
        WeaponCollisionEnterEvent.Invoke(g);
        OnHitEvent.Invoke();
        OnHitHeal.Invoke(heal);
    }