private void GetNextY(IFullPositionHolder target, float accelerationDelta)
        {
            var y = (float)(Math.Cos(target.Rotation)) * -1;

            target.Position.Y += y * BasicAcceleration * accelerationDelta;
            //target.Position.Y = MathHelper.Lerp(target.Position.Y, target.Position.Y + (y * BasicAcceleration * accelerationDelta), 0.01f);
        }
        private void GetNextX(IFullPositionHolder target, float accelerationDelta)
        {
            var x = (float)(Math.Sin(target.Rotation));

            target.Position.X += x * BasicAcceleration * accelerationDelta;
            //target.Position.X = MathHelper.Lerp(target.Position.X, target.Position.X + (x * BasicAcceleration * accelerationDelta), 0.01f);
        }
 public void Update(IFullPositionHolder target, IGameSectorBoundaries sectorBoundary)
 {
     if (target.Position.X >= sectorBoundary.MaxSectorX)
     {
         target.Position.X = target.Position.X - sectorBoundary.MaxSectorX + 10;
     }
     if (target.Position.X <= sectorBoundary.MinSectorX)
     {
         target.Position.X = target.Position.X + sectorBoundary.MaxSectorX - 10;
     }
     if (target.Position.Y >= sectorBoundary.MaxSectorY)
     {
         target.Position.Y = sectorBoundary.MaxSectorY - target.Position.Y + 10;
     }
     if (target.Position.Y <= sectorBoundary.MinSectorY)
     {
         target.Position.Y = sectorBoundary.MaxSectorY + target.Position.Y - 10;
     }
 }
예제 #4
0
        public void Update(IFullPositionHolder target, IFullPositionHolder attractionPoint)
        {
            var targetVector = attractionPoint.Position.ToVector2() - target.Position.ToVector2();

            target.Rotation.Rotation = MathF.Atan2(targetVector.Y, targetVector.X) * V;
        }
 public IFullPositionHolder Update(IFullPositionHolder target, float speedFactor = 1)
 {
     GetNextX(target, speedFactor);
     GetNextY(target, speedFactor);
     return(target);
 }
        public void Update(IFullPositionHolder target, IFullPositionHolder attractionPoint, float force)
        {
            var dist = Vector2.Distance(target.Position.ToVector2(),
                                        attractionPoint.Position.ToVector2());

            if (dist > DistanceTrigger)
            {
                return;
            }

            target.Position.X = MathHelper.Lerp(
                target.Position.X,
                attractionPoint.Position.X,
                force);

            // target.Rotation.Rotation = MathHelper.Lerp(target.Rotation.Rotation, attractionPoint.Rotation.Rotation - 180, force);

            target.Position.Y = MathHelper.Lerp(
                target.Position.Y,
                attractionPoint.Position.Y,
                force);
            // var rightBound = attractionPoint.Position.X + DistanceTrigger/2;
            // var leftBound = attractionPoint.Position.X - DistanceTrigger/2;

            // var upBound = attractionPoint.Position.Y - DistanceTrigger/2;
            // var downBound = attractionPoint.Position.Y + DistanceTrigger/2;


            // if (rightBound < target.Position.X)


            // if (leftBound > target.Position.X)
            //     target.Position.X += force;

            // if(upBound > target.Position.Y)
            //     target.Position.Y += force;


            // var attractionRectangle = new Rectangle(
            //                     Convert.ToInt32(MathF.Ceiling(attractionPoint.Position.X)) - (int)(attractionOffset / 2),
            //                     Convert.ToInt32(MathF.Ceiling(attractionPoint.Position.Y)) - (int)(attractionOffset / 2),
            //                     (int)(attractionOffset * 2),
            //                     (int)(attractionOffset * 2)
            //                     );

            // var targetRectangle = new Rectangle(
            //                     Convert.ToInt32(MathF.Ceiling(target.Position.X)) - (int)(attractionOffset / 2),
            //                     Convert.ToInt32(MathF.Ceiling(target.Position.Y)) - (int)(attractionOffset / 2),
            //                     (int)(attractionOffset * 2),
            //                     (int)(attractionOffset * 2)
            //                     );

            // Rectangle outputRectangle = Rectangle.Empty;

            // if (attractionPoint.Position.X - attractionOffset > target.Position.X)
            //     target.Position.X += force;

            // if (attractionPoint.Position.X + attractionOffset < target.Position.X)
            //     target.Position.X -= force;

            // if (attractionPoint.Position.Y - attractionOffset > target.Position.Y)
            //     target.Position.Y += force;

            // if (attractionPoint.Position.Y + attractionOffset < target.Position.Y)
            //     target.Position.Y -= force;

            // foreach( var target in targetsToAttract )
            // {
            // var attractionLength = attractionPoint.Position.ToVector2().Length();

            // var targetLength = target.Position.ToVector2().Length();

            // var dotProduct = Vector2.Dot(
            //                             attractionPoint.Position.ToVector2(),
            //                             attractionPoint.Position.ToVector2())
            //                             / (attractionLength * targetLength
            //                             );
            // var inverseCos = Math.Acos(dotProduct);

            // if(inverseCos != double.NaN){
            //     Console.WriteLine(inverseCos* (180 / Math.PI));
            //     if(inverseCos < float.MaxValue)
            //         target.Rotation.Rotation -= (float)inverseCos  * (float)(180 / Math.PI);
            // }

            //attraction point is west from target
            // if (attractionPoint.Position.X - attractionOffset < target.Position.X)
            //     target.Position.X += force;
            // else
            //     target.Position.X -= force;

            //attraction point is east from target

            // if(attractionPoint.Position.X + attractionOffset > target.Position.X)
            //     continue;
            // else
            //     target.Position.X -= force;

            //attraction point is south from target
            // if (attractionPoint.Position.Y - attractionOffset < target.Position.Y)
            //     target.Position.Y += force;
            // else
            //     target.Position.Y -= force;

            //attraction point is north from target
            // if(attractionPoint.Position.Y + attractionOffset > target.Position.Y)
            //     continue;
            // else
            //     target.Position.Y -= force;

            //var vectorsMultiplied = attractionPoint.Position.ToVector2() * target.Position.ToVector2();

            // }
        }
 public static Vector2 GetDirection(this IFullPositionHolder positionHolder) =>
 new Vector2(
     -(float)(Math.Sin(positionHolder.Rotation.Rotation)),
     (float)(Math.Cos(positionHolder.Rotation.Rotation)));