diff --git a/export_presets.cfg b/export_presets.cfg index eee16aa..d5eeee6 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -1,45 +1,5 @@ [preset.0] -name="linux" -platform="Linux" -runnable=true -advanced_options=true -dedicated_server=false -custom_features="" -export_filter="all_resources" -include_filter="" -exclude_filter="" -export_path="build/linux/cadastery.x86_64" -encryption_include_filters="" -encryption_exclude_filters="" -encrypt_pck=false -encrypt_directory=false -script_export_mode=2 - -[preset.0.options] - -custom_template/debug="" -custom_template/release="" -debug/export_console_wrapper=1 -binary_format/embed_pck=false -texture_format/s3tc_bptc=true -texture_format/etc2_astc=false -binary_format/architecture="x86_64" -ssh_remote_deploy/enabled=false -ssh_remote_deploy/host="user@host_ip" -ssh_remote_deploy/port="22" -ssh_remote_deploy/extra_args_ssh="" -ssh_remote_deploy/extra_args_scp="" -ssh_remote_deploy/run_script="#!/usr/bin/env bash -export DISPLAY=:0 -unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" -\"{temp_dir}/{exe_name}\" {cmd_args}" -ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash -kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") -rm -rf \"{temp_dir}\"" - -[preset.1] - name="windows" platform="Windows Desktop" runnable=true @@ -56,7 +16,7 @@ encrypt_pck=false encrypt_directory=false script_export_mode=2 -[preset.1.options] +[preset.0.options] custom_template/debug="" custom_template/release="" @@ -103,6 +63,46 @@ ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debu Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue Remove-Item -Recurse -Force '{temp_dir}'" +[preset.1] + +name="linux" +platform="Linux" +runnable=true +advanced_options=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="build/linux/cadastery.x86_64" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.1.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +binary_format/embed_pck=false +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false +binary_format/architecture="x86_64" +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="#!/usr/bin/env bash +export DISPLAY=:0 +unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" +\"{temp_dir}/{exe_name}\" {cmd_args}" +ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash +kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") +rm -rf \"{temp_dir}\"" + [preset.2] name="mac" @@ -352,3 +352,116 @@ open \"{temp_dir}/{exe_name}.app\" --args {cmd_args}" ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash kill $(pgrep -x -f \"{temp_dir}/{exe_name}.app/Contents/MacOS/{exe_name} {cmd_args}\") rm -rf \"{temp_dir}\"" + +[preset.3] + +name="server" +platform="Linux" +runnable=false +advanced_options=true +dedicated_server=true +custom_features="" +export_filter="customized" +customized_files={ +"res://": "strip", +"res://assets/textures/ui/": "keep" +} +include_filter="" +exclude_filter="" +export_path="build/server/cadastery.x86_64" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.3.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +binary_format/embed_pck=false +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false +binary_format/architecture="x86_64" +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="#!/usr/bin/env bash +export DISPLAY=:0 +unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" +\"{temp_dir}/{exe_name}\" {cmd_args}" +ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash +kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") +rm -rf \"{temp_dir}\"" + +[preset.4] + +name="Windows Desktop" +platform="Windows Desktop" +runnable=false +advanced_options=true +dedicated_server=true +custom_features="" +export_filter="customized" +customized_files={ +"res://": "strip", +"res://assets/textures/ui/": "keep" +} +include_filter="" +exclude_filter="" +export_path="build/server_windows/cadastery.exe" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.4.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +binary_format/embed_pck=false +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false +binary_format/architecture="x86_64" +codesign/enable=false +codesign/timestamp=true +codesign/timestamp_server_url="" +codesign/digest_algorithm=1 +codesign/description="" +codesign/custom_options=PackedStringArray() +application/modify_resources=true +application/icon="" +application/console_wrapper_icon="" +application/icon_interpolation=4 +application/file_version="" +application/product_version="" +application/company_name="" +application/product_name="" +application/file_description="" +application/copyright="" +application/trademarks="" +application/export_angle=0 +application/export_d3d12=0 +application/d3d12_agility_sdk_multiarch=true +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}' +$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}' +$trigger = New-ScheduledTaskTrigger -Once -At 00:00 +$settings = New-ScheduledTaskSettingsSet +$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings +Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true +Start-ScheduledTask -TaskName godot_remote_debug +while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 } +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue" +ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue +Remove-Item -Recurse -Force '{temp_dir}'" diff --git a/scripts/globals/networker.gd b/scripts/globals/networker.gd index a23a2c1..9eeb66a 100644 --- a/scripts/globals/networker.gd +++ b/scripts/globals/networker.gd @@ -34,7 +34,8 @@ func set_local_player_info(username: String) -> void: _local_player_info["name"] = username -func host_game() -> void: +func host_game(dedicated: bool = false) -> void: + print("Hosting...") _peer = ENetMultiplayerPeer.new() var error := _peer.create_server(DEFAULT_PORT, MAX_PEERS) @@ -48,14 +49,16 @@ func host_game() -> void: multiplayer.set_multiplayer_peer(_peer) - _players[1] = _local_player_info - player_connected.emit(1, _local_player_info) - _load_main() - _add_player(multiplayer.get_unique_id()) + + if not dedicated: + _players[1] = _local_player_info + player_connected.emit(1, _local_player_info) + _add_player(multiplayer.get_unique_id()) func join_game(ip: String) -> void: + print("Joining " + ip + "...") _peer = ENetMultiplayerPeer.new() var error := _peer.create_client(ip, DEFAULT_PORT) @@ -78,9 +81,11 @@ func _switch_scene(from: Node, to: PackedScene) -> void: var new_scene := to.instantiate() get_tree().get_root().add_child(new_scene) + print("Scene loaded") func _load_main() -> void: + print("Loading Main...") _switch_scene($/root/Title, _main_scene) main_loaded.emit() @@ -89,6 +94,7 @@ func _add_player(peer_id: int) -> void: if not multiplayer.is_server(): return + print("Adding player ", peer_id) var player := _player_scene.instantiate() as Player player.name = str(peer_id) @@ -100,6 +106,7 @@ func _remove_player(peer_id: int) -> void: if not multiplayer.is_server(): return + print("Removing player ", peer_id) var player_holder: Node = $/root/Main/Players var player := player_holder.get_node_or_null(str(peer_id)) if player: @@ -108,6 +115,7 @@ func _remove_player(peer_id: int) -> void: @rpc("any_peer", "reliable") func _register_player(player_info: Dictionary) -> void: + print("Registering player ", player_info) var player_id := multiplayer.get_remote_sender_id() _players[player_id] = player_info player_connected.emit(player_id, player_info) @@ -126,6 +134,7 @@ func _on_multiplayer_peer_disconnected(peer_id: int) -> void: func _on_multiplayer_connected_to_server() -> void: + print("Connected to server") var peer_id := multiplayer.get_unique_id() _players[peer_id] = _local_player_info player_connected.emit(peer_id, _local_player_info) diff --git a/scripts/player.gd b/scripts/player.gd index 04b1774..e8ebeec 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -30,13 +30,16 @@ func _ready() -> void: _camera.make_current() Referencer.player = self Referencer.main_camera = _camera + print("Player ", name, " ready") func _exit_tree() -> void: if not is_multiplayer_authority(): return + Referencer.player = null Referencer.main_camera = null + print("Player ", name, " exiting tree") func _process(delta: float) -> void: diff --git a/scripts/ui/play_menu.gd b/scripts/ui/play_menu.gd index 0a6d178..31928ad 100644 --- a/scripts/ui/play_menu.gd +++ b/scripts/ui/play_menu.gd @@ -8,6 +8,10 @@ extends Panel func _ready() -> void: + if OS.has_feature("dedicated_server") or DisplayServer.get_name() == "headless": + Networker.host_game(true) + return + _host_button.pressed.connect(_on_host_button_pressed) _join_button.pressed.connect(_on_join_button_pressed) Networker.network_error.connect(_on_networker_network_error)