Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 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();
     }
 }
Exemplo n.º 4
0
        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);
        }