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); } }