Exemple #1
0
    private List <Kaiju> GetFilterKaijuTargets(bool includeTamedKaijus)
    {
        List <Kaiju> list    = new List <Kaiju>();
        IGameService service = Services.GetService <IGameService>();

        Diagnostics.Assert(service != null);
        foreach (global::Empire empire in (service.Game as global::Game).Empires)
        {
            if (empire is KaijuEmpire)
            {
                KaijuEmpire kaijuEmpire = empire as KaijuEmpire;
                if (kaijuEmpire != null && kaijuEmpire.Region != null)
                {
                    KaijuCouncil agency = kaijuEmpire.GetAgency <KaijuCouncil>();
                    if (agency != null && agency.Kaiju != null)
                    {
                        list.Add(agency.Kaiju);
                    }
                }
            }
            else if (includeTamedKaijus && empire is MajorEmpire && empire.Index != base.AIEntity.Empire.Index)
            {
                MajorEmpire majorEmpire = empire as MajorEmpire;
                foreach (Kaiju item in majorEmpire.TamedKaijus)
                {
                    if (!this.departmentOfForeignAffairs.IsFriend(majorEmpire))
                    {
                        list.Add(item);
                    }
                }
            }
        }
        return(list);
    }
    public WorldPosition GetRandomValidArmyPosition(Village village)
    {
        WorldOrientation orientation = (WorldOrientation)this.random.Next(0, 6);
        WorldPosition    result      = WorldPosition.Invalid;

        for (int i = 0; i < 6; i++)
        {
            WorldOrientation direction  = orientation.Rotate(i);
            WorldPosition    neighbourg = this.worldPositionningService.GetNeighbourTile(village.WorldPosition, direction, 1);
            int regionIndex             = (int)this.worldPositionningService.GetRegionIndex(neighbourg);
            if (regionIndex == village.Region.Index)
            {
                if (DepartmentOfDefense.CheckWhetherTargetPositionIsValidForUseAsArmySpawnLocation(neighbourg, PathfindingMovementCapacity.Ground | PathfindingMovementCapacity.Water))
                {
                    global::Empire[] empires = (this.GameService.Game as global::Game).Empires;
                    int j = 0;
                    while (j < empires.Length)
                    {
                        global::Empire empire = empires[j];
                        if (!(empire is KaijuEmpire))
                        {
                            goto IL_106;
                        }
                        KaijuEmpire kaijuEmpire = empire as KaijuEmpire;
                        if (kaijuEmpire == null)
                        {
                            goto IL_106;
                        }
                        KaijuCouncil agency = kaijuEmpire.GetAgency <KaijuCouncil>();
                        if (agency == null || agency.Kaiju == null || !(agency.Kaiju.WorldPosition == neighbourg))
                        {
                            goto IL_106;
                        }
IL_145:
                        j++;
                        continue;
IL_106:
                        if (!(empire is MajorEmpire))
                        {
                            goto IL_145;
                        }
                        MajorEmpire majorEmpire = empire as MajorEmpire;
                        if (majorEmpire == null || majorEmpire.TamedKaijus.Any((Kaiju m) => m.WorldPosition == neighbourg))
                        {
                            goto IL_145;
                        }
                        goto IL_145;
                    }
                    District district = this.worldPositionningService.GetDistrict(neighbourg);
                    if (district == null || !District.IsACityTile(district))
                    {
                        result = neighbourg;
                        break;
                    }
                }
            }
        }
        return(result);
    }
    private float GetTargetPower(IWorldPositionable worldPositionable, int size, global::Empire myEmpire, IGameService service)
    {
        DepartmentOfForeignAffairs agency = myEmpire.GetAgency <DepartmentOfForeignAffairs>();
        float num = 0f;

        if (worldPositionable is KaijuGarrison)
        {
            num += (worldPositionable as KaijuGarrison).GetPropertyValue(SimulationProperties.MilitaryPower);
        }
        else if (worldPositionable is Kaiju && (worldPositionable as Kaiju).OnGarrisonMode())
        {
            num += (worldPositionable as Kaiju).GetActiveTroops().GetPropertyValue(SimulationProperties.MilitaryPower);
        }
        if (size > 0)
        {
            foreach (global::Empire empire in (service.Game as global::Game).Empires)
            {
                if (empire is KaijuEmpire)
                {
                    KaijuEmpire kaijuEmpire = empire as KaijuEmpire;
                    if (kaijuEmpire != null && kaijuEmpire.Region != null)
                    {
                        KaijuCouncil agency2 = kaijuEmpire.GetAgency <KaijuCouncil>();
                        if (agency2 != null && agency2.Kaiju != null && agency2.Kaiju.IsTamed() && agency2.Kaiju.OnGarrisonMode() && this.worldPositionningService.GetDistance(worldPositionable.WorldPosition, agency2.Kaiju.WorldPosition) <= size && agency.IsEnnemy(agency2.Kaiju.MajorEmpire))
                        {
                            num += agency2.Kaiju.KaijuGarrison.GetPropertyValue(SimulationProperties.MilitaryPower);
                        }
                    }
                }
            }
            List <City> list = new List <City>();
            foreach (WorldPosition worldPosition in new WorldCircle(worldPositionable.WorldPosition, size).GetWorldPositions(this.worldPositionningService.World.WorldParameters))
            {
                Army armyAtPosition = this.worldPositionningService.GetArmyAtPosition(worldPosition);
                if (armyAtPosition != null && !armyAtPosition.IsFomorian && agency.IsEnnemy(armyAtPosition.Empire))
                {
                    num += armyAtPosition.GetPropertyValue(SimulationProperties.MilitaryPower);
                }
                District district = this.worldPositionningService.GetDistrict(worldPosition);
                if (district != null && district.Empire != null && district.City != null && agency.IsEnnemy(district.Empire))
                {
                    if (district.Type == DistrictType.Camp)
                    {
                        num += district.City.Camp.GetPropertyValue(SimulationProperties.MilitaryPower);
                    }
                    else if (!list.Contains(district.City))
                    {
                        num += district.City.GetPropertyValue(SimulationProperties.MilitaryPower);
                        list.Add(district.City);
                    }
                }
            }
        }
        return(num);
    }
