FEAT: ini parser will now search all sections for all keys

This commit is contained in:
zomo
2026-04-14 21:44:46 -05:00
parent 93493c2af7
commit 0aee2e904f
+36 -41
View File
@@ -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) {
sections := cfg.Sections()
for _, sec := range sections {
val, err := sec.GetKey(key) val, err := sec.GetKey(key)
if err != nil { if err != nil {
return def, nil continue
} }
valint, err := val.Int() valint, err := val.Int()
if err != nil { if err != nil {
return def, err return def, err
} }
return valint, nil return valint, nil
} }
func loadFloat(sec *ini.Section, key string, def float64) (float64, error) {
val, err := sec.GetKey(key)
if err != nil {
return def, nil return def, nil
} }
func loadFloat(cfg *ini.File, key string, def float64) (float64, error) {
sections := cfg.Sections()
for _, sec := range sections {
val, err := sec.GetKey(key)
if err != nil {
continue
}
valfloat, err := val.Float64() valfloat, err := val.Float64()
if err != nil { if err != nil {
return def, err return def, err
} }
return valfloat, nil return valfloat, nil
} }
return def, nil
}