public bool destroy_asteroid() { if (has_collided) { return(false); } score_keeper.add(points); if (spawned_debris != null) { for (int space_rock = 0; space_rock < 2; ++space_rock) { PlanetariaGameObject game_object = PlanetariaGameObject.Instantiate(spawned_debris, planetaria_transform.position, planetaria_transform.direction); Debris debris = game_object.GetComponent <Debris>(); debris.speed = this.speed; DebrisNoirs.live(game_object); // while asteroid revenge velocity (targetting satellite) is an interesting idea, // I don't think it's necessary (or would fully work as intended for that matter - it might be exploitable). // The game will probably be hard enough head/joystick controls // (and pros will still make mistakes eventually, even if its because of sleep deprivation) } } DebrisNoirs.die(this.gameObject); PlanetariaGameObject.Destroy(this.gameObject); return(true); }
public static void expand(int capacity) // TODO: CONSIDER: For future versions, deleting an object and creating two for every object pool increment may get around the draw call dynamic batching "bug" (might be intended behaviour) -- where ~120 draw calls become ~20 (behaviour I personally expected) for the same number of objects but only after several destruction and instantiation calls. { int large_rocks_to_spawn = Mathf.Max(0, capacity - object_pool.Count); for (int spawned_root_node = 0; spawned_root_node < large_rocks_to_spawn; spawned_root_node += 1) { // Yeah, this is hardcoded boilerplate, but it gets the job done (rather than coding a recursive function for levels 1,2,3) // Large PlanetariaGameObject game_object = PlanetariaGameObject.Instantiate(DebrisSpawner.self().large_debris, Vector3.forward, Vector3.up); Debris large = game_object.GetComponent <Debris>(); object_pool.Add(large); // add the root node only // Medium game_object = PlanetariaGameObject.Instantiate(DebrisSpawner.self().medium_debris, Vector3.forward, Vector3.up); Debris medium1 = game_object.GetComponent <Debris>(); large.left_debris = medium1; game_object = PlanetariaGameObject.Instantiate(DebrisSpawner.self().medium_debris, Vector3.forward, Vector3.up); Debris medium2 = game_object.GetComponent <Debris>(); large.right_debris = medium2; // Small game_object = PlanetariaGameObject.Instantiate(DebrisSpawner.self().small_debris, Vector3.forward, Vector3.up); Debris small1 = game_object.GetComponent <Debris>(); medium1.left_debris = small1; game_object = PlanetariaGameObject.Instantiate(DebrisSpawner.self().small_debris, Vector3.forward, Vector3.up); Debris small2 = game_object.GetComponent <Debris>(); medium1.right_debris = small2; game_object = PlanetariaGameObject.Instantiate(DebrisSpawner.self().small_debris, Vector3.forward, Vector3.up); Debris small3 = game_object.GetComponent <Debris>(); medium2.left_debris = small3; game_object = PlanetariaGameObject.Instantiate(DebrisSpawner.self().small_debris, Vector3.forward, Vector3.up); Debris small4 = game_object.GetComponent <Debris>(); medium2.right_debris = small4; // Disable game objects until they are needed large.gameObject.SetActive(false); medium1.gameObject.SetActive(false); medium2.gameObject.SetActive(false); small1.gameObject.SetActive(false); small2.gameObject.SetActive(false); small3.gameObject.SetActive(false); small4.gameObject.SetActive(false); } }