Exemplo n.º 1
0
    /// <summary>
    /// Spawns a random SpawnData from the list into the world
    /// </summary>
    void Spawn()
    {
        // Gets a random SpawningData from the availableSpawns list
        SpawningData spawningData = GetSpawningData(ref availableSpawns);

        if (spawningData == null)
        {
            return;
        }

        float   dist = 0, angle = 0;
        Vector3 randPoint = Vector3.zero;

        // Get position
        if (spawningData.SpawnData != null)
        {
            dist = Random.Range(-spawningData.SpawnData.MaxSpawnDist, spawningData.SpawnData.MaxSpawnDist);

            if (dist < 0)
            {
                dist = Mathf.Clamp(dist, -spawningData.SpawnData.MinSpawnDistance, -spawningData.SpawnData.MaxSpawnDist);
            }
            else
            {
                dist = Mathf.Clamp(dist, spawningData.SpawnData.MinSpawnDistance, spawningData.SpawnData.MaxSpawnDist);
            }

            if (!SpawningOnNavMesh)
            {
                angle = Random.Range(-90, 90);

                randPoint = Vector3.forward;
                randPoint = Quaternion.AngleAxis(angle, Vector3.up) * randPoint;
                randPoint = randPoint.normalized * dist;

                randPoint += transform.position;
            }

            if (SpawningOnNavMesh)
            {
                // Get a random point on a NavMesh
                randPoint = Helper.RandomNavSphere(transform.position, Mathf.Abs(dist), -1);
            }
        }
        else
        {
            return;
        }

        GameObject spawnedObject = Instantiate(spawningData.SpawnData.PrefabToSpawn, randPoint, Quaternion.identity, transform);

        if (spawnedObject == null)
        {
            return;
        }

        spawningData.CurrentSpawns++;
    }
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        SpawningData myScript = (SpawningData)target;

        if (GUILayout.Button("Export Json file"))
        {
            myScript.SerializeSpawnData();
        }
    }
Exemplo n.º 3
0
    /// <summary>
    /// Trims a list of SpawnDatas to only contain ones that can still spawn
    /// </summary>
    /// <param name="spawnList">List to trim</param>
    /// <returns>A random SpawnData from the available list</returns>
    SpawningData GetSpawningData(ref List <SpawningData> spawnList)
    {
        if (spawnList.Count == 0)
        {
            return(null);
        }

        int          spawnIndex   = Random.Range(0, spawnList.Count);
        SpawningData spawningData = spawnList[spawnIndex];

        if (spawningData.CurrentSpawns >= spawningData.SpawnData.MaxSpawns)
        {
            spawnList.Remove(spawningData);

            return(GetSpawningData(ref spawnList));
        }

        return(spawningData);
    }