mirror of
				https://github.com/JohnBreaux/Boat-Battle.git
				synced 2025-02-04 12:28:35 +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:
		@@ -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
 | 
				
			||||||
		# Hide the buttons
 | 
						Net.disconnect("disconnected", self, "connection_error")
 | 
				
			||||||
		get_node("Buttons").hide()
 | 
						# Hide the buttons
 | 
				
			||||||
		# Create a new Victory screen
 | 
						get_node("Buttons").hide()
 | 
				
			||||||
		var victory = Victory.instance()
 | 
						# Create a new Victory screen
 | 
				
			||||||
		# Give it the ships received from the opponent
 | 
						var victory = Victory.instance()
 | 
				
			||||||
 | 
						# 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")
 | 
				
			||||||
	end()
 | 
						else:
 | 
				
			||||||
 | 
							end()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func _on_Connection_Error_confirmed():
 | 
					func _on_Connection_Error_confirmed():
 | 
				
			||||||
	# End the game
 | 
						# End the game
 | 
				
			||||||
	queue_free()
 | 
						end()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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")
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user