diff options
Diffstat (limited to 'internal/game/validate_source.go')
| -rw-r--r-- | internal/game/validate_source.go | 53 |
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, + } +} |