Exemple #4
0
 public bool TryGetKaijuEmpireAIEntity(Region region, out AIEntity_KaijuEmpire kaijuEmpire)
 {
     kaijuEmpire = null;
     if (this.aiPlayerKaijuEmpire != null && this.aiPlayerKaijuEmpire.AIEntities != null)
     {
         for (int i = 0; i < this.aiPlayerKaijuEmpire.AIEntities.Count; i++)
         {
             AIEntity_KaijuEmpire aientity_KaijuEmpire = this.aiPlayerKaijuEmpire.AIEntities[i] as AIEntity_KaijuEmpire;
             KaijuEmpire          kaijuEmpire2         = aientity_KaijuEmpire.Empire as KaijuEmpire;
             if (kaijuEmpire2.Region == region)
             {
                 kaijuEmpire = aientity_KaijuEmpire;
                 return(true);
             }
         }
     }
     return(kaijuEmpire != null);
 }
Exemple #5
0
	protected override IEnumerator OnLoadGame(Amplitude.Unity.Game.Game game)
	{
		IGameEntityRepositoryService gameEntityRepositoryService = game.Services.GetService<IGameEntityRepositoryService>();
		Diagnostics.Assert(gameEntityRepositoryService != null);
		Diagnostics.Assert(game.Services.GetService<IWorldPositionningService>() != null);
		if (this.TamedKaijus != null)
		{
			int num;
			for (int index = 0; index < this.TamedKaijus.Count; index = num + 1)
			{
				Kaiju kaiju = this.TamedKaijus[index];
				if (kaiju != null)
				{
					KaijuEmpire kaijuEmpire = (game as global::Game).Empires[kaiju.KaijuEmpireIndex] as KaijuEmpire;
					kaiju.KaijuEmpire = kaijuEmpire;
					yield return kaiju.OnLoadGame(game);
					kaiju.MajorEmpire = this;
					base.AddChild(kaiju);
					gameEntityRepositoryService.Register(kaiju);
					DepartmentOfTheInterior.GenerateResourcesLeechingForTamedKaijus(kaiju);
				}
				kaiju = null;
				num = index;
				kaiju = null;
				kaiju = null;
				kaiju = null;
				kaiju = null;
			}
			this.Refresh(false);
		}
		this.IsSpectator = (base.Faction.Name == "FactionELCPSpectator");
		this.ELCPIsEliminated = this.IsEliminated;
		if (this.ELCPIsEliminated)
		{
			ELCPUtilities.EliminatedEmpireIndices.Add(base.Index);
		}
		yield return base.OnLoadGame(game);
		yield break;
	}
