private void OnTriggerEnter2D(Collider2D collider) { ShipPart shipPart = collider.GetComponent <ShipPart>(); Projectile projectile = collider.GetComponent <Projectile>(); Shields shields = collider.GetComponent <Shields>(); bool hitShields = collider is CircleCollider2D && shields != null; if (hitShields) { if (shields.active && !alreadyDamaged) { SpawnImpact(collider); shields.TakeDamage(damage); Vector2 toProjectile = (transform.position - shields.transform.position).normalized; rb.velocity = toProjectile * rb.velocity.magnitude; transform.up = toProjectile; gameObject.layer = LayerMask.NameToLayer(LayerMask.LayerToName(gameObject.layer) == "Friendly" ? "Hostile" : "Friendly"); if (target != null) { Transform tmp = target; target = originator; originator = tmp; } return; } } if (shipPart != null) { if (!alreadyDamaged && !hitShields) { shipPart.TakeDamage(damage); alreadyDamaged = true; Die(collider); } } else if (projectile != null) { if (target != null) { Die(collider); // Missiles get killed by projectiles } } else { Debug.Log("I don't know what this projectile just hit: " + collider.gameObject); } }
public void TakeDamage(GameObject other) { if (_hasShields) { _shields.TakeDamage(); if (_shields.HasShieldDepleted()) { ActivateShields(false); _hasShields = false; } } else { Destroy(other.gameObject); SetAsDestroyed(); _player.IncreaseScore(10); } }
public void TakeDamage(float damage) { if (!_isImmune) { StartCoroutine(nameof(ShakeCameraRoutine)); if (_isShieldsUpActive) { if (_shields != null) { _shields.TakeDamage(); if (_shields.HasShieldDepleted()) { ActivateShields(false); } } } else { _lives--; if (_uiManager) { _uiManager.UpdateLives(_lives); } if (_lives < 1) { GameOver(); } else { print($"Remaining Lives {_lives}"); DamageAnEngine(); } } StartCoroutine(StartImmunityRoutine()); } }