using Microsoft.Xna.Framework; using System; class HandleRotation { int rotationSpeed = 5, Rotation = 180; private float oldSpeed, movementSpeed; private Vector2 oldTile, oldPosition, oldMovementSpeed; private Vector2 Direction; public Vector2 UpdatePosition(int Destination, float tractorSpeed, Vector2 Position, Crops crops, Vector2 oldDeltaPosition, Vector2 Target) { if (oldSpeed != crops.getSpeedFactor(tractorSpeed)) { Position = new Vector2((int)Math.Round(Position.X), (int)Math.Round(Position.Y)); } if (Destination == 0) // down { if (Rotation == 0) { Direction = new Vector2(0, 1) * movementSpeed; Position = Position + Direction; } else { if (Rotation > 180) { if (Rotation >= 360) { Rotation = 0; } Rotation = Rotation + rotationSpeed; } else if (Rotation <= 180 && Rotation > 0) { Rotation = Rotation - rotationSpeed; } } } else if (Destination == 1) // up { if (Rotation == 180) { Direction = new Vector2(0, -1) * movementSpeed; Position = Position + Direction; } else { if (Rotation >= 0 && Rotation < 180) { Rotation = Rotation + rotationSpeed; } else if (Rotation < 360 && Rotation > 180) { Rotation = Rotation - rotationSpeed; } } } else if (Destination == 2) // right { if (Rotation == 270) { Direction = new Vector2(1, 0) * movementSpeed; Position = Position + Direction; } else { if (Rotation > 90 && Rotation < 270) { Rotation = Rotation + rotationSpeed; } else if (Rotation < 90 || Rotation < 360) { if (Rotation <= 0) { Rotation = 360; } Rotation = Rotation - rotationSpeed; } } } else if (Destination == 3) // left { if (Rotation == 90) { Direction = new Vector2(-1, 0) * movementSpeed; Position = Position + Direction; } else { if (Rotation < 270 && Rotation > 90) { Rotation = Rotation - rotationSpeed; } else if (Rotation >= 0 || Rotation > 270) { if (Rotation >= 360) { Rotation = 0; } Rotation = Rotation + rotationSpeed; } } } oldSpeed = crops.getSpeedFactor(tractorSpeed); if (oldDeltaPosition.X < 1 && oldDeltaPosition.X > -1 && oldDeltaPosition.Y < 1 && oldDeltaPosition.Y > -1) { Position = Target; } oldMovementSpeed = Direction; return Position; } public int getRotation() { return Rotation; } public bool checkTile(Vector2 Position, int tileSize, int Spacing, float tractorSpeed, Crops crop) { Vector2 newTile = new Vector2((float)Math.Round(Position.X / (tileSize + Spacing)), (float)Math.Round(Position.Y / (tileSize + Spacing))); if (oldTile != newTile) { oldTile = newTile; movementSpeed = crop.getSpeedFactor(tractorSpeed); return true; } else { return false; } } }