/// <summary> /// When the create asteroid signal is broadcast, set up an asteroid at a particular location /// </summary> /// <param name="signal"></param> /// <returns></returns> private bool OnCreateAsteroidSignal(CreateAsteroidSignal signal) { signal.position.x = Mathf.Clamp(signal.position.x, bounds.xMin, bounds.xMax); signal.position.y = Mathf.Clamp(signal.position.y, bounds.yMin, bounds.yMax); var asteroid = GameObject.Instantiate <Asteroid>(asteroidPrefab, signal.position, Quaternion.identity, this.transform); asteroid.Size = signal.size; asteroid.Bounds = bounds; return(true); }
void Awake() { _cachedTransform = this.transform; _axis = new Vector3(Random.Range(0, 360), Random.Range(0, 360), Random.Range(0, 360)); var speed = Random.Range(minMaxSpeed.x, minMaxSpeed.y); var radAngle = Random.Range(0, 360f) * Mathf.Deg2Rad; _direction = new Vector3(Mathf.Cos(radAngle), Mathf.Sin(radAngle), 0) * speed; // cache the create asteroid signal so that we don't have to keep recreating it _createAsteroidSignal = new CreateAsteroidSignal(); }
/// <summary> /// When the reset signal is broadcast, destroy all the asteroids, then /// create new ones /// </summary> /// <param name="signal"></param> /// <returns></returns> private bool OnResetGameSignal(ResetGameSignal signal) { var asteroids = GetComponentsInChildren <Asteroid>(); foreach (var asteroid in asteroids) { Destroy(asteroid.gameObject); } CreateAsteroidSignal create = new CreateAsteroidSignal(); for (var i = 0; i < asteroidCount; i++) { var spawnRadius = Random.Range(minMaxSpawnRadius.x, minMaxSpawnRadius.y); var spawnAngle = Random.Range(0, 360f) * Mathf.Deg2Rad; create.position = new Vector3(Mathf.Cos(spawnAngle), Mathf.Sin(spawnAngle), 0) * spawnRadius; create.size = Asteroid.AsteroidSize.Large; OnCreateAsteroidSignal(create); } return(true); }