Since you are using a GameComponent I would suggest doing one of two things. Add
talk to the list of GameComponents or call the Update method of talk instead of the HandleInput method. You should never call a method that will update an object in the Draw method, always do it in the Update method.
CODE
Compents.Add(talk);
or
CODE
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
talk.Update(gameTime);
base.Update(gameTime);
}
What you are trying to do here is manage the state of a game. State management can be a complicated topic in a game. You could handle the state in the Update method of the Talk class.
In your Update method in the Talk class you could use the choiceMade variable and a TimeSpan variable to control how long the response will stay on the screen. You could try something like this.
CODE
TimeSpan nextResponse = TimeSpan.Zero; // Class level variable
public override void Update(GameTime gameTime)
{
if (!choiceMade)
HandleInput();
else if (choiceMade && nextResponse < TimeSpan.FromSeconds(2))
{
nextResponse += gameTime.ElapsedGameTime;
}
else
{
choiceMade = false;
nextResponse = TimeSpan.Zero;
}
base.Update(gameTime);
}
Basically what that does is if a choice has not been made it asks the player for input. If a choice has been made and less than 2 seconds have elapsed since the choice was made it increments the time since a response was made. Finally if a choice has been made and more than 2 seconds have elapsed it says that you can move on to making a new choice and set the time of the last response back to 0 seconds. Now, in the else clause you could call a method that would take the last response and ask a new question based on the response. Hope that helps a little.