diff options
Diffstat (limited to 'internal/admin/api_room_courses.go')
| -rw-r--r-- | internal/admin/api_room_courses.go | 51 |
1 files changed, 26 insertions, 25 deletions
diff --git a/internal/admin/api_room_courses.go b/internal/admin/api_room_courses.go index f81a204..86c7cdf 100644 --- a/internal/admin/api_room_courses.go +++ b/internal/admin/api_room_courses.go @@ -378,8 +378,8 @@ func (s *AdminServer) handleRoomAttachCourse(w http.ResponseWriter, r *http.Requ NewContent: newContent, }) - // --- hidden exit management --- - // Create hidden exits so the map BFS lays the course rooms in sequence. + // --- course map exit management --- + // Create always-blocked exits so the map BFS lays the course rooms in sequence. var prevRoom, nextRoom int if insertAt > 0 { prevRoom = obstacleRoomID(newList[insertAt-1]) @@ -391,24 +391,24 @@ func (s *AdminServer) handleRoomAttachCourse(w http.ResponseWriter, r *http.Requ if prevRoom > 0 { pm, _, _, perr := s.loadRoomMapByID(prevRoom) if perr == nil { - // Delete the old hidden link from prevRoom to nextRoom (now bypassed). + // Delete the old blocked link from prevRoom to nextRoom (now bypassed). if nextRoom > 0 { - oldDir := findHiddenExitDirToTarget(pm, nextRoom) + oldDir := findCourseExitDirToTarget(pm, nextRoom) if oldDir != "" { removeExit(pm, oldDir) } } dir := ensureValidDirection(body.Direction, pm) - setHiddenExit(pm, dir, roomID) - s.saveRoomMapByID(prevRoom, pm, fmt.Sprintf("hidden exit %d->%d for course %s", prevRoom, roomID, body.CourseID)) + setCourseBlockedExit(pm, dir, roomID) + s.saveRoomMapByID(prevRoom, pm, fmt.Sprintf("blocked exit %d->%d for course %s", prevRoom, roomID, body.CourseID)) } } if nextRoom > 0 { cm, _, _, cerr := s.loadRoomMapByID(roomID) if cerr == nil { dir := autoPickDirection(cm) - setHiddenExit(cm, dir, nextRoom) - s.saveRoomMapByID(roomID, cm, fmt.Sprintf("hidden exit %d->%d for course %s", roomID, nextRoom, body.CourseID)) + setCourseBlockedExit(cm, dir, nextRoom) + s.saveRoomMapByID(roomID, cm, fmt.Sprintf("blocked exit %d->%d for course %s", roomID, nextRoom, body.CourseID)) } } @@ -448,25 +448,25 @@ func (s *AdminServer) handleRoomDetachCourse(w http.ResponseWriter, r *http.Requ nextRoom = obstacleRoomID(obstacles[idx+1]) } - // --- hidden exit cleanup --- + // --- course map exit cleanup --- var relinkDir string if prevRoom > 0 { pm, _, _, perr := s.loadRoomMapByID(prevRoom) if perr == nil { - relinkDir = findHiddenExitDirToTarget(pm, roomID) + relinkDir = findCourseExitDirToTarget(pm, roomID) if relinkDir != "" { removeExit(pm, relinkDir) - s.saveRoomMapByID(prevRoom, pm, fmt.Sprintf("remove hidden exit to %d (course %s)", roomID, id)) + s.saveRoomMapByID(prevRoom, pm, fmt.Sprintf("remove blocked exit to %d (course %s)", roomID, id)) } } } if nextRoom > 0 { cm, _, _, cerr := s.loadRoomMapByID(roomID) if cerr == nil { - d := findHiddenExitDirToTarget(cm, nextRoom) + d := findCourseExitDirToTarget(cm, nextRoom) if d != "" { removeExit(cm, d) - s.saveRoomMapByID(roomID, cm, fmt.Sprintf("remove hidden exit to %d (course %s)", nextRoom, id)) + s.saveRoomMapByID(roomID, cm, fmt.Sprintf("remove blocked exit to %d (course %s)", nextRoom, id)) } } } @@ -475,8 +475,8 @@ func (s *AdminServer) handleRoomDetachCourse(w http.ResponseWriter, r *http.Requ pm, _, _, perr := s.loadRoomMapByID(prevRoom) if perr == nil { dir := ensureValidDirection(relinkDir, pm) - setHiddenExit(pm, dir, nextRoom) - s.saveRoomMapByID(prevRoom, pm, fmt.Sprintf("relink hidden exit %d->%d (course %s)", prevRoom, nextRoom, id)) + setCourseBlockedExit(pm, dir, nextRoom) + s.saveRoomMapByID(prevRoom, pm, fmt.Sprintf("relink blocked exit %d->%d (course %s)", prevRoom, nextRoom, id)) } } @@ -573,11 +573,12 @@ func roomExitsMap(m map[string]any) map[string]any { return ex } -// setHiddenExit adds or replaces a hidden exit in direction dir targeting -// targetRoomID. -func setHiddenExit(m map[string]any, dir string, targetRoomID int) { +// setCourseBlockedExit adds or replaces an always-blocked exit in direction dir +// targeting targetRoomID. Always-blocked exits are impassable but render on the map; +// used to lay out course rooms in visual sequence. +func setCourseBlockedExit(m map[string]any, dir string, targetRoomID int) { ex := roomExitsMap(m) - ex[dir] = map[string]any{"room": targetRoomID, "hidden": true} + ex[dir] = map[string]any{"room": targetRoomID, "always_blocked": true} } // removeExit deletes an exit by direction. Returns true if it existed. @@ -608,25 +609,25 @@ func exitTargetRoom(v any) int { return 0 } -// exitIsHidden returns whether an exit value carries hidden: true. -func exitIsHidden(v any) bool { +// exitIsAlwaysBlocked returns whether an exit value carries always_blocked: true. +func exitIsAlwaysBlocked(v any) bool { if mm, ok := v.(map[string]any); ok { - if h, ok := mm["hidden"]; ok { + if h, ok := mm["always_blocked"]; ok { return h == true } } return false } -// findHiddenExitDirToTarget returns the direction of a hidden exit from m +// findCourseExitDirToTarget returns the direction of an always-blocked exit from m // targeting targetRoomID, or "" if none. -func findHiddenExitDirToTarget(m map[string]any, targetRoomID int) string { +func findCourseExitDirToTarget(m map[string]any, targetRoomID int) string { ex, ok := m["exits"].(map[string]any) if !ok { return "" } for dir, v := range ex { - if exitIsHidden(v) && exitTargetRoom(v) == targetRoomID { + if exitIsAlwaysBlocked(v) && exitTargetRoom(v) == targetRoomID { return dir } } |
