diff --git a/addons/ingameconsole/ps1hagrid.png.import b/addons/ingameconsole/ps1hagrid.png.import index 40c4b26..32c020d 100644 --- a/addons/ingameconsole/ps1hagrid.png.import +++ b/addons/ingameconsole/ps1hagrid.png.import @@ -3,25 +3,26 @@ importer="texture" type="CompressedTexture2D" uid="uid://fwub8fvl2u4i" -path="res://.godot/imported/ps1hagrid.png-c23425fa4ddfd6de7aebcbcf4a03083a.ctex" +path.s3tc="res://.godot/imported/ps1hagrid.png-c23425fa4ddfd6de7aebcbcf4a03083a.s3tc.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc"], +"vram_texture": true } [deps] source_file="res://addons/ingameconsole/ps1hagrid.png" -dest_files=["res://.godot/imported/ps1hagrid.png-c23425fa4ddfd6de7aebcbcf4a03083a.ctex"] +dest_files=["res://.godot/imported/ps1hagrid.png-c23425fa4ddfd6de7aebcbcf4a03083a.s3tc.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -31,4 +32,4 @@ process/normal_map_invert_y=false process/hdr_as_srgb=false process/hdr_clamp_exposure=false process/size_limit=0 -detect_3d/compress_to=1 +detect_3d/compress_to=0 diff --git a/assets/core/interactables/ship-helm/ship_helm.gd b/assets/core/interactables/ship-helm/ship_helm.gd index f287785..cf8a59a 100644 --- a/assets/core/interactables/ship-helm/ship_helm.gd +++ b/assets/core/interactables/ship-helm/ship_helm.gd @@ -4,16 +4,31 @@ extends Interactable var parent_ship: Ship +var uuid: String = "" + func _ready(): - parent_ship = get_parent() #sets the parent ship to the ship that the helm is placed on + uuid = NetworkManager.register_node(self) + NetworkManager.property_update_received.connect(_on_property_update) + parent_ship = get_parent().get_parent() #sets the parent ship to the ship that the helm is placed on + NetworkManager.sync_property(uuid, "parent_ship", parent_ship) func interact(): - if !parent_ship.ship_is_piloted: - player_reference.set_is_piloting(true) - parent_ship.ship_is_piloted = true - - elif parent_ship.ship_is_piloted: - player_reference.set_is_piloting(false) - parent_ship.ship_is_piloted = false + if player_reference.is_network_authority: + if !parent_ship.ship_is_piloted: + player_reference.set_is_piloting(true) + parent_ship.ship_is_piloted = true + + elif parent_ship.ship_is_piloted: + player_reference.set_is_piloting(false) + parent_ship.ship_is_piloted = false + parent_ship._sync_piloting_state() + + +func _on_property_update(uuid: String, property_name: String, value: Variant): + if NetworkManager.node_map.has(uuid): + var node = NetworkManager.node_map[uuid] + node.set(property_name, value) + else: + printerr("Received property update but node_id is wrong? Expected " + str(uuid) + " but got " + str(uuid)) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 25764e2..0c59261 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -379,6 +379,7 @@ func _on_game_started(): var player: Player = player_scene.instantiate() player.name = "Player_" + str(member["steam_id"]) player.username = Steam.getFriendPersonaName(member["steam_id"]) + player.steam_id = member["steam_id"] if member["steam_id"] == steam_id: player.is_network_authority = true diff --git a/assets/core/player-controller/scenes/player.tscn b/assets/core/player-controller/scenes/player.tscn index 1ab7490..84c7e6c 100644 --- a/assets/core/player-controller/scenes/player.tscn +++ b/assets/core/player-controller/scenes/player.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=11 format=3 uid="uid://c6w0ivy4hetrl"] +[gd_scene load_steps=12 format=3 uid="uid://c6w0ivy4hetrl"] [ext_resource type="Script" path="res://assets/core/player-controller/scripts/player.gd" id="1_bv7t4"] +[ext_resource type="Texture2D" uid="uid://fwub8fvl2u4i" path="res://addons/ingameconsole/ps1hagrid.png" id="2_omgn1"] [ext_resource type="Script" path="res://assets/core/player-controller/scripts/player_interacter.gd" id="2_wvu3d"] [ext_resource type="Script" path="res://assets/core/player-controller/scripts/player_hud.gd" id="3_02ne1"] [ext_resource type="Shader" path="res://assets/core/player-controller/scenes/inverted_crosshair.gdshader" id="3_rakxt"] @@ -8,13 +9,14 @@ [sub_resource type="CapsuleMesh" id="CapsuleMesh_v7b3h"] radius = 0.35 +height = 1.5 [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_qlkab"] radius = 0.35 -[sub_resource type="CameraAttributesPractical" id="CameraAttributesPractical_fqbrh"] -auto_exposure_enabled = true -auto_exposure_max_sensitivity = 700.0 +[sub_resource type="SphereMesh" id="SphereMesh_vu2l8"] +radius = 0.35 +height = 0.7 [sub_resource type="ShaderMaterial" id="ShaderMaterial_wmxrr"] shader = ExtResource("3_rakxt") @@ -22,10 +24,13 @@ shader = ExtResource("3_rakxt") [sub_resource type="ShaderMaterial" id="ShaderMaterial_0n7pd"] shader = ExtResource("3_rakxt") -[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("camera")] +[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("camera", "neck", "player_avatar_face", "body")] collision_mask = 242 script = ExtResource("1_bv7t4") camera = NodePath("Neck/Camera3D") +neck = NodePath("Neck") +player_avatar_face = NodePath("Neck/PlayerAvatarFace") +body = NodePath("Body") [node name="PlayerTag" type="Label3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.26654, 0) @@ -34,7 +39,8 @@ visibility_range_end = 15.0 billboard = 1 text = "username" -[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +[node name="Body" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0) mesh = SubResource("CapsuleMesh_v7b3h") [node name="CollisionShape3D" type="CollisionShape3D" parent="."] @@ -43,8 +49,10 @@ shape = SubResource("CapsuleShape3D_qlkab") [node name="Neck" type="Node3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.65, 0) +[node name="Head" type="MeshInstance3D" parent="Neck"] +mesh = SubResource("SphereMesh_vu2l8") + [node name="Camera3D" type="Camera3D" parent="Neck"] -attributes = SubResource("CameraAttributesPractical_fqbrh") [node name="RayCast3D" type="RayCast3D" parent="Neck/Camera3D" node_paths=PackedStringArray("player")] target_position = Vector3(0, 0, -2.5) @@ -52,6 +60,11 @@ collision_mask = 256 script = ExtResource("2_wvu3d") player = NodePath("../../..") +[node name="PlayerAvatarFace" type="Sprite3D" parent="Neck"] +transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0, -0.349588) +flip_h = true +texture = ExtResource("2_omgn1") + [node name="PlayerHUD" type="CanvasLayer" parent="." node_paths=PackedStringArray("fps_label")] script = ExtResource("3_02ne1") fps_label = NodePath("Debug/HBoxContainer/VBoxContainer/MarginContainer/FPSLabel") diff --git a/assets/core/player-controller/scripts/player.gd b/assets/core/player-controller/scripts/player.gd index 175029d..5c5ebc3 100644 --- a/assets/core/player-controller/scripts/player.gd +++ b/assets/core/player-controller/scripts/player.gd @@ -16,6 +16,9 @@ var steam_id: int = 0 @export_range(0.1, 3.0, 0.1, "or_greater") var camera_sens: float = 1.0 @export_range(0.1, 3.0, 0.1, "or_greater") var joystick_camera_sens_multiplier: float = 5.0 @export var camera: Camera3D +@export var neck: Node3D +@export var player_avatar_face: Sprite3D +@export var body: MeshInstance3D var jumping: bool = false var is_using_joystick: bool = false @@ -31,6 +34,7 @@ var current_ship: Ship var previous_global_position: Vector3 var previous_global_rotation: Vector3 +var previous_head_vert_rotation: Vector3 func _ready() -> void: @@ -39,9 +43,12 @@ func _ready() -> void: player_tag = get_node("PlayerTag") player_tag.text = username + player_avatar_face.texture = await NetworkManager.get_player_avatar(steam_id) if is_network_authority: camera.make_current() + body.hide() + player_avatar_face.hide() func _unhandled_input(event: InputEvent) -> void: @@ -68,7 +75,6 @@ func _input(event): func _physics_process(delta: float) -> void: if !is_network_authority: return if is_piloting and current_ship != null: - global_rotation.y = current_ship.global_rotation.y velocity = Vector3.ZERO + _gravity(delta) else: velocity = walk(delta) + _gravity(delta) + _jump(delta) @@ -91,6 +97,9 @@ func _process(delta: float) -> void: if previous_global_rotation != global_rotation: NetworkManager.sync_property(network_uuid, "global_rotation", global_rotation) previous_global_rotation = global_rotation + if previous_head_vert_rotation != neck.global_rotation: + NetworkManager.sync_property(network_uuid, "neck.global_rotation", neck.global_rotation) + previous_global_rotation = neck.global_rotation func capture_mouse() -> void: @@ -109,8 +118,8 @@ func _rotate_camera(sens_mod: float = 1.0) -> void: if is_using_joystick: camera_sens_final = camera_sens * joystick_camera_sens_multiplier - camera.rotation.y -= look_dir.x * camera_sens_final * sens_mod - camera.rotation.x = clamp(camera.rotation.x - look_dir.y * camera_sens_final * sens_mod, -1.5, 1.5) + rotation.y -= look_dir.x * camera_sens_final * sens_mod + neck.rotation.x = clamp(neck.rotation.x - look_dir.y * camera_sens_final * sens_mod, -1.5, 1.5) func _handle_joypad_camera_rotation(delta: float, sens_mod: float = 1.0) -> void: @@ -124,7 +133,7 @@ func _handle_joypad_camera_rotation(delta: float, sens_mod: float = 1.0) -> void func walk(delta: float) -> Vector3: if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: move_dir = Input.get_vector("move_left", "move_right", "move_forwards", "move_backwards") - var _forward: Vector3 = camera.global_transform.basis * Vector3(move_dir.x, 0, move_dir.y) + var _forward: Vector3 = neck.global_transform.basis * Vector3(move_dir.x, 0, move_dir.y) var walk_dir: Vector3 = Vector3(_forward.x, 0, _forward.z).normalized() walk_vel = walk_vel.move_toward(walk_dir * speed * move_dir.length(), acceleration * delta) return walk_vel diff --git a/assets/core/ships/ship_script.gd b/assets/core/ships/ship_script.gd index ed3e6bb..2aae6bb 100644 --- a/assets/core/ships/ship_script.gd +++ b/assets/core/ships/ship_script.gd @@ -1,72 +1,117 @@ +extends RigidBody3D class_name Ship -extends RigidBody3D - @export var player_detection_area: Area3D +@export var helm_location_marker: Marker3D + +var delta_time: float = 0.0 var ship_helm_scene: PackedScene = load("res://assets/core/interactables/ship-helm/ship-helm.tscn") var ship_helm: ShipHelm var piloting_player: Player = null - var ship_id: int = 0 var ship_is_piloted: bool = false var current_level +var network_uuid: String = "" -var _ignore_next_call := false +var old_global_rotation_cache: Vector3 +var old_global_position_cache: Vector3 @export_range(0.01, 1.0, 0.01) var base_turn_speed: float = 0.35 @export var max_turn_speed: float = 0.5 -@export_range(0.01, 1.0, 0.01) var base_lift_speed: float = 2.0 +@export_range(0.01, 10.0, 0.01) var base_lift_speed: float = 2.0 @export var top_speed: float = 5.0 @export var move_speed: float = 1.0 @export var acceleration: float = 0.1 +# Network Synchronization Variables +var last_sync_time: float = 0.0 +var sync_interval: float = 0.1 # Sync every 0.1 seconds + +var predicted_position: Vector3 +var predicted_rotation: Quaternion func _ready(): + network_uuid = NetworkManager.register_node(self) + NetworkManager.property_update_received.connect(_on_property_update) + #connect signals player_detection_area.body_entered.connect(_on_area_3d_body_entered) player_detection_area.body_exited.connect(_on_area_3d_body_exited) - + _add_ship_helm(ship_helm_scene) #TEMPORARY TEST - + ship_id = randi_range(1000, 9999) #assign a random id to the ship as a unique identifier GameConsole.log_debug("Ship ID: " + str(ship_id)) + # Initialize predicted values + predicted_position = global_position + predicted_rotation = Quaternion.from_euler(global_rotation) -func _physics_process(delta): - if ship_is_piloted: - var turn_speed = base_turn_speed / max(mass, 1) - var lift_speed = base_lift_speed / max(mass, 1) - - if Input.is_action_pressed("move_left"): - angular_velocity.y += turn_speed - elif Input.is_action_pressed("move_right"): - angular_velocity.y -= turn_speed - else: - global_rotation.z = lerpf(global_rotation.z, 0, 0.8) - - if Input.is_action_pressed("jump"): - linear_velocity.y += lift_speed - elif Input.is_action_pressed("crouch"): - linear_velocity.y -= lift_speed - - var target_velocity = Vector3.ZERO - if Input.is_action_pressed("move_forwards"): - target_velocity = -transform.basis.z * top_speed - elif Input.is_action_pressed("move_backwards"): - target_velocity = transform.basis.z * top_speed - var acceleration = (target_velocity - linear_velocity) * acceleration - apply_central_force(acceleration * mass) - if linear_velocity.length() > top_speed: - linear_velocity = linear_velocity.normalized() * top_speed - - angular_velocity.y = clamp(angular_velocity.y, -max_turn_speed, max_turn_speed) - - # Self level slowly +func _process(delta: float) -> void: + delta_time = delta + +func _physics_process(_delta) -> void: + # Predict movement only for non-authority clients + if not piloting_player or piloting_player.is_network_authority: + _predict_movement(_delta) + else: + # Apply predicted values until server correction arrives + global_position = predicted_position + global_rotation = predicted_rotation.get_euler() + + # Apply actual input if it's the authority client + if piloting_player != null and piloting_player.is_network_authority: + _apply_local_input(_delta) + + # Self level slowly if host global_rotation.x = lerpf(global_rotation.x, 0, 0.1) global_rotation.z = lerpf(global_rotation.z, 0, 0.1) + _send_ship_sync() + +func _predict_movement(_delta): + # Simple linear prediction + var predicted_velocity = linear_velocity + predicted_position += predicted_velocity * _delta + + # Basic rotation prediction (can be improved) + if angular_velocity.length() > 0: + var predicted_angular_velocity = angular_velocity.normalized() + var predicted_rotation_delta = Quaternion(predicted_angular_velocity, _delta) + predicted_rotation = predicted_rotation * predicted_rotation_delta + +func _apply_local_input(_delta): + if piloting_player == null or not piloting_player.is_network_authority: + return + + var turn_speed = base_turn_speed / max(mass, 1) + var lift_speed = base_lift_speed / max(mass, 1) + + if Input.is_action_pressed("move_left"): + angular_velocity.y += turn_speed + elif Input.is_action_pressed("move_right"): + angular_velocity.y -= turn_speed + else: + global_rotation.z = lerpf(global_rotation.z, 0, 0.8) + + if Input.is_action_pressed("jump"): + linear_velocity.y += lift_speed + elif Input.is_action_pressed("crouch"): + linear_velocity.y -= lift_speed + + var target_velocity = Vector3.ZERO + if Input.is_action_pressed("move_forwards"): + target_velocity = -transform.basis.z * top_speed + elif Input.is_action_pressed("move_backwards"): + target_velocity = transform.basis.z * top_speed + var current_acceleration = (target_velocity - linear_velocity) * acceleration + apply_central_force(current_acceleration * mass) + if linear_velocity.length() > top_speed: + linear_velocity = linear_velocity.normalized() * top_speed + + angular_velocity.y = clamp(angular_velocity.y, -max_turn_speed, max_turn_speed) func _on_area_3d_body_entered(body: Node3D) -> void: if body is Player and body.get_parent() != self: @@ -75,7 +120,6 @@ func _on_area_3d_body_entered(body: Node3D) -> void: body.call_deferred("reparent", self, true) #reparents player onto self (RigidBody3D) print("ENTERED") - func _on_area_3d_body_exited(body: Node3D) -> void: if body is Player and body.get_parent() != get_node("/root/DevLevel/"): body.ship_exited() @@ -84,8 +128,54 @@ func _on_area_3d_body_exited(body: Node3D) -> void: body.call_deferred("reparent", get_node("/root/DevLevel/"), true) #reparents player back onto world node print("EXITED") - func _add_ship_helm(_ship_helm_scene: PackedScene): - var ship_helm = _ship_helm_scene.instantiate() - add_child(ship_helm) - ship_helm = get_node("ShipHelm") + var ship_helm_instance = _ship_helm_scene.instantiate() + helm_location_marker.add_child(ship_helm_instance) + ship_helm_instance = helm_location_marker.get_node("ShipHelm") + +func _on_property_update(uuid: String, property_name: String, value: Variant): + if NetworkManager.node_map.has(uuid): + var node = NetworkManager.node_map[uuid] + + if property_name == "global_position": + _handle_ship_sync_position(value) + elif property_name == "global_rotation": + _handle_ship_sync_rotation(value) + else: + node.set(property_name, value) + else: + printerr("Received property update but node_id is wrong? Expected " + str(uuid) + " but got " + str(uuid)) + +func _sync_piloting_state(): + NetworkManager.sync_property(network_uuid, "ship_is_piloted", ship_is_piloted) + if piloting_player != null: + NetworkManager.sync_property(network_uuid, "piloting_player", piloting_player.network_uuid) + else: + NetworkManager.sync_property(network_uuid, "piloting_player", "") + +func _send_ship_sync(): + if Time.get_ticks_msec() - last_sync_time > sync_interval * 1000: + last_sync_time = Time.get_ticks_msec() + NetworkManager.sync_property(network_uuid, "global_position", global_position) + NetworkManager.sync_property(network_uuid, "global_rotation", global_rotation) + NetworkManager.sync_property(network_uuid, "linear_velocity", linear_velocity) + NetworkManager.sync_property(network_uuid, "angular_velocity", angular_velocity) + +func _handle_ship_sync_position(pos: Vector3): + if piloting_player and not piloting_player.is_network_authority: + # Correct prediction with server data only if the difference is significant + if (pos - global_position).length() > 0.1: + predicted_position = pos + linear_velocity = (pos - global_position) / delta_time + +func _handle_ship_sync_rotation(rot: Vector3): + if piloting_player and not piloting_player.is_network_authority: + # Correct prediction with server data only if the difference is significant + var received_rotation = Quaternion.from_euler(Vector3(rot.x, rot.y, rot.z)) + var delta_rot = received_rotation * global_rotation.inverse() + if delta_rot.length() > 0.1: + predicted_rotation = received_rotation + angular_velocity = delta_rot.get_euler() / delta_time + + # Apply server rotation directly + global_rotation = Quaternion.from_euler(rot).get_euler() \ No newline at end of file diff --git a/assets/core/ships/shuttle-class/shuttle-class.tscn b/assets/core/ships/shuttle-class/shuttle-class.tscn index d8f355c..4312026 100644 --- a/assets/core/ships/shuttle-class/shuttle-class.tscn +++ b/assets/core/ships/shuttle-class/shuttle-class.tscn @@ -16,13 +16,16 @@ size = Vector3(5, 0.15, 20) [sub_resource type="BoxShape3D" id="BoxShape3D_7o08p"] size = Vector3(4.99609, 3.11252, 20.0022) -[node name="ShuttleClass" type="RigidBody3D" node_paths=PackedStringArray("player_detection_area")] +[node name="ShuttleClass" type="RigidBody3D" node_paths=PackedStringArray("player_detection_area", "helm_location_marker")] collision_layer = 8 collision_mask = 200 mass = 700.0 gravity_scale = 0.0 script = ExtResource("1_ghft7") player_detection_area = NodePath("PlayerDetectionArea") +helm_location_marker = NodePath("HelmLocationMarker") +base_lift_speed = 5.0 +top_speed = 50.0 [node name="ShipToShipCol" type="CollisionShape3D" parent="."] shape = SubResource("BoxShape3D_6gbwt") @@ -44,3 +47,6 @@ shape = SubResource("BoxShape3D_6gbwt") [node name="PlayerDetectionAreaCol" type="CollisionShape3D" parent="PlayerDetectionArea"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.47652, 0) shape = SubResource("BoxShape3D_7o08p") + +[node name="HelmLocationMarker" type="Marker3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0) diff --git a/export_presets.cfg b/export_presets.cfg index 2d20e2d..807992d 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -37,3 +37,68 @@ unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" 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 Desktop" +platform="Windows Desktop" +runnable=true +advanced_options=false +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="C:/Users/wisen/Downloads/Steamforged Skies.exe" +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=true +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="res://assets/icon.png" +application/console_wrapper_icon="" +application/icon_interpolation=4 +application/file_version="0.0.0.1" +application/product_version="0.0.0.1" +application/company_name="Bellsworne Games" +application/product_name="Steamforged Skies" +application/file_description="A steampunk airship survival game" +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/project.godot b/project.godot index c1b028f..3e986dd 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="Steamforged Skies" -run/main_scene="res://assets/scenes/main.tscn" +run/main_scene="res://assets/core/networking/scenes/lobby.tscn" config/features=PackedStringArray("4.3", "Forward Plus") config/icon="res://assets/icon.png"