multiplayer: added upnp
This commit is contained in:
parent
fa6a64fbaa
commit
4da6d0efba
2 changed files with 34 additions and 5 deletions
10
main.tscn
10
main.tscn
|
|
@ -1,13 +1,13 @@
|
||||||
[gd_scene load_steps=17 format=3 uid="uid://eiaw4xbs3suk"]
|
[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://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="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://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://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="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"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_7dm0k"]
|
||||||
size = Vector3(1000, 2, 1000)
|
size = Vector3(1000, 2, 1000)
|
||||||
|
|
@ -123,6 +123,10 @@ layout_mode = 2
|
||||||
text = "Join
|
text = "Join
|
||||||
"
|
"
|
||||||
|
|
||||||
|
[node name="LineEdit" type="LineEdit" parent="UI/Menu/MarginContainer/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Enter Address"
|
||||||
|
|
||||||
[node name="MultiplayerSpawner" type="MultiplayerSpawner" parent="."]
|
[node name="MultiplayerSpawner" type="MultiplayerSpawner" parent="."]
|
||||||
_spawnable_scenes = PackedStringArray("uid://cfceg80unq0pe")
|
_spawnable_scenes = PackedStringArray("uid://cfceg80unq0pe")
|
||||||
spawn_path = NodePath("..")
|
spawn_path = NodePath("..")
|
||||||
|
|
|
||||||
29
server.gd
29
server.gd
|
|
@ -1,6 +1,7 @@
|
||||||
extends Node3D
|
extends Node3D
|
||||||
|
|
||||||
@onready var menu = $UI/Menu
|
@onready var menu = $UI/Menu
|
||||||
|
@onready var address_entry = $UI/Menu/MarginContainer/VBoxContainer/LineEdit
|
||||||
|
|
||||||
const PORT = 9999
|
const PORT = 9999
|
||||||
const PLAYER = preload("res://player/player.tscn")
|
const PLAYER = preload("res://player/player.tscn")
|
||||||
|
|
@ -13,15 +14,39 @@ func _on_server_button_pressed() -> void:
|
||||||
peer.create_server(PORT)
|
peer.create_server(PORT)
|
||||||
multiplayer.multiplayer_peer = peer
|
multiplayer.multiplayer_peer = peer
|
||||||
multiplayer.peer_connected.connect(add_player)
|
multiplayer.peer_connected.connect(add_player)
|
||||||
|
multiplayer.peer_disconnected.connect(remove_player)
|
||||||
|
|
||||||
add_player(multiplayer.get_unique_id())
|
add_player(multiplayer.get_unique_id())
|
||||||
|
|
||||||
|
upnp_setup()
|
||||||
|
|
||||||
func _on_client_button_pressed() -> void:
|
func _on_client_button_pressed() -> void:
|
||||||
menu.hide()
|
menu.hide()
|
||||||
peer.create_client("localhost",PORT)
|
peer.create_client(address_entry.text,PORT)
|
||||||
multiplayer.multiplayer_peer = peer
|
multiplayer.multiplayer_peer = peer
|
||||||
|
|
||||||
func add_player(peer_id):
|
func add_player(peer_id):
|
||||||
var player = PLAYER.instantiate()
|
var player = PLAYER.instantiate()
|
||||||
player.name = str(peer_id)
|
player.name = str(peer_id)
|
||||||
add_child(player)
|
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())
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue