Internet/Local/Hotseat working (still need to test for bugs). ALso get an RPC error because we switch scene...

This commit is contained in:
Sch1nken 2024-03-24 03:30:54 +01:00
parent c95b8186ab
commit c4909db2a5
654 changed files with 18133 additions and 39 deletions

126
UI/Lobby/LANHost.gd Normal file
View 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()