Example #1
0
    override public float Chance(WS_Tile tile)
    {
        float chance = 0.0f;

        foreach (WS_Tile neighbor in tile.Neighbors())
        {
            if (neighbor.seaBody)
            {
                chance += 0.0001f;
            }
        }

        return(chance);
    }
Example #2
0
    public void CreateSchism(WS_Tile origin, EventModule module)
    {
        List <WS_Tile> closedTiles = new List <WS_Tile>();
        List <WS_Tile> openTiles   = new List <WS_Tile>();

        float unrestPower = 500.0f;

        openTiles.Add(origin);

        while (openTiles.Count > 0)
        {
            WS_Tile currentTile = openTiles[0];

            foreach (WS_Tile neighbor in currentTile.Neighbors())
            {
                if (neighbor.population == 0.0f)
                {
                    continue;
                }

                if (neighbor.government != origin.government || origin.government.capital == neighbor)
                {
                    continue;
                }

                switch (module)
                {
                case EventModule.POPULATION:
                    if (unrestPower > 100.0f && !openTiles.Contains(neighbor) && !closedTiles.Contains(neighbor))
                    {
                        unrestPower -= (100.0f - currentTile.unrest);
                        openTiles.Add(neighbor);
                    }
                    break;

                case EventModule.CULTURE:
                    if (neighbor.culture == origin.culture && !openTiles.Contains(neighbor) && !closedTiles.Contains(neighbor))
                    {
                        openTiles.Add(neighbor);
                    }
                    break;

                case EventModule.RELIGION:
                    if (neighbor.religion == origin.religion && !openTiles.Contains(neighbor) && !closedTiles.Contains(neighbor))
                    {
                        openTiles.Add(neighbor);
                    }
                    break;
                }
            }

            closedTiles.Add(currentTile);
            openTiles.RemoveAt(0);
        }

        if (closedTiles.Count > 4)
        {
            WS_Government newGov = new WS_Government(origin);
            newGov.rulingCulture  = origin.culture;
            newGov.rulingReligion = origin.religion;
            newGov.preferredTech  = (EventModule)Mathf.FloorToInt(Random.Range(0, (int)EventModule.MAX - 1));

            foreach (WS_Tile tile in closedTiles)
            {
                tile.government = newGov;
                tile.unrest     = tile.unrestCultural = tile.unrestReligious = 0.0f;
            }
        }
    }