Nueva entrada del diario de desarrollo de Citybound centrado en dificultades y penurias propias del desarrollo junto a la implementación del sistema de zonificado, que ciertamente recuerda (en la actualidad) al de SimCity.
En cualquier caso ¡el desarrollo prosigue! >>> |
Diario de desarrollo # 6: Zonificación, Luchando, Parcelando
El tiempo vuela, mi último diario de desarrollo parece que fue hace un par de días, pero en realidad hace más de dos semanas - ¡ups!
Déjame contarte lo que Michael y yo hicimos mientras tanto y cuáles son nuestros planes.
La zonificación lo es todo
Después de una tormenta de ideas, hemos decidido simplificar radicalmente la interfaz de usuario de Citybound. Suena como la jerga vacía de un relaciones públicas, pero en realidad tiene un gran impacto en cómo va a funcionar el juego, se ve y se siente.
La interfaz de construcción de carreteras es muy simple, potente y versátil y combinará en una sola herramienta más que otros constructores de ciudades ofrecen en conjunto.
Michael tuvo la idea de dar a la herramienta de zonificación tanto poder - algunas de las cosas que sugirió ya las había tenido rondando en mi cabeza, pero él ató todo muy bien e incluso surgió con una interfaz de usuario como soporte:
En lugar de seleccionar una zona y luego dibujarla, primero dibuja algunas formas de zonas y luego selecciona los tipos de zona que debería tener.
Nota: dije tipos de zona, en plural - esto permite combinar, de inmediato, las zonas a voluntad.
Tenía muchas ganas de probar esto rápidamente y decidí combinarlo con el antiguo sistema de implementación de la brocha de zonificación que se ajusta a las carreteras, pero esta vez basada en la geometría real y no sólo en mapas de bits.
Empecé a trabajar con esto en un directo y manejándome con ella durante muchos más días, aún no funciona perfectamente siempre, pero cuando lo hace, se siente muy suave:
El tiempo vuela, mi último diario de desarrollo parece que fue hace un par de días, pero en realidad hace más de dos semanas - ¡ups!
Déjame contarte lo que Michael y yo hicimos mientras tanto y cuáles son nuestros planes.
La zonificación lo es todo
Después de una tormenta de ideas, hemos decidido simplificar radicalmente la interfaz de usuario de Citybound. Suena como la jerga vacía de un relaciones públicas, pero en realidad tiene un gran impacto en cómo va a funcionar el juego, se ve y se siente.
La interfaz de construcción de carreteras es muy simple, potente y versátil y combinará en una sola herramienta más que otros constructores de ciudades ofrecen en conjunto.
Michael tuvo la idea de dar a la herramienta de zonificación tanto poder - algunas de las cosas que sugirió ya las había tenido rondando en mi cabeza, pero él ató todo muy bien e incluso surgió con una interfaz de usuario como soporte:
En lugar de seleccionar una zona y luego dibujarla, primero dibuja algunas formas de zonas y luego selecciona los tipos de zona que debería tener.
Nota: dije tipos de zona, en plural - esto permite combinar, de inmediato, las zonas a voluntad.
Tenía muchas ganas de probar esto rápidamente y decidí combinarlo con el antiguo sistema de implementación de la brocha de zonificación que se ajusta a las carreteras, pero esta vez basada en la geometría real y no sólo en mapas de bits.
Empecé a trabajar con esto en un directo y manejándome con ella durante muchos más días, aún no funciona perfectamente siempre, pero cuando lo hace, se siente muy suave:
La brocha de zonificación se verá reforzada más tarde, para permitir una zonificación rápida de varias formas a la vez, de todo un bloque o una zonificación de forma libre lejos de las carreteras.
Pero nuestras ideas van más allá de simplemente un sistema cómodo de colocación de zonas:
Si lo deseas, podrás establecer regulaciones detalladas, ordenanzas y políticas por zonas y nivel modelado. Esto podría incluir cosas como la altura máxima de las edificaciones, la cantidad de estacionamiento requerido o parkings, la contaminación máxima, etc ...
Además, todos los edificios de la ciudad también serán zonados - policía y bomberos, vertederos, escuelas, aeropuertos, todo.
Simplemente les das forma zonándolos, eliges un presupuesto y tal vez parámetros adicionales (celdas vs. espacio de oficinas de la policía, por ejemplo) y el edificio municipal se construirá en consecuencia. Más tarde se puede cambiar esos parámetros y ampliar la forma asignada si es necesario.
Intermedio: Versión (fuera del) Sistemas de Control
Pero nuestras ideas van más allá de simplemente un sistema cómodo de colocación de zonas:
Si lo deseas, podrás establecer regulaciones detalladas, ordenanzas y políticas por zonas y nivel modelado. Esto podría incluir cosas como la altura máxima de las edificaciones, la cantidad de estacionamiento requerido o parkings, la contaminación máxima, etc ...
Además, todos los edificios de la ciudad también serán zonados - policía y bomberos, vertederos, escuelas, aeropuertos, todo.
Simplemente les das forma zonándolos, eliges un presupuesto y tal vez parámetros adicionales (celdas vs. espacio de oficinas de la policía, por ejemplo) y el edificio municipal se construirá en consecuencia. Más tarde se puede cambiar esos parámetros y ampliar la forma asignada si es necesario.
Intermedio: Versión (fuera del) Sistemas de Control
(Sáltate esta sección si sabes de VCS y no quieres oír nuestra triste historia, no te la saltes si deseas tener conocimiento de las duras dificultades diarias de los programadores)
En este último período, sucedió en dos ocasiones que estábamos completamente bloqueados por tener que lidiar con problemas con Git. Utilizamos Git para trabajar en colaboración en el código para Citybound y desarrollar nuevas áreas del código en ramas, lo que permite trabajar en cosas en paralelo, independientes entre sí, cada una con su propia versión de la realidad.
Esto es realmente útil la mayor parte del tiempo: Michael podía trabajar en su código geométrico mientras yo trabajaba en el código de juego, trabajando cada uno de nosotros sin tener que preocuparse por romper el código del otro. De vez en cuando, nos fusionábamos para hacer los cambios de un lado hacia el otro (y tener temporalmente una realidad común de nuevo).
Por desgracia, hice una especie de mal trabajo del seguimiento de los progresos de Michael: Estaba usando una versión antigua de su rama geométrica e incluso empecé a ampliarla con mis propias cosas, así que nuestras dos realidades fueron más y más divergentes.
Para la interfaz de usuario de la zonificación necesitaba algunas de las características geométricas añadidas más recientemente, de modo que se vio obligado finalmente a fusionar todos sus cambios en mi rama y lidiar con el caos. Me supuso 2 o 3 día resolver todos los conflictos y conseguir que todo funcionara de nuevo.
En este último período, sucedió en dos ocasiones que estábamos completamente bloqueados por tener que lidiar con problemas con Git. Utilizamos Git para trabajar en colaboración en el código para Citybound y desarrollar nuevas áreas del código en ramas, lo que permite trabajar en cosas en paralelo, independientes entre sí, cada una con su propia versión de la realidad.
Esto es realmente útil la mayor parte del tiempo: Michael podía trabajar en su código geométrico mientras yo trabajaba en el código de juego, trabajando cada uno de nosotros sin tener que preocuparse por romper el código del otro. De vez en cuando, nos fusionábamos para hacer los cambios de un lado hacia el otro (y tener temporalmente una realidad común de nuevo).
Por desgracia, hice una especie de mal trabajo del seguimiento de los progresos de Michael: Estaba usando una versión antigua de su rama geométrica e incluso empecé a ampliarla con mis propias cosas, así que nuestras dos realidades fueron más y más divergentes.
Para la interfaz de usuario de la zonificación necesitaba algunas de las características geométricas añadidas más recientemente, de modo que se vio obligado finalmente a fusionar todos sus cambios en mi rama y lidiar con el caos. Me supuso 2 o 3 día resolver todos los conflictos y conseguir que todo funcionara de nuevo.
Un poco más tarde, Michael quería fusionar algunos de los nuevos avances de mi parte a la suya, vio que no funcionó de inmediato, quiso cancelarlo para hacerlo bien desde el principio, pero accidentalmente hizo Git pensando que su versión más antigua de mis archivos eran en realidad los más recientes de mi progreso actual.
Cuando tratamos de fusionar su lado con el mío, los Git sobrescribirían mis cosas nuevas con su material antiguo. (Esto suena muy mal, pero con Git casi siempre se puede deshacer).
Se vio obligado a crear una nueva rama de mi estado y luego tuvo que reintroducir todos sus recientes cambios manualmente, lo que también le llevó bastante tiempo.
Parcelación
No pude hacer completamente la primera versión de la interfaz de usuario para la zonificación, ya que habría necesitado un código que todavía debe ser completado por Michael, así que decidí pasar a la siguiente etapa y regresar más tarde.
El siguiente paso fue la parcelación, el proceso de subdividir una forma zonificada en lotes individuales de construcción, o en parcelas.
Una vez más, después de un par de días terminé con algo que funciona bien la mayor parte del tiempo, pero falla por completo algunas veces.
Mi algoritmo de subdivisión a menudo produce extraños cortes, pero ya se puede ver que pinta bastante bien. Estos son algunos ejemplos animados:
(Ten en cuenta que el algoritmo es mucho más rápido, reduje la velocidad para que sea comprensible visualmente)
Cuando tratamos de fusionar su lado con el mío, los Git sobrescribirían mis cosas nuevas con su material antiguo. (Esto suena muy mal, pero con Git casi siempre se puede deshacer).
Se vio obligado a crear una nueva rama de mi estado y luego tuvo que reintroducir todos sus recientes cambios manualmente, lo que también le llevó bastante tiempo.
Parcelación
No pude hacer completamente la primera versión de la interfaz de usuario para la zonificación, ya que habría necesitado un código que todavía debe ser completado por Michael, así que decidí pasar a la siguiente etapa y regresar más tarde.
El siguiente paso fue la parcelación, el proceso de subdividir una forma zonificada en lotes individuales de construcción, o en parcelas.
Una vez más, después de un par de días terminé con algo que funciona bien la mayor parte del tiempo, pero falla por completo algunas veces.
Mi algoritmo de subdivisión a menudo produce extraños cortes, pero ya se puede ver que pinta bastante bien. Estos son algunos ejemplos animados:
(Ten en cuenta que el algoritmo es mucho más rápido, reduje la velocidad para que sea comprensible visualmente)
(Las parcelas que son más pequeñas que el tamaño mínimo requerido no terminan de designarse)
Este mismo código tan esperado aún por completar de Michael (vamos, vamos) y alguna colaboración en la subdivisión, se verá aún más chulo y agradable.
Lo siguiente
Ahora que la parcelación está presente, un poco, quería empezar a poner construcciones en las parcelas. Esta fue una buena excusa para pensar en el modelo de la economía y la demanda, ya que es eso lo que hace que los edificios aparezcan.
Eché un vistazo a mi existente aplicación de la economía y estaba un poco decepcionado de que la demanda y la oferta se añadieran dos veces: una vez para la macro-economía global y otra vez para cada agente individual. Y a partir de las dos implementaciones el concepto de demanda localizada estaba completamente ausente.
Estos son los temas que quiero abordar a continuación, y ya tengo un par de ideas de cómo hacerlo. ¡Mantente al tanto!
Este mismo código tan esperado aún por completar de Michael (vamos, vamos) y alguna colaboración en la subdivisión, se verá aún más chulo y agradable.
Lo siguiente
Ahora que la parcelación está presente, un poco, quería empezar a poner construcciones en las parcelas. Esta fue una buena excusa para pensar en el modelo de la economía y la demanda, ya que es eso lo que hace que los edificios aparezcan.
Eché un vistazo a mi existente aplicación de la economía y estaba un poco decepcionado de que la demanda y la oferta se añadieran dos veces: una vez para la macro-economía global y otra vez para cada agente individual. Y a partir de las dos implementaciones el concepto de demanda localizada estaba completamente ausente.
Estos son los temas que quiero abordar a continuación, y ya tengo un par de ideas de cómo hacerlo. ¡Mantente al tanto!