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); } }
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); }