Files
horse/horsegen/character.go.template

101 lines
1.8 KiB
Plaintext

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