예제 #1
0
 private void ShootAtFleet(Fleet f)
 {
     ShootAt(
         RoboMath.FiringIntercept(
             HookComputer,
             this.Position,
             f.Center,
             f.Momentum,
             this.SensorFleets.MyFleet?.Ships.Count ?? 0
             )
         );
 }
예제 #2
0
        protected async override Task AliveAsync()
        {
            if (CanShoot)
            {
                var closest = SensorFleets.Others
                              .Select(f => new { Fleet = f, Distance = Vector2.Distance(this.Position, f.Center) })
                              .Where(p => MathF.Abs(p.Fleet.Center.X - this.Position.X) <= ViewportCrop.X &&
                                     MathF.Abs(p.Fleet.Center.Y - this.Position.Y) <= ViewportCrop.Y)
                              .Where(p => !DontFireAtSameName || p.Fleet.Name != this.Name)
                              .Where(p => p.Fleet.Name.Contains(this.Target) || this.Target == "")
                              .Where(p => !HookComputer.Hook.TeamMode || p.Fleet.Color != this.Color)
                              .OrderBy(p => p.Distance)
                              .FirstOrDefault()
                              ?.Fleet;

                if (closest != null)
                {
                    ShootAtFleet(closest);
                }
            }

            if (CanBoost && (SensorFleets.MyFleet?.Ships.Count ?? 0) > BoostThreshold)
            {
                Boost();
            }

            /*CustomData = JsonConvert.SerializeObject(new
             * {
             *  spots = Behaviors.OfType<Dodge>().Where(d => d.ConsideredPoints != null).SelectMany(d => d.ConsideredPoints)
             * });*/


            CustomData = JsonConvert.SerializeObject(new
            {
                spots = SensorFleets.Others?.Select(f => RoboMath.FiringIntercept(HookComputer, this.Position, f.Center, f.Momentum, this.SensorFleets.MyFleet?.Ships.Count ?? 0))
            });

            await base.AliveAsync();
        }