public override SquadLogic CapsuleCamperLogic(Capsule Target)
        {
            SquadCamperPlugin camper = new SquadCamperPlugin(Target.InitialLocation);
            SquadLogic        logic  = new SquadLogic(camper);

            return(logic);
        }
Пример #2
0
        public override SquadLogic DefenseLogic(Mothership MS)
        {
            #region Scoring Functions
            Delegates.FilterFunction <MapObject>    EnemyHasPush          = x => Bot.Engine.GetEnemyPiratesInRange(x.GetLocation(), Bot.Engine.PushRange).Count > 1;
            Delegates.DefenseFunction <SpaceObject> ExtremeDangerFunction = x =>
            {
                bool CapsuleInGame = Bot.Engine.EnemyLivingCapsules.Any(y => y.IsHeld());
                if (x is Pirate p)
                {
                    return(new DefenseStats((p.HasCapsule() || !CapsuleInGame) && ((PirateShip)p).TurnsToReach(MS) <= SCORE_EXTREME_DANGER_TIME ? p.Distance(MS) : 0, PirateDeployer((PirateShip)p)));
                }
                else if (x is Wormhole w)
                {
                    return(new DefenseStats(w.Distance(MS) / Bot.Engine.MaxPirateSpeed <= SCORE_EXTREME_DANGER_TIME ? w.Distance(MS) + Bot.Engine.MaxPirateSpeed * SCORE_EXTREME_DANGER_TIME : 0, WormholeDeployer(w)));
                }
                else
                {
                    return(new DefenseStats(0, 0));
                }
            };
            Delegates.DefenseFunction <SpaceObject> DangerFunction = x =>
            {
                bool CapsuleInGame = Bot.Engine.EnemyLivingCapsules.Any(y => y.IsHeld());
                if (x is Pirate p)
                {
                    return(new DefenseStats((p.HasCapsule() || !CapsuleInGame) && EnemyHasPush(p) && (p.Distance(MS) - (EnemyHasPush(p) ? p.PushDistance : 0)) / p.MaxSpeed <= SCORE_DANGER_TIME ? p.Distance(MS) : 0, PirateDeployer((PirateShip)p)));
                }
                else if (x is Wormhole w)
                {
                    return(new DefenseStats(w.Distance(MS) / Bot.Engine.MaxPirateSpeed <= SCORE_DANGER_TIME ? w.Distance(MS) + Bot.Engine.MaxPirateSpeed * SCORE_DANGER_TIME : 0, WormholeDeployer(w)));
                }
                else
                {
                    return(new DefenseStats(0, 0));
                }
            };
            #endregion Scoring Functions

            BasicDefenseSquad <SpaceObject> DefensePlugin = new BasicDefenseSquad <SpaceObject>(MS.Location,
                                                                                                EXTREME_DANGER_DETAIL_COUNT, () => Bot.Engine.EnemyLivingPirates.Select(x => (SpaceObject)((Pirate)x)).Concat(Bot.Engine.AllWormholes).ToArray(), ExtremeDangerFunction, DangerFunction,
                                                                                                DefensePushMapper);
            SquadCamperPlugin camper = new SquadCamperPlugin(MS);
            return(new SquadLogic(DefensePlugin, camper));
        }