Suponga que tiene un juego en el que hay muchas (muchas, muchas) entidades que desempeñan algunas funciones, no todas las cuales son constantemente necesarias o deben considerarse en cada marco. El problema concreto en el que estoy trabajando en el que está presente este problema es una simulación detallada de un cuerpo que incluye sus órganos.
En el juego, cada criatura tiene su propio cuerpo que está separado en partes más pequeñas (torso, piernas, etc.) y, a veces, estas partes contienen órganos, que cumplen una función específica dentro del cuerpo. Si un órgano actualmente cumple o no un propósito o si está activo, nunca está claro. Después de todo, un animal puede tener el estómago vacío, por lo que no necesita digerir nada. Sería bastante ridículo verificar o simular cada objeto en cada cuadro y muy costoso tan pronto como tenga muchas criaturas en el mundo. Así que estaba pensando en una forma de diferenciar inteligentemente entre los objetos que necesitan actualizarse y los que no.
Lo que se me ocurrió parece una solución al menos aceptable. Crea una cola / pila simple (lo esencial es que cada elemento se elimine tan pronto como se lea; el orden es irrelevante) llamado "pila de atención" donde residen los objetos que necesitan ser simulados. Los objetos que necesitan atención simplemente se colocarían en la pila o otros objetos los colocarían allí. Estos objetos probablemente implementarían una interfaz simple con una función simulate ().
Aplicado a mi ejemplo de digestión anterior, esto significaría:
El jugador elige algo para comer (supongamos que es pan) del inventario y lo pone en la boca de su personaje y la boca se coloca en la pila de atención. En el siguiente cuadro, la boca se toma de la pila y se llama a su función simulate (). Como es una boca, sería razonable simular masticar aquí. Esto podría continuar durante unos pocos cuadros en los que la boca sigue poniéndose en la pila hasta que decida que la comida está lista para ser tragada. En este caso, la boca pone el pan masticado en el estómago (sé que no va allí directamente, pero el esófago se deja para simplificar), que luego se coloca en la pila de atención. En el siguiente cuadro se inicia la simulación del proceso de digestión. Y así sucesivamente para el resto de los órganos necesarios.
Un problema previsible con esto son los objetos inactivos. Un animal dormido es un buen ejemplo de esto. Podría hacerse como se describió anteriormente manteniendo al animal dormido en la pila y verificando cada vez si necesita despertarse, pero eso parece un desperdicio ya que eso es lo único que se hace. Para hacer que los objetos inactivos fueran más eficientes, estaba planeando agregar una especie de programación que almacena los trabajos que se realizarán en un momento específico. Si un animal se duerme, colocaría un trabajo en ese horario, que se programaría durante un cierto tiempo después de que el animal se durmiera. Este trabajo se encargaría de poner nuevamente al animal dormido en la pila de atención. Ahora, se podría decir que un animal dormido que no está en la pila de atención podría perder ser atacado por algo porque su IA no es simulada,
Ahora, honestamente, no sé si esto está cerca de una solución elegante a este problema debido a la falta de experiencia. ¿Estoy cerca de algo utilizable? ¿Cómo se hace esto o alguien tiene alguna sugerencia o mejores soluciones?