-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathsplitmaker.go
More file actions
76 lines (66 loc) · 1.9 KB
/
Copy pathsplitmaker.go
File metadata and controls
76 lines (66 loc) · 1.9 KB
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package main
import (
"embed"
"encoding/json"
"errors"
)
//go:embed hk-split-maker/src/asset/hollowknight/categories/*
var fs embed.FS
type CategoryDirectoryData struct {
FileName string `json:"fileName"`
DisplayName string `json:"displayName"`
}
func GetAllFiles() (allFiles []Option) {
file, _ := fs.ReadFile(hkSplitMakerDir + "/categories/category-directory.json")
var v map[string][]*CategoryDirectoryData
if err := json.Unmarshal(file, &v); err != nil {
panic(err)
}
for _, categoryName := range []string{"Main", "Individual Level", "Category Extensions"} {
for _, f := range v[categoryName] {
allFiles = append(allFiles, Option{
Value: f.FileName + ".json",
Label: translate(f.DisplayName),
})
}
}
return
}
type SplitMakerConfig struct {
CategoryName string `json:"categoryName"`
StartTriggering string `json:"startTriggeringAutosplit"`
Ids []string `json:"splitIds"`
Names map[string]StringOrSlice `json:"names"`
Icons map[string]StringOrSlice `json:"icons"`
EndTriggering bool `json:"endTriggeringAutosplit"`
EndingSplit *struct {
Name string `json:"name"`
Icon string `json:"icon"`
} `json:"endingSplit"`
}
func GetSplitMakerConfig(fileName string) (*SplitMakerConfig, error) {
buf, err := fs.ReadFile(hkSplitMakerDir + "/categories/" + fileName)
if err != nil {
return nil, err
}
var result SplitMakerConfig
err = json.Unmarshal(buf, &result)
if err != nil {
return nil, err
}
return &result, nil
}
type StringOrSlice []string
func (s *StringOrSlice) UnmarshalJSON(data []byte) error {
var str string
if err := json.Unmarshal(data, &str); err == nil {
*s = []string{str}
return nil
}
var slice []string
if err := json.Unmarshal(data, &slice); err == nil {
*s = slice
return nil
}
return errors.New("field must be string or []string")
}