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

Game: Implement player setup

This commit is contained in:
John 2021-11-15 01:17:32 -06:00
parent 36cc6896b1
commit 72ac64f6d0
7 changed files with 52 additions and 36 deletions

View File

@ -1,8 +1,12 @@
[gd_scene format=2] [gd_scene load_steps=2 format=2]
[ext_resource path="res://script/game/Gameplay/Player.gd" type="Script" id=1]
[node name="Player" type="Control"] [node name="Player" type="Control"]
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
mouse_filter = 2
script = ExtResource( 1 )
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }

View File

@ -1,7 +1,7 @@
extends Node2D extends Node2D
# Path to Ship class, for instantiating new Ships in code # Path to Ship class, for instantiating new Ships in code
onready var Ship = load("res://script/game/Gameplay/Ship.gd") var Ship = preload("res://scenes/Game/Ship.tscn")
# Consts and enums # Consts and enums
const NO_SHIP = -1 const NO_SHIP = -1
@ -62,7 +62,8 @@ func fire(pos, res):
# Place a ship on the board at board-space coordinates # Place a ship on the board at board-space coordinates
func place_ship(in_position, in_size, in_orientation, in_variant = 0): func place_ship(in_position, in_size, in_orientation, in_variant = 0):
var ship = Ship.new(in_position, in_size, in_orientation, in_variant) var ship = Ship.instance()
ship._init(in_position, in_size, in_orientation, in_variant)
for pos in ship.get_extent(): for pos in ship.get_extent():
bottom_board[pos.x][pos.y] = [ships.size(), READY] bottom_board[pos.x][pos.y] = [ships.size(), READY]
ships.append(ship) ships.append(ship)

View File

@ -11,7 +11,7 @@ onready 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 players = [] # = player1, player2, ...
# turn counter # turn counter
var turn = 0 var turn = 0
# Variable transporting hit state between players # Variable transporting hit state between players
@ -32,14 +32,23 @@ func _ready():
var _errno = 0; var _errno = 0;
_errno += OptionsController.connect("change_theme", self, "_on_change_theme") _errno += OptionsController.connect("change_theme", self, "_on_change_theme")
_on_change_theme(OptionsController.get_theme()) _on_change_theme(OptionsController.get_theme())
game_start()
# TODO: Move Setup into the Player. func game_setup():
func game_setup(_ships):
print_debug("Congrats! Setup complete.") print_debug("Congrats! Setup complete.")
# Member functions: # Member functions:
# game_start: starts the game # game_start: starts the game
func game_start(): func game_start():
# Create a player 1
var player = Player.instance()
# TODO: Create valid callback for player_ready
# It shouldn't connect to game_setup
player.connect("player_ready", self, "game_setup")
# Add player to scene tree
add_child(player)
# Add player to players
players.append(player)
pass pass
# victory_screen: display the victory screen # victory_screen: display the victory screen

View File

@ -1,23 +1,26 @@
extends Node extends Node
# Path to Board class, for instantiating new Boards in code # Path to Board class, for instantiating new Boards in code
var Board = "res://script/game/Gameplay/Board.gd" var Board = preload("res://scenes/Game/Board.tscn")
# Preloaded assets, to be used later # Preloaded assets, to be used later
# TODO: Move Setup into the Player. It's just here, for now, so that it can be tested and the game doesn't appear broken # TODO: Move Setup into the Player. It's just here, for now, so that it can be tested and the game doesn't appear broken
onready var Setup = preload("res://scenes/Game/Setup.tscn") var Setup = preload("res://scenes/Game/Setup.tscn")
# TODO: Move Fire into the Player. See above. # TODO: Move Fire into the Player. See above.
onready var Fire = preload("res://scenes/Game/Fire.tscn") var Fire = preload("res://scenes/Game/Fire.tscn")
signal player_ready
# Player ID of this player # Player ID of this player
var pid var pid
# board (an instance of the Board class) # board (an instance of the Board class)
onready var board = Board.new() onready var board = Board.instance()
# 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():
var setup = Setup.instance() var setup = Setup.instance()
setup.connect("game_ready", self, "game_setup") setup.connect("board_ready", self, "set_up")
add_child(setup) add_child(setup)
# Member functions: # Member functions:
@ -39,10 +42,14 @@ func place_ship(pos, size, orientation, variant):
# setUp: set up the board given the placed ship locations # setUp: set up the board given the placed ship locations
# translates the ship positions in the Setup UI to board-space, then places each ship # translates the ship positions in the Setup UI to board-space, then places each ship
# ships: a list of lists of ship properties {{position, orientation, size, variant}, ...} # ships: a list of lists of ship properties [[position, orientation, size, variant], ...]
func set_up(ships): func set_up(ships):
# Place all the ships
for i in ships: for i in ships:
place_ship(ships[i].Position, ships[i].Size, ships.Orientation, ships[i].Variant) place_ship(i[0], i[1], i[2], i[3])
emit_signal("player_ready")
# Add the board to the tree
add_child(board)
# turnStart: start player's turn # turnStart: start player's turn
# Initiates the player's turn, and blocks until the player selects a location to fire upon # Initiates the player's turn, and blocks until the player selects a location to fire upon

