public override SquadLogic CapsuleCamperLogic(Capsule Target) { SquadCamperPlugin camper = new SquadCamperPlugin(Target.InitialLocation); SquadLogic logic = new SquadLogic(camper); return(logic); }
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)); }