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); }
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); }