Il y a 2 problèmes difficiles en informatique. Nommer les choses, invalider le cache et les erreurs hors-ligne.
Il s'agit d'un problème d'invalidation du cache.
Si vous avez un enregistrement de "est-ce à l'intérieur", chaque fois qu'un bloc est placé ou supprimé, il est assez facile de le mettre à jour et sa région via un remplissage d'inondation.
Pour optimiser cela, vous voudrez peut-être avoir un ensemble de niveaux d '«insiduité».
Une "cellule" est une région entourée de blocs placés par les joueurs (jusqu'à une certaine taille).
Une "pièce" est une cellule avec des tuiles de fond.
"Inside" est une pièce avec une porte, une lumière et une chaise.
Lorsque vous placez un bloc de premier plan placé par le joueur, faites une marche dans le sens horaire / antihoraire pour voir si une nouvelle cellule est formée. Lorsque vous supprimez un bloc de premier plan placé par le joueur, examinez s'il casse des cellules - si c'est le cas, voyez si une nouvelle cellule est formée en fusionnant les deux.
Lorsqu'une nouvelle cellule est formée ou non, vérifiez qu'il s'agit d'une pièce ou d'un intérieur.
Les cellules peuvent garder une trace du nombre de tuiles d'arrière-plan dont elles ont besoin pour être une pièce. Ensuite, un simple comptage lorsqu'une cellule est formée, une tuile d'arrière-plan est ajoutée ou supprimée de la cellule, peut déterminer s'il s'agit d'une pièce.
De même, les cellules peuvent garder une trace du nombre de chaises et de sources lumineuses (et en fait des objets de toutes sortes) à l'intérieur. Ensuite, la vérification intérieure est triviale.
Un décompte des entrées peut également être effectué.
Nous augmentons donc la carte avec des "cellules". Lorsque des tuiles sont ajoutées ou supprimées, nous vérifions la cellule de l'emplacement et incrémentons / décrémentons le nombre dans la cellule.
Utilisez la marche dans le sens horaire / antihoraire pour définir l'intérieur et l'extérieur d'une cellule lorsqu'un bloc de premier plan est ajouté ou supprimé. Comme la taille des cellules est limitée, cette promenade prendra un nombre limité d'étapes.
En prime, vous avez maintenant un moyen bon marché de parler des pièces "opulentes", ou "la pièce est bénie par une fontaine sainte", ou de toute autre chose au sujet d'une pièce, car les pièces ont un compte de chaque type d'objet en elles. (Ou, comme les salles sont limitées en taille, faites simplement une itération; cela supprime un cache).
Chaque emplacement se trouve dans au plus une cellule, vous pouvez donc stocker l'identifiant de cellule de chaque emplacement sur la carte principale.