1
0
mirror of https://github.com/JohnBreaux/Boat-Battle.git synced 2024-11-14 21:15:58 +00:00

Improve interactions between Game, Victory, and Lobby.

Game:
- Show victory screen on opponent, including ships
- Return to Lobby on forfeit/connection error

Victory:
- Display win/lose status
- Request that Game return to lobby, rather than doing it manually
- Disconnect from network when returning to main menu
This commit is contained in:
John 2021-12-06 13:16:49 -06:00
parent 99a54a021f
commit 68009d1c39
2 changed files with 47 additions and 21 deletions

View File

@ -25,7 +25,6 @@ var network_id
# 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(): func _ready():
get_node("Forfeit Confirmation").get_ok().text = "Yes" get_node("Forfeit Confirmation").get_ok().text = "Yes"
get_node("Forfeit Confirmation").get_cancel().text = "No" get_node("Forfeit Confirmation").get_cancel().text = "No"
get_node("Forfeit Confirmation").get_ok().rect_min_size.x = 100 get_node("Forfeit Confirmation").get_ok().rect_min_size.x = 100
@ -78,7 +77,6 @@ remote func state_check(pos):
LOST: LOST:
# the other player wins # the other player wins
rpc("state_win", player.board.ship_data) rpc("state_win", player.board.ship_data)
victory_screen(null, false)
SUNK, HIT: SUNK, HIT:
# Hit # Hit
rpc("state_fire") rpc("state_fire")
@ -87,11 +85,19 @@ remote func state_check(pos):
state_fire() state_fire()
pass pass
# state_win: The winning state. If you reach here, someone's won. # state_win: The winning state. If you reach here, you've won.
# ships: The opponent's ship data, so that their board can be shown # ships: The opponent's ship data, so that their board can be shown
remote func state_win(ships): remote func state_win(ships):
victory_screen(ships) # Send ships back to the opponent:
pass rpc("state_lose", player.board.ship_data)
# Show the victory screen
victory_screen(ships, true)
# state_lose: The losing state. If you reach here, you've lost.
# ships: The opponent's ship data, so that their board can be shown
remote func state_lose(ships):
# Show the not-victory screen
victory_screen(ships, false)
# play_hit_sound: Play a hit sound depending on the severity of the hit # play_hit_sound: Play a hit sound depending on the severity of the hit
# value: Lost/Sunk/Hit/Miss # value: Lost/Sunk/Hit/Miss
@ -149,17 +155,22 @@ func _on_player_ready():
# victory_screen: display the victory screen # victory_screen: display the victory screen
func victory_screen(ships, winner = true): func victory_screen(ships, winner = true):
if winner: # Stop listening for opponent disconnections
Net.disconnect("disconnected", self, "connection_error")
# Hide the buttons # Hide the buttons
get_node("Buttons").hide() get_node("Buttons").hide()
# Create a new Victory screen # Create a new Victory screen
var victory = Victory.instance() var victory = Victory.instance()
# Give it the ships received from the opponent # Allow victory to end the game
victory.connect("end_game", self, "end")
# Tell victory whether we've won or lost
victory.set_win(winner)
# If we were given ships to display
if ships:
# Give victory the ships
victory.reveal_ships(ships) victory.reveal_ships(ships)
# Add victory to the scene tree # Add victory to the scene tree
add_child(victory) add_child(victory)
else:
end()
# _on_Forfeit_pressed: Handle forfeit button press # _on_Forfeit_pressed: Handle forfeit button press
func _on_Forfeit_pressed(): func _on_Forfeit_pressed():
@ -168,6 +179,8 @@ func _on_Forfeit_pressed():
# end: end the Game # end: end the Game
sync func end(): sync func end():
# Return to the lobby
MessageBus.emit_signal("change_scene", "Multiplayer")
queue_free() queue_free()
@ -186,9 +199,10 @@ func _on_Forfeit_Confirmation_confirmed():
if Net.connected: if Net.connected:
# Send forfeit request to all users # Send forfeit request to all users
rpc("end") rpc("end")
else:
end() end()
func _on_Connection_Error_confirmed(): func _on_Connection_Error_confirmed():
# End the game # End the game
queue_free() end()

View File

@ -3,6 +3,9 @@ extends Control
# Path to Board class, for instantiating new Boards in code # Path to Board class, for instantiating new Boards in code
var Board = preload("res://scenes/Game/Board.tscn") var Board = preload("res://scenes/Game/Board.tscn")
# Sidnals
# request to return to lobby
signal end_game
# 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(): func _ready():
pass # Replace with function body. pass # Replace with function body.
@ -14,17 +17,26 @@ func reveal_ships(ships:Array):
for ship in ships: for ship in ships:
board.callv("place_ship", ship) board.callv("place_ship", ship)
func set_win(won:bool):
var Text = find_node("Text")
if won:
Text.text = "You win!"
else:
Text.text = "You lose"
# Called every frame. 'delta' is the elapsed time since the previous frame. # Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta): #func _process(delta):
# pass # pass
func _on_restart_button_down(): func _on_Restart_pressed():
AudioBus.emit_signal("button_clicked") AudioBus.emit_signal("button_clicked")
MessageBus.emit_signal("change_scene", "Multiplayer") emit_signal("end_game")
MessageBus.emit_signal("kill_scene", "Game")
# returns player(s) back to main menu # returns player(s) back to main menu
func _on_exit_to_main_button_down(): func _on_Exit_to_Title_pressed():
AudioBus.emit_signal("button_clicked") AudioBus.emit_signal("button_clicked")
# Disconnect from peer
Net.disconnect_host()
# Force return to title
MessageBus.emit_signal("return_to_title") MessageBus.emit_signal("return_to_title")