D2Data and Quest data (#9)
This commit is contained in:
86
cmd/d2data/main.go
Normal file
86
cmd/d2data/main.go
Normal file
@@ -0,0 +1,86 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"text/template"
|
||||
)
|
||||
|
||||
const templateSkillDesc = `// Code generated by d2data. DO NOT EDIT.
|
||||
// source: cmd/d2data/d2data/skilldesc.json
|
||||
package skill
|
||||
|
||||
var Desc = map[ID]Description{
|
||||
{{- range $key, $value := . }}
|
||||
{{ $key }}: {Page: {{ $value.SkillPage }}, Row: {{ $value.SkillRow }}, Column: {{ $value.SkillColumn }}, ListRow: {{ $value.ListRow }}, IconCel: {{ $value.IconCel }} },
|
||||
{{- end }}
|
||||
}`
|
||||
|
||||
const templateSkills = `// Code generated by d2data. DO NOT EDIT.
|
||||
// source: cmd/d2data/d2data/skills.json
|
||||
package skill
|
||||
|
||||
var Skills = map[ID]Skill{
|
||||
{{- range $key, $value := . }}
|
||||
{{ $key }}: {Name: "{{ $value.Name }}", ID: {{ $key }}, LeftSkill: {{ if eq $value.Leftskill 1 }}true{{ else }}false{{ end }}, RightSkill: {{ if eq $value.Rightskill 1 }}true{{ else }}false{{ end }} },
|
||||
{{- end }}
|
||||
}`
|
||||
|
||||
type skillDesc struct {
|
||||
Skilldesc string `json:"skilldesc"`
|
||||
SkillPage int `json:"SkillPage"`
|
||||
SkillRow int `json:"SkillRow"`
|
||||
SkillColumn int `json:"SkillColumn"`
|
||||
ListRow int `json:"ListRow"`
|
||||
IconCel int `json:"IconCel"`
|
||||
StrName string `json:"str name"`
|
||||
StrShort string `json:"str short"`
|
||||
StrLong string `json:"str long"`
|
||||
StrAlt string `json:"str alt"`
|
||||
}
|
||||
|
||||
type Skill struct {
|
||||
Leftskill int `json:"leftskill"`
|
||||
Rightskill int `json:"rightskill"`
|
||||
Name string `json:"skill"`
|
||||
}
|
||||
|
||||
// Generate static code from https://github.com/blizzhackers/d2data data files.
|
||||
func main() {
|
||||
err := generateFromFile(templateSkillDesc, "cmd/d2data/d2data/skilldesc.json", "pkg/data/skill/skilldesc.go", &map[string]skillDesc{})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
err = generateFromFile(templateSkills, "cmd/d2data/d2data/skills.json", "pkg/data/skill/skills.go", &map[string]Skill{})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func generateFromFile(templateName, filePath, outPath string, unmarshallStruct interface{}) error {
|
||||
jsonFile, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer jsonFile.Close()
|
||||
|
||||
byteValue, _ := io.ReadAll(jsonFile)
|
||||
|
||||
err = json.Unmarshal(byteValue, &unmarshallStruct)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
t := template.Must(template.New("tpl").Parse(templateName))
|
||||
|
||||
file, err := os.Create(outPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
return t.Execute(file, unmarshallStruct)
|
||||
}
|
||||
Reference in New Issue
Block a user