Session quitting

This commit is contained in:
Rendo 2025-12-08 14:58:25 +05:00
commit 4dce5bd4ca
7 changed files with 48 additions and 2 deletions

View file

@ -1,7 +1,8 @@
[gd_scene load_steps=3 format=3 uid="uid://dstie24qkbc86"]
[gd_scene load_steps=4 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"]
[ext_resource type="Script" uid="uid://dj4mlrime72hx" path="res://scripts/multiplayer/level_container.gd" id="3_lnu2h"]
[node name="Game" type="Node"]
@ -12,6 +13,7 @@ unique_name_in_owner = true
[node name="LevelContainer" type="Node" parent="."]
unique_name_in_owner = true
script = ExtResource("3_lnu2h")
[node name="MultiplayerSpawner" type="MultiplayerSpawner" parent="LevelContainer"]
_spawnable_scenes = PackedStringArray("uid://cqrh2cc7m2i7f", "uid://cc2v2f2ppu68w")

View file

@ -14,7 +14,6 @@ grow_vertical = 2
mouse_filter = 2
[node name="PanelContainer" type="PanelContainer" parent="CenterContainer"]
visible = false
layout_mode = 2
script = ExtResource("1_xqyus")
@ -63,8 +62,14 @@ max_value = 1.0
step = 0.01
value = 1.0
[node name="LeaveButton" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "Покинуть сессию"
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/FullscreenButton" to="CenterContainer/PanelContainer" method="_on_fullscreen_button_pressed"]
[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/FullscreenButton" to="CenterContainer/PanelContainer" method="_on_fullscreen_button_toggled"]
[connection signal="value_changed" from="CenterContainer/PanelContainer/VBoxContainer/Sensitivity/SensitivitySlider" to="CenterContainer/PanelContainer" method="_on_sensitivity_slider_value_changed"]
[connection signal="value_changed" from="CenterContainer/PanelContainer/VBoxContainer/Sensitivity/SensitivityBox" to="CenterContainer/PanelContainer" method="_on_sensitivity_box_value_changed"]
[connection signal="value_changed" from="CenterContainer/PanelContainer/VBoxContainer/GameplayMainAudio/GameplayMainSlider" to="CenterContainer/PanelContainer" method="_on_gameplay_main_slider_value_changed"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/LeaveButton" to="CenterContainer/PanelContainer" method="_on_leave_button_pressed"]

View file

@ -2,6 +2,11 @@ extends Control
var cached_mouse_state: Input.MouseMode
func _ready() -> void:
hide()
Session.session_started.connect(%LeaveButton.show)
Session.session_ended.connect(%LeaveButton.hide)
func _input(event: InputEvent) -> void:
if event.is_action_pressed("menu_settings"):
visible = not visible
@ -25,3 +30,7 @@ func _on_sensitivity_slider_value_changed(value: float) -> void:
func _on_sensitivity_box_value_changed(value: float) -> void:
$VBoxContainer/Sensitivity/HSlider.set_value_no_signal(value)
ClientSettings.SENSITIVITY = value
func _on_leave_button_pressed() -> void:
Session.quit_session()

View file

@ -7,6 +7,7 @@ func _ready() -> void:
Lobby.lobby_created.connect(show_host_buttons)
Lobby.lobby_closed.connect(cleanup_lobby)
Lobby.update_teams_state.connect(on_player_switched_team)
Session.session_ended.connect(on_session_ended)
$Lobby.hide()
$MainMenu.show()
@ -98,3 +99,12 @@ func _on_join_defence_button_pressed() -> void:
func _on_join_spectators_button_pressed() -> void:
Lobby.switch_team(Session.TEAMS.SPECTATE)
func on_session_ended() -> void:
show()
if Lobby.in_lobby:
$MainMenu.hide()
$Lobby.show()
else:
$MainMenu.show()
$Lobby.hide()

View file

@ -0,0 +1,10 @@
extends Node
func _ready() -> void:
Session.session_ended.connect(destroy_level)
func destroy_level() -> void:
for child in get_children():
if child is MultiplayerSpawner:
continue
child.queue_free()

View file

@ -0,0 +1 @@
uid://dj4mlrime72hx

View file

@ -155,6 +155,15 @@ func end_session() -> void:
session_started_flag = false
func quit_session() -> void:
if multiplayer.is_server():
end_session()
else:
session_ended.emit()
session_started_flag = false
Lobby.leave()
@rpc("authority","call_remote","reliable")
func start_round() -> void:
if not is_server_request():