D2Data and Quest data (#9)

This commit is contained in:
Héctor Giménez
2024-02-02 20:19:44 +09:00
committed by GitHub
parent f06c587c7a
commit db8fc7d6db
16 changed files with 25749 additions and 462 deletions

86
cmd/d2data/main.go Normal file
View 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)
}