aboutsummaryrefslogtreecommitdiff
path: root/internal/world
diff options
context:
space:
mode:
Diffstat (limited to 'internal/world')
-rw-r--r--internal/world/grid.go23
-rw-r--r--internal/world/grid_test.go2
2 files changed, 16 insertions, 9 deletions
diff --git a/internal/world/grid.go b/internal/world/grid.go
index 9773241..5229273 100644
--- a/internal/world/grid.go
+++ b/internal/world/grid.go
@@ -2,15 +2,22 @@
// their spawns, and ground items — the spatial state of Vesta.
package world
+// GridConflictKind identifies the kind of grid layout conflict.
+type GridConflictKind string
+
+const (
+ // GridConflictTwist: one room is forced onto two different grid cells (it
+ // was already placed at Existing but a later exit wants it at Want).
+ GridConflictTwist GridConflictKind = "twist"
+ // GridConflictOverlap: two distinct rooms want the same grid cell
+ // (Occupier already holds Want).
+ GridConflictOverlap GridConflictKind = "overlap"
+)
+
// GridConflict describes a layout conflict found while embedding rooms onto a
// 3D grid via their exit deltas.
-//
-// - "twist": one room is forced onto two different grid cells (it was already
-// placed at Existing but a later exit wants it at Want).
-// - "overlap": two distinct rooms want the same grid cell (Occupier already
-// holds Want).
type GridConflict struct {
- Kind string // "twist" or "overlap"
+ Kind GridConflictKind
From int // room whose exit produced the conflict
Dir ExitDir // exit direction taken from From
Target int // room being placed
@@ -76,7 +83,7 @@ func BuildGrid(seed int, load func(int) (*Room, bool), include func(int) bool, e
if existing, seen := g.Coord[target]; seen {
if existing != want && onConflict != nil {
onConflict(GridConflict{
- Kind: "twist", From: rid, Dir: dir,
+ Kind: GridConflictTwist, From: rid, Dir: dir,
Target: target, Want: want, Existing: existing,
})
}
@@ -85,7 +92,7 @@ func BuildGrid(seed int, load func(int) (*Room, bool), include func(int) bool, e
if occupier, used := g.RoomAt[want]; used && occupier != target {
if onConflict != nil {
onConflict(GridConflict{
- Kind: "overlap", From: rid, Dir: dir,
+ Kind: GridConflictOverlap, From: rid, Dir: dir,
Target: target, Want: want, Occupier: occupier,
})
}
diff --git a/internal/world/grid_test.go b/internal/world/grid_test.go
index 6cf53d0..3cbd463 100644
--- a/internal/world/grid_test.go
+++ b/internal/world/grid_test.go
@@ -28,7 +28,7 @@ func loadGridRoom(w *World) func(int) (*Room, bool) {
}
}
-func hasConflictKind(conflicts []GridConflict, kind string) bool {
+func hasConflictKind(conflicts []GridConflict, kind GridConflictKind) bool {
for _, c := range conflicts {
if c.Kind == kind {
return true