示例#1
0
        public override void Step(IEnumerable <object> data)
        {
            var userTank = Screen.UserTank;

            if (userTank.DrawingBounds.IntersectsWith(RadarBounds))
            {
                target = userTank;
                if (target is null)
                {
                    var    boundsCenter = BoundsCenter;
                    Single distance = 0f, minimumDistance = Single.MaxValue;
                    foreach (var movableShape in Screen.MovableShapes.Where(a => !(a is Tracker)))
                    {
                        distance = (Single)Math.Sqrt(Math.Pow(boundsCenter.X - movableShape.Bounds.X, 2) + Math.Pow(boundsCenter.Y - movableShape.Bounds.Y, 2));
                        if (distance < minimumDistance)
                        {
                            minimumDistance = distance;
                            target          = movableShape;
                        }
                    }
                }
            }
            long elapsed = Screen.Elapsed.Ticks;

            if (target != null)
            {
                Target = target.Bounds.GetCenter();
                var freshAngle = BoundsCenter.GetAngle(Target);
                Angle = freshAngle;
                var tempVector = Extensions.GetVectorFromAngle(freshAngle);
                movementVector.X += tempVector.X * .00001f * elapsed;
                movementVector.Y += tempVector.Y * .00001f * elapsed;
                Move(movementVector);
            }
            else
            {
                angle += .0000001f * elapsed;
                var vector = Extensions.GetVectorFromAngle(angle);
                Move(vector);
            }
            //
            //if (Angle > Math.PI * 2)
            //    Angle -= (Single)Math.PI * 2;
            //if (Math.Cos(freshAngle) > 0)
            //{
            //    var fSin = Math.Sin(freshAngle);
            //    var sin = Math.Sin(angle);
            //    //
            //    if (fSin > 0 && sin < 0)
            //    {

            //    }
            //    else if (fSin < 0 && sin > 0)
            //    {

            //    }
            //}
            //Angle += (freshAngle - Angle) / 10000;
        }
示例#2
0
        public override void Step(IEnumerable <object> data)
        {
            if (targetAchieved || Target == PointF.Empty)
            {
                RandomizeTarget();
            }
            // Updating Target
            if (dynamicTarget && TargetSource != null)
            {
                if (TargetSource is Shape targetBlock)
                {
                    if (!targetBlock.Active)
                    {
                        RandomizeTarget();
                    }
                }
                Target = TargetSource.Bounds.GetCenter();
            }
            //
            var freshAngle = BoundsCenter.GetAngle(Target, false);

            if ((Math.Sin(freshAngle) > 0 && Math.Sin(Angle) > 0) || (Math.Sin(freshAngle) < 0 && Math.Sin(Angle) < 0))
            {
                Angle += (freshAngle - Angle) / 10000;
            }
            else
            {
                Angle += (freshAngle - Angle) / 100000;
            }
            //
            Move(movementVector);
            // Verifying target reaching
            //var center = Bounds.GetCenter();
            //var distance = Math.Sqrt(Math.Pow(Target.X - center.X, 2) + Math.Pow(Target.Y - center.Y, 2));
            //if (distance < 5)
            //{
            //    RandomizeTarget();
            //}
        }