Estoy planeando un juego de aventuras, y no puedo entender cuál es la forma correcta de implementar el comportamiento de un nivel dependiendo del estado de la progresión de la historia.
Mi juego para un jugador presenta un mundo enorme donde el jugador tiene que interactuar con personas de una ciudad en varios puntos del juego. Sin embargo, dependiendo de la progresión de la historia, se le presentarían diferentes cosas al jugador, por ejemplo, el Líder del Gremio cambiará de lugar desde la plaza del pueblo a varios lugares alrededor de la ciudad; Las puertas solo se desbloquearían en ciertos momentos del día después de terminar una rutina en particular; Los diferentes eventos de corte de pantalla / activación ocurren solo después de que se haya alcanzado un hito en particular.
Inicialmente pensé en usar una declaración switch {} inicialmente para decidir qué debería decir el NPC o en qué se podía encontrar, y hacer que los objetivos de búsqueda interactuaran solo después de verificar la condición de una variable global game_state. Pero me di cuenta de que rápidamente me encontraría con muchos estados de juego y casos de cambio diferentes para cambiar el comportamiento de un objeto. Esa declaración de cambio también sería enormemente difícil de depurar, y supongo que también podría ser difícil de usar en un editor de niveles.
Entonces pensé, en lugar de tener un solo objeto con múltiples estados, tal vez debería tener múltiples instancias del mismo objeto, con un solo estado. De esa manera, si uso algo como un editor de niveles, puedo poner una instancia del NPC en todas las diferentes ubicaciones en las que podría aparecer, y también una instancia para cada estado de conversación que tenga. Pero eso significa que habrá muchos objetos de juego invisibles e inactivos flotando alrededor del nivel, lo que podría ser un problema para la memoria o simplemente difícil de ver en un editor de niveles, no lo sé.
O simplemente, crea un nivel idéntico pero separado para cada estado del juego. Esta es la forma más limpia y libre de errores para hacer las cosas, pero se siente como un trabajo manual masivo para asegurarse de que cada versión del nivel sea realmente idéntica entre sí.
Todos mis métodos se sienten tan ineficientes, así que para recapitular mi pregunta, ¿hay una manera mejor o estandarizada de implementar el comportamiento de un nivel dependiendo del estado de la progresión de la historia?
PD: Todavía no tengo un editor de niveles, pensando en usar algo como JME SDK o hacer el mío.