aboutsummaryrefslogtreecommitdiff
path: root/internal/game/validate_source.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/game/validate_source.go')
-rw-r--r--internal/game/validate_source.go53
1 files changed, 53 insertions, 0 deletions
diff --git a/internal/game/validate_source.go b/internal/game/validate_source.go
new file mode 100644
index 0000000..b93c45a
--- /dev/null
+++ b/internal/game/validate_source.go
@@ -0,0 +1,53 @@
+package game
+
+import (
+ "thehouseoficarus/internal/validate"
+)
+
+// ValidateAndLog runs all startup integrity checks and logs the results.
+func (g *Game) ValidateAndLog() {
+ validate.LogIssues(validate.Run(g.validationSource()))
+}
+
+// validationSource assembles the read-only view of all data stores that the
+// validate package needs, including the game-defined tech and course tables.
+func (g *Game) validationSource() validate.Source {
+ courses := g.CourseStore.AllCourses()
+ courseViews := make([]validate.CourseView, 0, len(courses))
+ for id, cfg := range courses {
+ rooms := make([]int, 0, len(cfg.Obstacles))
+ for _, obs := range cfg.Obstacles {
+ rooms = append(rooms, obs.RoomID)
+ }
+ courseViews = append(courseViews, validate.CourseView{
+ ID: id,
+ StartRoom: cfg.StartRoom,
+ ObstacleRooms: rooms,
+ })
+ }
+
+ techViews := make([]validate.TechView, 0, len(AllTechs))
+ techIDs := make(map[string]bool, len(AllTechs))
+ for _, t := range AllTechs {
+ techViews = append(techViews, validate.TechView{
+ ID: t.ID,
+ Name: t.Name,
+ Category: t.Category,
+ DrainRate: t.DrainRate,
+ })
+ techIDs[t.ID] = true
+ }
+
+ return validate.Source{
+ DataDir: g.DataDir,
+ Items: g.ItemStore,
+ Objects: g.ObjectStore,
+ Mobs: g.MobStore,
+ World: g.World,
+ Courses: courseViews,
+ Techs: techViews,
+ TechIDs: techIDs,
+ CheckSources: g.ValidationConfig.CheckSources,
+ IgnoreUnreachable: g.ValidationConfig.IgnoreUnreachable,
+ }
+}