Esempio n. 1
0
    public void ClearPopulation()
    {
        population     = 0.0f;
        farmers        = builders = traders = soldiers = scholars = 0;
        foodUnits      = 0.0f;
        foodEfficiency = 1.2f;
        sanitation     = 30;
        healthcare     = -0.2f;
        unrestDecay    = 0.8f;
        lastPopGrowth  = 0.0f;
        storedFood     = 0.0f;
        unrest         = unrestCultural = unrestReligious = 0.0f;

        culture      = null;
        cultureBonus = 0.0f;

        disaster         = null;
        disasterDuration = 0;

        religion      = null;
        religionBonus = 0.0f;

        infrastructurePoints = 0.0f;

        for (int i = 0; i < infrastructureLevels.Length; i++)
        {
            infrastructureLevels[i] = 1;
        }

        plannedInfrastructure = null;
        constructionBonus     = 0.0f;

        government = null;

        prosperity = 0.0f;

        foreach (WS_ResourceStack stack in resStacks)
        {
            stack.amount = 0;
        }

        caravan = null;

        qualityBonus      = 1.0f;
        exploitationBonus = 1.0f;

        armyBonus    = 0.5f;
        defenseBonus = 1.0f;

        currentTech      = null;
        storedTechPoints = 0.0f;
        availableTech.Clear();
        researchedTech.Clear();
    }
    protected override bool SuccessCheck()
    {
        int selector = Mathf.FloorToInt(Random.Range(0.0f, tile.government.borderingGovernments.Count - 0.01f));

        target = tile.government.borderingGovernments[selector];

        foreach (WS_Treaty treaty in tile.government.treaties)
        {
            if (treaty.target == target)
            {
                return(false);
            }
        }


        treaty  = TreatyType.NONE;
        opinion = tile.government.borderingOpinions[selector];

        if (opinion > 40.0f)
        {
            treaty = TreatyType.ALLIANCE;
        }
        else if (opinion > 20.0f)
        {
            treaty = TreatyType.TRADE_AGREEMENT;
        }

        else if (opinion > 10.0f)
        {
            treaty = TreatyType.NON_AGGRESSION;
        }
        else if (opinion > -50.0f && opinion < -20)
        {
            treaty = TreatyType.TRADE_EMBARGO;
        }

        else if (tile.government.soldierPool == 0)
        {
            treaty = TreatyType.WAR;
        }

        if (treaty == TreatyType.WAR)
        {
            return(Random.Range(0.0f, 1.0f) < 0.03f);
        }
        else
        {
            return(Random.Range(0.0f, 1.0f) < 0.2f);
        }
    }
Esempio n. 3
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;
            }
        }
    }