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:
parent
99a54a021f
commit
68009d1c39
@ -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()
|
||||||
|
|
||||||
|
@ -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")
|
||||||
|
Loading…
Reference in New Issue
Block a user