mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-02-04 14:22:26 +08:00
87 lines
2.2 KiB
Go
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))
|
|
}
|