Вы имеете в виду, что действия совершают несколько ходов (то есть, спать по 50 ходов подряд)?
То, что я хотел бы сделать, это сохранить объект player.currentAction. currentAction может содержать количество поворотов, которое потребуется действию, каково его разрешение, а также список состояний, которые отменяют действие (в опасности, при атаке, слишком жарко и т. д.). Каждый ход, прежде чем проверять вход игрока, мы проверяли, находился ли игрок в данный момент в середине действия, а затем выполняли что-то вроде ...
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;
}