View File

@ -16,7 +16,7 @@ var sunk = false
# Orientation of the ship (see enum Orientation) # Orientation of the ship (see enum Orientation)
var orientation = Orientation.Y var orientation = Orientation.Y
# array of spots thats been hit # array of spots thats been hit
var hit = [] var hits = []
# Variable storing the positions of each piece of the ship # Variable storing the positions of each piece of the ship
var extents = [] var extents = []
@ -50,7 +50,7 @@ func hit(pos):
# If that position exists: # If that position exists:
if (index > -1): if (index > -1):
# Hit the ship piece at that location # Hit the ship piece at that location
hit[index] = true hits[index] = true
res = HIT res = HIT
# Decrement its health # Decrement its health
health -= 1 health -= 1
@ -85,7 +85,7 @@ func get_extent():
# Update textures # Update textures
func texture(index): func texture(index):
var state = 0 # ready var state = 0 # ready
if(hit[index]): if(hits[index]):
state = 1 # hit state = 1 # hit
var textureSize = 32 var textureSize = 32
# It's okay to create a new texture every time, as resources are refcounted # It's okay to create a new texture every time, as resources are refcounted
@ -140,7 +140,7 @@ func _init(in_position = Vector2(0,0), in_size = 0, in_orientation = Orientation
# Set the ship's variant(A, B, ... ) # Set the ship's variant(A, B, ... )
variant = in_variant variant = in_variant
# Resize the size-based arrays # Resize the size-based arrays
hit.resize(in_size) hits.resize(in_size)
sprites.resize(in_size) sprites.resize(in_size)
# Update the extents and draw the textures # Update the extents and draw the textures
update() update()

View File

@ -1,11 +1,9 @@
extends Control extends Control
signal game_ready signal board_ready
onready var Ships = ["2Ship", "3ShipA", "3ShipB", "4Ship", "5Ship"] onready var Ships = ["2Ship", "3ShipA", "3ShipB", "4Ship", "5Ship"]
onready var Victory = preload("res://scenes/Game/Player.tscn")
var light_theme = load("res://light_theme.tres") var light_theme = load("res://light_theme.tres")
var dark_theme = load("res://dark_theme.tres") var dark_theme = load("res://dark_theme.tres")
@ -40,25 +38,16 @@ func _on_Confirm_Placement_pressed():
get_node("PlaceShipDialog").popup() get_node("PlaceShipDialog").popup()
else: else:
#Saves the location of ships and length of ship into an array #Saves the location of ships and length of ship into an array
var shipLocation = [] var ship_data = []
for ship in Ships: for ship in Ships:
var shipdata = ShipData.new() ship = get_node(ship)
shipdata.Position = get_node(ship).position var data = ship.get_shipdata()
shipdata.Length = get_node(ship).get("ship_length") ship_data.append(data)
shipdata.Orientation = get_node(ship).get("vertical")
match ship:
"3ShipB":
shipdata.Variant = 1
_:
shipdata.Variant = 0
shipLocation.append(shipdata)
#print out the array for testing #print out the array for testing
for x in shipLocation: for x in ship_data:
print("Ship Length: ", x.Length, ", Ship Orientation: ", x.Orientation, ", Ship Position: ", x.Position) print_debug("Ship Position: ", x[0], ", Ship Length: ", x[1], ", Ship Orientation: ", x[2], ", Variant: ", x[3])
# Return the shipLocation array to those listening on game_ready # Return the shipLocation array to those listening on game_ready
emit_signal("game_ready", shipLocation) emit_signal("board_ready", ship_data)
queue_free() queue_free()
return valid # Replace with function body. return valid # Replace with function body.

View File

@ -146,6 +146,12 @@ func ship_stacked(_body):
func ship_unstacked(_body): func ship_unstacked(_body):
collision = false collision = false
func get_shipdata():
var shipdata = [world_to_board_space(position), ship_length, int(vertical)]
var variant = int(name.match("*B"))
shipdata.push_back(variant)
return shipdata
# Calculate the extents (front to back) of the ship and check whether they're on the board # Calculate the extents (front to back) of the ship and check whether they're on the board
# Returns how many squares to move the ship along its orientation axis (positive or negative) # Returns how many squares to move the ship along its orientation axis (positive or negative)
func check_extents(center, orientation, length): func check_extents(center, orientation, length):