Exemple #6
0
 public Kaiju(KaijuEmpire kaijuEmpire, GameEntityGUID guid) : base("Kaiju#" + guid.ToString())
 {
     this.ownerEmpireIndex          = -1;
     this.majorEmpire               = null;
     this.NextTurnToSpawnUnit       = -1;
     this.NextTurnToRecoverFromStun = -1;
     this.previousOwnerIndex        = -1;
     this.previousStunnerIndex      = -1;
     this.tamedTurn           = -1;
     this.previousStunnedTurn = -1;
     this.kaijuEmpire         = null;
     this.kaijuEmpireIndex    = -1;
     this.ownerEmpireIndex    = -1;
     this.region            = null;
     this.kaijuArmyGUID     = GameEntityGUID.Zero;
     this.KaijuEmpire       = kaijuEmpire;
     this.Empire            = kaijuEmpire;
     this.GUID              = guid;
     this.kaijusTechService = this.GameService.Game.Services.GetService <IKaijuTechsService>();
     this.kaijusTechService.KaijuTechnologyUnlocked += this.KaijusTechService_KaijuTechnologyUnlocked;
     this.kaijuModesShareActionPoints     = Amplitude.Unity.Runtime.Runtime.Registry.GetValue <bool>("Gameplay/Kaiju/KaijuModesShareActionPoints", false);
     this.needResetUnitsActionPointsSpent = !this.kaijuModesShareActionPoints;
     this.worldOrientation = WorldOrientation.Undefined;
 }
    public void FillTargets(Army army, List <IGameEntity> targets, ref List <StaticString> failureFlags)
    {
        if (targets == null)
        {
            targets = new List <IGameEntity>();
        }
        IGameService service = Services.GetService <IGameService>();

        if (service == null)
        {
            return;
        }
        IWorldPositionningService service2 = service.Game.Services.GetService <IWorldPositionningService>();

        Diagnostics.Assert(service2 != null);
        IPathfindingService service3 = service.Game.Services.GetService <IPathfindingService>();

        Diagnostics.Assert(service2 != null);
        base.ListNearbyVillages(army);
        if (base.PointsOfInterest.Count != 0)
        {
            for (int i = base.PointsOfInterest.Count - 1; i >= 0; i--)
            {
                PointOfInterest pointOfInterest = base.PointsOfInterest[i];
                if (pointOfInterest.PointOfInterestImprovement != null && (pointOfInterest.Empire == null || pointOfInterest.Empire.Index != army.Empire.Index))
                {
                    Region region = service2.GetRegion(pointOfInterest.WorldPosition);
                    if (region != null && region.MinorEmpire != null)
                    {
                        Village village = region.MinorEmpire.GetAgency <BarbarianCouncil>().Villages.FirstOrDefault((Village iterator) => iterator.WorldPosition == pointOfInterest.WorldPosition);
                        if (village != null)
                        {
                            targets.Add(village);
                        }
                    }
                }
            }
        }
        List <WorldPosition> list = new List <WorldPosition>();

        for (int j = 0; j < 6; j++)
        {
            WorldPosition neighbourTile = service2.GetNeighbourTile(army.WorldPosition, (WorldOrientation)j, 1);
            if (neighbourTile.IsValid && service3.IsTransitionPassable(army.WorldPosition, neighbourTile, army, PathfindingFlags.IgnoreArmies | PathfindingFlags.IgnoreOtherEmpireDistrict | PathfindingFlags.IgnoreDiplomacy | PathfindingFlags.IgnoreFogOfWar | PathfindingFlags.IgnoreZoneOfControl | PathfindingFlags.IgnorePOI | PathfindingFlags.IgnoreSieges | PathfindingFlags.IgnoreKaijuGarrisons, null))
            {
                list.Add(neighbourTile);
            }
        }
        List <int> list2 = new List <int>();

        for (int k = 0; k < list.Count; k++)
        {
            Region region2 = service2.GetRegion(list[k]);
            if (region2 != null && !list2.Contains(region2.Index))
            {
                list2.Add(region2.Index);
                KaijuEmpire kaijuEmpire = region2.KaijuEmpire;
                if (kaijuEmpire != null)
                {
                    KaijuCouncil agency = kaijuEmpire.GetAgency <KaijuCouncil>();
                    if (agency != null)
                    {
                        Kaiju kaiju = agency.Kaiju;
                        if (kaiju != null && kaiju.OnGarrisonMode())
                        {
                            KaijuGarrison kaijuGarrison = kaiju.KaijuGarrison;
                            if (kaijuGarrison != null && list.Contains(kaijuGarrison.WorldPosition))
                            {
                                targets.Add(kaijuGarrison);
                            }
                        }
                    }
                }
                if (region2.City != null && region2.City.Empire != null && region2.City.Empire.Index != army.Empire.Index)
                {
                    for (int l = 0; l < region2.City.Districts.Count; l++)
                    {
                        District district = region2.City.Districts[l];
                        if (list.Contains(district.WorldPosition) && district.Type != DistrictType.Exploitation)
                        {
                            targets.Add(district);
                        }
                    }
                    if (region2.City.Camp != null && list.Contains(region2.City.Camp.WorldPosition))
                    {
                        targets.Add(region2.City.Camp);
                    }
                }
            }
        }
        global::Game game = service.Game as global::Game;

        if (game == null)
        {
            return;
        }
        for (int m = 0; m < game.Empires.Length; m++)
        {
            if (m != army.Empire.Index)
            {
                DepartmentOfDefense agency2 = game.Empires[m].GetAgency <DepartmentOfDefense>();
                if (agency2 != null)
                {
                    for (int n = 0; n < agency2.Armies.Count; n++)
                    {
                        Army army2 = agency2.Armies[n];
                        if (list.Contains(army2.WorldPosition))
                        {
                            if (army2 is KaijuArmy)
                            {
                                KaijuArmy kaijuArmy = army2 as KaijuArmy;
                                if (kaijuArmy != null && !kaijuArmy.Kaiju.OnArmyMode())
                                {
                                    goto IL_389;
                                }
                            }
                            targets.Add(army2);
                        }
                        IL_389 :;
                    }
                }
                DepartmentOfTheInterior agency3 = game.Empires[m].GetAgency <DepartmentOfTheInterior>();
                if (agency3 != null)
                {
                    for (int num = 0; num < agency3.TamedKaijuGarrisons.Count; num++)
                    {
                        KaijuGarrison kaijuGarrison2 = agency3.TamedKaijuGarrisons[num];
                        if (kaijuGarrison2 != null)
                        {
                            Kaiju kaiju2 = kaijuGarrison2.Kaiju;
                            if (kaiju2 != null && kaiju2.OnGarrisonMode() && list.Contains(kaijuGarrison2.WorldPosition))
                            {
                                targets.Add(kaijuGarrison2);
                            }
                        }
                    }
                }
            }
        }
    }