public static Region GetValidKaijuRegion() { Region[] array = (from region in KaijuCouncil.world.Regions where KaijuCouncil.IsRegionValidForSettleKaiju(region) select region).ToArray <Region>(); if (array.Length > 0) { return(array[KaijuCouncil.random.Next(0, array.Length)]); } return(null); }
public static bool IsPositionValidForSettleKaiju(WorldPosition worldPosition, Kaiju kaiju = null) { if (!KaijuCouncil.IgnoreRegionRequirements && !KaijuCouncil.IsRegionValidForSettleKaiju(KaijuCouncil.worldPositionService.GetRegion(worldPosition))) { return(false); } if (KaijuCouncil.worldPositionService.IsFrozenWaterTile(worldPosition) || KaijuCouncil.worldPositionService.IsWaterTile(worldPosition)) { return(false); } Army armyAtPosition = KaijuCouncil.worldPositionService.GetArmyAtPosition(worldPosition); return(KaijuCouncil.attractivenessMap.GetValue(worldPosition) && (armyAtPosition == null || (kaiju != null && armyAtPosition.Empire.Index == kaiju.Empire.Index && armyAtPosition.GUID == kaiju.KaijuArmy.GUID)) && KaijuCouncil.worldPositionService.GetDistrict(worldPosition) == null); }
private void GetClosestReachableNeutralRegion(Kaiju kaiju, int MaxDistance) { if (this.TriedToFindNeutralRegion) { return; } this.TriedToFindNeutralRegion = true; if (this.ClosestNeutralRegion != null && !this.ClosestNeutralRegion.IsRegionColonized()) { return; } this.ClosestNeutralRegion = null; List <Region> list = new List <Region>(); Region region = this.worldPositioningService.GetRegion(kaiju.KaijuArmy.WorldPosition); if (region != null && KaijuCouncil.IsRegionValidForSettleKaiju(region)) { this.ClosestNeutralRegion = region; return; } for (int i = 0; i < this.worldPositioningService.World.Regions.Length; i++) { Region region2 = this.worldPositioningService.World.Regions[i]; if (KaijuCouncil.IsRegionValidForSettleKaiju(region2) && this.worldPositioningService.GetDistance(region2.Barycenter, kaiju.KaijuArmy.WorldPosition) < MaxDistance) { list.Add(region2); } } if (list.Count == 0) { return; } list.Sort((Region left, Region right) => this.worldPositioningService.GetDistance(left.Barycenter, kaiju.KaijuArmy.WorldPosition).CompareTo(this.worldPositioningService.GetDistance(right.Barycenter, kaiju.KaijuArmy.WorldPosition))); foreach (Region region3 in list) { if (this.pathfindingService.FindPath(kaiju.KaijuArmy, kaiju.KaijuArmy.WorldPosition, region3.Barycenter, PathfindingManager.RequestMode.Default, null, PathfindingFlags.IgnoreArmies | PathfindingFlags.IgnoreFogOfWar | PathfindingFlags.IgnoreSieges | PathfindingFlags.IgnoreKaijuGarrisons, null) != null) { this.ClosestNeutralRegion = region3; break; } } }
private bool IsRelocationMessageValid(KaijuRelocationMessage message) { Kaiju kaiju = null; if (!this.gameEntityRepositoryService.TryGetValue <Kaiju>(message.KaijuGUID, out kaiju) || !this.MajorEmpire.TamedKaijus.Contains(kaiju)) { return(false); } if (kaiju.OnArmyMode()) { return(false); } WorldPosition targetPosition = message.TargetPosition; if (!targetPosition.IsValid || !KaijuCouncil.IsPositionValidForSettleKaiju(targetPosition, null)) { return(false); } Region region = this.worldPositionningService.GetRegion(message.TargetPosition); if (region == null || !KaijuCouncil.IsRegionValidForSettleKaiju(region)) { return(false); } for (int i = 0; i < this.validatedRelocationMessages.Count; i++) { KaijuRelocationMessage kaijuRelocationMessage = this.validatedRelocationMessages[i]; GameEntityGUID kaijuGUID = message.KaijuGUID; GameEntityGUID kaijuGUID2 = kaijuRelocationMessage.KaijuGUID; if (kaijuGUID == kaijuGUID2) { return(false); } int regionIndex = (int)this.worldPositionningService.GetRegionIndex(message.TargetPosition); int regionIndex2 = (int)this.worldPositionningService.GetRegionIndex(kaijuRelocationMessage.TargetPosition); if (regionIndex == regionIndex2) { return(false); } } return(true); }
public Region GetMostProfitableRegionForKaiju(Kaiju kaiju, List <Region> excludedRegions = null) { List <Region> list = new List <Region>(); for (int i = 0; i < this.worldPositionningService.World.Regions.Length; i++) { Region region2 = this.worldPositionningService.World.Regions[i]; if ((excludedRegions == null || !excludedRegions.Contains(region2)) && (region2 == kaiju.Region || KaijuCouncil.IsRegionValidForSettleKaiju(region2))) { list.Add(region2); } } if (list.Count == 0) { return(null); } if (this.departmentOfTheInterior.Cities != null && this.departmentOfTheInterior.NonInfectedCities.Count == 1) { List <Region> list2 = this.worldPositionningService.GetNeighbourRegions(this.departmentOfTheInterior.NonInfectedCities[0].Region, false, false).ToList <Region>(); for (int j = 0; j < list2.Count; j++) { if ((excludedRegions != null && excludedRegions.Contains(list2[j])) || (list2[j] != kaiju.Region && !KaijuCouncil.IsRegionValidForSettleKaiju(list2[j]))) { list2.RemoveAt(j); j--; } } if (list2.Count > 0) { list = list2; } } if (this.departmentOfTheInterior.Cities != null && this.departmentOfTheInterior.Cities.Count > 0) { return((from region in list orderby this.worldPositionningService.GetNeighbourRegionsWithCityOfEmpire(region, kaiju.MajorEmpire, false).Length descending, GuiSimulation.Instance.FilterRegionResources(region).Count descending, this.worldPositionningService.GetDistance(region.Barycenter, this.departmentOfTheInterior.Cities[0].WorldPosition) select region).First <Region>()); } return((from region in list orderby GuiSimulation.Instance.FilterRegionResources(region).Count descending select region).First <Region>()); }
public Region GetBestSupportRegionForKaiju(Kaiju kaiju, Army ArmyToSupport, List <Region> excludedRegions = null) { List <Region> list = new List <Region>(); int distance = this.worldPositionningService.GetDistance(kaiju.WorldPosition, ArmyToSupport.WorldPosition); for (int i = 0; i < this.worldPositionningService.World.Regions.Length; i++) { Region region = this.worldPositionningService.World.Regions[i]; if ((excludedRegions == null || !excludedRegions.Contains(region)) && (region == kaiju.Region || (KaijuCouncil.IsRegionValidForSettleKaiju(region) && this.worldPositionningService.GetDistance(region.Barycenter, ArmyToSupport.WorldPosition) < distance))) { list.Add(region); } } if (list.Count == 0) { return(null); } list.Sort((Region left, Region right) => this.worldPositionningService.GetDistance(left.Barycenter, ArmyToSupport.WorldPosition).CompareTo(this.worldPositionningService.GetDistance(right.Barycenter, ArmyToSupport.WorldPosition))); return(list[0]); }