Esempio n. 1
0
 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);
 }
Esempio n. 2
0
    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]);
    }