Estou planejando um jogo de aventura e não consigo descobrir qual é a maneira correta de implementar o comportamento de um nível, dependendo do estado da progressão da história.
Meu jogo para um jogador apresenta um mundo imenso, onde o jogador precisa interagir com pessoas de uma cidade em vários pontos do jogo. No entanto, dependendo da progressão da história, coisas diferentes seriam apresentadas ao jogador, por exemplo, o Líder da Guilda mudará os locais da praça da cidade para vários locais da cidade; As portas só se destrancaram em determinados momentos do dia após o término de uma rotina específica; Diferentes eventos de tela cortada / gatilho acontecem somente depois que um determinado marco é atingido.
Pensei ingenuamente em usar uma instrução switch {} inicialmente para decidir o que o NPC deveria dizer ou em que ele poderia ser encontrado e tornar os objetivos da missão interativos somente após verificar a condição de uma variável global game_state. Mas percebi que encontraria rapidamente vários estados de jogo e casos de troca para mudar o comportamento de um objeto. Essa declaração de switch também seria extremamente difícil de depurar, e acho que também pode ser difícil de usar em um editor de níveis.
Então pensei que, em vez de ter um único objeto com vários estados, talvez devesse ter várias instâncias do mesmo objeto, com um único estado. Dessa forma, se eu usar algo como um editor de níveis, eu posso colocar uma instância do NPC em todos os locais diferentes em que ele poderia aparecer, e também uma instância para cada estado de conversa que ele tiver. Mas isso significa que haverá muitos objetos de jogo invisíveis e inativos flutuando pelo nível, o que pode ser um problema de memória ou simplesmente difícil de ver em um editor de níveis, não sei.
Ou simplesmente, crie um nível idêntico, mas separado, para cada estado do jogo. Essa é a maneira mais limpa e sem erros de fazer as coisas, mas parece um trabalho manual maciço, garantindo que cada versão do nível seja realmente idêntica uma à outra.
Todos os meus métodos parecem tão ineficientes, para recapitular minha pergunta, existe uma maneira melhor ou padronizada de implementar o comportamento de um nível, dependendo do estado da progressão da história?
PS: Ainda não tenho um editor de níveis - pensando em usar algo como o JME SDK ou criar o meu.