Hay 2 problemas difíciles en informática. Nombrar cosas, invalidación de caché y errores fuera de uno.
Este es un problema de invalidación de caché.
Si tiene un registro de "es esto dentro", cada vez que se coloca o elimina un bloque, es bastante fácil actualizarlo y su región a través de un relleno de inundación.
Para optimizar esto, es posible que desee tener un conjunto de niveles de "interioridad".
Una "celda" es una región rodeada de bloques colocados por jugadores (hasta cierto tamaño).
Una "habitación" es una celda con mosaicos de fondo.
"Inside" es una habitación con una puerta, una luz y una silla.
Cuando coloque un bloque de primer plano colocado por el jugador, realice una caminata en sentido horario / antihorario para ver si se forma una nueva celda. Cuando elimine un bloque de primer plano colocado por el jugador, examine si rompe alguna celda; de ser así, vea si se forma una nueva celda al fusionar las dos.
Cuando se forma o se forma una nueva celda, verifique si es una habitación o un interior.
Las celdas pueden realizar un seguimiento de cuántos mosaicos de fondo necesitan para ser una habitación. Luego, un recuento simple cuando se forma una celda, se agrega o elimina un mosaico de fondo de la celda, puede determinar si se trata de una habitación.
Del mismo modo, las celdas pueden realizar un seguimiento de cuántas sillas y fuentes de luz (y de hecho objetos de todo tipo) están dentro de ellas. Entonces el control interno es trivial.
También se puede hacer un recuento de entradas.
Entonces aumentamos el mapa con "celdas". Cuando se agregan o eliminan fichas, verificamos la celda de la ubicación e incrementamos / disminuimos el recuento en la celda.
Use la marcha en sentido horario / antihorario para definir el interior y el exterior de una celda cuando se agrega o elimina un bloque de primer plano. Como el tamaño de las celdas es limitado, esta caminata tendrá un número limitado de pasos.
Como beneficio adicional, ahora tiene una forma barata de hablar sobre habitaciones "opulantes", o "la habitación está bendecida por una fuente sagrada", o cualquier otra cosa sobre una habitación, ya que las habitaciones tienen un recuento de cada tipo de objeto dentro de ellas. (O, como las habitaciones están limitadas en tamaño, solo haga una iteración; esto elimina un caché).
Cada ubicación se encuentra como máximo en una celda, por lo que puede almacenar la identificación de celda de cada ubicación en el mapa principal.