Example #1
0
        /// <summary>
        /// Places an entity within the specified radius of the spawner.
        /// </summary>
        protected void PlaceSpawnedEntityInRadius(SpawnedEntity spawnedEntity)
        {
            var rand1    = UnityEngine.Random.Range(-positionInfo.radius, positionInfo.radius);
            var rand2    = UnityEngine.Random.Range(-positionInfo.radius, positionInfo.radius);
            var position = (positionInfo.plane == PositionInfo.Plane.X_Z)
                ? new Vector3(transform.position.x + rand1, transform.position.y, transform.position.z + rand2)
                : new Vector3(transform.position.x + rand1, transform.position.y + rand2, transform.position.z);
            var navMeshAgent = spawnedEntity.GetComponent <NavMeshAgent>();

            if (navMeshAgent != null)
            {
                navMeshAgent.Warp(position);
            }
            else
            {
                spawnedEntity.transform.position = position;
            }
            spawnedEntities.Add(spawnedEntity);
        }
Example #2
0
        /// <summary>
        /// Places an entity at an available spawnpoint.
        /// </summary>
        protected virtual void PlaceSpawnedEntityInSpawnpoint(SpawnedEntity spawnedEntity)
        {
            // Get available positions:
            m_availablePositions.Clear();
            for (int i = 0; i < spawnedEntities.Count; i++)
            {
                if (spawnedEntities[i] == null)
                {
                    m_availablePositions.Add(i);
                }
            }
            if (m_availablePositions.Count == 0)
            {
                return;
            }

            // Move entity to a random available position:
            var index = m_availablePositions[UnityEngine.Random.Range(0, m_availablePositions.Count - 1)];

            spawnedEntities[index] = spawnedEntity;
            var spawnpoint = positionInfo.spawnpoints[Mathf.Min(index, positionInfo.spawnpoints.Length - 1)];

            if (spawnpoint != null)
            {
                var navMeshAgent = spawnedEntity.GetComponent <NavMeshAgent>();
                if (navMeshAgent != null)
                {
                    navMeshAgent.Warp(spawnpoint.transform.position);
                }
                else
                {
                    spawnedEntity.transform.position = spawnpoint.transform.position;
                }
                spawnedEntity.transform.rotation = spawnpoint.transform.rotation;
            }
        }