Example #1
0
 public void UpdateRegionData()
 {
     for (int i = 0; i < this.regionDataByEmpires.Length; i++)
     {
         global::Empire empire = base.Game.Empires[i];
         this.empireBorderSize[i] = 0;
         for (int j = 0; j < this.regionDataByEmpires[i].Length; j++)
         {
             AIRegionData airegionData = this.regionDataByEmpires[i][j];
             Region       region       = base.Game.World.Regions[j];
             airegionData.HarassingScore = 0f;
             this.UpdateColonizationStatusOfRegion(empire, region, airegionData);
             this.UpdateExplorationRatioOfRegion(empire, region, airegionData);
             this.UpdatePacificationStatusOfRegion(empire, region, airegionData);
             this.UpdateBorderStatusOfRegion(empire, region, airegionData);
             this.UpdatePointOfInterestStatus(empire, region, airegionData);
             this.empireBorderSize[i] += airegionData.BorderWithMe;
         }
         AISafetyData safetyData = this.safetyDataByEmpires[i];
         if (this.UpdateSafetyData(empire, safetyData))
         {
             for (int k = 0; k < this.regionDataByEmpires[i].Length; k++)
             {
                 AIRegionData airegionData2 = this.regionDataByEmpires[i][k];
                 airegionData2.NeedToRecomputePathes();
             }
         }
     }
 }
Example #2
0
    private bool UpdateSafetyData(global::Empire empire, AISafetyData safetyData)
    {
        DepartmentOfTheInterior    agency  = empire.GetAgency <DepartmentOfTheInterior>();
        DepartmentOfForeignAffairs agency2 = empire.GetAgency <DepartmentOfForeignAffairs>();
        DepartmentOfScience        agency3 = empire.GetAgency <DepartmentOfScience>();

        if (agency.Cities.Count <= 0)
        {
            return(false);
        }
        bool result = false;

        for (int i = 0; i < this.world.Regions.Length; i++)
        {
            Region region = this.world.Regions[i];
            if (region.City != null && region.City.Empire != null)
            {
                global::Empire     empire2            = base.Game.Empires[region.City.Empire.Index];
                DiplomaticRelation diplomaticRelation = agency2.GetDiplomaticRelation(empire2);
                if (empire2 != empire && (diplomaticRelation.State.Name == DiplomaticRelationState.Names.Unknown || diplomaticRelation.HasActiveAbility(DiplomaticAbilityDefinition.ColdWarAttackArmies) || diplomaticRelation.HasActiveAbility(DiplomaticAbilityDefinition.AttackArmies)))
                {
                    if (safetyData.SafeRegionIndexes.Contains(i))
                    {
                        safetyData.SafeRegionIndexes.Remove(i);
                        result = true;
                    }
                    if (!safetyData.UnsafeRegionIndexes.Contains(i))
                    {
                        safetyData.UnsafeRegionIndexes.Add(i);
                        result = true;
                    }
                }
                else if (empire2 == empire)
                {
                    if (safetyData.UnsafeRegionIndexes.Contains(i))
                    {
                        safetyData.UnsafeRegionIndexes.Remove(i);
                        result = true;
                    }
                    if (!safetyData.SafeRegionIndexes.Contains(i))
                    {
                        safetyData.SafeRegionIndexes.Add(i);
                        result = true;
                    }
                }
            }
            else
            {
                if (safetyData.SafeRegionIndexes.Contains(i))
                {
                    safetyData.SafeRegionIndexes.Remove(i);
                    result = true;
                }
                if (safetyData.UnsafeRegionIndexes.Contains(i))
                {
                    safetyData.UnsafeRegionIndexes.Remove(i);
                    result = true;
                }
            }
        }
        if (!safetyData.CanGoOnWater && agency3.HaveResearchedShipTechnology())
        {
            safetyData.CanGoOnWater = true;
            result = true;
        }
        return(result);
    }
Example #3
0
    public bool UpdateRegionDataPathes(AIRegionData regionData)
    {
        global::Empire      empire = base.Game.Empires[regionData.EmpireIndex];
        DepartmentOfScience agency = empire.GetAgency <DepartmentOfScience>();

        if (empire.GetAgency <DepartmentOfTheInterior>().Cities.Count <= 0)
        {
            return(true);
        }
        Region             region             = this.world.Regions[regionData.RegionIndex];
        PathfindingContext pathfindingContext = new PathfindingContext(GameEntityGUID.Zero, null, (!agency.HaveResearchedShipTechnology()) ? (PathfindingMovementCapacity.Ground | PathfindingMovementCapacity.FrozenWater) : (PathfindingMovementCapacity.Ground | PathfindingMovementCapacity.Water | PathfindingMovementCapacity.FrozenWater));

        pathfindingContext.RefreshProperties(1f, float.PositiveInfinity, false, false, float.PositiveInfinity, float.PositiveInfinity);
        pathfindingContext.Greedy = true;
        PathfindingFlags flags = PathfindingFlags.IgnoreArmies | PathfindingFlags.IgnoreEncounterAreas | PathfindingFlags.IgnoreFogOfWar | PathfindingFlags.IgnoreZoneOfControl;

        regionData.NormalPath = null;
        foreach (AIRegionData airegionData in this.regionDataByEmpires[empire.Index])
        {
            if (airegionData.IsColonizedByMe)
            {
                Region            region2           = this.world.Regions[airegionData.RegionIndex];
                PathfindingResult pathfindingResult = this.pathfindingService.FindPath(pathfindingContext, region2.City.WorldPosition, region.Barycenter, PathfindingManager.RequestMode.Default, null, flags, null);
                if (pathfindingResult != null && (regionData.NormalPath == null || regionData.NormalPath.CompletPathLength > pathfindingResult.CompletPathLength))
                {
                    regionData.NormalPath = pathfindingResult;
                }
            }
        }
        AISafetyData aisafetyData = this.safetyDataByEmpires[regionData.EmpireIndex];

        if (regionData.NormalPath != null && aisafetyData.UnsafeRegionIndexes.Count > 0)
        {
            bool flag = false;
            foreach (WorldPosition position in regionData.NormalPath.GetCompletePath())
            {
                int regionIndex = (int)this.worldPositionningService.GetRegionIndex(position);
                if (aisafetyData.UnsafeRegionIndexes.Contains(regionIndex))
                {
                    flag = true;
                    break;
                }
            }
            if (flag)
            {
                if (!aisafetyData.UnsafeRegionIndexes.Contains(region.Index))
                {
                    regionData.SafePath = null;
                    foreach (AIRegionData airegionData2 in this.regionDataByEmpires[empire.Index])
                    {
                        if (airegionData2.IsColonizedByMe)
                        {
                            Region            region3            = this.world.Regions[airegionData2.RegionIndex];
                            PathfindingResult pathfindingResult2 = this.pathfindingService.FindPath(pathfindingContext, region3.City.WorldPosition, region.Barycenter, PathfindingManager.RequestMode.Default, aisafetyData.SafePathfindingContext, flags, null);
                            if (pathfindingResult2 != null && (regionData.SafePath == null || regionData.SafePath.CompletPathLength > pathfindingResult2.CompletPathLength))
                            {
                                regionData.SafePath = pathfindingResult2;
                            }
                        }
                    }
                }
                else
                {
                    regionData.SafePath = null;
                }
            }
            else
            {
                regionData.SafePath = regionData.NormalPath;
            }
        }
        return(false);
    }