Internet/Local/Hotseat working (still need to test for bugs). ALso get an RPC error because we switch scene...
This commit is contained in:
parent
c95b8186ab
commit
c4909db2a5
654 changed files with 18133 additions and 39 deletions
126
UI/Lobby/LANHost.gd
Normal file
126
UI/Lobby/LANHost.gd
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
extends VBoxContainer
|
||||
|
||||
var send_socket: PacketPeerUDP = PacketPeerUDP.new()
|
||||
@onready var timer = $Timer
|
||||
@onready var lobby_name = $VBoxContainer/HBoxContainer/LobbyName
|
||||
@onready var port = $VBoxContainer/HBoxContainer/Port
|
||||
@onready var host_button = $VBoxContainer/HostButton
|
||||
@onready var session_info = $VBoxContainer/SessionInfo
|
||||
@onready var stop_hosting_button = $VBoxContainer/StopHostingButton
|
||||
@onready var start_game_button = $VBoxContainer/StartGameButton
|
||||
|
||||
@onready var ip_list = $VBoxContainer/ScrollContainer/IPList
|
||||
|
||||
signal start_game
|
||||
|
||||
func update_ip_list() -> void:
|
||||
for child in ip_list.get_children():
|
||||
child.queue_free()
|
||||
|
||||
var ips = Array(IP.get_local_addresses())
|
||||
ips = ips.filter(func filter_func(element): return element not in ["127.0.0.1", "0:0:0:0:0:0:0:1"])
|
||||
|
||||
for ip in ips:
|
||||
var ip_label: RichTextLabel = RichTextLabel.new()
|
||||
ip_label.text = str(ip)
|
||||
ip_label.selection_enabled = true
|
||||
ip_label.custom_minimum_size.y = 32
|
||||
#ip_label.size_flags_vertical |= Control.SIZE_EXPAND
|
||||
ip_label.size_flags_horizontal |= Control.SIZE_EXPAND
|
||||
ip_list.add_child(ip_label)
|
||||
|
||||
func start_broadcasting() -> void:
|
||||
send_socket.set_broadcast_enabled(true)
|
||||
send_socket.set_dest_address("255.255.255.255", 27475)
|
||||
timer.start()
|
||||
|
||||
update_ip_list()
|
||||
|
||||
func stop_broadcasting() -> void:
|
||||
send_socket.close()
|
||||
timer.stop()
|
||||
|
||||
func start_hosting() -> void:
|
||||
lobby_name.editable = false
|
||||
port.editable = false
|
||||
host_button.disabled = true
|
||||
stop_hosting_button.disabled = false
|
||||
session_info.text = "Waiting for opponent..."
|
||||
|
||||
start_broadcasting()
|
||||
|
||||
func stop_hosting() -> void:
|
||||
lobby_name.editable = true
|
||||
port.editable = true
|
||||
host_button.disabled = false
|
||||
stop_hosting_button.disabled = true
|
||||
|
||||
Networking.close_enet_server()
|
||||
|
||||
stop_broadcasting()
|
||||
|
||||
|
||||
func show_panel() -> void:
|
||||
visible = true
|
||||
#start_broadcasting()
|
||||
pass
|
||||
|
||||
func hide_panel() -> void:
|
||||
visible = false
|
||||
stop_broadcasting()
|
||||
session_info.text = ""
|
||||
Networking.close_enet_server()
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
multiplayer.peer_connected.connect(_on_peer_connected)
|
||||
multiplayer.peer_disconnected.connect(_on_peer_disconnected)
|
||||
|
||||
func _on_peer_connected(id: int) -> void:
|
||||
session_info.text = "Opponent connected"
|
||||
start_game_button.disabled = false
|
||||
GameData.peer_id = id
|
||||
|
||||
func _on_peer_disconnected(id: int) -> void:
|
||||
session_info.text = "Opponent disconnected"
|
||||
start_game_button.disabled = true
|
||||
GameData.peer_id = 1
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
pass
|
||||
|
||||
|
||||
func _on_timer_timeout():
|
||||
var lname = lobby_name.text
|
||||
|
||||
var raw_data = {
|
||||
"lobby_name": lname,
|
||||
"port": port.text
|
||||
}
|
||||
|
||||
var data = JSON.stringify(raw_data)
|
||||
|
||||
send_socket.put_packet(data.to_utf8_buffer())
|
||||
|
||||
|
||||
func _on_button_pressed():
|
||||
start_hosting()
|
||||
Networking.create_enet_server(int(port.text))
|
||||
|
||||
|
||||
func update_button_states() -> void:
|
||||
host_button.disabled = lobby_name.text.is_empty() or port.text.is_empty()
|
||||
|
||||
func _on_port_text_changed(new_text):
|
||||
update_button_states()
|
||||
|
||||
|
||||
func _on_lobby_name_text_changed(new_text):
|
||||
update_button_states()
|
||||
|
||||
|
||||
func _on_stop_hosting_button_pressed():
|
||||
session_info.text = "Closed server"
|
||||
|
||||
stop_hosting()
|
||||
Loading…
Add table
Add a link
Reference in a new issue