private void OnCollisionEnter2D(Collision2D collision) { if (!active) { return; } BaseController victim = collision.gameObject.GetComponent <BaseController>(); if (!victim || owner.IsTeammate(victim)) { return; } victim.TakeDamage(damage, owner, transform.position); victim.ApplyCollisionForce(transform.position, force, force); active = false; GetComponent <SpriteRenderer>().enabled = false; bodyCollider.enabled = false; ParticleSystem particles = GetComponent <ParticleSystem>(); particles.Play(); Destroy(gameObject, 1f); }
protected override void OnProjectileHit (ProjectileHandler projectile, Collider2D collision) { if (projectile.IsSameSender(collision.gameObject)) { return; } BaseController victim = collision.gameObject .GetComponent <BaseController>(); if (!victim || victim.IsTeammate(projectile.Sender)) { return; } projectile.Sender.perks.Activate <IProjectileHitTarget>(1, perk => perk.OnHit(projectile, victim)); float damage = Math.Min(projectile.damage, (projectile.Rigidbody.velocity.magnitude + victim.body.Body.velocity.magnitude)); victim.ProcessDamage(damage, projectile.Sender, projectile.transform.position); float push = (damage * projectile.force) / 8; victim.ApplyCollisionForce(projectile.transform.position, push / 2, push); }