Example #1
0
    public void PopulateSpot(List <Coord> spots, PrefabSize size)
    {
        List <PrefabData>          prefabsAvaliable = new List <PrefabData>();
        List <EssentialPrefabData> essentials       = new List <EssentialPrefabData>();
        float combinedDensity = 0;

        foreach (EssentialPrefabData prefab in essentialLevelPrefabs)
        {
            if (prefab.prefabSize == size && spots.Count > 0)
            {
                int        randomChoice = Random.Range(0, spots.Count - 1);
                Vector3    position     = CoordToWorldSpace(spots[randomChoice]) + new Vector3(Random.Range(-prefab.prefabPlacementRandomness / 2, prefab.prefabPlacementRandomness / 2), 0, Random.Range(-prefab.prefabPlacementRandomness / 2, prefab.prefabPlacementRandomness / 2));
                Quaternion rotation     = prefab.RandomRotationOnY ? Quaternion.Euler(0, Random.Range(0, 360), 0) : Quaternion.identity;
                Instantiate(prefab.prefab, position, rotation, levelObjectHolder);
                spots.RemoveAt(randomChoice);
            }
        }

        foreach (PrefabData prefab in levelPrefabs)
        {
            if (prefab.prefabSize == size)
            {
                prefabsAvaliable.Add(prefab);
                combinedDensity += prefab.levelDensity;
            }
        }
        if (prefabsAvaliable.Count > 0)
        {
            foreach (Coord spot in spots)
            {
                float      randomChoice   = Random.Range(0, combinedDensity);
                PrefabData prefabChoice   = null;
                float      currentDensity = 0;
                foreach (PrefabData prefab in prefabsAvaliable)
                {
                    if (randomChoice <= currentDensity + prefab.levelDensity)
                    {
                        prefabChoice = prefab;
                        break;
                    }
                    currentDensity += prefab.levelDensity;
                }
                Vector3    position = CoordToWorldSpace(spot) + new Vector3(Random.Range(-prefabChoice.prefabPlacementRandomness / 2, prefabChoice.prefabPlacementRandomness / 2), 0, Random.Range(-prefabChoice.prefabPlacementRandomness / 2, prefabChoice.prefabPlacementRandomness / 2));;
                Quaternion rotation = prefabChoice.RandomRotationOnY?Quaternion.Euler(0, Random.Range(0, 360), 0):Quaternion.identity;
                Instantiate(prefabChoice.prefab, position, rotation, levelObjectHolder);
            }
        }
    }
Example #2
0
    public void FindSpots(PrefabSize size, int passes, ref List <Coord> spotList, Color lineColour)
    {
        if (availibleLevel.Count > passes)
        {
            for (int i = 0; i < passes; i++)
            {
                int   randomIdx     = Random.Range(0, availibleLevel.Count - 1);
                Coord selectedCoord = availibleLevel[randomIdx];

                Vector3 v = CoordToWorldSpace(selectedCoord);
                //Debug.DrawLine(v, v + Vector3.up * 10, lineColour, 20);

                if (CheckIfFit(selectedCoord.x, selectedCoord.y, (int)size))
                {
                    spotList.Add(selectedCoord);
                    RemoveSpace(selectedCoord.x, selectedCoord.y, (int)size);
                }
            }
        }
    }