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