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, } }