80 lines
1.9 KiB
Go
80 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"log"
|
|
"strings"
|
|
|
|
"gitea.boner.be/bdnugget/goonscape/config"
|
|
"gitea.boner.be/bdnugget/goonscape/game"
|
|
"gitea.boner.be/bdnugget/goonscape/logging"
|
|
"gitea.boner.be/bdnugget/goonscape/network"
|
|
rl "github.com/gen2brain/raylib-go/raylib"
|
|
)
|
|
|
|
func main() {
|
|
logging.Info.Println("Starting GoonScape client")
|
|
|
|
// Raylib log level warn
|
|
rl.SetTraceLogLevel(rl.LogWarning)
|
|
// Parse command line flags
|
|
local := flag.Bool("local", false, "Connect to local server")
|
|
addr := flag.String("addr", "", "Server address (host or host:port)")
|
|
noMusic := flag.Bool("no-music", false, "Disable music playback")
|
|
flag.Parse()
|
|
|
|
// Set config before any game initialization
|
|
config.Current.PlayMusic = !*noMusic
|
|
|
|
// Set server address based on flags
|
|
if *local {
|
|
if *addr != "" {
|
|
log.Fatal("Cannot use -local and -addr together")
|
|
}
|
|
network.SetServerAddr("localhost:6969")
|
|
} else if *addr != "" {
|
|
// If port is not specified, append default port
|
|
if !strings.Contains(*addr, ":") {
|
|
*addr += ":6969"
|
|
}
|
|
network.SetServerAddr(*addr)
|
|
}
|
|
|
|
logging.Info.Println("Initializing window")
|
|
rl.InitWindow(1024, 768, "GoonScape")
|
|
defer func() {
|
|
logging.Info.Println("Closing window")
|
|
rl.CloseWindow()
|
|
}()
|
|
|
|
// Initialize audio device first
|
|
if !rl.IsAudioDeviceReady() {
|
|
rl.InitAudioDevice()
|
|
if !rl.IsAudioDeviceReady() {
|
|
log.Fatal("Failed to initialize audio device")
|
|
}
|
|
}
|
|
defer rl.CloseAudioDevice()
|
|
|
|
game := game.New()
|
|
logging.Info.Println("Loading game assets")
|
|
if err := game.LoadAssets(); err != nil {
|
|
log.Fatalf("Failed to load assets: %v", err)
|
|
}
|
|
defer func() {
|
|
logging.Info.Println("Cleaning up game resources")
|
|
game.Cleanup()
|
|
}()
|
|
|
|
if config.Current.PlayMusic {
|
|
logging.Info.Println("Starting music playback")
|
|
rl.PlayMusicStream(game.Music)
|
|
rl.SetMusicVolume(game.Music, 0.5)
|
|
}
|
|
|
|
rl.SetTargetFPS(60)
|
|
logging.Info.Println("Starting game loop")
|
|
game.Run()
|
|
logging.Info.Println("Game exited cleanly")
|
|
}
|