Example #1
0
    static void SpawnRocks(PrefabSpawner spawner)
    {
        var allowedNodeTypes = new MapGraph.NodeType[] {
            MapGraph.NodeType.Grass,
            MapGraph.NodeType.TallGrass,
            MapGraph.NodeType.Rocky
        };

        var rockNodes = mapGraph.FilterNodes(allowedNodeTypes).ToList();
        int numRocks  = (int)(rockNodes.Count * settings.rockAvgDensity);

        for (int i = 0; i < numRocks; i++)
        {
            // Randomly select a node. If it has more than the maximum number
            // of occupants, try again.
            var node = rockNodes.ElementAt(prng.Next(rockNodes.Count));
            if (node.numEnvironmentOccupants > 0)
            {
                i--;
                continue;
            }

            MeshRenderer obj = spawner.SpawnPrefab(
                settings.rockPrefab,
                RandomOffset(node.centerPoint, mapGraph.center, settings.rockPositionDeviation),
                RandomRotation(settings.rockRotationDeviation),
                RandomScaling(settings.rockScale, settings.rockScaleDeviation)
                );
            obj.transform.gameObject.AddComponent <MeshCollider>();

            // Increment the number of environmental occupants for the
            // current node.
            node.numEnvironmentOccupants++;
        }
    }
Example #2
0
    private static void FloodFill(
        MapGraph.Node node,
        MapGraph.NodeType targetType,
        MapGraph.NodeType replacementType
        )
    {
        if (targetType == replacementType ||
            node.nodeType != targetType)
        {
            return;
        }

        node.nodeType = replacementType;
        foreach (var neighbor in node.GetNeighbourNodes())
        {
            FloodFill(neighbor, targetType, replacementType);
        }
    }