示例#1
0
    void CheckCollision()
    {
        // check for asteroid collision
        hitBy = Physics.OverlapCapsule(transform.position + Vector3.up * 10,
                                       transform.position + Vector3.down * 10, .4f, GameManager.gm.asteroidLayer);

        if (hitBy.Length > 0)
        {
            wasHit   = true;
            chunkHit = hitBy[0].GetComponent <AsteroidChunk>();
            // if any collision detected
            // if PC still has lives remaining
            if (chunkHit && RemoveLife())
            {
                GameManager.gm.livesText.text = currentLives.ToString();
                // if attached to big asteroid
                if (chunkHit.mainAsteroid)
                {
                    chunkHit.mainAsteroid.RemoveChunk(chunkHit);
                    chunkHit.mainAsteroid.rb.AddTorque(chunkHit.mainAsteroid.randomVector + chunkHit.randomVector * 100);
                }
            }
            else
            {
                // if out of lives
                GameManager.gm.OutOfLives();
            }
            GameManager.gm.wm.RemoveChunk(chunkHit);
            Destroy(chunkHit.gameObject);
            chunkHit = null;
            Instantiate(GameManager.gm.pcHitParticle, transform.position, Quaternion.identity);
        }
    }
示例#2
0
    public void RemoveChunk(AsteroidChunk toRemove)
    {
        if (allAsteroidChunks.Count > 0)
        {
            // remove chunk that was shot
            allAsteroidChunks.Remove(toRemove);

            // check whether any chunks remain
            if (allAsteroidChunks.Count <= 2)
            {
                // if 2 or fewer chunks remain, split them all
                for (int i = allAsteroidChunks.Count - 1; i > 0; i--)
                {
                    allAsteroidChunks[i].AsteroidInteraction();
                }
                GameManager.gm.AddPoints(GameManager.PointEvent.asteroidSplit);
                GameManager.gm.wm.RemoveAsteroid(this);

                // double check all children in hierarchy are gone
                if (transform.childCount != 0)
                {
                    for (int i = transform.childCount - 1; i >= 0; i--)
                    {
                        transform.GetChild(i).GetComponent <AsteroidChunk>().AsteroidInteraction();
                    }
                }

                Destroy(gameObject);
            }
        }
    }
    public void RemoveChunk(AsteroidChunk _chunk)
    {
        if (chunksRemaining.Count != 0)
        {
            chunksRemaining.Remove(_chunk);

            // if no asteroids or chunks left, move to next wave
            if (!spawning && asteroidsRemaining.Count == 0 && chunksRemaining.Count == 0)
            {
                spawning = true;
                SpawnWave();
            }
        }
    }
 public void AddChunk(AsteroidChunk _chunk)
 {
     chunksRemaining.Add(_chunk);
 }