Example #1
0
    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.
    }