{{ define "go-character" -}} package {{ $.Region }} // Automatically generated with horsegen; DO NOT EDIT import ( "slices" . "git.sunturtle.xyz/zephyr/horse/horse" ) var characterIDs = []int16{ {{- range $c := $.Characters }} {{ $c.ID }}, // {{ $c.Name }} {{- end }} } var characterNames = []string{ {{- range $c := $.Characters }} {{ printf "%q" $c.Name }}, {{- end }} } var characterNameToID = map[string]int16{ {{- range $c := $.Characters }} {{ printf "%q" $c.Name }}: {{ $c.ID }}, {{- end }} } func characterIndex(id int16) (int, bool) { return slices.BinarySearch(characterIDs, id) } func CharacterForID(id int16) Character { i, ok := characterIndex(id) if !ok { return Character{} } return Character{ ID: id, Name: characterNames[i], } } func CharacterForName(name string) Character { id, ok := characterNameToID[name] if !ok { return Character{} } return Character{ ID: id, Name: name, } } var pairAffinity = []int8{ {{- range $a := $.Characters -}} {{- range $b := $.Characters -}} {{- index $.PairMaps $a.ID $b.ID -}}, {{- end -}} {{- end -}} } var trioAffinity = []int8{ {{- range $a := $.Characters -}} {{- range $b := $.Characters -}} {{- range $c := $.Characters -}} {{- index $.TrioMaps $a.ID $b.ID $c.ID -}}, {{- end -}} {{- end -}} {{- end -}} } func PairAffinity(a, b Character) int { i, ok := characterIndex(a.ID) if !ok { return 0 } j, ok := characterIndex(b.ID) if !ok { return 0 } return int(pairAffinity[i*{{ $.Count }} + j]) } func TrioAffinity(a, b, c Character) int { i, ok := characterIndex(a.ID) if !ok { return 0 } j, ok := characterIndex(b.ID) if !ok { return 0 } k, ok := characterIndex(c.ID) if !ok { return 0 } return int(trioAffinity[i*{{ $.Count }}*{{ $.Count }} + j*{{ $.Count }} + k]) } {{ end }}