private void ProcessSkin(GeometryTag cookie) { if (!(cookie.geometry is TroopTypeVO)) { return; } TroopTypeVO troop = cookie.geometry as TroopTypeVO; ProjectorConfig projector = cookie.projector; TeamType team = TeamType.Attacker; CurrentBattle currentBattle = Service.BattleController.GetCurrentBattle(); if (currentBattle != null && !string.IsNullOrEmpty(currentBattle.MissionId)) { CampaignMissionVO campaignMissionVO = Service.StaticDataController.Get <CampaignMissionVO>(currentBattle.MissionId); if (campaignMissionVO != null && campaignMissionVO.IsRaidDefense()) { team = TeamType.Defender; } } SkinTypeVO applicableSkin = this.GetApplicableSkin(troop, cookie.armory, cookie.battle, team); if (applicableSkin != null) { ProjectorConfig config = ProjectorUtils.GenerateGeometryConfig(applicableSkin, projector.FrameSprite, projector.closeup); projector.MakeEquivalentTo(config); } }
private void CompleteChain(ActionChain chain) { Service.Get <EventManager>().UnregisterObserver(this, EventId.StoryChainCompleted); if (chain == this.introChain) { this.processor.OnIntroHookComplete(); return; } if (chain == this.successChain) { this.processor.OnSuccessHookComplete(); if (Service.Get <CurrentPlayer>().CampaignProgress.FueInProgress) { return; } CampaignVO campaignVO = Service.Get <IDataController>().Get <CampaignVO>(this.MissionVO.CampaignUid); CampaignMissionVO lastMission = Service.Get <CampaignController>().GetLastMission(this.MissionVO.CampaignUid); bool flag = this.MissionVO == lastMission; bool flag2 = Service.Get <CurrentPlayer>().CampaignProgress.GetTotalCampaignStarsEarned(campaignVO) >= campaignVO.TotalMasteryStars; if (flag | flag2) { if (Service.Get <GameStateMachine>().CurrentState is HomeState) { Service.Get <ScreenController>().AddScreen(new CampaignCompleteScreen(campaignVO)); } else { Service.Get <EventManager>().RegisterObserver(this, EventId.MissionCompleteScreenDisplayed, EventPriority.Default); } } if (!(Service.Get <GameStateMachine>().CurrentState is HomeState)) { Service.Get <EventManager>().RegisterObserver(this, EventId.WorldInTransitionComplete, EventPriority.Default); Service.Get <EventManager>().RegisterObserver(this, EventId.HomeStateTransitionComplete, EventPriority.Default); return; } if (!lastMission.IsRaidDefense()) { Service.Get <ScreenController>().AddScreen(new MissionCompleteScreen(this.MissionVO)); return; } } else { if (chain == this.failureChain) { this.processor.OnFailureHookComplete(); return; } if (chain == this.GoalFailureChain) { this.processor.OnGoalFailureHookComplete(); } } }
public void StartDefenseMission(CampaignMissionVO mission) { if (this.activeDefenseBattle) { Service.Logger.WarnFormat("Mission {0} is already in progress. Cannot start Mission {1}.", new object[] { this.currentMission.Uid, mission.Uid }); return; } this.troopController = Service.TroopController; this.eventManager = Service.EventManager; this.activeDefenseBattle = true; this.autoMoveCamera = false; this.currentMission = mission; this.randomizeWaves = !mission.FixedWaves; this.waves = DefensiveBattleController.ParseWaves(this.currentMission.Waves); this.wavesDeployed = 0; this.waveCount = this.waves.Count; this.AllWavesClear = false; if (mission.IsRaidDefense()) { Service.RaidDefenseController.OnStartRaidDefenseMission(); } this.eventManager.RegisterObserver(this, EventId.EntityKilled, EventPriority.BeforeDefault); this.eventManager.RegisterObserver(this, EventId.UserStartedCameraMove, EventPriority.Default); this.eventManager.RegisterObserver(this, EventId.CameraFinishedMoving, EventPriority.Default); this.eventManager.RegisterObserver(this, EventId.PreEntityKilled, EventPriority.Default); this.eventManager.RegisterObserver(this, EventId.EntityHit, EventPriority.Default); TrapViewController trapViewController = Service.TrapViewController; NodeList <TrapNode> trapNodeList = Service.BuildingLookupController.TrapNodeList; for (TrapNode trapNode = trapNodeList.Head; trapNode != null; trapNode = trapNode.Next) { trapViewController.UpdateTrapVisibility((SmartEntity)trapNode.Entity); } Vector3 zero = Vector3.zero; Service.WorldInitializer.View.ZoomTo(0.7f); Service.WorldInitializer.View.PanToLocation(zero); this.DeployNextWave(0u, null); }
public static BattleInitializationData CreateFromDefensiveCampaignMissionVO(CampaignMissionVO vo) { StaticDataController staticDataController = Service.StaticDataController; string uid = vo.Uid; BattleInitializationData battleInitializationData = new BattleInitializationData(); CurrentPlayer currentPlayer = Service.CurrentPlayer; battleInitializationData.Attacker = new BattleParticipant(vo.OpponentName, vo.OpponentName, FactionType.Invalid); battleInitializationData.Defender = new BattleParticipant(currentPlayer.PlayerId, currentPlayer.PlayerName, currentPlayer.Faction); battleInitializationData.PlanetId = currentPlayer.Map.Planet.Uid; battleInitializationData.BattleType = BattleType.PveDefend; battleInitializationData.MissionUid = vo.Uid; BattleDeploymentData battleDeploymentData = new BattleDeploymentData(); battleDeploymentData.TroopData = new Dictionary <string, int>(); List <DefenseWave> list = DefensiveBattleController.ParseWaves(vo.Waves); foreach (DefenseWave current in list) { List <DefenseTroopGroup> list2 = DefensiveBattleController.ParseTroopGroups(uid, current.Encounter.WaveGroup, 0); foreach (DefenseTroopGroup current2 in list2) { if (battleDeploymentData.TroopData.ContainsKey(current2.TroopUid)) { Dictionary <string, int> dictionary; string troopUid; (dictionary = battleDeploymentData.TroopData)[troopUid = current2.TroopUid] = dictionary[troopUid] + current2.Quantity; } else { battleDeploymentData.TroopData.Add(current2.TroopUid, current2.Quantity); } } } battleInitializationData.AttackerDeployableData = battleDeploymentData; if (vo.Map != null) { battleInitializationData.BattleVO = staticDataController.Get <BattleTypeVO>(vo.Map); battleInitializationData.AllowMultipleHeroDeploys = (battleInitializationData.BattleVO.MultipleHeroDeploys || vo.IsRaidDefense()); battleInitializationData.OverrideDeployables = battleInitializationData.BattleVO.OverridePlayerUnits; battleInitializationData.BattleLength = battleInitializationData.BattleVO.BattleTime; battleInitializationData.DefenderDeployableData = BattleDeploymentData.Copy(battleInitializationData.BattleVO); } else { battleInitializationData.DefenderDeployableData = BattleDeploymentData.CreateEmpty(); battleInitializationData.AllowMultipleHeroDeploys = vo.IsRaidDefense(); battleInitializationData.OverrideDeployables = false; } Inventory inventory = currentPlayer.Inventory; battleInitializationData.LootCreditsAvailable = inventory.GetItemAmount("credits"); battleInitializationData.LootMaterialsAvailable = inventory.GetItemAmount("materials"); battleInitializationData.LootContrabandAvailable = inventory.GetItemAmount("contraband"); if (battleInitializationData.BattleLength == 0) { battleInitializationData.BattleLength = GameConstants.PVP_MATCH_DURATION; } battleInitializationData.BattleMusic = vo.BattleMusic; battleInitializationData.AmbientMusic = vo.AmbientMusic; battleInitializationData.VictoryConditions = vo.Conditions; if (!string.IsNullOrEmpty(vo.FailureCondition)) { battleInitializationData.FailureCondition = staticDataController.Get <ConditionVO>(vo.FailureCondition); } battleInitializationData.DisabledBuildings = new List <string>(); List <Contract> list3 = Service.ISupportController.FindAllContractsThatConsumeDroids(); for (int i = 0; i < list3.Count; i++) { if (list3[i].DeliveryType != DeliveryType.ClearClearable) { battleInitializationData.DisabledBuildings.Add(list3[i].ContractTO.BuildingKey); } } battleInitializationData.IsReplay = false; battleInitializationData.IsRevenge = false; battleInitializationData.AllowReplay = false; if (vo.IsRaidDefense() && Service.RaidDefenseController.SquadTroopDeployAllowed()) { battleInitializationData.DefenderGuildTroopsAvailable = new Dictionary <string, int>(); List <SquadDonatedTroop> troops = Service.SquadController.StateManager.Troops; for (int j = 0; j < troops.Count; j++) { string troopUid2 = troops[j].TroopUid; int totalAmount = troops[j].GetTotalAmount(); if (battleInitializationData.DefenderGuildTroopsAvailable.ContainsKey(troopUid2)) { Dictionary <string, int> dictionary; string key; (dictionary = battleInitializationData.DefenderGuildTroopsAvailable)[key = troopUid2] = dictionary[key] + totalAmount; } else { battleInitializationData.DefenderGuildTroopsAvailable.Add(troopUid2, totalAmount); } } } battleInitializationData.AttackerEquipment = null; battleInitializationData.DefenderEquipment = BattleInitializationData.GetCurrentPlayerEquipment(battleInitializationData.PlanetId); return(battleInitializationData); }