X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=CarFire%2FCarFire%2FCarFire%2FMovementManager.cs;h=3511e4202d1af2e711f2485a81088ee781cfd7f2;hb=af9deb873b24dadd0d509ce199fc6cac2b3efbc9;hp=512c2af203c5bcafc18adc48026d28961214f22d;hpb=f7a63ea90e2dc0ada860e8240799073ab2734337;p=chaz%2Fcarfire
diff --git a/CarFire/CarFire/CarFire/MovementManager.cs b/CarFire/CarFire/CarFire/MovementManager.cs
index 512c2af..3511e42 100644
--- a/CarFire/CarFire/CarFire/MovementManager.cs
+++ b/CarFire/CarFire/CarFire/MovementManager.cs
@@ -103,6 +103,24 @@ namespace CarFire
Update(timeSpan, false, false, false, false);
}
+ ///
+ /// Update the movement manager with the timeslice and a direction.
+ ///
+ /// The timeslice.
+ /// Direction you want to move.
+ public void Update(TimeSpan timeSpan, Direction direction)
+ {
+ if (direction == Direction.Left) Update(timeSpan, true, false, false, false);
+ else if (direction == Direction.UpperLeft) Update(timeSpan, true, false, true, false);
+ else if (direction == Direction.Up) Update(timeSpan, false, false, true, false);
+ else if (direction == Direction.UpperRight) Update(timeSpan, false, true, true, false);
+ else if (direction == Direction.Right) Update(timeSpan, false, true, false, false);
+ else if (direction == Direction.LowerRight) Update(timeSpan, false, true, false, true);
+ else if (direction == Direction.Down) Update(timeSpan, false, false, false, true);
+ else if (direction == Direction.LowerLeft) Update(timeSpan, true, false, false, true);
+ else Update(timeSpan);
+ }
+
///
/// Update the movement manager with the timeslice and the directions
/// the object is supposed to go. The directions will be ignored if the
@@ -153,6 +171,27 @@ namespace CarFire
RecalculatePosition(alpha);
}
}
+ public void LockUpdate(TimeSpan timeSpan, bool moveLeft, bool moveRight, bool moveUp, bool moveDown)
+ {
+ float passedTime = (float)timeSpan.TotalSeconds;
+ if (moveLeft == true || moveRight == true || moveUp == true || moveDown == true)
+ {
+ mDirection = GetDirection(moveLeft, moveRight, moveUp, moveDown);
+ }
+ if (mIsMoving)
+ {
+ mTimeAccumulator += passedTime;
+
+ float alpha = mTimeAccumulator / mInverseSpeed;
+ if (alpha >= 1.0f)
+ {
+ mIsMoving = false;
+ alpha = 1.0f;
+ }
+
+ RecalculatePosition(alpha);
+ }
+ }
///
@@ -200,6 +239,34 @@ namespace CarFire
else return Direction.None;
}
+ ///
+ /// Helper method to get the general Direction type if you want to move
+ /// from one cell to another.
+ /// Starting point.
+ /// Destination point.
+ /// The direction toward the cell.
+ public static Direction GetDirection(Point a, Point b)
+ {
+ int dx = b.X - a.X;
+ int dy = b.Y - a.Y;
+
+ if (dx < 0)
+ {
+ if (dy < 0) return Direction.UpperLeft;
+ else if (dy > 0) return Direction.LowerLeft;
+ else return Direction.Left;
+ }
+ else if (dx > 0)
+ {
+ if (dy < 0) return Direction.UpperRight;
+ else if (dy > 0) return Direction.LowerRight;
+ else return Direction.Right;
+ }
+ else if (dy < 0) return Direction.Up;
+ else if (dy > 0) return Direction.Down;
+ else return Direction.None;
+ }
+
#endregion
@@ -207,7 +274,7 @@ namespace CarFire
void RecalculatePosition(float alpha)
{
- Console.WriteLine("last: " + mLastCoordinates + ", now: " + mCoordinates + ", alpha: " + alpha);
+ //Console.WriteLine("last: " + mLastCoordinates + ", now: " + mCoordinates + ", alpha: " + alpha);
mPosition.X = (float)mLastCoordinates.X + alpha * ((float)mCoordinates.X - (float)mLastCoordinates.X);
mPosition.Y = (float)mLastCoordinates.Y + alpha * ((float)mCoordinates.Y - (float)mLastCoordinates.Y);
}