82 lines
2.4 KiB
Plaintext
82 lines
2.4 KiB
Plaintext
{{ define "koka-character" -}}
|
|
module horse/character
|
|
|
|
// Automatically generated with the horsegen tool; DO NOT EDIT
|
|
|
|
// Character identity.
|
|
pub type character
|
|
{{- range $uma := $.Characters }}
|
|
{{ kkenum $uma.Name }}
|
|
{{- end }}
|
|
|
|
// The list of all characters.
|
|
val character/all = [
|
|
{{- range $uma := $.Characters }}
|
|
{{ kkenum $uma.Name }},
|
|
{{- end }}
|
|
]
|
|
|
|
// Get the character for a character ID.
|
|
// Generally, these are four digit numbers in the range 1000-1999.
|
|
pub fun character/from-id(id: int): maybe<character>
|
|
match id
|
|
{{- range $uma := $.Characters }}
|
|
{{ $uma.ID }} -> Just( {{- kkenum $uma.Name -}} )
|
|
{{- end }}
|
|
_ -> Nothing
|
|
|
|
// Get the ID for a character.
|
|
pub fun character/id(c: character): int
|
|
match c
|
|
{{- range $uma := $.Characters }}
|
|
{{ kkenum $uma.Name }} -> {{ $uma.ID }}
|
|
{{- end }}
|
|
|
|
// Get the name of a character.
|
|
pub fun character/show(c: character): string
|
|
match c
|
|
{{- range $uma := $.Characters }}
|
|
{{ kkenum $uma.Name }} -> {{ printf "%q" $uma.Name }}
|
|
{{- end }}
|
|
|
|
// Compare two characters.
|
|
pub fip fun character/order2(a: character, b: character): order2<character>
|
|
match (a, b)
|
|
{{- range $uma := $.Characters }}{{ $e := kkenum $uma.Name }}
|
|
( {{- $e }}, {{ $e -}} ) -> Eq2( {{- $e -}} )
|
|
{{- if ne $uma.ID $.MaxID }}
|
|
( {{- $e }}, b') -> Lt2( {{- $e }}, b')
|
|
(a', {{ $e -}} ) -> Gt2( {{- $e }}, a')
|
|
{{- end }}
|
|
{{- end }}
|
|
|
|
// Character equality.
|
|
pub fun character/(==)(a: character, b: character): bool
|
|
match (a, b)
|
|
{{- range $uma := $.Characters }}{{ $e := kkenum $uma.Name }}
|
|
( {{- $e }}, {{ $e -}} ) -> True
|
|
{{- end }}
|
|
_ -> False
|
|
|
|
// Base affinity between a pair using the global ruleset.
|
|
pub fun global/pair-affinity(a: character, b: character): int
|
|
match (a, b)
|
|
{{- range $pair := $.Pairs }}
|
|
( {{- kkenum $pair.NameA }}, {{ kkenum $pair.NameB -}} ) -> {{ $pair.Affinity }}
|
|
{{- end }}
|
|
// Reflexive cases are always 0.
|
|
{{- range $uma := $.Characters }}{{ $e := kkenum $uma.Name }}
|
|
( {{- $e }}, {{ $e -}} ) -> 0
|
|
{{- end }}
|
|
|
|
{{/* TODO: probably use a data structure instead of hoping the compilers fix this */ -}}
|
|
// Base affinity for a trio using the global ruleset.
|
|
pub fun global/trio-affinity(a: character, b: character, c: character): int
|
|
match (a, b, c)
|
|
{{- range $trio := $.Trios }}
|
|
( {{- kkenum $trio.NameA }}, {{ kkenum $trio.NameB }}, {{ kkenum $trio.NameC -}} ) -> {{ $trio.Affinity }}
|
|
{{- end }}
|
|
(_, _, _) -> 0
|
|
|
|
{{- end }}
|