private SmartEntity FindBestTargetForHealer(SmartEntity entity) { ShooterComponent shooterComp = entity.ShooterComp; TransformComponent transformComp = entity.TransformComp; SmartEntity smartEntity = this.TraverseSpiralToFindTarget((int)shooterComp.ShooterVO.ViewRange, transformComp.CenterGridX(), transformComp.CenterGridZ(), new TargetingController.TargetValidator(this.IsHealable), entity); if (smartEntity == null) { if (entity.TeamComp.TeamType == TeamType.Defender) { for (DefensiveTroopNode defensiveTroopNode = this.defensiveTroopNodeList.Head; defensiveTroopNode != null; defensiveTroopNode = defensiveTroopNode.Next) { SmartEntity smartEntity2 = (SmartEntity)defensiveTroopNode.Entity; if (this.IsHealable(smartEntity2, entity)) { smartEntity = smartEntity2; break; } } } else { for (OffensiveTroopNode offensiveTroopNode = this.offensiveTroopNodeList.Head; offensiveTroopNode != null; offensiveTroopNode = offensiveTroopNode.Next) { SmartEntity smartEntity3 = (SmartEntity)offensiveTroopNode.Entity; if (this.IsHealable(smartEntity3, entity)) { smartEntity = smartEntity3; break; } } } } return(smartEntity); }
private SmartEntity FindOffensiveTroopAsTarget(SmartEntity entity) { if (this.offensiveTroopNodeList.Empty && this.offensiveHealerNodeList.Empty) { return(null); } SmartEntity smartEntity = null; int num = -1; if (entity.WalkerComp != null) { if (!this.offensiveTroopNodeList.Empty) { for (OffensiveTroopNode offensiveTroopNode = this.offensiveTroopNodeList.Head; offensiveTroopNode != null; offensiveTroopNode = offensiveTroopNode.Next) { if (this.CheckTarget(entity, (SmartEntity)offensiveTroopNode.Entity, ref num)) { smartEntity = (SmartEntity)offensiveTroopNode.Entity; } } } return(this.FindValidTargetFromTroopNodeList <OffensiveHealerNode>(this.offensiveHealerNodeList, entity, ref num, smartEntity)); } ShooterComponent shooterComp = entity.ShooterComp; TransformComponent transformComp = entity.TransformComp; SmartEntity smartEntity2 = this.TraverseSpiralToFindTarget((int)shooterComp.ShooterVO.ViewRange, transformComp.CenterGridX(), transformComp.CenterGridZ(), new TargetingController.TargetValidator(this.IsAttacker), entity); if (smartEntity2 != null && (long)GameUtils.GetSquaredDistanceToTarget(shooterComp, smartEntity2) >= (long)((ulong)shooterComp.MinAttackRangeSquared)) { smartEntity = smartEntity2; } else { num = -1; smartEntity = this.FindValidTargetFromTroopNodeList <OffensiveTroopNode>(this.offensiveTroopNodeList, entity, ref num, null); smartEntity = this.FindValidTargetFromTroopNodeList <OffensiveHealerNode>(this.offensiveHealerNodeList, entity, ref num, smartEntity); } return(smartEntity); }
protected override void Update(uint dt) { for (OffensiveTroopNode offensiveTroopNode = this.offensiveTroopNodeList.Head; offensiveTroopNode != null; offensiveTroopNode = offensiveTroopNode.Next) { SmartEntity entity = (SmartEntity)offensiveTroopNode.Entity; this.FindIfTroopIsInRangeOfTrigger(entity); } for (OffensiveHealerNode offensiveHealerNode = this.offensiveHealerNodeList.Head; offensiveHealerNode != null; offensiveHealerNode = offensiveHealerNode.Next) { SmartEntity entity2 = (SmartEntity)offensiveHealerNode.Entity; this.FindIfTroopIsInRangeOfTrigger(entity2); } this.InformTurretsAboutTroops <OffensiveTroopNode>(this.offensiveTroopNodeList, this.reusableResetReevaluateTargetSet); this.InformTurretsAboutTroops <OffensiveHealerNode>(this.offensiveHealerNodeList, this.reusableResetReevaluateTargetSet); if (this.reusableResetReevaluateTargetSet.Count > 0) { foreach (ShooterComponent current in this.reusableResetReevaluateTargetSet) { current.ReevaluateTarget = false; } this.reusableResetReevaluateTargetSet.Clear(); } }
public EatResponse OnEvent(EventId id, object cookie) { if (id <= EventId.BuildingReplaced) { if (id <= EventId.BuildingCancelled) { if (id != EventId.BuildingViewReady) { if (id != EventId.BuildingCancelled) { return(EatResponse.NotEaten); } } else { EntityViewParams entityViewParams = (EntityViewParams)cookie; if (entityViewParams.Entity.Has <ScoutTowerComponent>()) { this.CreateScoutHolo(); return(EatResponse.NotEaten); } return(EatResponse.NotEaten); } } else if (id != EventId.EntityKilled) { if (id != EventId.BuildingConstructed) { if (id != EventId.BuildingReplaced) { return(EatResponse.NotEaten); } Entity entity = cookie as Entity; if (entity.Has <ScoutTowerComponent>()) { this.CreateScoutHolo(); return(EatResponse.NotEaten); } return(EatResponse.NotEaten); } } else { SmartEntity smartEntity = (SmartEntity)cookie; if (smartEntity.BuildingComp == null) { return(EatResponse.NotEaten); } BuildingType type = smartEntity.BuildingComp.BuildingType.Type; if (!this.raidDefenseTrainerBindings.Contains(type)) { return(EatResponse.NotEaten); } UXController uXController = Service.Get <UXController>(); Lang lang = Service.Get <Lang>(); switch (type) { case BuildingType.FleetCommand: Service.Get <DeployerController>().SpecialAttackDeployer.ExitMode(); uXController.HUD.DisableSpecialAttacks(); uXController.MiscElementsManager.ShowPlayerInstructions(lang.Get("STARSHIP_TRAINER_DESTROYED", new object[0])); return(EatResponse.NotEaten); case BuildingType.HeroMobilizer: Service.Get <DeployerController>().HeroDeployer.ExitMode(); uXController.HUD.DisableHeroDeploys(); uXController.MiscElementsManager.ShowPlayerInstructions(lang.Get("HERO_TRAINER_DESTROYED", new object[0])); return(EatResponse.NotEaten); case BuildingType.ChampionPlatform: case BuildingType.Housing: return(EatResponse.NotEaten); case BuildingType.Squad: Service.Get <DeployerController>().SquadTroopDeployer.ExitMode(); uXController.HUD.DisableSquadDeploy(); uXController.MiscElementsManager.ShowPlayerInstructions(lang.Get("SQUAD_CENTER_DESTROYED", new object[0])); return(EatResponse.NotEaten); default: return(EatResponse.NotEaten); } } ContractEventData contractEventData = (ContractEventData)cookie; if (contractEventData.BuildingVO.Type == BuildingType.ScoutTower) { this.SendRaidDefenseUpdate(); } } else { if (id <= EventId.ContractStarted) { if (id != EventId.WorldLoadComplete) { if (id == EventId.WorldReset) { this.DestroyScoutHolo(); return(EatResponse.NotEaten); } if (id != EventId.ContractStarted) { return(EatResponse.NotEaten); } } else { IState currentState = Service.Get <GameStateMachine>().CurrentState; if (currentState is HomeState && this.RaidCompleteDidAwardCrate()) { GameUtils.ShowCrateAwardModal(this.lastAwardedCrateUid); this.lastAwardedCrateUid = null; Service.Get <EventManager>().UnregisterObserver(this, EventId.WorldLoadComplete); return(EatResponse.NotEaten); } return(EatResponse.NotEaten); } } else if (id != EventId.ContractContinued) { if (id == EventId.HeroDeployed) { EntityController entityController = Service.Get <EntityController>(); NodeList <OffensiveTroopNode> nodeList = entityController.GetNodeList <OffensiveTroopNode>(); TroopAttackController troopAttackController = Service.Get <TroopAttackController>(); for (OffensiveTroopNode offensiveTroopNode = nodeList.Head; offensiveTroopNode != null; offensiveTroopNode = offensiveTroopNode.Next) { troopAttackController.RefreshTarget((SmartEntity)offensiveTroopNode.Entity); } return(EatResponse.NotEaten); } if (id != EventId.PlanetRelocateStarted) { return(EatResponse.NotEaten); } if (this.AreRaidsAccessible()) { this.SendRaidDefenseUpdate(); return(EatResponse.NotEaten); } return(EatResponse.NotEaten); } ContractEventData contractEventData2 = (ContractEventData)cookie; if (contractEventData2.BuildingVO.Type == BuildingType.ScoutTower) { this.DestroyScoutHolo(); } } return(EatResponse.NotEaten); }