public IEnumerator generateImmediate()
    {
        initData();
        int squareChance = (int)(100 / total);
        int steps        = 0;

        generateFirstRect();
        steps++;
        while (steps < total)
        {
            if (Randomiser.rollUnder(squareChance))
            {
                yield return(StartCoroutine(squareStep(0)));
            }
            else
            {
                yield return(StartCoroutine(rectangleStep(0)));
            }
            steps++;
            squareChance = (int)(100 * steps / total);
        }
        while (minaretNumber > 0)
        {
            yield return(StartCoroutine(minaretStep(0)));

            minaretNumber--;
        }
        updateFreeCorners();
        GameObject[] cubes = GameObject.FindGameObjectsWithTag("temp");
        foreach (GameObject cube in cubes)
        {
            Destroy(cube);
        }
    }
Esempio n. 2
0
 public static float oneOf(float x, float y)
 {
     if (Randomiser.rollUnder(50))
     {
         return(x);
     }
     return(y);
 }
    Graph <Vector2, Segment> generate(List <Vector2> seed)
    {
        int segmentCount = 0;

        G             = new Graph <Vector2, Segment>(false);
        aliveSegments = new List <Segment>();
        Segment cur, continuation, fork;
        Vector2 v;

        foreach (Vector2 s in seed)
        {
            v   = Random.insideUnitCircle * (MIN_SEGMENT_LENGTH + 1);
            cur = new Segment(s, s + v);
            aliveSegments.Add(cur);
            G.addEdge(cur.from, cur.to, cur);
        }
        while (aliveSegments.Count > 0 && segmentCount < segmentLimit)
        {
            cur = aliveSegments[0];
            aliveSegments.Remove(cur);
            if (!isInMap(cur))
            {
                segmentCount++;
                continue;
            }
            continuation = proposeContinuation(cur);
            if (tryAdd(continuation))
            {
                segmentCount++;
            }
            if (Randomiser.rollUnder(FORK_CHANCE))
            {
                fork = proposeFork(continuation, 90);
                if (tryAdd(fork))
                {
                    segmentCount++;
                }
            }
            if (Randomiser.rollUnder(FORK_CHANCE))
            {
                fork = proposeFork(continuation, -90);
                if (tryAdd(fork))
                {
                    segmentCount++;
                }
            }
        }
        return(G);
    }
Esempio n. 4
0
    IEnumerator mainCoroutine()
    {
        Building   building;
        GameObject newBuilding;

        foundGen = gameObject.GetComponent <FoundationGenerator>();
        yield return(StartCoroutine(foundGen.generateImmediate()));

        foundData.receiveData(foundGen);

        foreach (BuildingFoundation b in foundData.rectangles)
        {
            if (Randomiser.rollUnder(50))
            {
                newBuilding = Part.placeRootPart <PlainBuilding>("plain building", b.center);
            }
            else
            {
                newBuilding = Part.placeRootPart <Courtyard>("plain building", b.center);
            }
            building            = newBuilding.GetComponent <Building> ();
            building.foundation = b;
            building.go();
        }

        foreach (BuildingFoundation b in foundData.minarets)
        {
            newBuilding         = Part.placeRootPart <Minaret>("minaret", b.center);
            building            = newBuilding.GetComponent <Building>();
            building.foundation = b;
            building.go();
        }

        foreach (Junction j in foundData.junctions)
        {
            newBuilding = Part.placeRootPart <JunctionPart>("junction", j.position);
            newBuilding.transform.LookAt(newBuilding.transform.position + j.axis);
        }

        foreach (BuildingFoundation m in foundData.squares)
        {
            newBuilding         = Part.placeRootPart <Mosque>("mosque", m.center);
            building            = newBuilding.GetComponent <Building> ();
            building.foundation = m;
            building.go();
        }
    }