La puta mierda de diagrama este describe qué pasa cuando el usuario pincha en un mapa o lo que sea que haya en la pantalla. Creo que no está muy liado del todo pero, cojones, me lo voy a explicar y así lo dejo escrito:
El pavo pincha. El click se procesa, digamos, en el activity mismo. Será el UIController. que contiene una lista de UIManagers, aunque con uno va de sobra. Pide una conversión de medidas para saber dónde carajo se está pinchanding realmente. Esas medidas se guardan en el modelo como dije en el turnos II.
Después se pide al UIManager, que es el que contiene la lógica de negocio encargada de actualizar las vistas, que enumere el estado de sus acciones dependiendo del estado del modelo. Se le envia de nuevo la lista diciendole un pues vale, pues ejecuta en consecuencia.
Esa misa iteración se hace con los Managers de negocio (de reglas del juego). y se les pide que ejecuten las acciones que estimen oportunas.
Vamos a poner un ejemplo del ciclo para un juego o dos.
Advance wars!!
En el advance wars se selecciona un tio, te salen las acciones que puedes hacer en pantalla (mover, atacar, cargar nosequenosecuantos) pinchas una y seleccionas donde quieres que vaya, a quién quieres que ataque, etc.
Entonces, vaso en la vertical, abertura hacia arriba...
El pavo pincha, se selecciona la unidad, se pide al uimanager la lista de acciones ejecutables. La lista devuelta será una que tenga ya predefinida el manager por dentro. lo único que tendrá que ver según el estado del modelo actual cuales se pueden ejecutar y cuales no. Entonces se le pide que las ejecute.
El uimanager este, ejecuta las acciones que estén activas inmediatamente. Otras serán de ejecución opcional y se tendrán que presentar al usuario de algún modo actualizando la vista que corresponda (un menú de acciones posibles, por ejemplo) las que sean inmediatas desencadenarán que se muestren los menuses en pantalla, la info del terreno y de la unidad. Si la unidad no tiene municiones, por ejemplo, sólo podrá moverse, por tanto se pasaría al estado en el que se tiene la unidad seleccionada y se pueda seleccionar a donde moverla. Este estado se guarda en el modelo que así contendrá el estado de la interfaz y el estado del juego.
La acción "seleccionar paisanín" se ejecutará inmediatamente en el uimanager con lo que se pasará al estado de la UI en el que se pueda pillar una acción (atacar, mover) y se actualizarán las vistas a tal efecto.
Hasta hacer que el chorro coincida con la abertura del vaso...
Bueno, todo esto para separar en MVC el proceso de acciones de usuario. Ahora hay que hacer que un turno sea completo y automático sin más que completar los huecos de la lógica del juego, el modelo y la presentación. Lo demás debería venir dado por el framework.
Se me acaba de ocurrir otro requisito con esto de "lo demás". Estaría bien que cuando se suelte la biblioteca que implementa el juego dentro del proyecto de la aplicación, ésta funcione sin más que cambiar la implementación de las vistas y, quizá, los uimanagers. Ocurre que una animación no tiene por qué ser inmediata, de hecho no debería ser inmediata. La hebra que responde a la entrada de usuario debe volver instantáneamente o el sistema creerá que la aplicación se ha colgado. Esto ocurre en cualquier aplicación de escritorio.
Necesitaré un sistema de listeners que se comuniquen los eventos de terminación de animaciones. También, el UIControler, será responsable de no permitir más entradas de usuario hasta que el movimiento de un turno esté completo. Es mas. Debería permitirlo pero devolver el control a los teje manejes de los managers antes de seguir. V.g: Si recibimos el movimiento de otro jugador por red, veríamos, qué se yo, el diálogo con los resultados de un combate y podríamos cancelar el diálogo pero la ejecución del turno debería seguir hasta que todas las piezas que haya movido el otro jugador pasen por pantalla.
Seguimos pensanding... voy a limpiar la mesa que se me acaba de congelar una cerveza al abrirla... y rebosa... Meeeeecagonsuputamadre, Y voy a ver si corro algo por la calle esa de allá arriba, general dávila o como se llame.
