1
0
mirror of https://github.com/JohnBreaux/Boat-Battle.git synced 2024-11-15 05:25:57 +00:00

Game: Begin state machine implementation; use Net-mail for host<->guest communication.

This commit is contained in:
John 2021-11-24 03:05:45 -06:00
parent 1116316176
commit 6ff4df4a1d

View File

@ -1,8 +1,11 @@
extends Control extends Control
var light_theme = load("res://light_theme.tres") # warning-ignore-all:unused_signal
var dark_theme = load("res://dark_theme.tres")
# Signals
signal fire # fire(position)
signal hit # hit (state: see Miss/Ready/Hit/Sunk enum in Board.gd)
signal win # win (): sent when opponent player lost
# Path to Player class, for instantiating new Players in code # Path to Player class, for instantiating new Players in code
var Player = preload("res://scenes/Game/Player.tscn") var Player = preload("res://scenes/Game/Player.tscn")
@ -11,7 +14,7 @@ var Victory = preload("res://scenes/Game/Victory.tscn")
# Array of instances of the Player class; stores the Players # Array of instances of the Player class; stores the Players
var players = [] # = player1, player2, ... var player
var players_ready = [] var players_ready = []
# turn counter # turn counter
var turn = 0 var turn = 0
@ -37,6 +40,7 @@ func _ready():
# Function used to keep track of which players are ready # Function used to keep track of which players are ready
# TODO: Change this to keep track of ready states only # TODO: Change this to keep track of ready states only
func player_ready(): func player_ready():
players_ready.append(Net.get_network_id())
pass pass
# Member functions: # Member functions:
@ -49,15 +53,84 @@ sync func game_setup():
network_id = Net.get_network_id() network_id = Net.get_network_id()
pass pass
# game_start: # game_start: Runs on host. Controls the game.
func game_start(): func game_start():
var state = "P1_fire"
# Make sure we're the server # Make sure we're the server
while true:
match state:
"P1_fire":
# Tell local player to fire
# Wait for result
# Send fire REQUEST to P2
pass
"P2_check":
# Wait for hit
var ret = yield(self, "hit")
# Record the hit
#
pass
"P2_fire":
pass
"P1_check":
# Check if
pass
"P1_win":
pass
"P2_win":
pass
pass
func fire_on(id, pos:Vector2):
# REQUEST fire on opponent
Net.send(id, ["fire", pos], Net.REQUEST)
# Wait for REPLY
func return_hit(id, ship_status):
Net.send(id, ["hit", ship_status], Net.REPLY)
func _on_win():
pass
func _on_Net_incoming(mail):
if mail.size() == 3:
var sender = mail[0]
var message = mail[1]
var mailtype = mail[2]
match mailtype:
# if message is a REQUEST (to perform an action)
Net.REQUEST:
match message[0]:
# Opponent asks for player.fire()
"fire":
emit_signal("fire", message[1])
# Opponent asks for hit(pos)
"hit":
pass
_:
pass
Net.REPLY:
# message is a REPLY (return value)
match message[0]:
"fire":
emit_signal("hit", message[1])
# Return value of
"hit":
pass
pass
Net.READY:
# Add player to the ready array
players_ready.append(sender)
pass pass
# _on_player_ready: Player Ready signal handler # _on_player_ready: Player Ready signal handler
func _on_player_ready(): func _on_player_ready():
print ("_on_player_ready") print ("_on_player_ready")
Net.send(1, ["player_ready", Net.Mail.REPLY]) Net.send(1, [], Net.READY)
# victory_screen: display the victory screen # victory_screen: display the victory screen
func victory_screen(): func victory_screen():