package generators import ( "encoding/json" "math/rand" "os" ) type TieflingArrays struct { Nm1 []string `json:"nm1"` Nm2 []string `json:"nm2"` Nm3 []string `json:"nm3"` Nm4 []string `json:"nm4"` Nm5 []string `json:"nm5"` } func LoadTieflingArrays(path string) (TieflingArrays, error) { var arr TieflingArrays file, err := os.Open(path) if err != nil { return arr, err } defer file.Close() decoder := json.NewDecoder(file) if err := decoder.Decode(&arr); err != nil { return arr, err } return arr, nil } func GenerateTieflingName(arr *TieflingArrays, gender string) string { switch gender { case "female": rnd := rand.Intn(len(arr.Nm4)) rnd2 := rand.Intn(len(arr.Nm5)) return arr.Nm4[rnd] + arr.Nm5[rnd2] case "virtue": rnd := rand.Intn(len(arr.Nm3)) return arr.Nm3[rnd] default: rnd := rand.Intn(len(arr.Nm1)) rnd2 := rand.Intn(len(arr.Nm2)) return arr.Nm1[rnd] + arr.Nm2[rnd2] } } func GenerateTieflingNames(arr *TieflingArrays, gender string, swearFilter func(string) bool) []string { names := make([]string, 0, 10) for i := 0; i < 10; i++ { var n string switch gender { case "female": n = GenerateTieflingName(arr, "female") case "virtue": n = GenerateTieflingName(arr, "virtue") default: n = GenerateTieflingName(arr, "male") } for n == "" || swearFilter(n) { switch gender { case "female": n = GenerateTieflingName(arr, "female") case "virtue": n = GenerateTieflingName(arr, "virtue") default: n = GenerateTieflingName(arr, "male") } } names = append(names, n) } return names }