protected void spawn() { if (spawnables.Count == 0) { Debug.LogError("No Spawnables in " + this.name); } int roll = Random.Range(0, spawnables.Count); GameObject obj = GameObject.Instantiate(spawnables[roll].gameObject); SpawnableBehavior spawnable = obj.GetComponent <SpawnableBehavior>(); willSpawn(spawnable); float distFromSpawnPoint = Random.Range(0, spawnRadius); Vector3 position = Random.insideUnitSphere * distFromSpawnPoint + this.spawnPoint.position; spawnable.Position = position; spawnable.WasSpawned(this); didSpawn(spawnable); }
protected abstract void didSpawn(SpawnableBehavior spawnable);
protected abstract void willSpawn(SpawnableBehavior spawnable);
private void onSpawnableDestroyed(SpawnableBehavior spawnable) { spawnable.Destroyed -= onSpawnableDestroyed; spawn(); }
protected override void didSpawn(SpawnableBehavior spawnable) { // Remove if already listening, to prevent duplicates spawnable.Destroyed -= onSpawnableDestroyed; spawnable.Destroyed += onSpawnableDestroyed; }
protected override void willSpawn(SpawnableBehavior spawnable) { }
protected override void didSpawn(SpawnableBehavior spawnable) { }