public void TakeHit(int damage, InteriorProblemOdds problemOdds = null) { if (!invincible && barrelRollTimer <= 0f) { if (shields > 0 && ShieldsEnabled) { shields = Mathf.Max(shields - 1, 0); // could change to damage, if wanted that. But currently just negates a hit UpdateShieldsSprite(); } else { currentHitPoints = Mathf.Max(currentHitPoints - damage, 0); UpdateDamageSprite(); if (currentHitPoints <= 0) { if (explosionPrefab != null) { Instantiate(explosionPrefab, transform.position, Quaternion.identity); } exteriorManager.HandleShipDestroyed(this); Destroy(gameObject); } } } shipHitEvent.Invoke(); interiorManager.HandleShipDamage(problemOdds); }
public void TakeHit(GameObject damager) //int damage, InteriorProblemOdds problemOdds = null) { int damage = 1; // min damage DamageDealer damageDealer = damager.GetComponent <DamageDealer>(); if (damageDealer) { damage = damageDealer.GetDamage(); } if (!invincible && barrelRollTimer <= 0f) { if (shields > 0 && ShieldsEnabled) { shields = Mathf.Max(shields - 1, 0); // could change to damage, if wanted that. But currently just negates a hit UpdateShieldsSprite(); } else { currentHitPoints = Mathf.Max(currentHitPoints - damage, 0); UpdateDamageSprite(); if (currentHitPoints <= 0) { if (explosionPrefab != null) { Instantiate(explosionPrefab, transform.position, Quaternion.identity); } exteriorManager.HandleShipDestroyed(this); // TODO: extend into an event so ExteriorShip can be independent. Destroy(gameObject); } } } shipHitEvent.Invoke(damager); //interiorManager.HandleShipDamage(problemOdds); // TODO: extend into an event so ExteriorShip can be independent. }