diff --git a/assets/core/interactables/Interactable.gd b/assets/core/interactables/Interactable.gd index 04e01f4..45f6fa3 100644 --- a/assets/core/interactables/Interactable.gd +++ b/assets/core/interactables/Interactable.gd @@ -2,7 +2,7 @@ class_name Interactable extends Node3D -var player_reference: Player +#var player_reference: Player func interact(): diff --git a/assets/core/interactables/ship-helm/ship_helm.gd b/assets/core/interactables/ship-helm/ship_helm.gd index f287785..0b0d08f 100644 --- a/assets/core/interactables/ship-helm/ship_helm.gd +++ b/assets/core/interactables/ship-helm/ship_helm.gd @@ -2,18 +2,18 @@ class_name ShipHelm extends Interactable -var parent_ship: Ship +#var parent_ship: Ship -func _ready(): - parent_ship = get_parent() #sets the parent ship to the ship that the helm is placed on - - -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 +#func _ready(): +# parent_ship = get_parent() #sets the parent ship to the ship that the helm is placed on +# +# +#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 diff --git a/assets/core/networking/scenes/lobby.tscn b/assets/core/networking/scenes/lobby.tscn deleted file mode 100644 index 30ddcbf..0000000 --- a/assets/core/networking/scenes/lobby.tscn +++ /dev/null @@ -1,70 +0,0 @@ -[gd_scene load_steps=3 format=3 uid="uid://7t1x82gvrw8a"] - -[ext_resource type="Script" path="res://assets/core/networking/scripts/lobby.gd" id="1_o4fbq"] -[ext_resource type="PackedScene" uid="uid://biryul3n6thlw" path="res://assets/core/networking/scenes/user_box_prefab.tscn" id="2_dpthk"] - -[node name="Lobby" type="Control" node_paths=PackedStringArray("host_button", "leave_button", "start_button", "show_lobbies_button", "user_list_box", "lobby_list_box")] -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -script = ExtResource("1_o4fbq") -host_button = NodePath("Panel/HBoxContainer/Buttons/Host") -leave_button = NodePath("Panel/HBoxContainer/Buttons/Leave") -start_button = NodePath("Panel/HBoxContainer/Buttons/Start") -show_lobbies_button = NodePath("Panel/HBoxContainer/Buttons/ShowLobbies") -user_list_box = NodePath("Panel/HBoxContainer/PlayerList") -lobby_list_box = NodePath("Panel/HBoxContainer/LobbyList") -user_box_prefab = ExtResource("2_dpthk") - -[node name="Panel" type="Panel" parent="."] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="HBoxContainer" type="HBoxContainer" parent="Panel"] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="Buttons" type="VBoxContainer" parent="Panel/HBoxContainer"] -custom_minimum_size = Vector2(500, 0) -layout_mode = 2 -size_flags_horizontal = 6 -size_flags_vertical = 4 - -[node name="Host" type="Button" parent="Panel/HBoxContainer/Buttons"] -layout_mode = 2 -size_flags_vertical = 4 -text = "Host Lobby" - -[node name="Start" type="Button" parent="Panel/HBoxContainer/Buttons"] -layout_mode = 2 -disabled = true -text = "Start" - -[node name="ShowLobbies" type="Button" parent="Panel/HBoxContainer/Buttons"] -layout_mode = 2 -text = "Show Lobbies" - -[node name="Leave" type="Button" parent="Panel/HBoxContainer/Buttons"] -layout_mode = 2 -disabled = true -text = "Leave Lobby" - -[node name="PlayerList" type="VBoxContainer" parent="Panel/HBoxContainer"] -visible = false -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="LobbyList" type="VBoxContainer" parent="Panel/HBoxContainer"] -visible = false -layout_mode = 2 diff --git a/assets/core/networking/scenes/user_box_prefab.tscn b/assets/core/networking/scenes/user_box_prefab.tscn deleted file mode 100644 index 6297ee2..0000000 --- a/assets/core/networking/scenes/user_box_prefab.tscn +++ /dev/null @@ -1,20 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://biryul3n6thlw"] - -[ext_resource type="Texture2D" uid="uid://fwub8fvl2u4i" path="res://addons/ingameconsole/ps1hagrid.png" id="1_gtutw"] - -[node name="UserBox" type="HBoxContainer"] -offset_right = 610.0 -offset_bottom = 128.0 - -[node name="PFP" type="TextureRect" parent="."] -custom_minimum_size = Vector2(128, 128) -layout_mode = 2 -size_flags_horizontal = 4 -texture = ExtResource("1_gtutw") -expand_mode = 1 - -[node name="Username" type="Label" parent="."] -layout_mode = 2 -size_flags_horizontal = 3 -text = "Hagrid 1" -horizontal_alignment = 1 diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd deleted file mode 100644 index 25764e2..0000000 --- a/assets/core/networking/scripts/NetworkManager.gd +++ /dev/null @@ -1,395 +0,0 @@ -extends Node - -const STEAM_APP_ID: int = 480 - -const PACKET_READ_LIMIT: int = 32 - -var level_scene: PackedScene -var player_scene: PackedScene - -var lobby_data -var lobby_id: int = 0 -var lobby_members: Array = [] -var lobby_members_max: int = 10 -var lobby_vote_kick: bool = false -var lobby_type: int = Steam.LOBBY_TYPE_PUBLIC -var steam_id: int = 0 -var steam_username: String = "" -var avatar_texture_cache: Dictionary = {} -var is_host: bool = false - -var uuid_counter: int = 0 - -var node_map: Dictionary = {} - -signal lobby_created(lobby_id: int) -signal lobby_joined(lobby_id: int) -signal user_joined_lobby(user_id: int) -signal user_left_lobby(user_id: int) -signal host_left_lobby() -signal on_game_started() -signal on_lobbies_received(these_lobbies: Array) - -signal property_update_received(node_id: int, property_name: String, value: Variant) - - -func _ready() -> void: - player_scene = load("res://assets/core/player-controller/scenes/player.tscn") as PackedScene - level_scene = load("res://assets/core/enviroment/dev-level/dev-level.tscn") as PackedScene - _init_steam() - - -func _process(_delta: float) -> void: - Steam.run_callbacks() - - if lobby_id > 0: - read_all_p2p_packets() - - -func _init_steam() -> void: - var init_result = Steam.steamInitEx(true, STEAM_APP_ID) - print("Steam Init Result: " + str(init_result)) - - if init_result['status'] > 0: - printerr("Steam failed to initialize, shutting down: " + str(init_result)) - #get_tree().quit() - - steam_id = Steam.getSteamID() - steam_username = Steam.getFriendPersonaName(steam_id) - - Steam.p2p_session_request.connect(_on_p2p_session_request) - Steam.p2p_session_connect_fail.connect(_on_p2p_session_connect_fail) - - Steam.join_requested.connect(_on_lobby_join_requested) - Steam.lobby_chat_update.connect(_on_lobby_chat_update) - Steam.lobby_created.connect(_on_lobby_created) - #Steam.lobby_data_update.connect(_on_lobby_data_update) - #Steam.lobby_invite.connect(_on_lobby_invite) - Steam.lobby_joined.connect(_on_lobby_joined) - Steam.lobby_match_list.connect(_on_lobby_match_list) - Steam.lobby_message.connect(_on_lobby_message) - Steam.persona_state_change.connect(_on_persona_change) - - -func _on_lobby_join_requested(this_lobby_id: int, friend_id: int): - var owner_name: String = Steam.getFriendPersonaName(friend_id) - print("Trying to join " + owner_name + "'s lobby...") - join_lobby(this_lobby_id) - - -func _on_lobby_chat_update(this_lobby_id: int, change_id: int, making_change_id: int, chat_state: int) -> void: - var changer_name: String = Steam.getFriendPersonaName(change_id) - - # If a player has joined the lobby - if chat_state == Steam.CHAT_MEMBER_STATE_CHANGE_ENTERED: - print("%s has joined the lobby." % changer_name) - - elif chat_state == Steam.CHAT_MEMBER_STATE_CHANGE_LEFT: - user_left_lobby.emit(change_id) - print("%s has left the lobby." % changer_name) - - elif chat_state == Steam.CHAT_MEMBER_STATE_CHANGE_KICKED: - print("%s has been kicked from the lobby." % changer_name) - - elif chat_state == Steam.CHAT_MEMBER_STATE_CHANGE_BANNED: - print("%s has been banned from the lobby." % changer_name) - - else: - print("%s did... something." % changer_name) - - get_lobby_members() - - -func _on_lobby_created(connect: int, this_lobby_id: int) -> void: - if connect == 1: - lobby_id = this_lobby_id - lobby_created.emit(lobby_id) - print("Lobby created with ID: " + str(lobby_id)) - - Steam.setLobbyJoinable(lobby_id, true) - Steam.setLobbyData(lobby_id, "name", str(steam_username) + "'s Lobby") - - var set_relay: bool = Steam.allowP2PPacketRelay(true) - - -#func _on_lobby_data_update(): -# pass - - -#func _on_lobby_invite(): -# pass - - -func _on_lobby_joined(this_lobby_id: int, _permissions: int, _locked: bool, response: int) -> void: - if response == Steam.CHAT_ROOM_ENTER_RESPONSE_SUCCESS: - lobby_id = this_lobby_id - get_lobby_members() - make_p2p_handshake() - lobby_joined.emit(lobby_id) - else: - var fail_reason: String - - match response: - Steam.CHAT_ROOM_ENTER_RESPONSE_DOESNT_EXIST: fail_reason = "This lobby no longer exists." - Steam.CHAT_ROOM_ENTER_RESPONSE_NOT_ALLOWED: fail_reason = "You don't have permission to join this lobby." - Steam.CHAT_ROOM_ENTER_RESPONSE_FULL: fail_reason = "The lobby is now full." - Steam.CHAT_ROOM_ENTER_RESPONSE_ERROR: fail_reason = "Uh... something unexpected happened!" - Steam.CHAT_ROOM_ENTER_RESPONSE_BANNED: fail_reason = "You are banned from this lobby." - Steam.CHAT_ROOM_ENTER_RESPONSE_LIMITED: fail_reason = "You cannot join due to having a limited account." - Steam.CHAT_ROOM_ENTER_RESPONSE_CLAN_DISABLED: fail_reason = "This lobby is locked or disabled." - Steam.CHAT_ROOM_ENTER_RESPONSE_COMMUNITY_BAN: fail_reason = "This lobby is community locked." - Steam.CHAT_ROOM_ENTER_RESPONSE_MEMBER_BLOCKED_YOU: fail_reason = "A user in the lobby has blocked you from joining." - Steam.CHAT_ROOM_ENTER_RESPONSE_YOU_BLOCKED_MEMBER: fail_reason = "A user you have blocked is in the lobby." - - print("Failed to join this chat room: %s" % fail_reason) - - -func _on_lobby_match_list(these_lobbies: Array) -> void: - on_lobbies_received.emit(these_lobbies) - - -func _on_lobby_message(): - pass - - -func _on_persona_change(this_steam_id: int, _flags: int) -> void: - if lobby_id > 0 and lobby_members: - for member in lobby_members: - if member["steam_id"] == this_steam_id: - var user: String = str(this_steam_id) + ":" + Steam.getFriendPersonaName(this_steam_id) - print("User (%s) had information change, updating lobby list." % user) - get_lobby_members() - break - - -func _on_p2p_session_request(remote_id: int): - var this_requester: String = Steam.getFriendPersonaName(remote_id) - print("P2P session request from: " + this_requester) - Steam.acceptP2PSessionWithUser(remote_id) - make_p2p_handshake() - - -func _on_p2p_session_connect_fail(steam_id: int, session_error: int) -> void: - # If no error was given - if session_error == 0: - print("WARNING: Session failure with %s: no error given" % steam_id) - - # Else if target user was not running the same game - elif session_error == 1: - print("WARNING: Session failure with %s: target user not running the same game" % steam_id) - - # Else if local user doesn't own app / game - elif session_error == 2: - print("WARNING: Session failure with %s: local user doesn't own app / game" % steam_id) - - # Else if target user isn't connected to Steam - elif session_error == 3: - print("WARNING: Session failure with %s: target user isn't connected to Steam" % steam_id) - - # Else if connection timed out - elif session_error == 4: - print("WARNING: Session failure with %s: connection timed out" % steam_id) - - # Else if unused - elif session_error == 5: - print("WARNING: Session failure with %s: unused" % steam_id) - - # Else no known error - else: - print("WARNING: Session failure with %s: unknown error %s" % [steam_id, session_error]) - - -func host_lobby(): - if lobby_id == 0: - Steam.createLobby(lobby_type, lobby_members_max) - is_host = true - else: - printerr("Cannot host lobby, already in a lobby") - - -func join_lobby(this_lobby_id: int): - print("Attempting to join lobby: " + str(this_lobby_id)) - lobby_members.clear() - Steam.joinLobby(this_lobby_id) - - -func leave_lobby(): - if lobby_id != 0: - Steam.leaveLobby(lobby_id) - lobby_id = 0 - - for this_member in lobby_members: - if this_member["steam_id"] != steam_id: - Steam.closeP2PSessionWithUser(this_member["steam_id"]) - - lobby_members.clear() - print("Left lobby.") - - - -func get_lobbies(): - Steam.addRequestLobbyListDistanceFilter(Steam.LOBBY_DISTANCE_FILTER_WORLDWIDE) - Steam.requestLobbyList() - - -func get_lobby_members(): - lobby_members.clear() - var member_count: int = Steam.getNumLobbyMembers(lobby_id) - - for this_member in range(0, member_count): - var member_steam_id: int = Steam.getLobbyMemberByIndex(lobby_id, this_member) - var member_steam_name: String = Steam.getFriendPersonaName(member_steam_id) - lobby_members.append({"steam_id":member_steam_id, "steam_name":member_steam_name}) - user_joined_lobby.emit(member_steam_id) - await request_player_avatar(member_steam_id) - - -func make_p2p_handshake(): - print("Sending p2p handshake to the lobby...") - send_p2p_packet(0, {"message":"handshake", "from":steam_id}) - - -func send_p2p_packet(target: int, packet_data: Dictionary) -> void: - # Set the send_type and channel - var send_type: int = Steam.P2P_SEND_RELIABLE - var channel: int = 0 - - # Create a data array to send the data through - var this_data: PackedByteArray - - # Compress the PackedByteArray we create from our dictionary using the GZIP compression method - var compressed_data: PackedByteArray = var_to_bytes(packet_data).compress(FileAccess.COMPRESSION_GZIP) - this_data.append_array(compressed_data) - - # If sending a packet to everyone - if target == 0: - # If there is more than one user, send packets - if lobby_members.size() > 1: - # Loop through all members that aren't you - for this_member in lobby_members: - if this_member['steam_id'] != steam_id: - Steam.sendP2PPacket(this_member['steam_id'], this_data, send_type, channel) - #print("Sent packet to %s." % this_member['steam_name']) - - # Else send it to someone specific - else: - Steam.sendP2PPacket(target, this_data, send_type, channel) - - -func read_all_p2p_packets(read_count: int = 0): - if read_count >= PACKET_READ_LIMIT: - return - - if Steam.getAvailableP2PPacketSize(0) > 0: - read_p2p_packet() - read_all_p2p_packets(read_count + 1) - - -func read_p2p_packet() -> void: - var packet_size: int = Steam.getAvailableP2PPacketSize(0) - - # There is a packet - if packet_size > 0: - var this_packet: Dictionary = Steam.readP2PPacket(packet_size, 0) - - if this_packet.is_empty() or this_packet == null: - print("WARNING: read an empty packet with non-zero size!") - - # Get the remote user's ID - var packet_sender: int = this_packet['remote_steam_id'] - - # Make the packet data readable - var packet_code: PackedByteArray = this_packet['data'] - - # Decompress the array before turning it into a useable dictionary - var readable_data: Dictionary = bytes_to_var(packet_code.decompress_dynamic(-1, FileAccess.COMPRESSION_GZIP)) - - # Handshake packet - if "message" in readable_data and readable_data["message"] == "handshake": - if packet_sender != steam_id: - print("Received handshake packet from %s." % Steam.getFriendPersonaName(packet_sender)) - - # Start game packet - if "message" in readable_data and readable_data["message"] == "start_game": - print("Received game start packet.") - _on_game_started() - - # Property update packet - if "message" in readable_data and readable_data["message"] == "property_update": - if "node_id" in readable_data and "property_name" in readable_data and "value" in readable_data: - emit_signal("property_update_received", readable_data["node_id"], readable_data["property_name"], readable_data["value"]) - #print("Received property update packet for node %d: %s = %s" % [readable_data["node_id"], readable_data["property_name"], readable_data["value"]]) - - -func register_node(node: Node) -> String: - var uuid = generate_uuid() - node_map[uuid] = node - return uuid - - -func generate_uuid() -> String: - uuid_counter += 1 - return str(uuid_counter) - - -func request_player_avatar(user_id: int, size: int = 128) -> void: - var avatar_texture: ImageTexture = null - Steam.getPlayerAvatar(Steam.AVATAR_LARGE, user_id) - print("Attempting to get avatar for " + Steam.getFriendPersonaName(user_id) + ".....") - - Steam.avatar_loaded.connect(func(loaded_user_id: int, avatar_size: int, avatar_buffer: PackedByteArray): - if loaded_user_id == user_id: - var avatar_image: Image = Image.create_from_data(avatar_size, avatar_size, false, Image.FORMAT_RGBA8, avatar_buffer) - - if avatar_size != size: - avatar_image.resize(size, size, Image.INTERPOLATE_LANCZOS) - - avatar_texture = ImageTexture.create_from_image(avatar_image) - avatar_texture_cache[user_id] = avatar_texture - ) - - - while not avatar_texture_cache.has(user_id): - await get_tree().process_frame - - -func get_player_avatar(user_id: int) -> ImageTexture: - if avatar_texture_cache.has(user_id): - return avatar_texture_cache[user_id] - else: - await request_player_avatar(user_id) - return avatar_texture_cache[user_id] - - -func start_game(): - print("Starting game...") - var packet_data = {"message":"start_game"} - send_p2p_packet(0, packet_data) - _on_game_started() - - -func _on_game_started(): - print("Game started.") - var level: Node = level_scene.instantiate() - get_tree().root.add_child(level) - on_game_started.emit() - - - for member in lobby_members: - var player: Player = player_scene.instantiate() - player.name = "Player_" + str(member["steam_id"]) - player.username = Steam.getFriendPersonaName(member["steam_id"]) - - if member["steam_id"] == steam_id: - player.is_network_authority = true - else: - player.is_network_authority = false - - level.add_child(player) - - -func sync_property(node_id: String, property_name: String, value: Variant): - var packet_data = {"message":"property_update", "node_id": node_id, "property_name":property_name, "value":value} - send_p2p_packet(0, packet_data) - - diff --git a/assets/core/networking/scripts/lobby.gd b/assets/core/networking/scripts/lobby.gd deleted file mode 100644 index 15bb5d9..0000000 --- a/assets/core/networking/scripts/lobby.gd +++ /dev/null @@ -1,193 +0,0 @@ -extends Control - -@export var host_button: Button -@export var leave_button: Button -@export var start_button: Button -@export var show_lobbies_button: Button -@export var user_list_box: VBoxContainer -@export var lobby_list_box: VBoxContainer -@export var user_box_prefab: PackedScene - -var added_users = [] - - -func _ready() -> void: - host_button.pressed.connect(_on_host) - leave_button.pressed.connect(_on_leave) - start_button.pressed.connect(_on_start) - show_lobbies_button.pressed.connect(_on_show_lobbies) - - NetworkManager.lobby_created.connect(_on_lobby_created) - NetworkManager.lobby_joined.connect(_on_lobby_joined) - NetworkManager.user_joined_lobby.connect(_on_user_joined_lobby) - NetworkManager.user_left_lobby.connect(_on_user_left_lobby) - NetworkManager.on_game_started.connect(_on_game_started) - NetworkManager.on_lobbies_received.connect(_on_lobbies_received) - - GameConsole.register_command(Command.new("update", update_ui, [], "Updates the lobby UI")) - - -func _on_host(): - NetworkManager.host_lobby() - show_lobbies_button.disabled = true - - -func _on_leave(): - NetworkManager.leave_lobby() - reset_ui() - - -func _on_show_lobbies(): - lobby_list_box.visible = true - NetworkManager.get_lobbies() - - -func _on_lobbies_received(these_lobbies: Array): - var friend_lobbies = get_lobbies_with_friends() - - # Clear the lobby list box before adding new lobbies - for child in lobby_list_box.get_children(): - child.queue_free() - - if friend_lobbies.size() == 0: - var no_lobbies_label = Label.new() - no_lobbies_label.text = "No lobbies available" - lobby_list_box.add_child(no_lobbies_label) - else: - for lobby_id in friend_lobbies.keys(): - # Pull lobby data from Steam, these are specific to our example - var lobby_name: String = Steam.getLobbyData(lobby_id, "name") - var lobby_mode: String = Steam.getLobbyData(lobby_id, "mode") - - # Get the current number of members - var lobby_num_members: int = Steam.getNumLobbyMembers(lobby_id) - - # Create a button for the lobby - var lobby_button: Button = Button.new() - lobby_button.set_text(lobby_name + " " + str(lobby_num_members) + "/" + str(Steam.getLobbyMemberLimit(lobby_id))) - lobby_button.set_size(Vector2(800, 50)) - lobby_button.set_name("lobby_%s" % lobby_id) - lobby_button.connect("pressed", Callable(self, "join_lobby").bind(lobby_id)) - - # Add the new lobby to the list - lobby_list_box.add_child(lobby_button) - - - -func get_lobbies_with_friends() -> Dictionary: - var results: Dictionary = {} - - for i in range(0, Steam.getFriendCount()): - var steam_id: int = Steam.getFriendByIndex(i, Steam.FRIEND_FLAG_IMMEDIATE) - var game_info: Dictionary = Steam.getFriendGamePlayed(steam_id) - - if game_info.is_empty(): - # This friend is not playing a game - continue - else: - # They are playing a game, check if it's the same game as ours - var app_id: int = game_info['id'] - var lobby = game_info['lobby'] - - if app_id != Steam.getAppID() or lobby is String: - # Either not in this game, or not in a lobby - continue - - if not results.has(lobby): - results[lobby] = [] - - results[lobby].append(steam_id) - - return results - - -func get_friends_in_lobbies() -> Dictionary: - var results: Dictionary = {} - - for i in range(0, Steam.getFriendCount()): - var steam_id: int = Steam.getFriendByIndex(i, Steam.FRIEND_FLAG_IMMEDIATE) - var game_info: Dictionary = Steam.getFriendGamePlayed(steam_id) - - if game_info.is_empty(): - # This friend is not playing a game - continue - else: - # They are playing a game, check if it's the same game as ours - var app_id: int = game_info['id'] - var lobby = game_info['lobby'] - - if app_id != Steam.getAppID() or lobby is String: - # Either not in this game, or not in a lobby - continue - - results[steam_id] = lobby - - return results - - -func join_lobby(lobby_id: int): - NetworkManager.join_lobby(lobby_id) - - -func _on_lobby_created(lobby_id: int): - print("Lobby created") - host_button.disabled = true - leave_button.disabled = false - start_button.disabled = false - user_list_box.visible = true - - -func _on_lobby_joined(lobby_id: int): - host_button.disabled = true - leave_button.disabled = false - user_list_box.visible = true - lobby_list_box.visible = false - - -func _on_user_joined_lobby(user_id: int): - if user_id in added_users: - return # User already added, skip - added_users.append(user_id) - update_ui() - - -func _on_user_left_lobby(user_id: int): - added_users.erase(user_id) - update_ui() - - -func _on_start(): - NetworkManager.start_game() - visible = false - - -func _on_game_started(): - visible = false - - -func reset_ui(): - host_button.disabled = false - leave_button.disabled = true - start_button.disabled = true - user_list_box.visible = false - lobby_list_box.visible = false - show_lobbies_button.disabled = false - added_users.clear() - for child in user_list_box.get_children(): - child.queue_free() - - for child in lobby_list_box.get_children(): - child.queue_free() - - -func update_ui() -> void: - for child in user_list_box.get_children(): - child.queue_free() - - for user_id in added_users: - var user_box = user_box_prefab.instantiate() - user_box.get_node("Username").text = str(Steam.getFriendPersonaName(user_id)) - user_list_box.add_child(user_box) - - var avatar_texture = await NetworkManager.get_player_avatar(user_id) - user_box.get_node("PFP").texture = avatar_texture diff --git a/assets/core/player-controller/2d_crosshair_dot.png b/assets/core/player-controller/2d_crosshair_dot.png deleted file mode 100644 index aa58704..0000000 Binary files a/assets/core/player-controller/2d_crosshair_dot.png and /dev/null differ diff --git a/assets/core/player-controller/2d_crosshair_dot.png.import b/assets/core/player-controller/2d_crosshair_dot.png.import deleted file mode 100644 index 43038a6..0000000 --- a/assets/core/player-controller/2d_crosshair_dot.png.import +++ /dev/null @@ -1,34 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://c3lblkyavjtol" -path="res://.godot/imported/2d_crosshair_dot.png-61f11b68155f3e5bb55efff33412dc26.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://assets/core/player-controller/2d_crosshair_dot.png" -dest_files=["res://.godot/imported/2d_crosshair_dot.png-61f11b68155f3e5bb55efff33412dc26.ctex"] - -[params] - -compress/mode=0 -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/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -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 diff --git a/assets/core/player-controller/scenes/inverted_crosshair.gdshader b/assets/core/player-controller/scenes/inverted_crosshair.gdshader deleted file mode 100644 index fff9187..0000000 --- a/assets/core/player-controller/scenes/inverted_crosshair.gdshader +++ /dev/null @@ -1,8 +0,0 @@ -shader_type canvas_item; - -uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap; - -void fragment(){ - vec4 color = vec4(texture(SCREEN_TEXTURE, SCREEN_UV).rgb, texture(TEXTURE, UV).a); - COLOR = vec4(1.0 - color.rgb, color.a); -} \ No newline at end of file diff --git a/assets/core/player-controller/scenes/pla106A.tmp b/assets/core/player-controller/scenes/pla106A.tmp deleted file mode 100644 index 2ebf37b..0000000 --- a/assets/core/player-controller/scenes/pla106A.tmp +++ /dev/null @@ -1,35 +0,0 @@ -[gd_scene load_steps=5 format=3 uid="uid://c6w0ivy4hetrl"] - -[ext_resource type="Script" path="res://assets/core/player-controller/scripts/player.gd" id="1_bv7t4"] -[ext_resource type="Script" path="res://assets/core/player-controller/scripts/player_interacter.gd" id="2_wvu3d"] - -[sub_resource type="CapsuleMesh" id="CapsuleMesh_v7b3h"] -radius = 0.35 - -[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_qlkab"] -radius = 0.35 - -[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("camera")] -script = ExtResource("1_bv7t4") -camera = NodePath("Neck/Camera3D") - -[node name="PlayerTag" type="Label3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.26654, 0) -billboard = 1 -text = "username" - -[node name="MeshInstance3D" type="MeshInstance3D" parent="."] -mesh = SubResource("CapsuleMesh_v7b3h") - -[node name="CollisionShape3D" type="CollisionShape3D" parent="."] -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="Camera3D" type="Camera3D" parent="Neck"] - -[node name="RayCast3D" type="RayCast3D" parent="Neck/Camera3D" node_paths=PackedStringArray("player")] -target_position = Vector3(0, 0, -2.5) -script = ExtResource("2_wvu3d") -player = NodePath("../../..") diff --git a/assets/core/player-controller/scenes/player.tscn b/assets/core/player-controller/scenes/player.tscn deleted file mode 100644 index 1ab7490..0000000 --- a/assets/core/player-controller/scenes/player.tscn +++ /dev/null @@ -1,113 +0,0 @@ -[gd_scene load_steps=11 format=3 uid="uid://c6w0ivy4hetrl"] - -[ext_resource type="Script" path="res://assets/core/player-controller/scripts/player.gd" id="1_bv7t4"] -[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"] -[ext_resource type="Texture2D" uid="uid://c3lblkyavjtol" path="res://assets/core/player-controller/2d_crosshair_dot.png" id="4_3uwxe"] - -[sub_resource type="CapsuleMesh" id="CapsuleMesh_v7b3h"] -radius = 0.35 - -[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="ShaderMaterial" id="ShaderMaterial_wmxrr"] -shader = ExtResource("3_rakxt") - -[sub_resource type="ShaderMaterial" id="ShaderMaterial_0n7pd"] -shader = ExtResource("3_rakxt") - -[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("camera")] -collision_mask = 242 -script = ExtResource("1_bv7t4") -camera = NodePath("Neck/Camera3D") - -[node name="PlayerTag" type="Label3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.26654, 0) -visibility_range_begin = 0.7 -visibility_range_end = 15.0 -billboard = 1 -text = "username" - -[node name="MeshInstance3D" type="MeshInstance3D" parent="."] -mesh = SubResource("CapsuleMesh_v7b3h") - -[node name="CollisionShape3D" type="CollisionShape3D" parent="."] -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="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) -collision_mask = 256 -script = ExtResource("2_wvu3d") -player = NodePath("../../..") - -[node name="PlayerHUD" type="CanvasLayer" parent="." node_paths=PackedStringArray("fps_label")] -script = ExtResource("3_02ne1") -fps_label = NodePath("Debug/HBoxContainer/VBoxContainer/MarginContainer/FPSLabel") - -[node name="Overlay" type="Control" parent="PlayerHUD"] -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -mouse_filter = 1 - -[node name="CenterContainer" type="CenterContainer" parent="PlayerHUD/Overlay"] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="TextureRect" type="TextureRect" parent="PlayerHUD/Overlay/CenterContainer"] -material = SubResource("ShaderMaterial_wmxrr") -layout_mode = 2 -texture = ExtResource("4_3uwxe") - -[node name="Debug" type="Control" parent="PlayerHUD"] -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -mouse_filter = 1 - -[node name="HBoxContainer" type="HBoxContainer" parent="PlayerHUD/Debug"] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -alignment = 2 - -[node name="VBoxContainer" type="VBoxContainer" parent="PlayerHUD/Debug/HBoxContainer"] -layout_mode = 2 - -[node name="MarginContainer" type="MarginContainer" parent="PlayerHUD/Debug/HBoxContainer/VBoxContainer"] -layout_mode = 2 -theme_override_constants/margin_top = 5 -theme_override_constants/margin_right = 5 - -[node name="FPSLabel" type="Label" parent="PlayerHUD/Debug/HBoxContainer/VBoxContainer/MarginContainer"] -material = SubResource("ShaderMaterial_0n7pd") -layout_mode = 2 -theme_override_font_sizes/font_size = 35 -text = "999 FPS" -horizontal_alignment = 2 -vertical_alignment = 1 diff --git a/assets/core/player-controller/scripts/player.gd b/assets/core/player-controller/scripts/player.gd deleted file mode 100644 index 175029d..0000000 --- a/assets/core/player-controller/scripts/player.gd +++ /dev/null @@ -1,180 +0,0 @@ -class_name Player extends CharacterBody3D - -var player_tag: Label3D -var username: String = "" -var is_piloting: bool = false - -var is_network_authority: bool = false -var network_uuid: String = "" -var steam_id: int = 0 - -@export_category("Player") -@export_range(1, 35, 1) var speed: float = 5.0 -@export_range(10, 400, 1) var acceleration: float = 100.0 - -@export_range(0.1, 3.0, 0.1) var jump_height: float = 1.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 - -var jumping: bool = false -var is_using_joystick: bool = false -var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity") - -var move_dir: Vector2 # Input direction for movement -var look_dir: Vector2 # Input direction for look/aim -var walk_vel: Vector3 # Walking velocity -var grav_vel: Vector3 # Gravity velocity -var jump_vel: Vector3 # Jumping velocity - -var current_ship: Ship - -var previous_global_position: Vector3 -var previous_global_rotation: Vector3 - - -func _ready() -> void: - NetworkManager.property_update_received.connect(_on_property_update) - network_uuid = NetworkManager.register_node(self) - - player_tag = get_node("PlayerTag") - player_tag.text = username - - if is_network_authority: - camera.make_current() - - -func _unhandled_input(event: InputEvent) -> void: - if !is_network_authority: return - if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: - if event is InputEventMouseMotion: - is_using_joystick = false - look_dir = event.relative * 0.001 - _rotate_camera() - elif event is InputEventJoypadMotion: - is_using_joystick = true - if Input.is_action_just_pressed("jump") and !is_piloting: - jumping = true - - -func _input(event): - if !is_network_authority: return - if event.is_action_pressed("esc") and Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: - release_mouse() - elif event.is_action_pressed("esc") and not Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: - capture_mouse() - - -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) - - global_rotation.x = 0.0 - global_rotation.z = 0.0 - - if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: - _handle_joypad_camera_rotation(delta) - move_and_slide() - - -func _process(delta: float) -> void: - if !is_network_authority: return - - # If the global_position has changed, notify the NetworkManager - if previous_global_position != global_position: - NetworkManager.sync_property(network_uuid, "global_position", global_position) - previous_global_position = global_position - if previous_global_rotation != global_rotation: - NetworkManager.sync_property(network_uuid, "global_rotation", global_rotation) - previous_global_rotation = global_rotation - - -func capture_mouse() -> void: - if !is_network_authority: return - Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) - - -func release_mouse() -> void: - if !is_network_authority: return - Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) - - -func _rotate_camera(sens_mod: float = 1.0) -> void: - if !is_network_authority: return - var camera_sens_final = camera_sens - 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) - - -func _handle_joypad_camera_rotation(delta: float, sens_mod: float = 1.0) -> void: - var joypad_dir: Vector2 = Input.get_vector("look_left","look_right","look_up","look_down") - if joypad_dir.length() > 0: - look_dir += joypad_dir * delta - _rotate_camera(sens_mod) - look_dir = Vector2.ZERO - - -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 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 - - -func _gravity(delta: float) -> Vector3: - grav_vel = Vector3.ZERO if is_on_floor() else grav_vel.move_toward(Vector3(0, velocity.y - gravity, 0), gravity * delta) - return grav_vel - - -func _jump(delta: float) -> Vector3: - if jumping: - if is_on_floor(): jump_vel = Vector3(0, sqrt(4 * jump_height * gravity), 0) - jumping = false - return jump_vel - jump_vel = Vector3.ZERO if is_on_floor() else jump_vel.move_toward(Vector3.ZERO, gravity * delta) - return jump_vel - - -func player_entered_ship(ship_global_position: Vector3, ship: Ship): - if !is_network_authority: return - current_ship = ship - print(ship.ship_id) - print(global_position) - - -func player_exited_ship(ship_global_position: Vector3, ship: Ship): - if !is_network_authority: return - current_ship = null - print(ship.ship_id) - print(global_position) - - -func set_is_piloting(state: bool): - if !is_network_authority: return - is_piloting = state - print("player is piloting: ", str(is_piloting)) - - -func ship_entered(_ship: Ship): - current_ship = _ship - - -func ship_exited(): - current_ship = null - - -func _on_property_update(node_id: String, property_name: String, value: Variant) -> void: - if NetworkManager.node_map.has(node_id): - var node = NetworkManager.node_map[node_id] - node.set(property_name, value) - else: - printerr("Received property update but node_id is wrong? Expected " + str(network_uuid) + " but got " + str(node_id)) diff --git a/assets/core/player-controller/scripts/player_hud.gd b/assets/core/player-controller/scripts/player_hud.gd deleted file mode 100644 index 1bfa282..0000000 --- a/assets/core/player-controller/scripts/player_hud.gd +++ /dev/null @@ -1,7 +0,0 @@ -extends CanvasLayer - - -@export var fps_label: Label - -func _process(delta): - fps_label.text = str(Engine.get_frames_per_second()) + " FPS" diff --git a/assets/core/player-controller/scripts/player_interacter.gd b/assets/core/player-controller/scripts/player_interacter.gd deleted file mode 100644 index a910071..0000000 --- a/assets/core/player-controller/scripts/player_interacter.gd +++ /dev/null @@ -1,16 +0,0 @@ -extends RayCast3D - -@export var player: Player - -var current_interactable: Interactable -var has_processed_interact_frame: bool = false - -func _process(delta): - if is_colliding() and get_collider() is Interactable: - if Input.is_action_just_pressed("interact") and !has_processed_interact_frame: - current_interactable = get_collider() as Interactable - GameConsole.log_debug("interacted with interactable: " + current_interactable.name) - current_interactable.player_reference = player - current_interactable.interact() - has_processed_interact_frame = true - has_processed_interact_frame = false diff --git a/assets/core/ships/ship_script.gd b/assets/core/ships/ship_script.gd deleted file mode 100644 index ed3e6bb..0000000 --- a/assets/core/ships/ship_script.gd +++ /dev/null @@ -1,91 +0,0 @@ -class_name Ship - -extends RigidBody3D - -@export var player_detection_area: Area3D - -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 _ignore_next_call := false - -@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 var top_speed: float = 5.0 -@export var move_speed: float = 1.0 -@export var acceleration: float = 0.1 - - -func _ready(): - #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)) - - -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 - global_rotation.x = lerpf(global_rotation.x, 0, 0.1) - global_rotation.z = lerpf(global_rotation.z, 0, 0.1) - - -func _on_area_3d_body_entered(body: Node3D) -> void: - if body is Player and body.get_parent() != self: - body.ship_entered(self) - piloting_player = body - 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() - ship_is_piloted = false - piloting_player = null - 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") diff --git a/assets/core/ships/shuttle-class/shuttle-class.tscn b/assets/core/ships/shuttle-class/shuttle-class.tscn index d8f355c..666e40f 100644 --- a/assets/core/ships/shuttle-class/shuttle-class.tscn +++ b/assets/core/ships/shuttle-class/shuttle-class.tscn @@ -1,6 +1,5 @@ -[gd_scene load_steps=7 format=3 uid="uid://y0xb2vktsr1k"] +[gd_scene load_steps=6 format=3 uid="uid://y0xb2vktsr1k"] -[ext_resource type="Script" path="res://assets/core/ships/ship_script.gd" id="1_ghft7"] [ext_resource type="Texture2D" uid="uid://gymb0tju4y67" path="res://addons/kennysprototypetextures/Dark/texture_black (1).png" id="2_3koq8"] [sub_resource type="BoxShape3D" id="BoxShape3D_6gbwt"] @@ -16,13 +15,11 @@ 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"] collision_layer = 8 collision_mask = 200 mass = 700.0 gravity_scale = 0.0 -script = ExtResource("1_ghft7") -player_detection_area = NodePath("PlayerDetectionArea") [node name="ShipToShipCol" type="CollisionShape3D" parent="."] shape = SubResource("BoxShape3D_6gbwt") diff --git a/assets/core/ships/test-ship/test-ship.tscn b/assets/core/ships/test-ship/test-ship.tscn index e0cc119..ac5f172 100644 --- a/assets/core/ships/test-ship/test-ship.tscn +++ b/assets/core/ships/test-ship/test-ship.tscn @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://assets/core/ships/test-ship/test_ship.gd" id="1_yql7r"] [ext_resource type="PackedScene" uid="uid://dm31ddavxv5gt" path="res://assets/core/interactables/ship-helm/ship-helm.tscn" id="3_3wdac"] [ext_resource type="PackedScene" uid="uid://f7xy5w0gmpwj" path="res://assets/core/ships/test-ship/airship_raft.glb" id="3_h6lyp"] -[ext_resource type="Material" uid="uid://ctemnr3tq0iu0" path="res://assets/core/ships/test-ship/new_standard_material_3d.tres" id="4_hhywo"] +[ext_resource type="Material" path="res://assets/core/ships/test-ship/new_standard_material_3d.tres" id="4_hhywo"] [sub_resource type="BoxShape3D" id="BoxShape3D_kbheo"] size = Vector3(12.0762, 9.20947, 45.9958) @@ -20,10 +20,8 @@ script = ExtResource("1_yql7r") ship_area = NodePath("Area3D") ship_helm = NodePath("ShipHelm") -[node name="ShipHelm" parent="." node_paths=PackedStringArray("parent_ship", "helm_lock_pos") instance=ExtResource("3_3wdac")] +[node name="ShipHelm" parent="." instance=ExtResource("3_3wdac")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.47976, -10.9455) -parent_ship = NodePath("..") -helm_lock_pos = NodePath("HelmLockPos") [node name="HelmLockPos" type="Marker3D" parent="ShipHelm"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.345567, 1) diff --git a/assets/core/ships/test-ship/test_ship.gd b/assets/core/ships/test-ship/test_ship.gd deleted file mode 100644 index 1e32b27..0000000 --- a/assets/core/ships/test-ship/test_ship.gd +++ /dev/null @@ -1,74 +0,0 @@ - -extends RigidBody3D - -@export var ship_area: Area3D -@export var ship_helm: ShipHelm - -var ship_id: int = 0 -var ship_is_piloted: bool = false -var base_turn_speed: float = 1 -var ship_lift_speed: float = 20 # Adjust this value as needed -var acceleration: float = 50 -var deceleration: float = acceleration * 0.5 -var ship_top_speed: float = 100 -var current_speed: float = 0.0 -var max_force: float = 1000.0 - -var piloting_player: Player = null - - -func _ready(): - ship_area.body_entered.connect(_on_area_3d_body_entered) - ship_area.body_exited.connect(_on_area_3d_body_exited) - ship_id = randi_range(1000, 9999) - GameConsole.log_debug("Ship ID: " + str(ship_id)) - - -func _physics_process(delta): - global_rotation.x = lerpf(global_rotation.x, 0, 0.01) - global_rotation.z = lerpf(global_rotation.z, 0, 0.01) - - if ship_is_piloted: - var turn_speed = base_turn_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 - - if Input.is_action_pressed("jump"): - # Apply an impulse to achieve instantaneous upward velocity - apply_impulse(Vector3.UP * ship_lift_speed) - - if Input.is_action_pressed("move_forwards"): - current_speed = min(current_speed + acceleration * delta, ship_top_speed) - else: - current_speed = max(current_speed - deceleration * delta, 0.0) - - var desired_velocity = -transform.basis.z * current_speed - var forward_force = (desired_velocity - linear_velocity) * mass - forward_force = forward_force.normalized() * min(forward_force.length(), max_force) - apply_central_force(forward_force) - - if Input.is_action_pressed("crouch"): - apply_impulse(Vector3.DOWN * ship_lift_speed) - - angular_velocity.y = clamp(angular_velocity.y, -0.5, 0.5) - - if piloting_player != null and ship_helm.is_being_piloted: - piloting_player.global_position = ship_helm.helm_lock_pos.global_position - - - -func _on_area_3d_body_entered(body): - if body is Player: - piloting_player = body - body.player_entered_ship(global_position, self) - body.set_block_signals(true) - - -func _on_area_3d_body_exited(body): - if body is Player: - ship_helm.is_being_piloted = false - body.player_exited_ship(global_position, self) - piloting_player = null - body.set_block_signals(false) diff --git a/project.godot b/project.godot index c1b028f..6684e5d 100644 --- a/project.godot +++ b/project.godot @@ -18,7 +18,6 @@ config/icon="res://assets/icon.png" [autoload] GameConsole="*res://addons/ingameconsole/GameConsole.tscn" -NetworkManager="*res://assets/core/networking/scripts/NetworkManager.gd" [debug]