#!/bin/bash set -e SCRIPT_PATH=$(readlink -f "${BASH_SOURCE:-$0}") SCRIPT_DIR=$(dirname "$SCRIPT_PATH") CLIENT_MODS=${STK_CLIENT_MODULES:-"textures-slow renderer-playercentric"} SERVER_MODS=${STK_SERVER_MODULES:=""} exec_spacetime() { # args: target, environment, build root, modules echo "[*] Running configure command: 'python3 $SCRIPT_DIR/spacetime_py/spacetime.py $1 $2 $SCRIPT_DIR $SPACETIME_VERBOSE'" python3 "$SCRIPT_DIR/spacetime_py/spacetime.py" "$1" "$2" "$SCRIPT_DIR" "$SPACETIME_VERBOSE" "$4" } exec_ninja() { # args: target echo "[*] Running build command: 'ninja -C $SCRIPT_DIR $1'" ninja -C "$SCRIPT_DIR" "$1" } sub_help() { echo "Spacetime - StarKingdoms build utility" echo "Spacetime is a small utility program to generate Ninja build manifests for compiling StarKingdoms." echo "Available targets:" echo " help - Show this help screen" # done echo " run_http - Compile the client and run a development http server for testing it" # done echo " run_http_prod - Compile the client in production mode and run a development http server for testing it" # done echo " run_server (default) - Compile and run the game server" # done echo " build_server - Compile the game server" # done echo " run_server_prod - Compile and run the game server with optimizations enabled" # done echo " build_server_prod - Compile the game server with optimizations enabled" # done echo " build_client_bundle - Compile an optimized WebAssembly client bundle" # done echo " build_client_bundle_prod - Compile an optimized WebAssembly client bundle using textures-fast" # done echo " install_tooling - Install the compilation utilities required for compiling StarKingdoms" # done echo " build_assets - Compile spritesheets in all three texture sizes for textures-fast" # done echo " build_assets_full - Compile spritesheets in full size for textures-fast" # done echo " build_assets_375 - Commpile 37.5% spritesheets for textures-fast" # done echo " build_assets_125 - Compile 12.5% spritesheets for textures-fast" # done echo " clean - Remove all generated files" # done } check_install_cargo() { echo "[*] Checking for $1" if ! command -v "$1" &> /dev/null then echo "[+] $1 was not found, installing via Cargo..." cargo install "$2" $3 fi } check() { echo "[*] Checking for $1" if ! command -v "$1" &> /dev/null then echo "[x] $1 was not found but is required for the build process to continue. Install it with your system package manager, or, if supported, 'st install_tooling'" exit 1 fi } check_all() { check wasm-pack check sheep check inkscape } sub_clean() { rm -rf web/dist rm -rf assets/dist rm -rf assets/final rm -rf target rm -rf client/pkg } sub_install_tooling() { check_install_cargo wasm-pack wasm-pack --no-default-features check_install_cargo sheep sheep_cli check inkscape echo "[*] All required tools are installed" } sub_build_client_bundle() { check_all exec_spacetime client dev "$SCRIPT_DIR" "$CLIENT_MODS" exec_ninja client } sub_run_http() { check_all exec_spacetime client dev "$SCRIPT_DIR" "$CLIENT_MODS" exec_ninja client cd web && python3 -m http.server } sub_build_client_bundle_prod() { check_all exec_spacetime client prod "$SCRIPT_DIR" "$CLIENT_MODS" exec_ninja client } sub_run_http_prod() { check_all exec_spacetime client prod "$SCRIPT_DIR" "$CLIENT_MODS" exec_ninja client cd web && python3 -m http.server } sub_build_server() { check_all exec_spacetime server dev "$SCRIPT_DIR" "$SERVER_MODS" exec_ninja server } sub_run_server() { check_all exec_spacetime server dev "$SCRIPT_DIR" "$SERVER_MODS" exec_ninja server exec "$SCRIPT_DIR/target/debug/starkingdoms-server" } sub_build_server_prod() { check_all exec_spacetime server prod "$SCRIPT_DIR" "$SERVER_MODS" exec_ninja server } sub_run_server_prod() { check_all exec_spacetime server prod "$SCRIPT_DIR" "$SERVER_MODS" exec_ninja server exec "$SCRIPT_DIR/target/release/starkingdoms-server" } sub_build_assets() { check_all exec_spacetime asset dev "$SCRIPT_DIR" exec_ninja asset } sub_build_assets_full() { check_all exec_spacetime asset dev "$SCRIPT_DIR" exec_ninja asset-full } sub_build_assets_375() { check_all exec_spacetime asset dev "$SCRIPT_DIR" exec_ninja asset-375 } sub_build_assets_125() { check_all exec_spacetime asset dev "$SCRIPT_DIR" exec_ninja asset-125 } subcommand=$1 case $subcommand in "" | "-h" | "--help" | "help") sub_help ;; *) echo "[*] Running build command $subcommand" shift sub_${subcommand} $@ if [ $? = 127 ]; then echo "Error: '$subcommand' is not a known subcommand." >&2 echo " Run 'st --help' for a list of known subcommands." >&2 exit 1 fi ;; esac