FEAT: ini parser will now search all sections for all keys
This commit is contained in:
@@ -2,7 +2,6 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"gopkg.in/ini.v1"
|
"gopkg.in/ini.v1"
|
||||||
@@ -72,29 +71,7 @@ func ReadIni(path string) (RoomIni, error) {
|
|||||||
return RoomIni{}, err
|
return RoomIni{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
meta, err := cfg.GetSection("DEFAULT")
|
roomIni, err := loadIni(cfg)
|
||||||
if err != nil {
|
|
||||||
return RoomIni{}, fmt.Errorf("unable to load DEFAULT section in %s: %+v", path, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
sections := cfg.Sections()
|
|
||||||
var room *ini.Section = nil
|
|
||||||
|
|
||||||
for _, sec := range sections {
|
|
||||||
if room != nil {
|
|
||||||
log.Printf("WARN: extra section in %s, section: %s", path, sec.Name())
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if sec.Name() != "default" {
|
|
||||||
room = sec
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if room == nil {
|
|
||||||
room = meta
|
|
||||||
}
|
|
||||||
|
|
||||||
roomIni, err := loadIni(meta, room)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return RoomIni{}, fmt.Errorf("ERROR: error loading ini from %s: %+v", path, err)
|
return RoomIni{}, fmt.Errorf("ERROR: error loading ini from %s: %+v", path, err)
|
||||||
}
|
}
|
||||||
@@ -102,16 +79,17 @@ func ReadIni(path string) (RoomIni, error) {
|
|||||||
return roomIni, nil
|
return roomIni, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadIni(meta *ini.Section, room *ini.Section) (RoomIni, error) {
|
func loadIni(cfg *ini.File) (RoomIni, error) {
|
||||||
roomini := RoomIni{}
|
roomini := RoomIni{}
|
||||||
|
|
||||||
if val, err := loadInt(meta, "night", -1); err != nil {
|
// meta config
|
||||||
|
if val, err := loadInt(cfg, "night", -1); err != nil {
|
||||||
return RoomIni{}, err
|
return RoomIni{}, err
|
||||||
} else {
|
} else {
|
||||||
roomini.night = val
|
roomini.night = val
|
||||||
}
|
}
|
||||||
|
|
||||||
if val, err := loadInt(meta, "room", -1); err != nil {
|
if val, err := loadInt(cfg, "room", -1); err != nil {
|
||||||
return RoomIni{}, err
|
return RoomIni{}, err
|
||||||
} else {
|
} else {
|
||||||
roomini.room = val
|
roomini.room = val
|
||||||
@@ -121,55 +99,56 @@ func loadIni(meta *ini.Section, room *ini.Section) (RoomIni, error) {
|
|||||||
return RoomIni{}, fmt.Errorf("night is set but room is not set")
|
return RoomIni{}, fmt.Errorf("night is set but room is not set")
|
||||||
}
|
}
|
||||||
|
|
||||||
if val, err := loadFloat(room, "size", 1); err != nil {
|
// room config
|
||||||
|
if val, err := loadFloat(cfg, "size", 1); err != nil {
|
||||||
return RoomIni{}, err
|
return RoomIni{}, err
|
||||||
} else {
|
} else {
|
||||||
roomini.size = val
|
roomini.size = val
|
||||||
}
|
}
|
||||||
|
|
||||||
if val, err := loadFloat(room, "speed", 1); err != nil {
|
if val, err := loadFloat(cfg, "speed", 1); err != nil {
|
||||||
return RoomIni{}, err
|
return RoomIni{}, err
|
||||||
} else {
|
} else {
|
||||||
roomini.speed = val
|
roomini.speed = val
|
||||||
}
|
}
|
||||||
|
|
||||||
if val, err := loadFloat(room, "fov", 55); err != nil {
|
if val, err := loadFloat(cfg, "fov", 55); err != nil {
|
||||||
return RoomIni{}, err
|
return RoomIni{}, err
|
||||||
} else {
|
} else {
|
||||||
roomini.fov = val
|
roomini.fov = val
|
||||||
}
|
}
|
||||||
|
|
||||||
if val, err := loadFloat(room, "texture_repeat", 3); err != nil {
|
if val, err := loadFloat(cfg, "texture_repeat", 3); err != nil {
|
||||||
return RoomIni{}, err
|
return RoomIni{}, err
|
||||||
} else {
|
} else {
|
||||||
roomini.textureRepeat = val
|
roomini.textureRepeat = val
|
||||||
}
|
}
|
||||||
|
|
||||||
if val, err := loadFloat(room, "room_height", 350); err != nil {
|
if val, err := loadFloat(cfg, "room_height", 350); err != nil {
|
||||||
return RoomIni{}, err
|
return RoomIni{}, err
|
||||||
} else {
|
} else {
|
||||||
roomini.roomHeight = val
|
roomini.roomHeight = val
|
||||||
}
|
}
|
||||||
|
|
||||||
if val, err := loadInt(room, "layer_frames", 1); err != nil {
|
if val, err := loadInt(cfg, "layer_frames", 1); err != nil {
|
||||||
return RoomIni{}, err
|
return RoomIni{}, err
|
||||||
} else {
|
} else {
|
||||||
roomini.layerFrames = val
|
roomini.layerFrames = val
|
||||||
}
|
}
|
||||||
|
|
||||||
if val, err := loadInt(room, "fog_color", 0); err != nil {
|
if val, err := loadInt(cfg, "fog_color", 0); err != nil {
|
||||||
return RoomIni{}, err
|
return RoomIni{}, err
|
||||||
} else {
|
} else {
|
||||||
roomini.fogColor = val
|
roomini.fogColor = val
|
||||||
}
|
}
|
||||||
|
|
||||||
if val, err := loadFloat(room, "fog_end", -1); err != nil {
|
if val, err := loadFloat(cfg, "fog_end", -1); err != nil {
|
||||||
return RoomIni{}, err
|
return RoomIni{}, err
|
||||||
} else {
|
} else {
|
||||||
roomini.fogEnd = val
|
roomini.fogEnd = val
|
||||||
}
|
}
|
||||||
|
|
||||||
if val, err := loadFloat(room, "mini_speed", 1); err != nil {
|
if val, err := loadFloat(cfg, "mini_speed", 1); err != nil {
|
||||||
return RoomIni{}, err
|
return RoomIni{}, err
|
||||||
} else {
|
} else {
|
||||||
roomini.miniSpeed = val
|
roomini.miniSpeed = val
|
||||||
@@ -179,26 +158,42 @@ func loadIni(meta *ini.Section, room *ini.Section) (RoomIni, error) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadInt(sec *ini.Section, key string, def int) (int, error) {
|
func loadInt(cfg *ini.File, key string, def int) (int, error) {
|
||||||
val, err := sec.GetKey(key)
|
sections := cfg.Sections()
|
||||||
if err != nil {
|
|
||||||
return def, nil
|
for _, sec := range sections {
|
||||||
|
val, err := sec.GetKey(key)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
valint, err := val.Int()
|
||||||
|
if err != nil {
|
||||||
|
return def, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return valint, nil
|
||||||
}
|
}
|
||||||
valint, err := val.Int()
|
|
||||||
if err != nil {
|
return def, nil
|
||||||
return def, err
|
|
||||||
}
|
|
||||||
return valint, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadFloat(sec *ini.Section, key string, def float64) (float64, error) {
|
func loadFloat(cfg *ini.File, key string, def float64) (float64, error) {
|
||||||
val, err := sec.GetKey(key)
|
sections := cfg.Sections()
|
||||||
if err != nil {
|
|
||||||
return def, nil
|
for _, sec := range sections {
|
||||||
|
val, err := sec.GetKey(key)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
valfloat, err := val.Float64()
|
||||||
|
if err != nil {
|
||||||
|
return def, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return valfloat, nil
|
||||||
}
|
}
|
||||||
valfloat, err := val.Float64()
|
|
||||||
if err != nil {
|
return def, nil
|
||||||
return def, err
|
|
||||||
}
|
|
||||||
return valfloat, nil
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user