Esempio n. 1
0
    void BulletCollision()
    {
        bullets = shipShootBulletScript.bullets;
        if (bullets.Count > 0)
        {
            for (int i = 0; i < bullets.Count; i++)
            {
                SpriteRenderer bulletRender;
                if (bullets[i] != null)
                {
                    bulletRender = bullets[i].GetComponent <SpriteRenderer>();
                    for (int j = 0; j < asteroids.Count; j++)
                    {
                        SpriteRenderer asteroidRender = asteroids[j].GetComponent <SpriteRenderer>();
                        if (detect.AABBCollision(bullets[i], asteroids[j]))
                        {
                            source.Play();
                            asteroidMovementScript = asteroids[j].GetComponent <AsteroidMovement>();
                            //this makes sure that the asteroid is the first so it splits
                            if (asteroidMovementScript.firstIteration)
                            {
                                //creating 2 new asteroids
                                GameObject asteroid1 = Instantiate(asteroidSpawningScript.asteroidPrefabs[Random.Range(0, asteroidSpawningScript.asteroidPrefabs.Count)], asteroids[j].transform.position, Quaternion.identity);
                                asteroid1.transform.localScale /= 2;
                                AsteroidMovement asteroid1Movement = asteroid1.GetComponent <AsteroidMovement>();
                                asteroid1Movement.asteroidVelocity = asteroids[j].GetComponent <AsteroidMovement>().asteroidVelocity *Random.Range(0.9f, 1.1f);
                                asteroid1Movement.firstIteration   = false;
                                asteroids.Add(asteroid1);

                                GameObject asteroid2 = Instantiate(asteroidSpawningScript.asteroidPrefabs[Random.Range(0, asteroidSpawningScript.asteroidPrefabs.Count)], asteroids[j].transform.position, Quaternion.identity);
                                asteroid2.transform.localScale /= 2;
                                AsteroidMovement asteroid2Movement = asteroid2.GetComponent <AsteroidMovement>();
                                asteroid2Movement.asteroidVelocity = asteroids[j].GetComponent <AsteroidMovement>().asteroidVelocity *Random.Range(0.9f, 1.1f);
                                asteroid2Movement.firstIteration   = false;
                                asteroids.Add(asteroid2);
                            }

                            //GameObject asteroid2 = Instantiate(asteroidSpawningScript.asteroidPrefabs[asteroidSpawningScript.asteroidPrefabIndex], asteroids[j].transform.position, Quaternion.identity);
                            Destroy(bullets[i]);
                            bullets.RemoveAt(i);
                            if (asteroidMovementScript.firstIteration)
                            {
                                score += 20;
                            }
                            else
                            {
                                score += 50;
                            }
                            Destroy(asteroids[j]);
                            asteroids.RemoveAt(j);
                            asteroidSpawningScript.asteroids = asteroids;
                            shipShootBulletScript.bullets    = bullets;
                            break;
                        }
                    }
                }
            }
        }
    }
Esempio n. 2
0
 // Update is called once per frame
 void Update()
 {
     inContact = false;
     if (collision == CollisionType.AABB)
     {
         for (int i = 1; i < collisionObjects.Length; i++)
         {
             if (CollisionDetection.AABBCollision(collisionObjects[0], collisionObjects[i]))
             {
                 inContact   = true;
                 indexNumber = i;
             }
         }
     }
     else
     {
         for (int i = 1; i < collisionObjects.Length; i++)
         {
             if (CollisionDetection.CircleCollision(collisionObjects[0], collisionObjects[i]))
             {
                 inContact   = true;
                 indexNumber = i;
             }
         }
     }
     if (inContact)
     {
         collisionObjects[indexNumber].color = Color.red;
         collisionObjects[0].color           = Color.red;
     }
     else
     {
         for (int i = 0; i < collisionObjects.Length; i++)
         {
             collisionObjects[i].color = Color.white;
         }
     }
     if (Input.GetKeyDown(KeyCode.Alpha1) && collision != CollisionType.AABB)
     {
         collision = CollisionType.AABB;
     }
     else if (Input.GetKeyDown(KeyCode.Alpha2) && collision != CollisionType.Circle)
     {
         collision = CollisionType.Circle;
     }
 }
    // Update is called once per frame
    void Update()
    {
        // Switches collision type on input
        if (Input.GetKeyDown(KeyCode.Alpha1))
        {
            collisionType = CollisionType.AABB;
        }
        else if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            collisionType = CollisionType.Circle;
        }

        // Keeps track of all objects that are colliding this frame
        List <GameObject> collidingObjects = new List <GameObject>();

        switch (collisionType)
        {
        case (CollisionType.AABB):
            for (int i = 0; i < obsticles.Length; i++)
            {
                // If there's a collision, add the colliding objects to the list
                if (CollisionDetection.AABBCollision(player, obsticles[i]))
                {
                    // Makes sure the player object doesn't get added multiple times
                    if (!collidingObjects.Contains(player))
                    {
                        collidingObjects.Add(player);
                    }

                    collidingObjects.Add(obsticles[i]);
                }
            }
            break;

        case (CollisionType.Circle):
            for (int i = 0; i < obsticles.Length; i++)
            {
                // If there's a collision, add the colliding objects to the list
                if (CollisionDetection.CircleCollision(player, obsticles[i]))
                {
                    // Makes sure the player object doesn't get added multiple times
                    if (!collidingObjects.Contains(player))
                    {
                        collidingObjects.Add(player);
                    }

                    collidingObjects.Add(obsticles[i]);
                }
            }
            break;
        }

        if (collidingObjects.Contains(player))
        {
            player.GetComponent <SpriteRenderer>().color = Color.red;
        }
        else
        {
            player.GetComponent <SpriteRenderer>().color = Color.white;
        }

        for (int i = 0; i < obsticles.Length; i++)
        {
            if (collidingObjects.Contains(obsticles[i]))
            {
                obsticles[i].GetComponent <SpriteRenderer>().color = Color.red;
            }
            else
            {
                obsticles[i].GetComponent <SpriteRenderer>().color = Color.white;
            }
        }
    }