Exemplo n.º 1
0
    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);
        }
    }