¿Te refieres a que las acciones tomen múltiples turnos (es decir, dormir 50 turnos seguidos)?
Lo que haría es mantener un objeto, player.currentAction. currentAction puede contener cuántos turnos requeriría la acción, cuál es la resolución de la acción y una lista de estados que cancelan la acción (en peligro, siendo atacado, demasiado caliente, etc.). Cada turno, antes de verificar la entrada del jugador, verificamos si el jugador estaba actualmente en el medio de una acción, luego hacemos algo como algo como ...
if(!player.currentAction.interrupted())
{
if(player.currentAction.complete() == true)
{
player.currentAction.doAction(); //Some actions, like casting a spell, would have something happen here. Others, like sleeping, may or may not, depending on how you coded it.
player.currentAction = null;
}
else player.currentAction.decreaseTimer(); //Decrease our timer by one.
}
else
{
player.currentAction.interrupt(); //Let the player know he's been interrupted. Bungle the spell, cancel sleep, etc.
player.currentAction = null;
}