Beispiel #1
0
        public List <Tuple <GfStatKey, double> > Update(IContext context)
        {
            var guessFactorArray = new List <Tuple <GfStatKey, double> >();

            bool removeVirtualBullet = true;

            while (removeVirtualBullet)
            {
                double?   guessFactor = null;
                GfStatKey key         = null;

                removeVirtualBullet = _vbs.Any() && _vbs.Peek().IsFinished(context, out key, out guessFactor);

                if (removeVirtualBullet && key != null && guessFactor.HasValue)
                {
                    guessFactorArray.Add(new Tuple <GfStatKey, double>(key, guessFactor.Value));
                }
                if (removeVirtualBullet)
                {
                    _vbs.Dequeue();
                }
            }

            return(guessFactorArray);
        }
        public void UpdateHit(IEnumerable <Tuple <GfStatKey, double> > gfs)
        {
            foreach (var kvp in gfs)
            {
                GfStatKey key         = kvp.Item1;
                double    guessFactor = kvp.Item2;

                UpdateHit(key, guessFactor);
            }
        }
 public VirtualBullet(IContext context)
 {
     _myLocationOriginal = new Vector(context.MyLocation);
     _target             = context.Target;
     _directOriginal     = new Vector(context.Target.LastBlipDirect);
     _key            = new GfStatKey(context.Target);
     _initialTime    = context.Time;
     _bulletSpeed    = context.AimResult.Speed;
     _maxEscapeAngle = GetMaximumEscapeAngle(context.AimResult.Speed);
 }
        public GuessFactorData GetGuessFactorData(IEnemy enemy)
        {
            var key = new GfStatKey(enemy);

            if (_stats.ContainsKey(key))
            {
                return(_stats[key].GetGuessFactorData());
            }
            var value = new GfStatValue();

            _stats.Add(key, value);
            return(value.GetGuessFactorData());
        }
 public void UpdateHit(GfStatKey key, double gf)
 {
     if (-1d <= gf && gf <= 1d)
     {
         if (_stats.ContainsKey(key))
         {
             _stats[key].Update(gf);
         }
         else
         {
             var value = new GfStatValue();
             value.Update(gf);
             _stats.Add(key, value);
         }
     }
 }
        public bool IsFinished(IContext context, out GfStatKey key, out double?guessFactor)
        {
            guessFactor = null;
            key         = null;

            long currentTime = context.Time;

            _currentRadius = _bulletSpeed * (currentTime - _initialTime);
            _directCurrent = _target.LastBlipDirect;

            // not context.Direct!, because the target may have changed
            bool isPassedEnemy = _directCurrent.Magnitude < _currentRadius;

            if (isPassedEnemy)
            {
                // the bullet has passed over the enemy
                double angle = (_directCurrent.Heading - _directOriginal.Heading).Degrees180;
                guessFactor = angle / _maxEscapeAngle;
                key         = _key;
            }
            return(isPassedEnemy);
        }