Files
hk4e/gs/config/scene_points.go
2022-12-19 13:40:04 +08:00

87 lines
2.2 KiB
Go

package config
import (
"encoding/json"
"os"
"strconv"
"strings"
"hk4e/pkg/logger"
)
type ScenePointEntry struct {
Name string
PointData *PointData
}
type ScenePointConfig struct {
Points map[string]*PointData `json:"points"`
}
type PointData struct {
Id int32 `json:"-"`
DollarType string `json:"$type"`
TranPos *Position `json:"tranPos"`
DungeonIds []int32 `json:"dungeonIds"`
DungeonRandomList []int32 `json:"dungeonRandomList"`
TranSceneId int32 `json:"tranSceneId"`
}
type Position struct {
X float64 `json:"x"`
Y float64 `json:"y"`
Z float64 `json:"z"`
}
func (g *GameDataConfig) loadScenePoints() {
g.ScenePointEntries = make(map[string]*ScenePointEntry)
g.ScenePointIdList = make([]int32, 0)
dirPath := g.binPrefix + "Scene/Point"
fileList, err := os.ReadDir(dirPath)
if err != nil {
logger.Error("open dir error: %v", err)
return
}
for _, file := range fileList {
fileName := file.Name()
if !strings.Contains(fileName, "scene") {
continue
}
startIndex := strings.Index(fileName, "scene")
endIndex := strings.Index(fileName, "_point.json")
if startIndex == -1 || endIndex == -1 || startIndex+5 > endIndex {
logger.Error("file name format error: %v", fileName)
continue
}
sceneId := fileName[startIndex+5 : endIndex]
fileData, err := os.ReadFile(dirPath + "/" + fileName)
if err != nil {
logger.Error("open file error: %v", err)
continue
}
scenePointConfig := new(ScenePointConfig)
err = json.Unmarshal(fileData, scenePointConfig)
if err != nil {
logger.Error("parse file error: %v", err)
continue
}
if len(scenePointConfig.Points) == 0 {
continue
}
for k, v := range scenePointConfig.Points {
sceneIdInt32, err := strconv.ParseInt(k, 10, 32)
if err != nil {
logger.Error("parse file error: %v", err)
continue
}
v.Id = int32(sceneIdInt32)
scenePointEntry := new(ScenePointEntry)
scenePointEntry.Name = sceneId + "_" + k
scenePointEntry.PointData = v
g.ScenePointIdList = append(g.ScenePointIdList, int32(sceneIdInt32))
g.ScenePointEntries[scenePointEntry.Name] = scenePointEntry
}
}
logger.Info("load %v ScenePointEntries", len(g.ScenePointEntries))
}