Também estou trabalhando em um tutorial para o meu jogo em flash e é assim que eu o configuro. Cada parte do jogo verifica um objeto Tutorial para verificar se uma ação está disponível para o jogador. Se o módulo tutorial não existir ou estiver inativo, podemos assumir que o jogador pode fazer qualquer coisa.
Usando seu jogo Sim City, por exemplo, digamos que quando o tutorial iniciar, você não deseja que o jogador possa fazer nada até o momento apropriado. Você pode ter sinalizadores no seu objeto tutorial, como PLAYER_CAN_USE_TOOLBAR, PLAYER_CAN_SWITCH_VIEWS ou PLAYER_CAN_DESIGNATE_ZONE etc, todos configurados para FALSE. À medida que o player percorre seu tutorial, você pode começar a definir esses sinalizadores como verdadeiros.
Para sua parte da interface do usuário, bloqueie o sinal para o modelo ou controlador que realmente executa a ação se os sinalizadores do tutorial não estiverem definidos:
// If our tutorial module/tracker exists, but the action flag is set to false
// then leave our method early
if (mTutorial.isActive() && !mTutorial.checkFlag(PLAYER_CAN_DESIGNATE_ZONE)) {
return false;
}
//Do the rest of the action here
Para esperar por eventos específicos, você pode passar o evento de volta ao seu objeto tutorial para validar o que o jogador precisa fazer para continuar a etapa do tutorial. Por exemplo, se você precisava do player para criar uma zona residencial em um X, Y específico:
var evt:GameEvent = new GameEvent(EVENT_CREATE_ZONE, ZONE_TYPE_RESIDENTIAL, startX, startY, endX, endY);
if (mTutorial.isActive()) {
if (!mTutorial.checkFlag(PLAYER_CAN_DESIGNATE_ZONE)) {
return false;
}
//Check to see if this event is okay
if (!mTutorial.validateEvent(evt)) {
//Show why the player can't do this via popup
return false;
}
}
//Do the rest of the action here
Espero que tenha ajudado. Infelizmente, você precisará adicionar as verificações do tutorial ao seu código antigo para que isso funcione. Porém, supondo que todas as ações sejam válidas, a menos que exista o objeto tutorial, deve facilitar esse processo de integração e minimizar os erros.