Late connection
This commit is contained in:
parent
59bf07b076
commit
63209ccc1e
9 changed files with 73 additions and 23 deletions
|
|
@ -11,7 +11,7 @@ config_version=5
|
||||||
[application]
|
[application]
|
||||||
|
|
||||||
config/name="Chelimbalo"
|
config/name="Chelimbalo"
|
||||||
run/main_scene="uid://cbtp4rvg66ba1"
|
run/main_scene="uid://dstie24qkbc86"
|
||||||
config/features=PackedStringArray("4.5", "Forward Plus")
|
config/features=PackedStringArray("4.5", "Forward Plus")
|
||||||
config/icon="res://icon.svg"
|
config/icon="res://icon.svg"
|
||||||
|
|
||||||
|
|
@ -22,7 +22,6 @@ Lobby="*res://scripts/multiplayer/lobby.gd"
|
||||||
Session="*res://scripts/multiplayer/session.gd"
|
Session="*res://scripts/multiplayer/session.gd"
|
||||||
ClientSettings="*res://scripts/client_settings.gd"
|
ClientSettings="*res://scripts/client_settings.gd"
|
||||||
Registry="*res://scripts/registry.gd"
|
Registry="*res://scripts/registry.gd"
|
||||||
ClientSettingsMenu="res://scenes/gui/client_settings.tscn"
|
|
||||||
|
|
||||||
[display]
|
[display]
|
||||||
|
|
||||||
|
|
|
||||||
19
scenes/game.tscn
Normal file
19
scenes/game.tscn
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
[gd_scene load_steps=3 format=3 uid="uid://dstie24qkbc86"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bv6ptrditssow" path="res://scenes/gui/client_settings.tscn" id="1_yqjtg"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cbtp4rvg66ba1" path="res://scenes/main_menu.tscn" id="2_lnu2h"]
|
||||||
|
|
||||||
|
[node name="Game" type="Node"]
|
||||||
|
|
||||||
|
[node name="ClientSettingsMenu" parent="." instance=ExtResource("1_yqjtg")]
|
||||||
|
|
||||||
|
[node name="MainMenu" parent="." instance=ExtResource("2_lnu2h")]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
|
||||||
|
[node name="LevelContainer" type="Node" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
|
||||||
|
[node name="MultiplayerSpawner" type="MultiplayerSpawner" parent="LevelContainer"]
|
||||||
|
_spawnable_scenes = PackedStringArray("uid://cqrh2cc7m2i7f", "uid://cc2v2f2ppu68w")
|
||||||
|
spawn_path = NodePath("..")
|
||||||
|
spawn_limit = 1
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
[gd_scene load_steps=3 format=3 uid="uid://cbtp4rvg66ba1"]
|
[gd_scene load_steps=2 format=3 uid="uid://cbtp4rvg66ba1"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://bsyuos803g7qf" path="res://scripts/gui/main_menu_gui.gd" id="1_l6cm7"]
|
[ext_resource type="Script" uid="uid://bsyuos803g7qf" path="res://scripts/gui/main_menu_gui.gd" id="1_l6cm7"]
|
||||||
[ext_resource type="Script" uid="uid://2uyxkfmbbims" path="res://scripts/gui/lobby/lobby_buttons.gd" id="3_bqqt6"]
|
|
||||||
|
|
||||||
[node name="MainMenu" type="CenterContainer"]
|
[node name="MainMenu" type="CenterContainer"]
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
|
|
@ -77,7 +76,6 @@ horizontal_alignment = 1
|
||||||
[node name="Buttons" type="HBoxContainer" parent="Lobby/VBoxContainer"]
|
[node name="Buttons" type="HBoxContainer" parent="Lobby/VBoxContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
alignment = 1
|
alignment = 1
|
||||||
script = ExtResource("3_bqqt6")
|
|
||||||
|
|
||||||
[node name="LeaveButton" type="Button" parent="Lobby/VBoxContainer/Buttons"]
|
[node name="LeaveButton" type="Button" parent="Lobby/VBoxContainer/Buttons"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ extends Label
|
||||||
# Called when the node enters the scene tree for the first time.
|
# Called when the node enters the scene tree for the first time.
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
Session.round_started.connect(update)
|
Session.round_started.connect(update)
|
||||||
|
Session.session_started.connect(update)
|
||||||
|
|
||||||
func update():
|
func update():
|
||||||
if our_side:
|
if our_side:
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,5 @@ extends Node
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
Lobby.lobby_joined.connect(on_lobby_joined)
|
Lobby.lobby_joined.connect(on_lobby_joined)
|
||||||
|
|
||||||
func _on_leave_button_pressed() -> void:
|
|
||||||
Lobby.leave()
|
|
||||||
$"../..".hide()
|
|
||||||
$"../../../MainMenu".show()
|
|
||||||
|
|
||||||
func _on_start_button_pressed() -> void:
|
|
||||||
Lobby.start_game.rpc()
|
|
||||||
|
|
||||||
func on_lobby_joined() -> void:
|
func on_lobby_joined() -> void:
|
||||||
$StartButton.hide()
|
$StartButton.hide()
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
extends Node
|
extends Control
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
Lobby.lobby_joined.connect(hide_host_buttons)
|
Lobby.lobby_joined.connect(hide_host_buttons)
|
||||||
|
Session.session_started.connect(hide)
|
||||||
Lobby.lobby_created.connect(show_host_buttons)
|
Lobby.lobby_created.connect(show_host_buttons)
|
||||||
Lobby.lobby_closed.connect(cleanup_lobby)
|
Lobby.lobby_closed.connect(cleanup_lobby)
|
||||||
Lobby.update_teams_state.connect(on_player_switched_team)
|
Lobby.update_teams_state.connect(on_player_switched_team)
|
||||||
|
|
@ -20,7 +21,7 @@ func cleanup_lobby() -> void:
|
||||||
|
|
||||||
|
|
||||||
func _on_start_button_pressed() -> void:
|
func _on_start_button_pressed() -> void:
|
||||||
Lobby.start_game.rpc()
|
Lobby.start_game()
|
||||||
|
|
||||||
func hide_host_buttons() -> void:
|
func hide_host_buttons() -> void:
|
||||||
%StartButton.hide()
|
%StartButton.hide()
|
||||||
|
|
|
||||||
|
|
@ -145,12 +145,12 @@ func server_team_switch(id: int, team: int) -> void:
|
||||||
defence_team.erase(id)
|
defence_team.erase(id)
|
||||||
specators_team.append(id)
|
specators_team.append(id)
|
||||||
|
|
||||||
@rpc("authority","call_local","reliable")
|
|
||||||
func start_game() -> void:
|
func start_game() -> void:
|
||||||
get_tree().change_scene_to_file("res://levels/prototype_scene.tscn")
|
if not multiplayer.is_server():
|
||||||
if multiplayer.is_server():
|
return
|
||||||
await get_tree().scene_changed
|
get_tree().current_scene.get_node("%MainMenu").visible = false
|
||||||
Session.start_session()
|
get_tree().current_scene.get_node("%LevelContainer").add_child(preload("res://levels/prototype_scene.tscn").instantiate())
|
||||||
|
Session.start_session()
|
||||||
|
|
||||||
func get_team() -> Session.TEAMS:
|
func get_team() -> Session.TEAMS:
|
||||||
var id = multiplayer.get_unique_id()
|
var id = multiplayer.get_unique_id()
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,10 @@ enum ROUND_STATES {
|
||||||
const ATTACK_LAYER: int = 0b10000
|
const ATTACK_LAYER: int = 0b10000
|
||||||
const DEFENCE_LAYER: int = 0b100000
|
const DEFENCE_LAYER: int = 0b100000
|
||||||
|
|
||||||
|
signal session_started
|
||||||
|
signal session_ended
|
||||||
signal round_started
|
signal round_started
|
||||||
|
signal late_player_connected(id: int)
|
||||||
signal round_state_changed(state: int)
|
signal round_state_changed(state: int)
|
||||||
signal player_stopped_interacting(id: int)
|
signal player_stopped_interacting(id: int)
|
||||||
|
|
||||||
|
|
@ -41,7 +44,7 @@ var round_timer: Timer
|
||||||
var buy_timer: Timer
|
var buy_timer: Timer
|
||||||
|
|
||||||
var round_state: ROUND_STATES
|
var round_state: ROUND_STATES
|
||||||
var session_started: bool = false
|
var session_started_flag: bool = false
|
||||||
|
|
||||||
var reference_round_time: float
|
var reference_round_time: float
|
||||||
|
|
||||||
|
|
@ -67,6 +70,38 @@ func _ready() -> void:
|
||||||
add_child(bomb_timer)
|
add_child(bomb_timer)
|
||||||
add_child(round_timer)
|
add_child(round_timer)
|
||||||
add_child(buy_timer)
|
add_child(buy_timer)
|
||||||
|
|
||||||
|
multiplayer.peer_connected.connect(sync_session_server)
|
||||||
|
|
||||||
|
func sync_session_server(id: int):
|
||||||
|
if multiplayer.is_server() == false or session_started_flag == false:
|
||||||
|
return
|
||||||
|
|
||||||
|
var data: PackedByteArray
|
||||||
|
data.resize(6)
|
||||||
|
data.encode_u8(0,current_round)
|
||||||
|
data.encode_u8(1,attacker_score)
|
||||||
|
data.encode_u8(2,defender_score)
|
||||||
|
data.encode_u8(3,attackers_alive)
|
||||||
|
data.encode_u8(4,defenders_alive)
|
||||||
|
data.encode_u8(5,round_state)
|
||||||
|
|
||||||
|
sync_session_client.rpc_id(id,data)
|
||||||
|
late_player_connected.emit(id)
|
||||||
|
|
||||||
|
@rpc("authority","call_remote","reliable")
|
||||||
|
func sync_session_client(data: PackedByteArray):
|
||||||
|
if not is_server_request():
|
||||||
|
return
|
||||||
|
|
||||||
|
current_round = data.decode_u8(0)
|
||||||
|
attacker_score = data.decode_u8(1)
|
||||||
|
defender_score = data.decode_u8(2)
|
||||||
|
attackers_alive = data.decode_u8(3)
|
||||||
|
defenders_alive = data.decode_u8(4)
|
||||||
|
round_state = data.decode_u8(5) as ROUND_STATES
|
||||||
|
session_started.emit()
|
||||||
|
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
func _process(_delta: float) -> void:
|
||||||
if multiplayer.is_server() == false or not session_started:
|
if multiplayer.is_server() == false or not session_started:
|
||||||
|
|
@ -96,7 +131,8 @@ func start_session() -> void:
|
||||||
current_round = 0
|
current_round = 0
|
||||||
attacker_score = 0
|
attacker_score = 0
|
||||||
defender_score = 0
|
defender_score = 0
|
||||||
session_started = true
|
session_started_flag = true
|
||||||
|
session_started.emit()
|
||||||
|
|
||||||
start_round()
|
start_round()
|
||||||
|
|
||||||
|
|
@ -111,8 +147,9 @@ func end_session() -> void:
|
||||||
round_timer.stop()
|
round_timer.stop()
|
||||||
buy_timer.stop()
|
buy_timer.stop()
|
||||||
object_containers.clear()
|
object_containers.clear()
|
||||||
|
session_ended.emit()
|
||||||
|
|
||||||
session_started = false
|
session_started_flag = false
|
||||||
|
|
||||||
@rpc("authority","call_remote","reliable")
|
@rpc("authority","call_remote","reliable")
|
||||||
func start_round() -> void:
|
func start_round() -> void:
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,9 @@ func _ready() -> void:
|
||||||
queue_free()
|
queue_free()
|
||||||
return
|
return
|
||||||
Session.round_started.connect(spawn)
|
Session.round_started.connect(spawn)
|
||||||
|
if team == Session.TEAMS.SPECTATE:
|
||||||
|
Session.late_player_connected.connect(spawn_spectator)
|
||||||
|
|
||||||
|
|
||||||
func _exit_tree() -> void:
|
func _exit_tree() -> void:
|
||||||
if not multiplayer.is_server():
|
if not multiplayer.is_server():
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue