I want a method in a DrawableGameComponent class to not return until a particular condition is met
Say I have this class (snippet from a DrawableGameComponent class):
public override void Update(GameTime gameTime) { if (moving && pixFromLastMove <= distanceToMove) { position += velocity; pixFromLastMove += velocity.Length(); } else { moving = false; } if (rotating) { rotation += 0.1f; var cRotation = MathHelper.Clamp(rotation, -MathHelper.PiOver2, angleBeforeRotation + degToRotate); if (cRotation != rotation) { rotation = cRotation; angleBeforeRotation = rotation; rotating = false; } } base.Update(gameTime); } public void Ahead(int pix) { moving = true; distanceToMove = pix; pixFromLastMove = 0; velocity = new Vector2((float) Math.Cos(rotation), (float) Math.Sin(rotation))*5.0f; //DO NOT RETURN UNTIL THIS ROBOT HAS MOVED TO ITS DESTINATION } public void TurnLeft(int deg) { rotating = true; degToRotate = MathHelper.ToRadians(deg); angleBeforeRotation = rotation; //DO NOT RETURN UNTIL THIS ROBOT HAS BEEN FULLY ROTATED }
This class is being drawn (Draw())in the main thread (because this drawablegamecomponent is executing in seperate thread), and also in the main thread I have a list of commands that I want to be executed in order…but currently, since the Ahead method returns just after assigning a value to velocity, the methods will run almost concurrently, which in turn just executes all the animations at the same time.
So what do you think should I do to prevent methods that are commands (Ahead,TurnLeft etc..) from returning before a certain condition is met?
You need to create some kind of state machine for your Update() method. e.g.
Or am I missing the question?