public static Projectile Create(ControlledShooter shooter, Vector3 position, Vector3 direction, float speed, string prefab_path = "Prefabs/DefaultProjectile") { Projectile projectile = Projectile.Create((Shooter)shooter, position, direction, speed, prefab_path); Physics2D.IgnoreCollision(shooter.GetComponent <BoxCollider2D>(), projectile.GetComponent <BoxCollider2D>()); return(projectile); }
void OnTriggerStay2D(Collider2D other) { if (this.shooter == null) { return; } Damageable damageable = other.gameObject.GetComponent <Damageable>(); Rock rock = other.gameObject.GetComponent <Rock>(); UFO ufo = other.gameObject.GetComponent <UFO>(); Nebula nebula = other.gameObject.GetComponent <Nebula>(); ControlledShooter controlled_shooter = this.shooter.gameObject.GetComponent <ControlledShooter>(); /// The projectile collided with something! if (damageable != null) { damageable.Damage(this.damage); if (rock != null) { if (controlled_shooter != null && controlled_shooter.GetComponent <Scored>() != null) { uint value = 0; switch (rock.rock_type) { case Rock.RockType.LARGE: value = controlled_shooter.score_per_large_asteroid_kill; break; case Rock.RockType.MEDIUM: value = controlled_shooter.score_per_medium_asteroid_kill; break; case Rock.RockType.SMALL: value = controlled_shooter.score_per_small_asteroid_kill; break; } controlled_shooter.GetComponent <Scored>().score += value; } } else if (ufo != null && controlled_shooter != null) { Scored scored = controlled_shooter.GetComponent <Scored>(); if (scored != null) { scored.score += ufo.score_on_hit; if (!ufo.damageable.IsAlive()) { controlled_shooter.GetComponent <Scored>().score += ufo.score_on_kill; } } } if (nebula == null) { Destroy(this.gameObject); } } }
private ControlledShooter GetPlayer() { foreach (GameObject game_object in SceneManager.GetActiveScene().GetRootGameObjects()) { ControlledShooter player_component = game_object.GetComponent <ControlledShooter>(); if (player_component != null) { return(player_component); } } return(null); }
void OnTriggerEnter2D(Collider2D collider) { Rock rock = collider.gameObject.GetComponent <Rock>(); Projectile bullet = collider.gameObject.GetComponent <Projectile>(); UFO ufo = collider.gameObject.GetComponent <UFO>(); ControlledShooter player = collider.gameObject.GetComponent <ControlledShooter>(); Nebula nebula = collider.gameObject.GetComponent <Nebula>(); this.GetComponent <Damageable>().Damage(1); if (rock != null) { Color colour = rock.gameObject.GetComponent <SpriteRenderer>().color; colour.g *= 0.75f; rock.gameObject.GetComponent <SpriteRenderer>().color = colour; rock.gameObject.GetComponent <Rigidbody2D>().mass *= 0.5f; Destroy(rock.gameObject.GetComponent <ScreenWrapped>()); } else if (bullet != null) { bullet.gameObject.AddComponent <ScreenWrapped>(); Color colour = bullet.gameObject.GetComponent <SpriteRenderer>().color; colour.g *= 0.75f; bullet.gameObject.GetComponent <SpriteRenderer>().color = colour; bullet.damage *= 2; } else if (ufo != null) { ufo.gameObject.AddComponent <ScreenWrapped>(); Color colour = ufo.gameObject.GetComponent <SpriteRenderer>().color; colour.g *= 0.75f; ufo.gameObject.GetComponent <SpriteRenderer>().color = colour; ufo.shoot_rate *= 100.0f; ufo.shoot_accuracy *= 0.01f; ufo.GetComponent <Rigidbody2D>().freezeRotation = false; ufo.gameObject.GetComponent <Rigidbody2D>().velocity *= 8.0f; if (ufo.gameObject.GetComponent <Damageable>().current_health == 1) { Destroy(ufo.gameObject); } else { ufo.gameObject.GetComponent <Damageable>().current_health = 1; } } else if (player != null) { player.GetComponent <Rigidbody2D>().velocity = player.GetComponent <Rigidbody2D>().velocity * 4.0f; player.gameObject.GetComponent <Rigidbody2D>().angularVelocity = 256.0f * Random.Range(-Mathf.PI, Mathf.PI); player.gameObject.GetComponent <Damageable>().Heal(1); Destroy(this.gameObject); } else if (nebula != null) { Damageable nebula_dmg = nebula.GetComponent <Damageable>(); nebula_dmg.max_health *= 2; nebula_dmg.current_health = nebula_dmg.max_health; nebula.GetComponent <Rigidbody2D>().velocity *= 4.0f; this.GetComponent <Rigidbody2D>().velocity *= 0.25f; } else { this.GetComponent <Damageable>().Heal(1); } }