Files
agame/run_headless_server.sh
T

66 lines
1.2 KiB
Bash

#!/usr/bin/env bash
find_godot() {
if [[ -n "${GODOT_BIN:-}" && -x "$GODOT_BIN" ]]; then
printf '%s\n' "$GODOT_BIN"
return 0
fi
if command -v godot >/dev/null 2>&1; then
command -v godot
return 0
fi
return 1
}
stop_server() {
local server_pid="$1"
if kill -0 "$server_pid" 2>/dev/null; then
echo
echo "Stopping Dedicated Server..."
kill "$server_pid" 2>/dev/null || true
for _ in {1..20}; do
if ! kill -0 "$server_pid" 2>/dev/null; then
return
fi
sleep 0.1
done
kill -KILL "$server_pid" 2>/dev/null || true
fi
}
main() {
local godot_bin
if ! godot_bin="$(find_godot)"; then
echo "Error: Godot 4 was not found." >&2
echo "Install Godot 4, add it to PATH, or set GODOT_BIN to its executable path." >&2
return 127
fi
local project_dir
project_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
echo "Starting Dedicated Server (Headless Mode) with: $godot_bin"
"$godot_bin" --headless --path "$project_dir" &
local server_pid=$!
local stopping=false
trap 'stopping=true; stop_server "$server_pid"' INT TERM EXIT
local exit_code=0
wait "$server_pid" 2>/dev/null || exit_code=$?
trap - INT TERM EXIT
if [[ "$stopping" == true ]]; then
return 0
fi
return "$exit_code"
}
main "$@"