private void OnCollisionEnter(Collision collisionInfo) { string objectID = collisionInfo.gameObject.GetComponent <IIdentity>().GetObjectID(); if (objectID == shooterID) { return; } if (collisionInfo.gameObject.GetComponent <IDamageReciever>() == null) { SpawnImpact(collisionInfo.GetContact(0)); DestroyObject(0); return; } SpawnImpact(collisionInfo.GetContact(0)); IDamageReciever victim = collisionInfo.gameObject.GetComponent <IDamageReciever>(); victim.OnRecievedDamage(damage, shooterID, SoundType.BoltImpact); string playerID = gameManager.sceneController.playerController.GetObjectID(); if (shooterID == playerID) { gameManager.sceneController.scoreManager.OnPlayerHitChain.Invoke(); } DestroyObject(0); }
void OnTriggerEnter2D(Collider2D other) { //var health = other.gameObject.GetComponent<Health>(); //if (health != null) //{ // health.DecreaseHealth( GetDamage() ); //} IDamageReciever damageReciever = other.GetComponent <IDamageReciever>(); if (damageReciever != null) { damageReciever.TakeDamage(GetDamage()); // TODO: Return projectile back to pool. // throw new System.NotImplementedException("Return projectile to pool"); // Destroy projectile only if damage was provided // Destroy(gameObject); } if (_weapon.DisposeProjectile(this) == false) { Debug.LogError("Projectile couldn't be returned to pool!"); Destroy(gameObject); } }
private void OnCollisionEnter(Collision collisionInfo) { if (collisionInfo.gameObject.GetComponent <IDamageReciever>() == null) { DestroyObject(0); return; } IDamageReciever victim = collisionInfo.gameObject.GetComponent <IDamageReciever>(); victim.OnRecievedDamage(damage, shooterID, SoundType.BoltImpact); }
// Update is called once per frame void Update() { if (targetDamage == null && targetDamageTest != null) { targetDamage = targetDamageTest.GetComponent <IDamageReciever>(); return; } if (testDamage && targetDamage != null) { targetDamage.OnRecievedDamage(20, "testID", SoundType.BoltImpact); testDamage = false; } }
private void ApplyDamage() { List <IDamageReciever> alreadyDamaged = new List <IDamageReciever>(); Collider[] damageReceivers = Physics.OverlapSphere(transform.position, _explosionRadius, _hitMask); for (int i = 0; i < damageReceivers.Length; ++i) { IDamageReciever damageReceiver = damageReceivers[i].GetComponentInParent <IDamageReciever>(); // Did we found a damage receiver? If yes, apply damage if not done already. if (damageReceiver != null && !alreadyDamaged.Contains(damageReceiver)) { damageReceiver.TakeDamage(_damage); alreadyDamaged.Add(damageReceiver); // TODO: Apply explosion force } } }
private void HealthComponent_OnDeath(object sender, System.EventArgs e) { healthComponent.IsSilent = true; //Without that we are entering a infinity loop!! Collider[] colliders = Physics.OverlapSphere(transform.position, range, damageMask); foreach (Collider col in colliders) { IDamageReciever reciever = col.GetComponent <IDamageReciever>(); if (reciever != null) { reciever.TakeDamage(new BasicDamageInfo(damageTyp, -Mathf.Max(damage - Vector3.Distance(col.transform.position, transform.position), 0))); } Rigidbody rig = col.GetComponent <Rigidbody>(); if (rig != null) { rig.AddExplosionForce(physicalForce, transform.position, range); } } healthComponent.IsSilent = false; }