aboutsummaryrefslogtreecommitdiff
path: root/internal/game/core_validate.go
blob: 0e302c05ad852e00d59043475fa278f8cc627b1f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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,
			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,
		RootRooms:         g.ValidationConfig.RootRooms,
		IgnoreUnreachable: g.ValidationConfig.IgnoreUnreachable,
	}
}