diff --git a/main.tscn b/main.tscn index 3f7c245..80bec17 100644 --- a/main.tscn +++ b/main.tscn @@ -1,13 +1,13 @@ [gd_scene load_steps=17 format=3 uid="uid://eiaw4xbs3suk"] -[ext_resource type="Script" uid="uid://cnbm3aqyg0p2o" path="res://server.gd" id="1_5vw27"] +[ext_resource type="Script" uid="uid://btw2de6g358dt" path="res://server.gd" id="1_5vw27"] [ext_resource type="PackedScene" uid="uid://qb8cbljxgnub" path="res://world/killbrick.tscn" id="1_h2yge"] [ext_resource type="PackedScene" uid="uid://bcmrj6qkemrll" path="res://world/radiohead_cube.tscn" id="2_0xm2m"] -[ext_resource type="Texture2D" uid="uid://dnt0vfav03ris" path="res://world/textures/grass.jpg" id="2_272bh"] +[ext_resource type="Texture2D" uid="uid://wdjmyv260he1" path="res://world/textures/grass.jpg" id="2_272bh"] [ext_resource type="PackedScene" uid="uid://of6tq8gpjxtu" path="res://gears/gear_pickup.tscn" id="3_lquwl"] [ext_resource type="PackedScene" uid="uid://c117buhmmkvkt" path="res://gears/ball.tscn" id="6_5vw27"] [ext_resource type="PackedScene" uid="uid://d3k7b6o56ue5k" path="res://gears/geep.tscn" id="7_kek77"] -[ext_resource type="Texture2D" uid="uid://bl4yvm44o6gcf" path="res://world/textures/sky.hdr" id="8_5vw27"] +[ext_resource type="Texture2D" uid="uid://2ku62tk8r74x" path="res://world/textures/sky.hdr" id="8_5vw27"] [sub_resource type="BoxShape3D" id="BoxShape3D_7dm0k"] size = Vector3(1000, 2, 1000) @@ -123,6 +123,10 @@ layout_mode = 2 text = "Join " +[node name="LineEdit" type="LineEdit" parent="UI/Menu/MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "Enter Address" + [node name="MultiplayerSpawner" type="MultiplayerSpawner" parent="."] _spawnable_scenes = PackedStringArray("uid://cfceg80unq0pe") spawn_path = NodePath("..") diff --git a/server.gd b/server.gd index d00388f..c3e32fc 100644 --- a/server.gd +++ b/server.gd @@ -1,6 +1,7 @@ extends Node3D @onready var menu = $UI/Menu +@onready var address_entry = $UI/Menu/MarginContainer/VBoxContainer/LineEdit const PORT = 9999 const PLAYER = preload("res://player/player.tscn") @@ -13,15 +14,39 @@ func _on_server_button_pressed() -> void: peer.create_server(PORT) multiplayer.multiplayer_peer = peer multiplayer.peer_connected.connect(add_player) - + multiplayer.peer_disconnected.connect(remove_player) + add_player(multiplayer.get_unique_id()) + upnp_setup() + func _on_client_button_pressed() -> void: menu.hide() - peer.create_client("localhost",PORT) + peer.create_client(address_entry.text,PORT) multiplayer.multiplayer_peer = peer func add_player(peer_id): var player = PLAYER.instantiate() player.name = str(peer_id) add_child(player) + +func remove_player(peer_id): + var player = get_node_or_null(str(peer_id)) + if player: + player.queue_free() + +func upnp_setup(): + var upnp = UPNP.new() + + var discover_result = upnp.discover() + assert(discover_result == UPNP.UPNP_RESULT_SUCCESS, \ + "UPNP Discover Failed! Error %s" % discover_result) + assert(upnp.get_gateway() and upnp.get_gateway().is_valid_gateway(), \ + "UPNP Invalid Gateway!") + + var map_result = upnp.add_port_mapping(PORT) + assert(map_result == UPNP.UPNP_RESULT_SUCCESS, \ + "UPNP Port Mapping Failed ! Error %s" % map_result) + + print("Success! Join Adress: %s" % upnp.query_external_address()) +