Compare commits
	
		
			6 Commits
		
	
	
		
			feature/me
			...
			0f56916295
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 0f56916295 | |||
| a1ddbadea0 | |||
| e4d0b98945 | |||
| 509bc8b20b | |||
| c40e4ae7ac | |||
| cd68581429 | 
							
								
								
									
										30
									
								
								Dockerfile.build
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,30 @@ | |||||||
|  | FROM golang:1.23 | ||||||
|  |  | ||||||
|  | # Install build dependencies | ||||||
|  | RUN apt-get update && apt-get install -y \ | ||||||
|  |     gcc-mingw-w64 \ | ||||||
|  |     cmake \ | ||||||
|  |     zip \ | ||||||
|  |     libasound2-dev \ | ||||||
|  |     mesa-common-dev \ | ||||||
|  |     libx11-dev \ | ||||||
|  |     libxrandr-dev \ | ||||||
|  |     libxi-dev \ | ||||||
|  |     xorg-dev \ | ||||||
|  |     libgl1-mesa-dev \ | ||||||
|  |     libglu1-mesa-dev \ | ||||||
|  |     libwayland-dev \ | ||||||
|  |     wayland-protocols \ | ||||||
|  |     libxkbcommon-dev \ | ||||||
|  |     && rm -rf /var/lib/apt/lists/* | ||||||
|  |  | ||||||
|  | WORKDIR /build | ||||||
|  |  | ||||||
|  | # Copy build scripts | ||||||
|  | COPY . /build/ | ||||||
|  |  | ||||||
|  | # Set execute permissions | ||||||
|  | RUN chmod +x /build/scripts/build.sh | ||||||
|  |  | ||||||
|  | # Build command | ||||||
|  | CMD ["make", "all"]  | ||||||
							
								
								
									
										30
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,30 @@ | |||||||
|  | .PHONY: all clean windows linux darwin | ||||||
|  |  | ||||||
|  | include scripts/platforms.mk | ||||||
|  |  | ||||||
|  | BINARY_NAME=goonscape | ||||||
|  | VERSION=1.0.0 | ||||||
|  | BUILD_DIR=build | ||||||
|  | ASSETS_DIR=resources | ||||||
|  |  | ||||||
|  | all: clean $(PLATFORMS) | ||||||
|  |  | ||||||
|  | $(PLATFORMS): | ||||||
|  | 	@echo "Building for $@..." | ||||||
|  | 	@mkdir -p $(BUILD_DIR)/$@ | ||||||
|  | 	@scripts/build.sh $(word 1,$(subst /, ,$@)) $(word 2,$(subst /, ,$@)) \ | ||||||
|  | 		$(BUILD_DIR)/$@/$(BINARY_NAME)$(if $(findstring windows,$@),.exe,) | ||||||
|  | 	@cp -r $(ASSETS_DIR) $(BUILD_DIR)/$@/ | ||||||
|  | 	@cd $(BUILD_DIR) && zip -r $(BINARY_NAME)-$(word 1,$(subst /, ,$@))-$(word 2,$(subst /, ,$@))-v$(VERSION).zip $@ | ||||||
|  | 	@echo "Done building for $@" | ||||||
|  |  | ||||||
|  | clean: | ||||||
|  | 	rm -rf $(BUILD_DIR) | ||||||
|  |  | ||||||
|  | # Development build for current platform | ||||||
|  | dev: | ||||||
|  | 	go build -o $(BINARY_NAME) | ||||||
|  |  | ||||||
|  | # Run tests | ||||||
|  | test: | ||||||
|  | 	go test ./...  | ||||||
							
								
								
									
										20
									
								
								README.md
									
									
									
									
									
								
							
							
						
						| @ -63,6 +63,26 @@ go run main.go -addr somehost:6970   # Uses somehost:6970 | |||||||
|  |  | ||||||
| Note: The `-local` flag is a shorthand for `-addr localhost:6969` and cannot be used together with `-addr`. | Note: The `-local` flag is a shorthand for `-addr localhost:6969` and cannot be used together with `-addr`. | ||||||
|  |  | ||||||
|  | ## Building Release Binaries | ||||||
|  |  | ||||||
|  | The project uses Docker to create consistent builds across platforms. To build release binaries: | ||||||
|  |  | ||||||
|  | 1. Build the Docker image (only needed once): | ||||||
|  | ```bash | ||||||
|  | sudo docker build -t goonscape-builder -f Dockerfile.build . | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | 2. Create release builds: | ||||||
|  | ```bash | ||||||
|  | sudo docker run -v $(pwd):/build goonscape-builder | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | This will create zip files in the `build` directory for: | ||||||
|  | - Windows (64-bit): `goonscape-windows-amd64-v1.0.0.zip` | ||||||
|  | - Linux (64-bit): `goonscape-linux-amd64-v1.0.0.zip` | ||||||
|  |  | ||||||
|  | Each zip contains the binary and all required assets. | ||||||
|  |  | ||||||
| ## Development | ## Development | ||||||
|  |  | ||||||
| The project uses Protocol Buffers for network communication. If you modify the `.proto` files, regenerate the Go code with: | The project uses Protocol Buffers for network communication. If you modify the `.proto` files, regenerate the Go code with: | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								build/goonscape-linux-amd64-v1.0.0.zip
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								build/goonscape-windows-amd64-v1.0.0.zip
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								build/linux/amd64/goonscape
									
									
									
									
									
										Executable file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								build/linux/amd64/resources/audio/GoonScape1.mp3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								build/linux/amd64/resources/audio/GoonScape2.mp3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										12
									
								
								build/linux/amd64/resources/models/coomer.mtl
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,12 @@ | |||||||
|  | # Blender 3.6.0 MTL File: 'None' | ||||||
|  | # www.blender.org | ||||||
|  |  | ||||||
|  | newmtl Material.001 | ||||||
|  | Ns 250.000000 | ||||||
|  | Ka 1.000000 1.000000 1.000000 | ||||||
|  | Ks 0.500000 0.500000 0.500000 | ||||||
|  | Ke 0.000000 0.000000 0.000000 | ||||||
|  | Ni 1.450000 | ||||||
|  | d 1.000000 | ||||||
|  | illum 2 | ||||||
|  | map_Kd coomer.png | ||||||
							
								
								
									
										117248
									
								
								build/linux/amd64/resources/models/coomer.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								build/linux/amd64/resources/models/coomer.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 2.2 MiB | 
							
								
								
									
										12
									
								
								build/linux/amd64/resources/models/goonion.mtl
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,12 @@ | |||||||
|  | # Blender 3.6.0 MTL File: 'None' | ||||||
|  | # www.blender.org | ||||||
|  |  | ||||||
|  | newmtl Material.001 | ||||||
|  | Ns 250.000000 | ||||||
|  | Ka 1.000000 1.000000 1.000000 | ||||||
|  | Ks 0.500000 0.500000 0.500000 | ||||||
|  | Ke 0.000000 0.000000 0.000000 | ||||||
|  | Ni 1.450000 | ||||||
|  | d 1.000000 | ||||||
|  | illum 2 | ||||||
|  | map_Kd goonion.png | ||||||
							
								
								
									
										112531
									
								
								build/linux/amd64/resources/models/goonion.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								build/linux/amd64/resources/models/goonion.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 2.5 MiB | 
							
								
								
									
										12
									
								
								build/linux/amd64/resources/models/shreke.mtl
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,12 @@ | |||||||
|  | # Blender 3.6.0 MTL File: 'None' | ||||||
|  | # www.blender.org | ||||||
|  |  | ||||||
|  | newmtl Material.001 | ||||||
|  | Ns 250.000000 | ||||||
|  | Ka 1.000000 1.000000 1.000000 | ||||||
|  | Ks 0.500000 0.500000 0.500000 | ||||||
|  | Ke 0.000000 0.000000 0.000000 | ||||||
|  | Ni 1.450000 | ||||||
|  | d 1.000000 | ||||||
|  | illum 2 | ||||||
|  | map_Kd shreke.png | ||||||
							
								
								
									
										210035
									
								
								build/linux/amd64/resources/models/shreke.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								build/linux/amd64/resources/models/shreke.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 4.8 MiB | 
							
								
								
									
										
											BIN
										
									
								
								build/linux/amd64/resources/screenshot.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 104 KiB | 
							
								
								
									
										
											BIN
										
									
								
								build/windows/amd64/goonscape.exe
									
									
									
									
									
										Executable file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								build/windows/amd64/resources/audio/GoonScape1.mp3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								build/windows/amd64/resources/audio/GoonScape2.mp3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										12
									
								
								build/windows/amd64/resources/models/coomer.mtl
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,12 @@ | |||||||
|  | # Blender 3.6.0 MTL File: 'None' | ||||||
|  | # www.blender.org | ||||||
|  |  | ||||||
|  | newmtl Material.001 | ||||||
|  | Ns 250.000000 | ||||||
|  | Ka 1.000000 1.000000 1.000000 | ||||||
|  | Ks 0.500000 0.500000 0.500000 | ||||||
|  | Ke 0.000000 0.000000 0.000000 | ||||||
|  | Ni 1.450000 | ||||||
|  | d 1.000000 | ||||||
|  | illum 2 | ||||||
|  | map_Kd coomer.png | ||||||
							
								
								
									
										117248
									
								
								build/windows/amd64/resources/models/coomer.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								build/windows/amd64/resources/models/coomer.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 2.2 MiB | 
							
								
								
									
										12
									
								
								build/windows/amd64/resources/models/goonion.mtl
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,12 @@ | |||||||
|  | # Blender 3.6.0 MTL File: 'None' | ||||||
|  | # www.blender.org | ||||||
|  |  | ||||||
|  | newmtl Material.001 | ||||||
|  | Ns 250.000000 | ||||||
|  | Ka 1.000000 1.000000 1.000000 | ||||||
|  | Ks 0.500000 0.500000 0.500000 | ||||||
|  | Ke 0.000000 0.000000 0.000000 | ||||||
|  | Ni 1.450000 | ||||||
|  | d 1.000000 | ||||||
|  | illum 2 | ||||||
|  | map_Kd goonion.png | ||||||
							
								
								
									
										112531
									
								
								build/windows/amd64/resources/models/goonion.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								build/windows/amd64/resources/models/goonion.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 2.5 MiB | 
							
								
								
									
										12
									
								
								build/windows/amd64/resources/models/shreke.mtl
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,12 @@ | |||||||
|  | # Blender 3.6.0 MTL File: 'None' | ||||||
|  | # www.blender.org | ||||||
|  |  | ||||||
|  | newmtl Material.001 | ||||||
|  | Ns 250.000000 | ||||||
|  | Ka 1.000000 1.000000 1.000000 | ||||||
|  | Ks 0.500000 0.500000 0.500000 | ||||||
|  | Ke 0.000000 0.000000 0.000000 | ||||||
|  | Ni 1.450000 | ||||||
|  | d 1.000000 | ||||||
|  | illum 2 | ||||||
|  | map_Kd shreke.png | ||||||
							
								
								
									
										210035
									
								
								build/windows/amd64/resources/models/shreke.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								build/windows/amd64/resources/models/shreke.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 4.8 MiB | 
							
								
								
									
										
											BIN
										
									
								
								build/windows/amd64/resources/screenshot.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 104 KiB | 
							
								
								
									
										18
									
								
								game/game.go
									
									
									
									
									
								
							
							
						
						| @ -1,6 +1,7 @@ | |||||||
| package game | package game | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"os" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| 	"gitea.boner.be/bdnugget/goonscape/assets" | 	"gitea.boner.be/bdnugget/goonscape/assets" | ||||||
| @ -18,7 +19,6 @@ type Game struct { | |||||||
| 	Chat         *Chat | 	Chat         *Chat | ||||||
| 	MenuOpen     bool | 	MenuOpen     bool | ||||||
| 	QuitChan     chan struct{} // Channel to signal shutdown | 	QuitChan     chan struct{} // Channel to signal shutdown | ||||||
| 	QuitDone     chan struct{} // New channel to signal when cleanup is complete |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func New() *Game { | func New() *Game { | ||||||
| @ -42,7 +42,6 @@ func New() *Game { | |||||||
| 		}, | 		}, | ||||||
| 		Chat:     NewChat(), | 		Chat:     NewChat(), | ||||||
| 		QuitChan: make(chan struct{}), | 		QuitChan: make(chan struct{}), | ||||||
| 		QuitDone: make(chan struct{}), |  | ||||||
| 	} | 	} | ||||||
| 	game.Player.UserData = game | 	game.Player.UserData = game | ||||||
| 	game.Chat.userData = game | 	game.Chat.userData = game | ||||||
| @ -142,7 +141,7 @@ func (g *Game) DrawPlayer(player *types.Player, model rl.Model) { | |||||||
|  |  | ||||||
| 	rl.DrawModel(model, playerPos, 16, rl.White) | 	rl.DrawModel(model, playerPos, 16, rl.White) | ||||||
|  |  | ||||||
| 	if player.FloatingMessage != nil && time.Now().Before(player.FloatingMessage.ExpireTime) { | 	if player.FloatingMessage != nil { | ||||||
| 		screenPos := rl.GetWorldToScreen(rl.Vector3{ | 		screenPos := rl.GetWorldToScreen(rl.Vector3{ | ||||||
| 			X: playerPos.X, | 			X: playerPos.X, | ||||||
| 			Y: playerPos.Y + 24.0, | 			Y: playerPos.Y + 24.0, | ||||||
| @ -150,8 +149,6 @@ func (g *Game) DrawPlayer(player *types.Player, model rl.Model) { | |||||||
| 		}, g.Camera) | 		}, g.Camera) | ||||||
|  |  | ||||||
| 		player.FloatingMessage.ScreenPos = screenPos | 		player.FloatingMessage.ScreenPos = screenPos | ||||||
| 	} else if player.FloatingMessage != nil { |  | ||||||
| 		player.FloatingMessage = nil |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if len(player.TargetPath) > 0 { | 	if len(player.TargetPath) > 0 { | ||||||
| @ -293,9 +290,7 @@ func (g *Game) DrawMenu() { | |||||||
| 				case "Settings": | 				case "Settings": | ||||||
| 					// TODO: Implement settings | 					// TODO: Implement settings | ||||||
| 				case "Exit Game": | 				case "Exit Game": | ||||||
| 					close(g.QuitChan) | 					g.Shutdown() | ||||||
| 					<-g.QuitDone |  | ||||||
| 					rl.CloseWindow() |  | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| @ -310,3 +305,10 @@ func (g *Game) DrawMenu() { | |||||||
| 		buttonY += buttonSpacing | 		buttonY += buttonSpacing | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func (g *Game) Shutdown() { | ||||||
|  | 	close(g.QuitChan) | ||||||
|  | 	<-g.Player.QuitDone | ||||||
|  | 	rl.CloseWindow() | ||||||
|  | 	os.Exit(0) | ||||||
|  | } | ||||||
|  | |||||||
| @ -111,9 +111,18 @@ func HandleServerCommunication(conn net.Conn, playerID int32, player *types.Play | |||||||
| 	for { | 	for { | ||||||
| 		select { | 		select { | ||||||
| 		case <-quitChan: | 		case <-quitChan: | ||||||
| 			<-done // Wait for action goroutine to finish | 			done := make(chan struct{}) | ||||||
| 			close(done) | 			go func() { | ||||||
| 			time.Sleep(100 * time.Millisecond) // Give time for disconnect message to be sent | 				<-done | ||||||
|  | 				close(player.QuitDone) | ||||||
|  | 			}() | ||||||
|  |  | ||||||
|  | 			select { | ||||||
|  | 			case <-done: | ||||||
|  | 				time.Sleep(100 * time.Millisecond) | ||||||
|  | 			case <-time.After(1 * time.Second): | ||||||
|  | 				log.Println("Shutdown timed out") | ||||||
|  | 			} | ||||||
| 			return | 			return | ||||||
| 		default: | 		default: | ||||||
| 			// Read message length (4 bytes) | 			// Read message length (4 bytes) | ||||||
|  | |||||||
							
								
								
									
										24
									
								
								scripts/build.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						| @ -0,0 +1,24 @@ | |||||||
|  | #!/bin/bash | ||||||
|  |  | ||||||
|  | # Main build process | ||||||
|  | build() { | ||||||
|  |     local os=$1 | ||||||
|  |     local arch=$2 | ||||||
|  |     local output=$3 | ||||||
|  |  | ||||||
|  |     # Set CGO flags for static linking | ||||||
|  |     export CGO_ENABLED=1 | ||||||
|  |     export GOOS=$os | ||||||
|  |     export GOARCH=$arch | ||||||
|  |      | ||||||
|  |     # Platform specific flags | ||||||
|  |     if [ "$os" = "windows" ]; then | ||||||
|  |         export CC=x86_64-w64-mingw32-gcc | ||||||
|  |         export CXX=x86_64-w64-mingw32-g++ | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     go build -buildvcs=false -ldflags="-s -w" -o $output | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Call build with provided arguments | ||||||
|  | build "$1" "$2" "$3"  | ||||||
							
								
								
									
										1
									
								
								scripts/platforms.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | |||||||
|  | PLATFORMS=windows/amd64 linux/amd64  | ||||||