diff --git a/ini.go b/ini.go index f93feed..5a973a4 100644 --- a/ini.go +++ b/ini.go @@ -2,7 +2,6 @@ package main import ( "fmt" - "log" "strconv" "gopkg.in/ini.v1" @@ -72,29 +71,7 @@ func ReadIni(path string) (RoomIni, error) { return RoomIni{}, err } - meta, err := cfg.GetSection("DEFAULT") - 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) + roomIni, err := loadIni(cfg) if err != nil { 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 } -func loadIni(meta *ini.Section, room *ini.Section) (RoomIni, error) { +func loadIni(cfg *ini.File) (RoomIni, error) { 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 } else { roomini.night = val } - if val, err := loadInt(meta, "room", -1); err != nil { + if val, err := loadInt(cfg, "room", -1); err != nil { return RoomIni{}, err } else { 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") } - if val, err := loadFloat(room, "size", 1); err != nil { + // room config + if val, err := loadFloat(cfg, "size", 1); err != nil { return RoomIni{}, err } else { roomini.size = val } - if val, err := loadFloat(room, "speed", 1); err != nil { + if val, err := loadFloat(cfg, "speed", 1); err != nil { return RoomIni{}, err } else { roomini.speed = val } - if val, err := loadFloat(room, "fov", 55); err != nil { + if val, err := loadFloat(cfg, "fov", 55); err != nil { return RoomIni{}, err } else { 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 } else { 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 } else { 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 } else { 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 } else { 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 } else { 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 } else { 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) { - val, err := sec.GetKey(key) - if err != nil { - return def, nil +func loadInt(cfg *ini.File, key string, def int) (int, error) { + sections := cfg.Sections() + + 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, err - } - return valint, nil + + return def, nil } -func loadFloat(sec *ini.Section, key string, def float64) (float64, error) { - val, err := sec.GetKey(key) - if err != 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() + if err != nil { + return def, err + } + + return valfloat, nil } - valfloat, err := val.Float64() - if err != nil { - return def, err - } - return valfloat, nil + + return def, nil }