using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; namespace TopFalling3 { abstract class Movement { public Movement() { } public abstract void Update(GameTime gameTime, Rectangle gameViewPort, GameObject movingObject, Vector2 newPosition); //Standard moving along the rotation public void Update(GameTime gameTime, Rectangle gameViewPort, GameObject movingObject) { //Add the velocity * the direction movingObject.position.X += movingObject.Velocity.X * (float)(Math.Cos(movingObject.rotation)); movingObject.position.Y += movingObject.Velocity.Y * (float)(Math.Sin(movingObject.rotation)); } public bool ReachedWaypoint(GameObject movingObject, Vector2 newPosition) { if (Math.Abs((newPosition.X - movingObject.position.X)) < (movingObject.Velocity.X)) {//within X if (Math.Abs((newPosition.Y - movingObject.position.Y)) < (movingObject.Velocity.Y)) {//within Y return true; } } return false; } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; namespace TopFalling3 { class InitialVector : Movement { public InitialVector() { //This movement is based soley off the inital rotation/vector of the bullet. } //move from old point, to new point. public override void Update(GameTime gameTime, Rectangle gameViewPort, GameObject movingObject, Vector2 newPosition) { //Add the velocity * the direction movingObject.position.X += movingObject.Velocity.X * (float)(Math.Cos(movingObject.rotation)); movingObject.position.Y += movingObject.Velocity.Y * (float)(Math.Sin(movingObject.rotation)); } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; namespace TopFalling3 { class DM_MaxTurning : Movement { public DM_MaxTurning() { } //move from old point, to new point. public override void Update(GameTime gameTime, Rectangle gameViewPort, GameObject movingObject, Vector2 newPosition) { //Get the vector to move from 1 point to the other float dist_to_waypoint_x = newPosition.X - movingObject.position.X;//currentPosition.X - newPosition.X; float dist_to_waypoint_y = newPosition.Y - movingObject.position.Y; //currentPosition.Y - newPosition.Y; //Atan is the Arc-Tangent //Tan is the Tangent (angle in radians with the given y/x) //Store the new rotation float adjustToRotation = (float)Math.Atan2(dist_to_waypoint_y,dist_to_waypoint_x); float diffBetweenRotations = adjustToRotation - movingObject.rotation; if (diffBetweenRotations > 0) { movingObject.rotation += movingObject.maxRotationSpeed; diffBetweenRotations = adjustToRotation - movingObject.rotation; if (diffBetweenRotations < 0) //If the rotation changed past the adjustToRotation, set it equal to it movingObject.rotation = adjustToRotation; } else if (diffBetweenRotations < 0) { movingObject.rotation -= movingObject.maxRotationSpeed; diffBetweenRotations = adjustToRotation - movingObject.rotation; if (diffBetweenRotations > 0) //If the rotation changed past the adjustToRotation, set it equal to it movingObject.rotation = adjustToRotation; } else { } //Do nothing //movingObject.rotation += -(float)Math.PI / 2; //Add the velocity * the direction movingObject.position.X += movingObject.Velocity.X * (float)(Math.Cos(movingObject.rotation)); movingObject.position.Y += movingObject.Velocity.Y * (float)(Math.Sin(movingObject.rotation)); //movingObject.rotation += (float)Math.PI / 2; } } }