예제 #1
0
        private void Awake()
        {
            InitiatePool();
            InitiateSpawner();

            enemySpawner.Spawn();
        }
예제 #2
0
 private IEnumerator Fire(float interval)
 {
     while (true)
     {
         _spawner?.Spawn(projectile);
         yield return(new WaitForSeconds(interval));
     }
 }
예제 #3
0
        private ISpawner InstantiateSpawner(int amount, float delay, IContentPrefab prefab)
        {
            GameObject newSpawner = Instantiate(NestedSpawner);
            ISpawner   spawner    = newSpawner.GetComponent <ISpawner>();

            spawner.OnSpawn    += OnSpawnerSpawn;
            spawner.OnFinished += OnSpawnerFinished;
            spawner.Spawn(amount, delay, prefab);
            return(spawner);
        }
예제 #4
0
        /// <summary>
        /// Start enemy spawning
        /// </summary>
        /// <param name="position">start point</param>
        /// <param name="vehicle"></param>
        /// <returns></returns>
        public void Update()
        {
            float currentTime = Time.time;

            if (currentTime > cleanTime)
            {
                // return to pool, if out of background
                DisableUnused();

                cleanTime = currentTime + CleanTimePeriod;
            }

            if (!shouldSpawn)
            {
                return;
            }

            if (target == null)
            {
                // find target
                FindTarget();

                // and try next time
                return;
            }

            // spawn to the limit of background blocks
            while ((currentPos - target.Target.position).sqrMagnitude < MaxSpawnDistance * MaxSpawnDistance)
            {
                // add to the queue new spawner indices
                //SetNextSpawner();
                //int index = spawnersQueue.Dequeue();

                int      index   = Random.Range(0, spawners.Count);
                ISpawner spawner = spawners[index];

                Vector2 bounds = Background.GetBlockBounds(currentPos);

                spawner.Spawn(currentPos, target.Target, bounds, spawnedObjects);

                // to the next spawner point
                float d = spawner.Distance;

                currentPos += target.Target.forward * d;
            }
        }
예제 #5
0
 private ITetromino CreateTetromino()
 {
     return(_spawner.Spawn().GetComponent <ITetromino>());
 }