diff --git a/godot_ship/project.godot b/godot_ship/project.godot index 826454e..fbccc41 100644 --- a/godot_ship/project.godot +++ b/godot_ship/project.godot @@ -16,8 +16,8 @@ config/icon="res://icon.png" [autoload] -MessageBus="*res://script/game/Message Bus.gd" -AudioBus="*res://script/game/Audio Bus.gd" +MessageBus="*res://script/Message Bus.gd" +AudioBus="*res://script/audio controller/Audio Bus.gd" OptionsController="*res://script/options/OptionsController.gd" AudioController="*res://scenes/AudioController.tscn" diff --git a/godot_ship/scenes/Game/Fire.tscn b/godot_ship/scenes/Game/Fire.tscn new file mode 100644 index 0000000..47b2f5b --- /dev/null +++ b/godot_ship/scenes/Game/Fire.tscn @@ -0,0 +1,47 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://assets/game/RedCrosshair.png" type="Texture" id=1] +[ext_resource path="res://script/game/Gameplay/Fire.gd" type="Script" id=2] +[ext_resource path="res://script/game/Gameplay/Crosshair.gd" type="Script" id=3] +[ext_resource path="res://assets/game/board_blue.png" type="Texture" id=4] + +[node name="Fire" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +rect_pivot_offset = Vector2( 147.423, 85.3825 ) +mouse_filter = 2 +script = ExtResource( 2 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="board_blue" type="Sprite" parent="."] +position = Vector2( 18, 18 ) +texture = ExtResource( 4 ) +centered = false +__meta__ = { +"_edit_lock_": true +} + +[node name="Crosshair" type="Sprite" parent="."] +texture = ExtResource( 1 ) +script = ExtResource( 3 ) + +[node name="Fire" type="Button" parent="."] +margin_left = 443.545 +margin_top = 264.473 +margin_right = 528.545 +margin_bottom = 318.473 +text = "FIRE" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="FireDialog" type="AcceptDialog" parent="."] +pause_mode = 2 +margin_right = 83.0 +margin_bottom = 58.0 +dialog_text = "You can't fire outside the board" + +[connection signal="pressed" from="Fire" to="." method="_on_Fire_pressed"] +[connection signal="confirmed" from="FireDialog" to="." method="_on_FireDialog_confirmed"] diff --git a/godot_ship/scenes/Game/Game.tscn b/godot_ship/scenes/Game/Game.tscn new file mode 100644 index 0000000..a2e98ce --- /dev/null +++ b/godot_ship/scenes/Game/Game.tscn @@ -0,0 +1,42 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://script/title screen/Title-Screen-Background.png" type="Texture" id=1] +[ext_resource path="res://script/game/Gameplay/Game.gd" type="Script" id=3] + +[node name="Game" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +script = ExtResource( 3 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Background" type="Sprite" parent="."] +show_behind_parent = true +position = Vector2( 321.081, 179.931 ) +texture = ExtResource( 1 ) +flip_h = true +__meta__ = { +"_edit_lock_": true +} + +[node name="Buttons" type="VBoxContainer" parent="."] +anchor_left = 0.912 +anchor_top = 0.932 +anchor_right = 0.912 +anchor_bottom = 0.932 +margin_left = -3.68005 +margin_top = -4.52002 +margin_right = 49.3199 +margin_bottom = 15.48 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Forfeit" type="Button" parent="Buttons"] +margin_right = 53.0 +margin_bottom = 20.0 +text = "Forfeit" + +[connection signal="pressed" from="Buttons/Forfeit" to="." method="_on_Forfeit_pressed"] diff --git a/godot_ship/scenes/Gameplay.tscn b/godot_ship/scenes/Game/Setup.tscn similarity index 51% rename from godot_ship/scenes/Gameplay.tscn rename to godot_ship/scenes/Game/Setup.tscn index 8c635ee..6e0dcf3 100644 --- a/godot_ship/scenes/Gameplay.tscn +++ b/godot_ship/scenes/Game/Setup.tscn @@ -1,17 +1,14 @@ -[gd_scene load_steps=11 format=2] +[gd_scene load_steps=8 format=2] [ext_resource path="res://assets/game/board_blue.png" type="Texture" id=1] -[ext_resource path="res://script/title screen/Title-Screen-Background.png" type="Texture" id=2] -[ext_resource path="res://script/game/Gameplay.gd" type="Script" id=3] -[ext_resource path="res://scenes/ships/2Ship.tscn" type="PackedScene" id=4] -[ext_resource path="res://scenes/ships/5Ship.tscn" type="PackedScene" id=5] -[ext_resource path="res://scenes/ships/3ShipB.tscn" type="PackedScene" id=6] -[ext_resource path="res://scenes/ships/3shipA.tscn" type="PackedScene" id=7] -[ext_resource path="res://scenes/ships/4Ship.tscn" type="PackedScene" id=8] -[ext_resource path="res://assets/game/RedCrosshair.png" type="Texture" id=9] -[ext_resource path="res://script/game/Gameplay/Crosshair.gd" type="Script" id=10] +[ext_resource path="res://scenes/ships/3ShipB.tscn" type="PackedScene" id=4] +[ext_resource path="res://scenes/ships/3shipA.tscn" type="PackedScene" id=5] +[ext_resource path="res://scenes/ships/4Ship.tscn" type="PackedScene" id=6] +[ext_resource path="res://scenes/ships/5Ship.tscn" type="PackedScene" id=7] +[ext_resource path="res://scenes/ships/2Ship.tscn" type="PackedScene" id=8] +[ext_resource path="res://script/game/Setup.gd" type="Script" id=10] -[node name="Game" type="Control"] +[node name="Setup" type="Control"] anchor_top = 0.00123732 anchor_right = 1.0 anchor_bottom = 0.890237 @@ -19,7 +16,8 @@ margin_left = -0.5 margin_top = 0.740086 margin_right = -0.5 margin_bottom = 40.7 -script = ExtResource( 3 ) +mouse_filter = 2 +script = ExtResource( 10 ) __meta__ = { "_edit_use_anchors_": false } @@ -32,38 +30,6 @@ __meta__ = { "_edit_lock_": true } -[node name="Title-Screen-Background" type="Sprite" parent="."] -show_behind_parent = true -position = Vector2( 321.081, 179.931 ) -texture = ExtResource( 2 ) -flip_h = true -__meta__ = { -"_edit_lock_": true -} - -[node name="Crosshair" type="Sprite" parent="."] -visible = false -texture = ExtResource( 9 ) -script = ExtResource( 10 ) - -[node name="VBoxContainer" type="VBoxContainer" parent="."] -anchor_left = 0.912 -anchor_top = 0.932 -anchor_right = 0.912 -anchor_bottom = 0.932 -margin_left = -3.68005 -margin_top = -4.52002 -margin_right = 49.3199 -margin_bottom = 15.48 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Forfeit" type="Button" parent="VBoxContainer"] -margin_right = 53.0 -margin_bottom = 20.0 -text = "Forfeit" - [node name="ConfirmationDialog" type="ConfirmationDialog" parent="."] margin_left = 199.156 margin_top = 155.6 @@ -75,32 +41,32 @@ __meta__ = { "_edit_use_anchors_": false } -[node name="2Ship" parent="." instance=ExtResource( 4 )] -position = Vector2( 529.802, 70.7151 ) +[node name="2Ship" parent="." instance=ExtResource( 8 )] +position = Vector2( 490.802, 90.7151 ) collision_layer = 3 contacts_reported = 1 contact_monitor = true -[node name="3ShipA" parent="." instance=ExtResource( 7 )] -position = Vector2( 434.236, 114.21 ) +[node name="3ShipA" parent="." instance=ExtResource( 5 )] +position = Vector2( 429.236, 124.21 ) collision_layer = 3 contacts_reported = 1 contact_monitor = true -[node name="3ShipB" parent="." instance=ExtResource( 6 )] -position = Vector2( 443.216, 266.865 ) +[node name="3ShipB" parent="." instance=ExtResource( 4 )] +position = Vector2( 427.216, 248.865 ) collision_layer = 3 contacts_reported = 1 contact_monitor = true -[node name="4Ship" parent="." instance=ExtResource( 8 )] -position = Vector2( 522.911, 218.599 ) +[node name="4Ship" parent="." instance=ExtResource( 6 )] +position = Vector2( 491.911, 217.599 ) collision_layer = 3 contacts_reported = 1 contact_monitor = true -[node name="5Ship" parent="." instance=ExtResource( 5 )] -position = Vector2( 607.096, 211.864 ) +[node name="5Ship" parent="." instance=ExtResource( 7 )] +position = Vector2( 557.096, 213.864 ) collision_layer = 3 contacts_reported = 1 contact_monitor = true @@ -125,17 +91,6 @@ __meta__ = { "_edit_use_anchors_": false } -[node name="Fire" type="Button" parent="."] -visible = false -margin_left = 443.545 -margin_top = 264.473 -margin_right = 528.545 -margin_bottom = 318.473 -text = "FIRE" -__meta__ = { -"_edit_use_anchors_": false -} - [node name="PlaceShipDialog" type="AcceptDialog" parent="."] anchor_left = 0.5 anchor_top = 0.5 @@ -150,15 +105,6 @@ __meta__ = { "_edit_use_anchors_": false } -[node name="FireDialog" type="AcceptDialog" parent="."] -pause_mode = 2 -margin_right = 83.0 -margin_bottom = 58.0 -dialog_text = "You can't fire outside the board" - -[connection signal="pressed" from="VBoxContainer/Forfeit" to="." method="_on_Forfeit_pressed"] [connection signal="about_to_show" from="ConfirmationDialog" to="." method="_on_ConfirmationDialog_about_to_show"] [connection signal="pressed" from="Confirm Placement" to="." method="_on_Confirm_Placement_pressed"] [connection signal="pressed" from="Clear" to="." method="_on_Clear_pressed"] -[connection signal="pressed" from="Fire" to="." method="_on_Fire_pressed"] -[connection signal="confirmed" from="FireDialog" to="." method="_on_FireDialog_confirmed"] diff --git a/godot_ship/scenes/Main.tscn b/godot_ship/scenes/Main.tscn index a32d817..2376afa 100644 --- a/godot_ship/scenes/Main.tscn +++ b/godot_ship/scenes/Main.tscn @@ -1,11 +1,11 @@ [gd_scene load_steps=2 format=2] -[ext_resource path="res://script/game/Main.gd" type="Script" id=5] +[ext_resource path="res://script/Main.gd" type="Script" id=5] [node name="Main" type="Control"] anchor_right = 1.0 anchor_bottom = 1.0 -mouse_filter = 1 +mouse_filter = 2 script = ExtResource( 5 ) __meta__ = { "_edit_use_anchors_": false diff --git a/godot_ship/scenes/MultiplayerController.tscn b/godot_ship/scenes/MultiplayerController.tscn deleted file mode 100644 index d39d64e..0000000 --- a/godot_ship/scenes/MultiplayerController.tscn +++ /dev/null @@ -1,6 +0,0 @@ -[gd_scene format=2] - -[node name="Control" type="Control"] -__meta__ = { -"_edit_use_anchors_": false -} diff --git a/godot_ship/scenes/ships/2Ship.tscn b/godot_ship/scenes/ships/2Ship.tscn index 9ea72be..4d9fe35 100644 --- a/godot_ship/scenes/ships/2Ship.tscn +++ b/godot_ship/scenes/ships/2Ship.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=4 format=2] -[ext_resource path="res://script/game/moveShip.gd" type="Script" id=1] +[ext_resource path="res://script/game/SetupShip.gd" type="Script" id=1] [ext_resource path="res://assets/game/2Ship.png" type="Texture" id=2] [sub_resource type="RectangleShape2D" id=1] diff --git a/godot_ship/scenes/ships/3ShipB.tscn b/godot_ship/scenes/ships/3ShipB.tscn index 7677e5a..4969277 100644 --- a/godot_ship/scenes/ships/3ShipB.tscn +++ b/godot_ship/scenes/ships/3ShipB.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=4 format=2] -[ext_resource path="res://script/game/moveShip.gd" type="Script" id=1] +[ext_resource path="res://script/game/SetupShip.gd" type="Script" id=1] [ext_resource path="res://assets/game/3ShipB.png" type="Texture" id=2] [sub_resource type="RectangleShape2D" id=1] @@ -16,7 +16,7 @@ script = ExtResource( 1 ) texture = ExtResource( 2 ) [node name="CollisionShape2D" type="CollisionShape2D" parent="."] -scale = Vector2( 0.9, 0.966 ) +scale = Vector2( 0.5, 0.833 ) shape = SubResource( 1 ) [node name="Area2D" type="Area2D" parent="."] diff --git a/godot_ship/scenes/ships/3shipA.tscn b/godot_ship/scenes/ships/3shipA.tscn index 9b5aeba..889544e 100644 --- a/godot_ship/scenes/ships/3shipA.tscn +++ b/godot_ship/scenes/ships/3shipA.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=4 format=2] -[ext_resource path="res://script/game/moveShip.gd" type="Script" id=1] +[ext_resource path="res://script/game/SetupShip.gd" type="Script" id=1] [ext_resource path="res://assets/game/3ShipA.png" type="Texture" id=2] [sub_resource type="RectangleShape2D" id=1] diff --git a/godot_ship/scenes/ships/4Ship.tscn b/godot_ship/scenes/ships/4Ship.tscn index a136e6d..8ab7397 100644 --- a/godot_ship/scenes/ships/4Ship.tscn +++ b/godot_ship/scenes/ships/4Ship.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=4 format=2] -[ext_resource path="res://script/game/moveShip.gd" type="Script" id=1] +[ext_resource path="res://script/game/SetupShip.gd" type="Script" id=1] [ext_resource path="res://assets/game/4Ship.png" type="Texture" id=2] [sub_resource type="RectangleShape2D" id=1] diff --git a/godot_ship/scenes/ships/5Ship.tscn b/godot_ship/scenes/ships/5Ship.tscn index 44357b6..216643a 100644 --- a/godot_ship/scenes/ships/5Ship.tscn +++ b/godot_ship/scenes/ships/5Ship.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=4 format=2] -[ext_resource path="res://script/game/moveShip.gd" type="Script" id=1] +[ext_resource path="res://script/game/SetupShip.gd" type="Script" id=1] [ext_resource path="res://assets/game/5Ship.png" type="Texture" id=2] [sub_resource type="RectangleShape2D" id=1] diff --git a/godot_ship/script/game/Main.gd b/godot_ship/script/Main.gd similarity index 94% rename from godot_ship/script/game/Main.gd rename to godot_ship/script/Main.gd index 86d5867..9db0959 100644 --- a/godot_ship/script/game/Main.gd +++ b/godot_ship/script/Main.gd @@ -2,7 +2,7 @@ extends Control # Scenes onready var title_screen = preload("res://scenes/Title Screen.tscn") -onready var gameplay = preload("res://scenes/Gameplay.tscn" ) +onready var game = preload("res://scenes/Game/Game.tscn" ) onready var options = preload("res://scenes/Options.tscn" ) onready var debug_menu = preload("res://scenes/Debug Menu.tscn" ) @@ -48,10 +48,12 @@ func _on_scene_start(scene): #print ("_on_scene_start(",scene,")") match scene: "Singleplayer": - add_child (gameplay.instance()) + add_child (game.instance()) return true "Multiplayer": - add_child (gameplay.instance()) + game = game.instance() + game.is_multiplayer = true + add_child (game) # add_child (multiplayercontroller.instance()) return true "Options": diff --git a/godot_ship/script/game/Message Bus.gd b/godot_ship/script/Message Bus.gd similarity index 100% rename from godot_ship/script/game/Message Bus.gd rename to godot_ship/script/Message Bus.gd diff --git a/godot_ship/script/game/Audio Bus.gd b/godot_ship/script/audio controller/Audio Bus.gd similarity index 100% rename from godot_ship/script/game/Audio Bus.gd rename to godot_ship/script/audio controller/Audio Bus.gd diff --git a/godot_ship/script/game/Border.gd b/godot_ship/script/game/Border.gd deleted file mode 100644 index ce5e6c3..0000000 --- a/godot_ship/script/game/Border.gd +++ /dev/null @@ -1,18 +0,0 @@ -extends Area2D - -# Declare member variables here. Examples: -# var a = 2 -# var b = "text" - - -# Called when the node enters the scene tree for the first time. -func _ready(): - pass # Replace with function body. - - -# Called every frame. 'delta' is the elapsed time since the previous frame. -#func _process(delta): -# pass - -func _on_Border_body_entered(body): - print(body) diff --git a/godot_ship/script/game/Gameplay.gd b/godot_ship/script/game/Gameplay.gd deleted file mode 100644 index 6d01c94..0000000 --- a/godot_ship/script/game/Gameplay.gd +++ /dev/null @@ -1,91 +0,0 @@ -extends Control - -onready var Ships = ["2Ship", "3ShipA", "3ShipB", "4Ship", "5Ship"] -onready var Crosshair - -class Location: - var Coor: Vector2 - var Length: int - var Orientation: bool #vertical is true, (Trueship = vertical) (Falseship = horizontal) - -# Called when the node enters the scene tree for the first time. -func _ready(): - if find_next_valid_focus(): find_next_valid_focus().grab_focus() - - -func _on_Forfeit_pressed(): - AudioBus.emit_signal("button_clicked") - queue_free(); - MessageBus.emit_signal("change_scene", "Title") - - - -func _on_Confirm_Placement_pressed(): - var valid = true - for ship in Ships: - # validate_placement returns the x-axis distance from the board - # if this is more than zero, the ship is invalid - if get_node(ship).validate_placement(): - valid = false - print ("Placement: ", valid) - if valid == false: - get_node("PlaceShipDialog").popup() - else: - #Saves the location of ships and length of ship into an array - var shipLocation = [] - for ship in Ships: - var location = Location.new() - location.Coor = get_node(ship).position - location.Length = get_node(ship).get("ship_length") - location.Orientation = get_node(ship).get("vertical") - shipLocation.append(location) - - #print out the array for testing - for x in shipLocation: - print("Ship Length: ", x.Length, ", Ship Orientation: ", x.Orientation, "Ship Coor: ", x.Coor) - - #Hides the ship placement UI - var confirmButton = get_node("Confirm Placement") - var clearButton = get_node("Clear") - var ship1 = get_node("2Ship") - var ship2 = get_node("3ShipA") - var ship3 = get_node("3ShipB") - var ship4 = get_node("4Ship") - var ship5 = get_node("5Ship") - confirmButton.visible = false - clearButton.visible = false - ship1.visible = false - ship2.visible = false - ship3.visible = false - ship4.visible = false - ship5.visible = false - - #Changes to firing mode, makes the fireing mode UI visible (The location of this can be changed later. This position is for testing) - var crosshair = get_node("Crosshair") - var fireButton = get_node("Fire") - crosshair.visible = true - fireButton.visible = true - return valid # Replace with function body. - -func _on_Clear_pressed(): - for ship in Ships: - get_node(ship).clear() - pass # Replace with function body. - - -func _on_Fire_pressed(): - var crosshair = get_node("Crosshair") - # hides crosshair - crosshair.visible = false - if crosshair.validate_position(crosshair.position) == true: - # fires at position - print("Fire at position: ", crosshair.position) - else: - #if invalid position popup appears - var dialog = get_node("FireDialog") - dialog.popup_centered() - pass # Replace with function body. - -func _on_FireDialog_confirmed(): - get_node("Crosshair").visible = true - pass # Replace with function body. diff --git a/godot_ship/script/game/Gameplay/Crosshair.gd b/godot_ship/script/game/Gameplay/Crosshair.gd index 274cca8..41ef586 100644 --- a/godot_ship/script/game/Gameplay/Crosshair.gd +++ b/godot_ship/script/game/Gameplay/Crosshair.gd @@ -1,24 +1,28 @@ extends Sprite -# Declare member variables here. Examples: -# var a = 2 -# var b = "text" - var snapped = false #when snapped if true crosshair stops following mouse +const world_offset = Vector2(36,36) # Called when the node enters the scene tree for the first time. func _ready(): + # Move the cursor to 0,0 + position = board_to_world_space(Vector2(-2,-2)) pass # Replace with function body. -func _physics_process(delta): - if snapped == false: - position += (get_global_mouse_position() - position)/10 +func _physics_process(_delta): + var mousePos = get_global_mouse_position() + # If the cursor is not snapped, and the mouse is over the board + if snapped == false and validate_position(mousePos): + # Snap the crosshair to the grid, but following the mouse + position = (mousePos - world_offset).snapped(Vector2(32,32)) + world_offset func _input(event): # Check if left click is being clicked and the sprite is visible (i.e only checks for inputs after ship positions are confirmed) - if event is InputEventMouseButton and event.button_index == BUTTON_LEFT and visible == true: - # Locks the position of the crosshair with left click + if event is InputEventMouseButton and event.button_index == BUTTON_LEFT and visible and not event.is_pressed(): + # Make a noise + AudioBus.emit_signal("button_clicked") + # Locks the position of the crosshair with left click release if validate_position(position) == true: # rounds the board position to the nearest integer snapped = true @@ -26,16 +30,15 @@ func _input(event): position.y = int(round(world_to_board_space(position).y)) position = board_to_world_space(position) # Check if left click is being clicked and the sprite is visible (i.e only checks for inputs after ship positions are confirmed) - if event is InputEventMouseButton and event.button_index == BUTTON_RIGHT and visible == true: - # Unlocks the position of the crosshair with right click + elif event is InputEventMouseButton and event.button_index == BUTTON_LEFT and visible == true: + # Unlocks the position of the crosshair with left click snapped = false func validate_position(vector): # rounds the board position to the nearest integer - var boardx = int(round(world_to_board_space(vector).x)) - var boardy = int(round(world_to_board_space(vector).y)) + var board = world_to_board_space(vector) # Checks if the board position is within bounds of the board - if boardx < 11 and boardx > 0 and boardy < 11 and boardy > 0: + if board.x < 9.5 and board.x >= -0.5 and board.y < 9.5 and board.y >= -0.5: # changes the position of the crosshair return true else: @@ -45,15 +48,11 @@ func validate_position(vector): # Convert the world-space coordinates to positions on the board func world_to_board_space(vector): # Do math - var res = (vector - offset) / 32 # Basically Fahrenheit/Celcius conversion, but in 2D + var res = (vector - world_offset) / 32 # Basically Fahrenheit/Celcius conversion, but in 2D return res # Inverse of the above function. func board_to_world_space(vector): # Do math - var res = (vector * 32) + offset #Invert the above function + var res = (vector * 32) + world_offset #Invert the above function return res #Truncate decimals - -# Called every frame. 'delta' is the elapsed time since the previous frame. -#func _process(delta): -# pass diff --git a/godot_ship/script/game/Gameplay/Fire.gd b/godot_ship/script/game/Gameplay/Fire.gd new file mode 100644 index 0000000..8ad90f4 --- /dev/null +++ b/godot_ship/script/game/Gameplay/Fire.gd @@ -0,0 +1,30 @@ +extends Control + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + +# Signal to pass the fire location back to yet-unknown nodes +signal fire_at + + +func _on_Fire_pressed(): + var crosshair = get_node("Crosshair") + # hides crosshair + crosshair.visible = false + if crosshair.validate_position(crosshair.position) == true: + var crosshair_pos = crosshair.world_to_board_space(crosshair.position) + # fires at position + print("Fire at position: ", crosshair_pos) + emit_signal("fire_at", crosshair_pos) + # Close the Firing menu + queue_free() + else: + #if invalid position popup appears + var dialog = get_node("FireDialog") + dialog.popup_centered() + pass # Replace with function body. + +func _on_FireDialog_confirmed(): + get_node("Crosshair").visible = true + pass # Replace with function body. diff --git a/godot_ship/script/game/Gameplay/Game.gd b/godot_ship/script/game/Gameplay/Game.gd index 29d7d1d..3c2f7cd 100644 --- a/godot_ship/script/game/Gameplay/Game.gd +++ b/godot_ship/script/game/Gameplay/Game.gd @@ -1,8 +1,18 @@ extends Node +class ShipData: + var Coor: Vector2 + var Length: int + var Orientation: bool #vertical is true, (Trueship = vertical) (Falseship = horizontal) + +# Preloaded assets, to be used later +onready var Setup = preload("res://scenes/Game/Setup.tscn") +onready var Fire = preload("res://scenes/Game/Fire.tscn") + # Path to Player class, for instantiating new Players in code var Player = "res://script/game/Gameplay/Player.gd" + # Array of instances of the Player class; stores the Players var players # = player1, player2, ... # turn counter @@ -15,7 +25,13 @@ var is_multiplayer = false # Called when the node enters the scene tree for the first time. func _ready(): - game_start() + var setup = Setup.instance() + setup.connect("game_ready", self, "game_setup") + add_child(setup) + +func game_setup(_ships): + print_debug("Congrats! Setup complete.") + add_child(Fire.instance()) # Member functions: # game_start: starts the game @@ -29,3 +45,10 @@ func victory_screen(): # display_turn(): display which turn it is on the screen func display_turn(): pass + +func _on_Forfeit_pressed(): + AudioBus.emit_signal("button_clicked") + end() + +func end(): + queue_free() diff --git a/godot_ship/script/game/Setup.gd b/godot_ship/script/game/Setup.gd new file mode 100644 index 0000000..f689e96 --- /dev/null +++ b/godot_ship/script/game/Setup.gd @@ -0,0 +1,54 @@ +extends Control + +signal forfeit +signal game_ready + +onready var Ships = ["2Ship", "3ShipA", "3ShipB", "4Ship", "5Ship"] + +class ShipData: + var Position: Vector2 + var Length: int + var Orientation: bool # (True = vertical) (False = horizontal) + +# Called when the node enters the scene tree for the first time. +func _ready(): + # Moves the focus to this menu + if find_next_valid_focus(): find_next_valid_focus().grab_focus() + + +func _on_Confirm_Placement_pressed(): + # Make the button noise + AudioBus.emit_signal("button_clicked") + var valid = true + for ship in Ships: + # validate_placement returns the x-axis distance from the board + # if this is more than zero, the ship is invalid + if get_node(ship).validate_placement(): + valid = false + print ("Placement: ", valid) + if valid == false: + get_node("PlaceShipDialog").popup() + else: + #Saves the location of ships and length of ship into an array + var shipLocation = [] + for ship in Ships: + var location = ShipData.new() + location.Position = get_node(ship).position + location.Length = get_node(ship).get("ship_length") + location.Orientation = get_node(ship).get("vertical") + shipLocation.append(location) + + #print out the array for testing + for x in shipLocation: + print("Ship Length: ", x.Length, ", Ship Orientation: ", x.Orientation, ", Ship Position: ", x.Position) + + # Return the shipLocation array to those listening on game_ready + emit_signal("game_ready", shipLocation) + queue_free() + return valid # Replace with function body. + +func _on_Clear_pressed(): + AudioBus.emit_signal("button_clicked") + for ship in Ships: + get_node(ship).clear() + pass # Replace with function body. diff --git a/godot_ship/script/game/moveShip.gd b/godot_ship/script/game/SetupShip.gd similarity index 99% rename from godot_ship/script/game/moveShip.gd rename to godot_ship/script/game/SetupShip.gd index 6c41215..6d923a2 100644 --- a/godot_ship/script/game/moveShip.gd +++ b/godot_ship/script/game/SetupShip.gd @@ -141,11 +141,9 @@ func checkOriginalPos(): # Called when *this* ship collides with another ship func ship_stacked(_body): - print("stacked") collision = true # Called when *this* ship stops colliding with another ship func ship_unstacked(_body): - print("unstacked") collision = false # Calculate the extents (front to back) of the ship and check whether they're on the board diff --git a/godot_ship/script/game/multiplayer/Multiplayer Controller.gd b/godot_ship/script/game/multiplayer/Multiplayer Controller.gd deleted file mode 100644 index 1eccaec..0000000 --- a/godot_ship/script/game/multiplayer/Multiplayer Controller.gd +++ /dev/null @@ -1,16 +0,0 @@ -extends Node - - -# Declare member variables here. Examples: -# var a = 2 -# var b = "text" - - -# Called when the node enters the scene tree for the first time. -func _ready(): - pass # Replace with function body. - - -# Called every frame. 'delta' is the elapsed time since the previous frame. -#func _process(delta): -# pass