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 } } }
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); }