Compare commits

...

3 Commits

Author SHA1 Message Date
zomo 93493c2af7 FEAT: check for duplicate room assignments 2026-04-14 21:23:07 -05:00
zomo 54b774cade FIX: typo 2026-04-14 21:22:45 -05:00
zomo 74c43fc8c6 FIX: even the transparent mini must be 4 frames 2026-04-14 21:22:24 -05:00
4 changed files with 67 additions and 10 deletions
+34
View File
@@ -1,5 +1,9 @@
package main
import (
"fmt"
)
func AssignExtraRooms(rooms []RoomFolder, roomsPerNight int) {
latestnight := 0
@@ -27,3 +31,33 @@ func AssignExtraRooms(rooms []RoomFolder, roomsPerNight int) {
}
}
}
func CheckDuplicateRooms(rooms []RoomFolder) error {
maxnight := 0
maxroom := 0
for _, r := range rooms {
if r.Cfg.night > maxnight {
maxnight = r.Cfg.night
}
if r.Cfg.room > maxroom {
maxroom = r.Cfg.room
}
}
assignments := make([][]string, maxnight)
for night := range maxnight {
assignments[night] = make([]string, maxroom)
}
for _, r := range rooms {
if r.Cfg.night > 0 && r.Cfg.room > 0 {
if assignments[r.Cfg.night-1][r.Cfg.room-1] != "" {
return fmt.Errorf("duplicate room assignment for Room %d Night %d: %s, %s", r.Cfg.night, r.Cfg.room, assignments[r.Cfg.night][r.Cfg.room], r.Path)
}
assignments[r.Cfg.night-1][r.Cfg.room-1] = r.Path
}
}
return nil
}
+12 -8
View File
@@ -90,6 +90,10 @@ func ReadIni(path string) (RoomIni, error) {
}
}
if room == nil {
room = meta
}
roomIni, err := loadIni(meta, room)
if err != nil {
return RoomIni{}, fmt.Errorf("ERROR: error loading ini from %s: %+v", path, err)
@@ -117,31 +121,31 @@ 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 := loatFloat(room, "size", 1); err != nil {
if val, err := loadFloat(room, "size", 1); err != nil {
return RoomIni{}, err
} else {
roomini.size = val
}
if val, err := loatFloat(room, "speed", 1); err != nil {
if val, err := loadFloat(room, "speed", 1); err != nil {
return RoomIni{}, err
} else {
roomini.speed = val
}
if val, err := loatFloat(room, "fov", 55); err != nil {
if val, err := loadFloat(room, "fov", 55); err != nil {
return RoomIni{}, err
} else {
roomini.fov = val
}
if val, err := loatFloat(room, "texture_repeat", 3); err != nil {
if val, err := loadFloat(room, "texture_repeat", 3); err != nil {
return RoomIni{}, err
} else {
roomini.textureRepeat = val
}
if val, err := loatFloat(room, "room_height", 350); err != nil {
if val, err := loadFloat(room, "room_height", 350); err != nil {
return RoomIni{}, err
} else {
roomini.roomHeight = val
@@ -159,13 +163,13 @@ func loadIni(meta *ini.Section, room *ini.Section) (RoomIni, error) {
roomini.fogColor = val
}
if val, err := loatFloat(room, "fog_end", -1); err != nil {
if val, err := loadFloat(room, "fog_end", -1); err != nil {
return RoomIni{}, err
} else {
roomini.fogEnd = val
}
if val, err := loatFloat(room, "mini_speed", 1); err != nil {
if val, err := loadFloat(room, "mini_speed", 1); err != nil {
return RoomIni{}, err
} else {
roomini.miniSpeed = val
@@ -187,7 +191,7 @@ func loadInt(sec *ini.Section, key string, def int) (int, error) {
return valint, nil
}
func loatFloat(sec *ini.Section, key string, def float64) (float64, error) {
func loadFloat(sec *ini.Section, key string, def float64) (float64, error) {
val, err := sec.GetKey(key)
if err != nil {
return def, nil
+10 -1
View File
@@ -1,6 +1,9 @@
package main
import "flag"
import (
"flag"
"log"
)
func main() {
if err := mainErr(); err != nil {
@@ -23,6 +26,12 @@ func mainErr() error {
return err
}
err = CheckDuplicateRooms(roomFolders)
if err != nil {
log.Printf("Error in room assigmnents: %v", err)
return nil
}
AssignExtraRooms(roomFolders, *roomPerNight)
// only deletes DATA/NIGHT_* folders and the CF.ini file
+10
View File
@@ -154,6 +154,12 @@ func copyFolder(roomFolder RoomFolder, outpath string) error {
transparent := image.NewRGBA(image.Rectangle{image.Point{0, 0}, image.Point{1, 1}})
transparent.Set(0, 0, color.RGBA{0xff, 0xff, 0xff, 0x01})
transparentminifig := image.NewRGBA(image.Rectangle{image.Point{0, 0}, image.Point{4, 1}})
transparentminifig.Set(0, 0, color.RGBA{0xff, 0xff, 0xff, 0x01})
transparentminifig.Set(1, 0, color.RGBA{0xff, 0xff, 0xff, 0x01})
transparentminifig.Set(2, 0, color.RGBA{0xff, 0xff, 0xff, 0x01})
transparentminifig.Set(3, 0, color.RGBA{0xff, 0xff, 0xff, 0x01})
for _, imagename := range extraRequiredImages {
imagepath := path.Join(roomoutpath, imagename+".png")
@@ -161,9 +167,13 @@ func copyFolder(roomFolder RoomFolder, outpath string) error {
if err != nil {
return err
}
if strings.ToUpper(imagename) == "MINI" {
png.Encode(f, transparentminifig)
} else {
png.Encode(f, transparent)
}
}
}
if len(extraRequiredAudio) > 0 {
log.Printf("INFO: necessary optional audios will use a silent file: %v", extraRequiredAudio)