FEAT: room credits

This commit is contained in:
zomo
2026-04-15 20:45:21 -05:00
parent 37f9bc215f
commit 4619fef9a3
3 changed files with 157 additions and 27 deletions
+87 -18
View File
@@ -3,6 +3,7 @@ package main
import (
"fmt"
"strconv"
"strings"
"gopkg.in/ini.v1"
)
@@ -11,6 +12,10 @@ type RoomIni struct {
night int
room int
name string
credits string
links []string
size float64
speed float64
fov float64
@@ -27,8 +32,7 @@ func (r *RoomIni) ToIni() string {
return strconv.FormatFloat(n, 'f', -1, 64)
}
return fmt.Sprintf(`
[NIGHT_%d_ROOM_%d]
return fmt.Sprintf(`[NIGHT_%d_ROOM_%d]
size=%s
speed=%s
FOV=%s
@@ -48,6 +52,29 @@ Mini_speed=%s
)
}
func (r *RoomIni) ToCredits() string {
name := r.name
if name == "" {
name = "unnamed"
}
credits := r.credits
if credits == "" {
credits = "no name"
}
links := strings.Join(r.links, " | ")
if links == "" {
links = "no links"
}
return fmt.Sprintf(`Night %d - Room %d: %s
By: %s
Links: %s
`,
r.night, r.room, name,
credits, links,
)
}
func NewRoomIni() RoomIni {
return RoomIni{
night: -1,
@@ -82,80 +109,107 @@ func ReadIni(path string) (RoomIni, error) {
func loadIni(cfg *ini.File) (RoomIni, error) {
roomini := RoomIni{}
// meta config
if val, err := loadInt(cfg, "night", -1); err != nil {
if err := loadIniMeta(&roomini, cfg); err != nil {
return RoomIni{}, err
}
if err := loadIniCredits(&roomini, cfg); err != nil {
return RoomIni{}, err
}
if err := loadIniRoom(&roomini, cfg); err != nil {
return RoomIni{}, err
}
return roomini, nil
}
func loadIniMeta(roomini *RoomIni, cfg *ini.File) error {
if val, err := loadInt(cfg, "night", -1); err != nil {
return err
} else {
roomini.night = val
}
if val, err := loadInt(cfg, "room", -1); err != nil {
return RoomIni{}, err
return err
} else {
roomini.room = val
}
if roomini.night > 0 && roomini.room < 1 {
return RoomIni{}, fmt.Errorf("night is set but room is not set")
return fmt.Errorf("night is set but room is not set")
}
// room config
return nil
}
func loadIniCredits(roomini *RoomIni, cfg *ini.File) error {
roomini.name = loadString(cfg, "name", "")
roomini.credits = loadString(cfg, "credits", "")
linksstring := loadString(cfg, "links", "")
roomini.links = strings.Split(linksstring, " ")
return nil
}
func loadIniRoom(roomini *RoomIni, cfg *ini.File) error {
if val, err := loadFloat(cfg, "size", 1); err != nil {
return RoomIni{}, err
return err
} else {
roomini.size = val
}
if val, err := loadFloat(cfg, "speed", 1); err != nil {
return RoomIni{}, err
return err
} else {
roomini.speed = val
}
if val, err := loadFloat(cfg, "fov", 55); err != nil {
return RoomIni{}, err
return err
} else {
roomini.fov = val
}
if val, err := loadFloat(cfg, "texture_repeat", 3); err != nil {
return RoomIni{}, err
return err
} else {
roomini.textureRepeat = val
}
if val, err := loadFloat(cfg, "room_height", 350); err != nil {
return RoomIni{}, err
return err
} else {
roomini.roomHeight = val
}
if val, err := loadInt(cfg, "layer_frames", 1); err != nil {
return RoomIni{}, err
return err
} else {
roomini.layerFrames = val
}
if val, err := loadInt(cfg, "fog_color", 0); err != nil {
return RoomIni{}, err
return err
} else {
roomini.fogColor = val
}
if val, err := loadFloat(cfg, "fog_end", -1); err != nil {
return RoomIni{}, err
return err
} else {
roomini.fogEnd = val
}
if val, err := loadFloat(cfg, "mini_speed", 1); err != nil {
return RoomIni{}, err
return err
} else {
roomini.miniSpeed = val
}
return roomini, nil
return nil
}
func loadInt(cfg *ini.File, key string, def int) (int, error) {
@@ -197,3 +251,18 @@ func loadFloat(cfg *ini.File, key string, def float64) (float64, error) {
return def, nil
}
func loadString(cfg *ini.File, key string, def string) string {
sections := cfg.Sections()
for _, sec := range sections {
val, err := sec.GetKey(key)
if err != nil {
continue
}
return val.String()
}
return def
}