private void Client_TurnBegin_CheckIndustryThreshold() { if (this.kaijuSpawnTurn == -1 && !this.KaijuEmpire.HasSpawnedAnyKaiju) { float totalIndustrySpent = KaijuCouncil.GetTotalIndustrySpent(); float industryNeededToSpawn = this.GetIndustryNeededToSpawn(); Diagnostics.Log("[Kaiju] Total Industry Spent: [{0}]", new object[] { totalIndustrySpent }); if (totalIndustrySpent >= industryNeededToSpawn) { this.kaijuSpawnTurn = (this.gameService.Game as global::Game).Turn + Amplitude.Unity.Runtime.Runtime.Registry.GetValue <int>(KaijuCouncil.TurnsToSpawnPath); if (this.KaijuEmpire.GetPropertyValue(SimulationProperties.SpawnedKaijusGlobalCounter) <= 0f) { global::PlayerController server = this.KaijuEmpire.PlayerControllers.Server; if (server != null) { OrderAnnounceFirstKaiju order = new OrderAnnounceFirstKaiju(); server.PostOrder(order); } } } } }
private void EventService_EventRaise(object sender, EventRaiseEventArgs e) { if (e.RaisedEvent.EventName == EventNewEraGlobal.Name) { KaijuCouncil.UpdateTameCosts(); } }
public void TryRelocateKaijuOrResetETA() { global::PlayerController server = this.KaijuEmpire.PlayerControllers.Server; Region validKaijuRegion = KaijuCouncil.GetValidKaijuRegion(); if (validKaijuRegion == null) { if (this.Kaiju != null) { this.ResetRelocationETA(); } Diagnostics.LogWarning("Unable to find suitable region. Reset Kaiju ETA!"); return; } WorldPosition validKaijuPosition = KaijuCouncil.GetValidKaijuPosition(validKaijuRegion, false); if (validKaijuPosition == WorldPosition.Zero) { if (this.Kaiju != null) { this.ResetRelocationETA(); } Diagnostics.LogWarning("Unable to find suitable position in target region. Reset Kaiju ETA."); return; } if (server != null && this.Kaiju != null && this.Kaiju.OnGarrisonMode() && this.Kaiju.IsWild()) { IPlayerControllerRepositoryService service = this.gameService.Game.Services.GetService <IPlayerControllerRepositoryService>(); OrderRelocateKaiju order = new OrderRelocateKaiju(this.Kaiju.GUID, validKaijuPosition); server.PostOrder(order); } }
private void Client_TurnBegin_CheckKaijuStatus() { if (this.Kaiju != null) { if (this.Kaiju.IsStunned()) { if (this.Kaiju.NextTurnToRecoverFromStun > 0 && (this.gameService.Game as global::Game).Turn == this.Kaiju.NextTurnToRecoverFromStun) { this.Kaiju.ChangeToWildState(); } } else if (this.Kaiju.IsWild() && this.Kaiju.OnArmyMode()) { global::PlayerController server = this.KaijuEmpire.PlayerControllers.Server; if (server != null) { Region validKaijuRegion = KaijuCouncil.GetValidKaijuRegion(); if (validKaijuRegion == null) { Diagnostics.LogWarning("Unable to find suitable region"); return; } WorldPosition validKaijuPosition = KaijuCouncil.GetValidKaijuPosition(validKaijuRegion, false); if (validKaijuPosition == WorldPosition.Zero) { Diagnostics.LogWarning("Unable to find suitable position in target region"); return; } OrderRelocateKaiju order = new OrderRelocateKaiju(this.Kaiju.GUID, validKaijuPosition); server.PostOrder(order); } } } }
protected override IEnumerator OnInitialize() { this.descriptorsDatabase = Databases.GetDatabase <SimulationDescriptor>(false); Diagnostics.Assert(this.descriptorsDatabase != null); this.gameService = Services.GetService <IGameService>(); Diagnostics.Assert(this.gameService != null); this.endTurnService = Services.GetService <IEndTurnService>(); Diagnostics.Assert(this.endTurnService != null); this.eventService = Services.GetService <IEventService>(); Diagnostics.Assert(this.eventService != null); this.eventService.EventRaise += this.EventService_EventRaise; this.gameEntityRepositoryService = this.gameService.Game.Services.GetService <IGameEntityRepositoryService>(); Diagnostics.Assert(this.gameEntityRepositoryService != null); this.gameEntityRepositoryService.GameEntityUnregistered += this.GameEntityRepositoryService_GameEntityUnregistered; this.seasonService = this.gameService.Game.Services.GetService <ISeasonService>(); Diagnostics.Assert(this.seasonService != null); this.worldPositionningService = this.gameService.Game.Services.GetService <IWorldPositionningService>(); Diagnostics.Assert(this.worldPositionningService != null); KaijuCouncil.StaticInitialize(); KaijuCouncil.PreComputeAttractiveness(); base.Empire.RegisterPass("GameServerState_Turn_Begin", "KaijuCouncilServerTurnBegin", new Agency.Action(this.GameServerState_Turn_Begin), new string[0]); base.Empire.RegisterPass("GameServerState_Turn_End", "KaijuCouncilServerTurnEnd", new Agency.Action(this.GameServerState_Turn_End), new string[0]); base.Empire.RegisterPass("GameClientState_Turn_Begin", "KaijuCouncilClientTurnBegin", new Agency.Action(this.GameClientState_Turn_Begin), new string[0]); base.Empire.RegisterPass("GameClientState_Turn_End", "KaijuCouncilClientTurnEnd", new Agency.Action(this.GameClientState_Turn_End), new string[0]); this.departmentOfDefense = base.Empire.GetAgency <DepartmentOfDefense>(); this.departmentOfEducation = base.Empire.GetAgency <DepartmentOfEducation>(); this.ResetRelocationETA(); yield return(base.OnInitialize()); yield break; }
public void SetupPortrait(Kaiju kaiju, Empire playerEmpire) { this.Kaiju = kaiju; if (this.Portrait != null) { IGuiPanelHelper guiPanelHelper = Services.GetService <global::IGuiService>().GuiPanelHelper; Diagnostics.Assert(guiPanelHelper != null, "Unable to access GuiPanelHelper"); Texture2D image; if (guiPanelHelper.TryGetTextureFromIcon(this.KaijuGuiElement, global::GuiPanel.IconSize.Large, out image)) { this.Portrait.Image = image; } } Amplitude.Unity.Gui.IGuiService service = Services.GetService <global::IGuiService>(); Diagnostics.Assert(service != null); KaijuTameCost kaijuTameCost = KaijuCouncil.GetKaijuTameCost(); this.CostGroup.Visible = this.Kaiju.IsWild(); KaijuCouncil agency = this.Kaiju.KaijuEmpire.GetAgency <KaijuCouncil>(); this.CostValue.Text = GuiFormater.FormatGui(kaijuTameCost.GetValue(playerEmpire), false, true, false, 0) + service.FormatSymbol(ELCPUtilities.UseELCPSymbiosisBuffs ? agency.ELCPResourceName : kaijuTameCost.ResourceName); if (this.Background != null) { this.Background.TintColor = this.Kaiju.Empire.Color; } this.AgeTransform.AgeTooltip.Content = AgeLocalizer.Instance.LocalizeString(KaijuTechPortrait.PortraitClickTooltip); }
private WorldPosition GetBestDefensiveKaijuPosition(Region targetRegion) { Region[] neighbourRegionsWithCityOfEmpire = this.worldPositionningService.GetNeighbourRegionsWithCityOfEmpire(targetRegion, this.MajorEmpire, false); if (neighbourRegionsWithCityOfEmpire.Length == 0) { return(KaijuCouncil.GetValidKaijuPosition(targetRegion, false)); } List <WorldPosition> list = (from position in targetRegion.WorldPositions where KaijuCouncil.IsPositionValidForSettleKaiju(position, null) select position).ToList <WorldPosition>(); if (list.Count == 0) { return(WorldPosition.Invalid); } int num = -1; int index = -1; for (int i = 0; i < list.Count; i++) { int num2 = 0; foreach (Region region in neighbourRegionsWithCityOfEmpire) { int distance = this.worldPositionningService.GetDistance(list[i], region.City.WorldPosition); num2 += ((distance > 5) ? Mathf.Max(15 - distance, 0) : ((15 - distance) * 3)); } if (num2 > num) { num = num2; index = i; } } return(list[index]); }
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); }
private List <Kaiju> ObtainKaijus() { List <Kaiju> list = new List <Kaiju>(); MajorEmpire[] array = Array.ConvertAll <global::Empire, MajorEmpire>(Array.FindAll <global::Empire>((base.Game as global::Game).Empires, (global::Empire match) => match is MajorEmpire), (global::Empire empire) => empire as MajorEmpire); for (int i = 0; i < array.Length; i++) { List <Kaiju> tamedKaijus = array[i].TamedKaijus; if (tamedKaijus.Count > 0) { for (int j = 0; j < tamedKaijus.Count; j++) { list.Add(tamedKaijus[j]); } } } KaijuEmpire[] array2 = Array.ConvertAll <global::Empire, KaijuEmpire>(Array.FindAll <global::Empire>((base.Game as global::Game).Empires, (global::Empire match) => match is KaijuEmpire), (global::Empire empire) => empire as KaijuEmpire); for (int k = 0; k < array2.Length; k++) { KaijuCouncil agency = array2[k].GetAgency <KaijuCouncil>(); if (agency.Kaiju != null) { list.Add(agency.Kaiju); } } 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); }
public static bool CanELCPTameKaiju(Kaiju kaiju, KaijuTameCost tameCost, global::Empire empire) { KaijuCouncil agency = kaiju.KaijuEmpire.GetAgency <KaijuCouncil>(); float num = -tameCost.GetValue(empire.SimulationObject); DepartmentOfTheTreasury agency2 = empire.GetAgency <DepartmentOfTheTreasury>(); return(agency2 != null && agency2.IsTransferOfResourcePossible(empire, agency.ELCPResourceName, ref num)); }
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); }
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); }
private WorldPosition GetValidKaijuSupportPosition(Region targetRegion, Army ArmyToSupport) { List <WorldPosition> list = (from position in targetRegion.WorldPositions where KaijuCouncil.IsPositionValidForSettleKaiju(position, null) select position).ToList <WorldPosition>(); if (list.Count == 0) { return(WorldPosition.Invalid); } list.Sort((WorldPosition left, WorldPosition right) => this.worldPositionningService.GetDistance(left, ArmyToSupport.WorldPosition).CompareTo(this.worldPositionningService.GetDistance(right, ArmyToSupport.WorldPosition))); return(list[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); }
public static WorldPosition GetValidKaijuPosition(Region targetRegion, bool randomFallback = false) { IGameService service = Services.GetService <IGameService>(); IWorldPositionningService service3 = service.Game.Services.GetService <IWorldPositionningService>(); KaijuCouncil.attractivenessMap = (KaijuCouncil.world.Atlas.GetMap(WorldAtlas.Maps.KaijuAttractiveness) as GridMap <bool>); WorldPosition[] array = (from position in targetRegion.WorldPositions where KaijuCouncil.IsPositionValidForSettleKaiju(position, null) select position).ToArray <WorldPosition>(); WorldPosition result = WorldPosition.Invalid; if (array.Length != 0) { result = array[KaijuCouncil.random.Next(0, array.Length)]; if (!ELCPUtilities.UseELCPSymbiosisBuffs) { goto IL_185; } List <WorldPosition> list = array.ToList <WorldPosition>().Randomize(KaijuCouncil.random); List <PointOfInterest> list2 = targetRegion.PointOfInterests.ToList <PointOfInterest>().FindAll((PointOfInterest PointOfInterest) => PointOfInterest.Type == ELCPUtilities.QuestLocation); if (list2 == null || list2.Count <= 0) { goto IL_185; } using (List <WorldPosition> .Enumerator enumerator = list.GetEnumerator()) { while (enumerator.MoveNext()) { WorldPosition position = enumerator.Current; if (list2.Any((PointOfInterest poi) => service3.GetDistance(poi.WorldPosition, position) == 1)) { result = position; break; } } goto IL_185; } } if (randomFallback) { Diagnostics.LogError("Could not find suitable position in starting region!... Picking a random one..."); result = targetRegion.WorldPositions[KaijuCouncil.random.Next(0, targetRegion.WorldPositions.Length)]; } IL_185: if (!result.IsValid) { Diagnostics.LogError("Could not find a valid kaiju position!"); } return(result); }
protected override IEnumerator OnLoadGame(Amplitude.Unity.Game.Game game) { yield return(base.OnLoadGame(game)); KaijuCouncil.StaticInitialize(); KaijuCouncil.PreComputeAttractiveness(); if (this.Kaiju != null) { yield return(this.Kaiju.OnLoadGame(game)); this.gameEntityRepositoryService.Register(this.Kaiju); base.Empire.AddChild(this.Kaiju); base.Empire.Refresh(false); } this.ComputeTameCosts(game as global::Game); KaijuCouncil.UpdateTameCosts(); this.ELCPTameCostCooldown = this.ELCPCalculateTameCostCooldown(); yield break; }
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 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); } } } } } } }
public void RefreshCanExecute() { if (this.ArmyAction != null && !this.Army.IsEmpty) { this.failure.Clear(); bool flag; if (this.ArmyAction is IArmyActionWithTargetSelection && this.ArmyAction is IArmyActionWithUnitSelection) { this.armyActionTargets.Clear(); (this.ArmyAction as IArmyActionWithTargetSelection).FillTargets(this.Army, this.armyActionTargets, ref this.failure); flag = this.ArmyAction.CanExecute(this.Army, ref this.failure, new object[] { this.unitListPanel.SelectUnits, this.armyActionTargets }); } else if (this.ArmyAction is IArmyActionWithTargetSelection) { this.armyActionTargets.Clear(); (this.ArmyAction as IArmyActionWithTargetSelection).FillTargets(this.Army, this.armyActionTargets, ref this.failure); flag = this.ArmyAction.CanExecute(this.Army, ref this.failure, new object[] { this.armyActionTargets }); } else if (this.ArmyAction is IArmyActionWithUnitSelection) { flag = this.ArmyAction.CanExecute(this.Army, ref this.failure, new object[] { this.unitListPanel.SelectUnits }); } else { flag = this.ArmyAction.CanExecute(this.Army, ref this.failure, new object[0]); } flag &= (!this.failure.Contains(ArmyAction.NoCanDoWhileMoving) && !this.failure.Contains(ArmyAction.NoCanDoWhileTutorial)); if (!this.failure.Contains(ArmyAction.NoCanDoWhileHidden)) { this.AgeTransform.AgeTooltip.Content = string.Empty; GuiElement guiElement; if (Services.GetService <Amplitude.Unity.Gui.IGuiService>().GuiPanelHelper.TryGetGuiElement(this.ArmyAction.Name, out guiElement)) { if (this.failure.Count == 0) { this.AgeTransform.AgeTooltip.Content = "#50FF50#" + AgeLocalizer.Instance.LocalizeString(guiElement.Title).ToUpper() + "#REVERT#"; } else { this.AgeTransform.AgeTooltip.Content = "#FF5050#" + AgeLocalizer.Instance.LocalizeString(guiElement.Title).ToUpper() + "#REVERT#"; } } if (this.ArmyAction is IArmyActionWithToggle) { bool flag2 = this.failure.Contains(ArmyAction.NoCanDoWhileToggledOn); if (flag2) { this.failure.RemoveAll((StaticString failureFlag) => failureFlag.Equals(ArmyAction.NoCanDoWhileToggledOn)); } IArmyActionWithToggle armyActionWithToggle = this.ArmyAction as IArmyActionWithToggle; this.ActionToggle.AgeTransform.Enable = flag; this.ActionImage.AgeTransform.Alpha = ((this.ActionToggle.AgeTransform.Enable && !flag2) ? 1f : 0.5f); this.ActionToggle.State = ((flag || flag2) && armyActionWithToggle.IsToggled(this.Army)); if (this.ActionToggle.State && !this.ModifierSector.IsStarted()) { this.ModifierSector.StartAnimation(); } else if (!this.ActionToggle.State && this.ModifierSector.IsStarted()) { this.ModifierSector.Reset(); } if (this.failure.Count == 0) { if (this.ActionToggle.State) { StaticString toggledOnDescriptionOverride = armyActionWithToggle.ToggledOnDescriptionOverride; if (!StaticString.IsNullOrEmpty(toggledOnDescriptionOverride)) { AgeTooltip ageTooltip = this.AgeTransform.AgeTooltip; ageTooltip.Content = ageTooltip.Content + " : " + AgeLocalizer.Instance.LocalizeString("%" + toggledOnDescriptionOverride); } else { AgeTooltip ageTooltip2 = this.AgeTransform.AgeTooltip; ageTooltip2.Content = ageTooltip2.Content + " : " + AgeLocalizer.Instance.LocalizeString(this.ArmyAction.FormatDescription("%" + this.ArmyAction.Name + "OffDescription")); } } else { StaticString toggledOffDescriptionOverride = armyActionWithToggle.ToggledOffDescriptionOverride; if (!StaticString.IsNullOrEmpty(toggledOffDescriptionOverride)) { AgeTooltip ageTooltip3 = this.AgeTransform.AgeTooltip; ageTooltip3.Content = ageTooltip3.Content + " : " + AgeLocalizer.Instance.LocalizeString("%" + toggledOffDescriptionOverride); } else { AgeTooltip ageTooltip4 = this.AgeTransform.AgeTooltip; ageTooltip4.Content = ageTooltip4.Content + " : " + AgeLocalizer.Instance.LocalizeString(this.ArmyAction.FormatDescription("%" + this.ArmyAction.Name + "OnDescription")); } } } } else { this.ActionButton.AgeTransform.Enable = flag; this.ActionImage.AgeTransform.Alpha = ((!this.ActionButton.AgeTransform.Enable) ? 0.5f : 1f); if (this.failure.Count == 0) { AgeTooltip ageTooltip5 = this.AgeTransform.AgeTooltip; ageTooltip5.Content = ageTooltip5.Content + " : " + AgeLocalizer.Instance.LocalizeString(this.ArmyAction.FormatDescription("%" + this.ArmyAction.Name + "Description")); if (this.ArmyAction is ArmyActionWithCooldown) { float num = (this.ArmyAction as ArmyActionWithCooldown).ComputeCooldownDuration(this.Army); this.AgeTransform.AgeTooltip.Content = this.AgeTransform.AgeTooltip.Content.Replace("$CooldownDuration", num.ToString()); } } } if (this.failure.Count > 0) { AgeTooltip ageTooltip6 = this.AgeTransform.AgeTooltip; ageTooltip6.Content = ageTooltip6.Content + " : " + AgeLocalizer.Instance.LocalizeString(this.ArmyAction.FormatDescription("%" + this.failure[0] + "Description")); if (this.ArmyAction is ArmyActionWithCooldown) { float num2 = (this.ArmyAction as ArmyActionWithCooldown).ComputeRemainingCooldownDuration(this.Army); this.AgeTransform.AgeTooltip.Content = this.AgeTransform.AgeTooltip.Content.Replace("$RemainingCooldownDuration", num2.ToString()); } } } float costInActionPoints = this.ArmyAction.GetCostInActionPoints(); if (costInActionPoints > 0f) { AgeTooltip ageTooltip7 = this.AgeTransform.AgeTooltip; ageTooltip7.Content = ageTooltip7.Content + "\n \n" + AgeLocalizer.Instance.LocalizeString("%ArmyActionPointRequirementFormat").Replace("$Value", costInActionPoints.ToString()); } for (int i = 0; i < this.ArmyAction.Costs.Length; i++) { string text = this.ArmyAction.Costs[i].ResourceName; bool flag3 = false; if (ELCPUtilities.UseELCPSymbiosisBuffs && this.ArmyAction is ArmyAction_TameUnstunnedKaiju) { foreach (IGameEntity gameEntity in this.armyActionTargets) { Kaiju kaiju = gameEntity as Kaiju; if (kaiju != null) { KaijuCouncil agency = kaiju.KaijuEmpire.GetAgency <KaijuCouncil>(); if (agency != null) { text = agency.ELCPResourceName; flag3 = true; break; } } } } if (!string.IsNullOrEmpty(text) && !text.Equals(DepartmentOfTheTreasury.Resources.ActionPoint)) { float num3 = this.ArmyAction.GetCostForResource(text, this.Army.Empire); if (flag3) { num3 = KaijuCouncil.GetKaijuTameCost().GetValue(this.Army.Empire); } if (num3 != 0f) { DepartmentOfTheTreasury agency2 = this.Army.Empire.GetAgency <DepartmentOfTheTreasury>(); float f = 0f; if (agency2.TryGetResourceStockValue(this.Army.Empire.SimulationObject, text, out f, false)) { GuiElement guiElement2; if (Services.GetService <global::IGuiService>().GuiPanelHelper.TryGetGuiElement(text, out guiElement2) && guiElement2 is ExtendedGuiElement) { ExtendedGuiElement extendedGuiElement = guiElement2 as ExtendedGuiElement; if (extendedGuiElement == null) { Diagnostics.LogError("Resource extended gui is 'null'."); } string text2 = AgeLocalizer.Instance.LocalizeString(extendedGuiElement.Title); string symbolString = extendedGuiElement.SymbolString; string arg = string.Format(AgeLocalizer.Instance.LocalizeString("%ArmyActionResourceRequirementFormat"), new object[] { num3, text2, symbolString, Mathf.Ceil(f) }); this.AgeTransform.AgeTooltip.Content = string.Format("{0}\n\n\n{1}", this.AgeTransform.AgeTooltip.Content, arg); } else { Diagnostics.LogError("Could not retrieve the resource gui element."); } } } } } } }
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>()); }
private void Client_TurnBegin_RecalculateELCPTameResource() { if (this.ELCPTameCostCooldown < 1) { return; } int num = (this.gameService.Game as global::Game).Turn + 1; int num2 = num % this.ELCPTameCostCooldown; if (num2 != 0 && this.eLCPResourceName != StaticString.Empty) { return; } num -= num2; System.Random random = new System.Random(World.Seed + base.Empire.Index * base.Empire.Index * base.Empire.Index * base.Empire.Index * base.Empire.Index + num * num); int maxEraNumber = DepartmentOfScience.GetMaxEraNumber(); KaijuTameCost kaijuTameCost = KaijuCouncil.GetKaijuTameCost(); Dictionary <string, List <PointOfInterestTemplate> > dictionary = KaijuTechsManager.ComputeLuxuryAbundance(this.gameService.Game as global::Game); List <PointOfInterestTemplate> list = new List <PointOfInterestTemplate>(); List <string> list2 = new List <string>(); for (int i = 0; i < kaijuTameCost.CostDefinitions.Length; i++) { KaijuTameCost.CostDefinition costDefinition = kaijuTameCost.CostDefinitions[i]; if (!list2.Contains(costDefinition.LuxuryTier)) { string[] array = costDefinition.EraNumber.Split(new char[] { ',' }); bool flag = false; for (int j = 0; j < array.Length; j++) { int num3 = 0; if (int.TryParse(array[j], out num3) && num3 <= maxEraNumber) { flag = true; break; } } if (flag) { list.AddRange(dictionary[costDefinition.LuxuryTier]); list2.Add(costDefinition.LuxuryTier); } } } PointOfInterestTemplate pointOfInterestTemplate = list[random.Next(list.Count)]; string empty = string.Empty; if (pointOfInterestTemplate.Properties.TryGetValue("ResourceName", out empty)) { Diagnostics.Log("ELCP {0} Client_TurnBegin_RecalculateELCPTameResource rolled Resource {1} instead of {2}", new object[] { base.Empire.Index.ToString() + "/" + this.KaijuEmpire.KaijuFaction.LocalizedName, empty, kaijuTameCost.ResourceName }); this.eLCPResourceName = new StaticString(empty); } }
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]); }
protected override State Execute(AIBehaviorTree aiBehaviorTree, params object[] parameters) { if (this.ticket != null) { if (!this.orderExecuted) { return(State.Running); } if (this.ticket.PostOrderResponse == PostOrderResponse.PreprocessHasFailed) { this.orderExecuted = false; this.ticket = null; aiBehaviorTree.ErrorCode = 1; return(State.Failure); } this.orderExecuted = false; this.ticket = null; return(State.Success); } else { Army army; if (base.GetArmyUnlessLocked(aiBehaviorTree, "$Army", out army) != AIArmyMission.AIArmyMissionErrorCode.None) { return(State.Failure); } if (!(army is KaijuArmy)) { return(State.Failure); } Kaiju kaiju = (army as KaijuArmy).Kaiju; if (kaiju == null || !(army.Empire is MajorEmpire) || kaiju.OnGarrisonMode() || !KaijuCouncil.IsPositionValidForSettleKaiju(army.WorldPosition, kaiju)) { return(State.Failure); } this.failuresFlags.Clear(); if (!this.armyAction_SettleKaiju.CanExecute(army, ref this.failuresFlags, new object[0])) { return(State.Failure); } this.orderExecuted = false; this.armyAction_SettleKaiju.Execute(army, aiBehaviorTree.AICommander.Empire.PlayerControllers.AI, out this.ticket, new EventHandler <TicketRaisedEventArgs>(this.Order_TicketRaised), new object[0]); return(State.Running); } }
public void RefreshContent() { if (this.KaijuGarrison == null) { return; } if (this.KaijuGarrison.Owner != null) { if (this.KaijuGarrison.Kaiju.OnArmyMode()) { this.AgeTransform.Visible = false; return; } this.AgeTransform.Visible = true; this.FactionIcon.AgeTransform.Visible = true; this.StatusImage.AgeTransform.Visible = false; this.StatusTurns.AgeTransform.Visible = false; this.TameCost.AgeTransform.Visible = false; GuiEmpire guiEmpire = new GuiEmpire(this.KaijuGarrison.Owner); this.FactionIcon.Image = guiEmpire.GuiFaction.GetImageTexture(global::GuiPanel.IconSize.LogoSmall, false); this.FactionIcon.TintColor = guiEmpire.Color; this.Frame.TintColor = guiEmpire.Color; this.PinLine.TintColor = guiEmpire.Color; this.KaijuIcon.TintColor = guiEmpire.Color; this.StatusPanel.AgeTooltip.Content = string.Empty; } else { this.AgeTransform.Visible = true; this.FactionIcon.AgeTransform.Visible = false; this.StatusImage.AgeTransform.Visible = true; this.StatusTurns.AgeTransform.Visible = true; this.Frame.TintColor = this.KaijuGarrison.Empire.Color; this.PinLine.TintColor = this.KaijuGarrison.Empire.Color; this.KaijuIcon.TintColor = this.KaijuGarrison.Empire.Color; KaijuCouncil agency = this.KaijuGarrison.KaijuEmpire.GetAgency <KaijuCouncil>(); if (this.KaijuGarrison.Kaiju.IsWild()) { this.StatusTurns.Text = agency.RelocationETA.ToString(); this.StatusImage.Image = AgeManager.Instance.FindDynamicTexture("Gui/DynamicBitmaps/Icons/kaijuMoveIcon", false); this.StatusPanel.AgeTooltip.Content = "%KaijuTurnsToMoveDescription"; } else if (this.KaijuGarrison.Kaiju.IsStunned()) { this.StatusTurns.Text = this.KaijuGarrison.Kaiju.GetRemainingTurnBeforeStunFinish().ToString(); this.StatusImage.Image = AgeManager.Instance.FindDynamicTexture("Gui/DynamicBitmaps/Icons/kaijuStunnedIcon", false); this.StatusPanel.AgeTooltip.Content = "%KaijuStunnedDescription"; } KaijuTameCost kaijuTameCost = KaijuCouncil.GetKaijuTameCost(); this.TameCost.AgeTransform.Visible = true; this.TameCost.Text = GuiFormater.FormatGui(kaijuTameCost.GetValue(this.empire), false, true, false, 0) + this.GuiService.FormatSymbol((ELCPUtilities.UseELCPSymbiosisBuffs ? agency.ELCPResourceName.ToString() : kaijuTameCost.ResourceName.ToString()) + "Dark"); } if (this.statusPanelTooltip != null) { this.statusPanelTooltip.Content = "%KaijuSpawnedProperties"; } if (this.panelTooltip != null) { GuiElement kaijuFactionGuiElement = this.KaijuFactionGuiElement; if (kaijuFactionGuiElement != null) { this.panelTooltip.Content = kaijuFactionGuiElement.Description; } } this.UnitNumber.Text = this.KaijuGarrison.UnitsCount.ToString(); string text = (this.KaijuGuiUnit == null) ? this.KaijuGarrison.Kaiju.Name.ToString() : GuiUnitDesign.GetTruncatedTitle(this.KaijuGuiUnit.UnitDesign, this.KaijuName); this.KaijuName.Text = text; }
private void RefreshCosts() { IConstructionCost[] array = this.ArmyAction.Costs; ArmyAction_Bribe armyAction_Bribe = this.ArmyAction as ArmyAction_Bribe; ArmyAction_Convert armyAction_Convert = this.ArmyAction as ArmyAction_Convert; if (armyAction_Bribe != null || armyAction_Convert != null) { Village village = this.Target as Village; if (village != null) { IConstructionCost[] array2 = null; if (armyAction_Bribe != null) { IConstructionCost[] array3 = armyAction_Bribe.GetBribeCosts(this.Army, village); array2 = array3; } else if (armyAction_Convert != null) { IConstructionCost[] array3 = armyAction_Convert.GetConvertionCost(this.Army, village); array2 = array3; } if (array2 != null && array2.Length != 0) { if (array == null) { array = array2; } else { Array.Resize <IConstructionCost>(ref array, array.Length + array2.Length); Array.Copy(array2, 0, array, array.Length - array2.Length, array2.Length); } } } } if (this.Army != null && this.Army.Empire != null && array != null && array.Length != 0) { this.ActionCostLabel.AgeTransform.Visible = true; if (ELCPUtilities.UseELCPSymbiosisBuffs && this.ArmyAction is ArmyAction_TameUnstunnedKaiju) { KaijuGarrison kaijuGarrison = this.Target as KaijuGarrison; if (kaijuGarrison != null) { KaijuCouncil agency = kaijuGarrison.KaijuEmpire.GetAgency <KaijuCouncil>(); if (agency != null) { ConstructionCost constructionCost = new ConstructionCost(agency.ELCPResourceName, KaijuCouncil.GetKaijuTameCost().GetValue(this.Army.Empire), true, true); array = new IConstructionCost[] { constructionCost }; } } } this.ActionCostLabel.Text = GuiFormater.FormatCost(this.Army.Empire, array, false, 1, this.Army); this.ActionDescription.AgeTransform.PixelMarginBottom = this.ActionCostLabel.AgeTransform.PixelMarginBottom + this.ActionCostLabel.AgeTransform.Height; return; } this.ActionCostLabel.AgeTransform.Visible = false; this.ActionCostLabel.Text = string.Empty; this.ActionDescription.AgeTransform.PixelMarginBottom = this.ActionCostLabel.AgeTransform.PixelMarginBottom; }