diff options
Diffstat (limited to 'internal/world')
| -rw-r--r-- | internal/world/grid.go | 23 | ||||
| -rw-r--r-- | internal/world/grid_test.go | 2 |
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 |
