diff --git a/.godot/editor/create_recent.Node b/.godot/editor/create_recent.Node index d284b510afbda703ec4d1285e75af63fba230f7d..dab04a2dcd0382458aae92cb380e91648a93783e 100644 --- a/.godot/editor/create_recent.Node +++ b/.godot/editor/create_recent.Node @@ -1,12 +1,11 @@ +Button +Control HBoxContainer Node Label -Control CanvasLayer -Button Camera2D Timer Rook -Button ColorRect TextureRect diff --git a/.godot/editor/editor_layout.cfg b/.godot/editor/editor_layout.cfg index 2b5723a5381050cc74769e30d82720dd6faf45b0..7a89050c856e343a7c819d74f4e6c760b6adbc36 100644 --- a/.godot/editor/editor_layout.cfg +++ b/.godot/editor/editor_layout.cfg @@ -36,8 +36,8 @@ selected_bottom_panel_item=0 [ScriptEditor] -open_scripts=["res://scripts/game.gd", "res://scripts/ui/game_ui.gd", "res://scripts/King.gd", "res://scripts/Mage.gd", "res://scripts/main/main.gd", "res://scripts/Pawn.gd", "res://scripts/run_data/run_data.gd", "res://scripts/managers/scene_manager.gd", "res://scripts/screens/select_piece_screen.gd", "res://scripts/Shop.gd", "res://scenes/shop_item.gd", "res://scripts/managers/state_manager.gd"] -selected_script="res://scripts/run_data/run_data.gd" +open_scripts=["res://scripts/ui/display_piece_manager.gd", "res://scripts/game.gd", "res://scripts/ui/game_ui.gd", "res://scripts/King.gd", "res://scripts/Mage.gd", "res://scripts/main/main.gd", "res://scripts/Pawn.gd", "res://scripts/run_data/run_data.gd", "res://scripts/managers/scene_manager.gd", "res://scripts/screens/select_piece_screen.gd", "res://scripts/Shop.gd", "res://scenes/shop_item.gd", "res://scripts/managers/state_manager.gd"] +selected_script="res://scripts/ui/game_ui.gd" open_help=[] script_split_offset=70 list_split_offset=0 diff --git a/.godot/editor/filesystem_update4 b/.godot/editor/filesystem_update4 index d15020a10c363a4558989dc6196b7a4315c4fe0a..4e4e19a502bb79a2bdf6f6715adbde8be5534e8f 100644 --- a/.godot/editor/filesystem_update4 +++ b/.godot/editor/filesystem_update4 @@ -15,3 +15,4 @@ res://scripts/game.gd res://scripts/screens/select_piece_screen.gd res://scripts/ui/game_ui.gd res://scripts/run_data/run_data.gd +res://scripts/ui/display_piece_manager.gd diff --git a/.godot/editor/game.tscn-editstate-c2a7af834e91ff64325daddf58e45dc0.cfg b/.godot/editor/game.tscn-editstate-c2a7af834e91ff64325daddf58e45dc0.cfg index 3c5f00d0ad4fdfe3ac9211c1871a753a292ad646..9394ea82647983c5dd7e53dd3525a3e97b879317 100644 --- a/.godot/editor/game.tscn-editstate-c2a7af834e91ff64325daddf58e45dc0.cfg +++ b/.godot/editor/game.tscn-editstate-c2a7af834e91ff64325daddf58e45dc0.cfg @@ -175,4 +175,4 @@ Anim={ "zfar": 4000.01, "znear": 0.05 } -selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@16886/@Panel@13/@VBoxContainer@14/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@25/DockVSplitCenter/@VSplitContainer@52/@VBoxContainer@53/@PanelContainer@98/MainScreen/@CanvasItemEditor@9280/@VSplitContainer@9102/@HSplitContainer@9104/@HSplitContainer@9106/@Control@9107/@SubViewportContainer@9108/@SubViewport@9109/UI/GoldDisplay")]) +selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@16886/@Panel@13/@VBoxContainer@14/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@25/DockVSplitCenter/@VSplitContainer@52/@VBoxContainer@53/@PanelContainer@98/MainScreen/@CanvasItemEditor@9280/@VSplitContainer@9102/@HSplitContainer@9104/@HSplitContainer@9106/@Control@9107/@SubViewportContainer@9108/@SubViewport@9109/UI/DisplayPieceManager/Button")]) diff --git a/.godot/editor/main.tscn-editstate-3070c538c03ee49b7677ff960a3f5195.cfg b/.godot/editor/main.tscn-editstate-3070c538c03ee49b7677ff960a3f5195.cfg index 451a6fb8f84bdedcfec579e0391e5f7385cc6278..203d2839954f3b4ce789500c80593908c1c58d2b 100644 --- a/.godot/editor/main.tscn-editstate-3070c538c03ee49b7677ff960a3f5195.cfg +++ b/.godot/editor/main.tscn-editstate-3070c538c03ee49b7677ff960a3f5195.cfg @@ -175,4 +175,4 @@ Anim={ "zfar": 4000.01, "znear": 0.05 } -selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@16886/@Panel@13/@VBoxContainer@14/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@25/DockVSplitCenter/@VSplitContainer@52/@VBoxContainer@53/@PanelContainer@98/MainScreen/@CanvasItemEditor@9280/@VSplitContainer@9102/@HSplitContainer@9104/@HSplitContainer@9106/@Control@9107/@SubViewportContainer@9108/@SubViewport@9109/UI/GoldDisplay")]) +selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@16886/@Panel@13/@VBoxContainer@14/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@25/DockVSplitCenter/@VSplitContainer@52/@VBoxContainer@53/@PanelContainer@98/MainScreen/@CanvasItemEditor@9280/@VSplitContainer@9102/@HSplitContainer@9104/@HSplitContainer@9106/@Control@9107/@SubViewportContainer@9108/@SubViewport@9109/UI/DisplayPieceManager/Button")]) diff --git a/.godot/editor/project_metadata.cfg b/.godot/editor/project_metadata.cfg index dcf5722034d20ff4a3dd739f70f02b7af74a8a07..82a7317312527011005c9142f3baab5c7f591446 100644 --- a/.godot/editor/project_metadata.cfg +++ b/.godot/editor/project_metadata.cfg @@ -6,7 +6,7 @@ executable_path="/Applications/Godot.app/Contents/MacOS/Godot" [recent_files] scenes=["res://main.tscn", "res://scenes/Managers/state_manager.tscn", "res://scenes/ui/ui.tscn", "res://scenes/Pawn.tscn", "res://scenes/screens/select_piece_screen.tscn", "res://scenes/Shop.tscn", "res://scenes/game.tscn", "res://scenes/King.tscn"] -scripts=["res://scripts/managers/state_manager.gd", "res://scripts/ui/game_ui.gd", "res://scripts/Mage.gd", "res://scripts/Pawn.gd", "res://scripts/scene_manager.gd", "res://scripts/screens/select_piece_screen.gd", "res://scripts/Shop.gd", "res://scripts/run_data/run_data.gd", "res://scripts/King.gd", "res://scripts/game.gd"] +scripts=["res://scripts/ui/display_piece_manager.gd", "res://scripts/managers/state_manager.gd", "res://scripts/ui/game_ui.gd", "res://scripts/Mage.gd", "res://scripts/Pawn.gd", "res://scripts/scene_manager.gd", "res://scripts/screens/select_piece_screen.gd", "res://scripts/Shop.gd", "res://scripts/run_data/run_data.gd", "res://scripts/King.gd"] [dialog_bounds] diff --git a/.godot/editor/script_editor_cache.cfg b/.godot/editor/script_editor_cache.cfg index 4a657d0552fdd64c8e3b1d077a7d0fb07db92749..9382e5d229723751253617ecb2dc3750944fe750 100644 --- a/.godot/editor/script_editor_cache.cfg +++ b/.godot/editor/script_editor_cache.cfg @@ -45,16 +45,12 @@ state={ state={ "bookmarks": PackedInt32Array(), "breakpoints": PackedInt32Array(), -"column": 35, +"column": 22, "folded_lines": Array[int]([]), "h_scroll_position": 0, -"row": 13, -"scroll_position": 3.0, -"selection": true, -"selection_from_column": 35, -"selection_from_line": 13, -"selection_to_column": 53, -"selection_to_line": 13, +"row": 49, +"scroll_position": 273.0, +"selection": false, "syntax_highlighter": "GDScript" } @@ -151,11 +147,11 @@ state={ state={ "bookmarks": PackedInt32Array(), "breakpoints": PackedInt32Array(), -"column": 25, +"column": 47, "folded_lines": Array[int]([]), "h_scroll_position": 0, -"row": 23, -"scroll_position": 16.0, +"row": 6, +"scroll_position": 1.0, "selection": false, "syntax_highlighter": "GDScript" } @@ -165,10 +161,10 @@ state={ state={ "bookmarks": PackedInt32Array(), "breakpoints": PackedInt32Array(), -"column": 21, +"column": 0, "folded_lines": Array[int]([]), "h_scroll_position": 0, -"row": 18, +"row": 10, "scroll_position": 0.0, "selection": false, "syntax_highlighter": "GDScript" @@ -187,3 +183,17 @@ state={ "selection": false, "syntax_highlighter": "GDScript" } + +[res://scripts/ui/display_piece_manager.gd] + +state={ +"bookmarks": PackedInt32Array(), +"breakpoints": PackedInt32Array(), +"column": 58, +"folded_lines": Array[int]([]), +"h_scroll_position": 0, +"row": 35, +"scroll_position": 0.0, +"selection": false, +"syntax_highlighter": "GDScript" +} diff --git a/scenes/ui/ui.tscn b/scenes/ui/ui.tscn index 24168329337bb3fa38efb6e135a03fb2ab342c99..460c196014fb96172ad5c0053d1f77228507ca41 100644 --- a/scenes/ui/ui.tscn +++ b/scenes/ui/ui.tscn @@ -1,15 +1,31 @@ -[gd_scene load_steps=2 format=3 uid="uid://c1vsk5wdtcfd3"] +[gd_scene load_steps=3 format=3 uid="uid://c1vsk5wdtcfd3"] [ext_resource type="Script" path="res://scripts/ui/game_ui.gd" id="1_7jylg"] +[ext_resource type="Script" path="res://scripts/ui/display_piece_manager.gd" id="2_m6jbx"] [node name="UI" type="CanvasLayer"] script = ExtResource("1_7jylg") -[node name="PieceContainer" type="HBoxContainer" parent="."] +[node name="DisplayPieceManager" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 0 offset_left = 50.0 offset_top = 600.0 offset_right = 90.0 offset_bottom = 640.0 +script = ExtResource("2_m6jbx") + +[node name="PieceContainer" type="HBoxContainer" parent="DisplayPieceManager"] +layout_mode = 0 +offset_right = 40.0 +offset_bottom = 40.0 + +[node name="Button" type="Button" parent="DisplayPieceManager"] +layout_mode = 0 +offset_left = 75.0 +offset_right = 146.0 +offset_bottom = 64.0 +text = "Confirm" [node name="GoldDisplay" type="Label" parent="."] offset_left = 50.0 diff --git a/scripts/game.gd b/scripts/game.gd index c42220987666d03942ebbec3daf9bcb22fb94d9c..0fdbd9e84118e221fd94b42ec043dbfc38090200 100644 --- a/scripts/game.gd +++ b/scripts/game.gd @@ -71,44 +71,44 @@ func _ready() -> void: #hard-coded setup of pieces - board[0][7] = preload("res://scenes/Rook.tscn").instantiate() - board[0][7]._my_init(true, Vector2(0, 7)) - - board[1][6] = preload("res://scenes/Wizard.tscn").instantiate() - board[1][6]._my_init(true, Vector2(1, 6)) - board[1][7] = preload("res://scenes/Bishop.tscn").instantiate() - board[1][7]._my_init(true, Vector2(1, 7)) - board[2][7] = preload("res://scenes/King.tscn").instantiate() - board[2][7]._my_init(true, Vector2(2, 7)) - board[3][6] = preload("res://scenes/Queen.tscn").instantiate() - board[3][6]._my_init(true, Vector2(3, 6)) - board[4][2] = preload("res://scenes/Pawn.tscn").instantiate() - board[4][2]._my_init(true, Vector2(4, 2)) - board[7][2] = preload("res://scenes/Pawn.tscn").instantiate() - board[7][2]._my_init(true, Vector2(7, 2)) - board[5][7] = preload("res://scenes/Knight.tscn").instantiate() - board[5][7]._my_init(true, Vector2(5, 7)) - board[6][7] = preload("res://scenes/Assassin.tscn").instantiate() - board[6][7]._my_init(true, Vector2(6, 7)) - board[7][6] = preload("res://scenes/Mage.tscn").instantiate() - board[7][6]._my_init(true, Vector2(7, 6)) - board[7][7] = preload("res://scenes/Rook.tscn").instantiate() - board[7][7]._my_init(true, Vector2(7, 7)) - - board[0][4] = preload("res://scenes/Rook.tscn").instantiate() - board[0][4]._my_init(false, Vector2(0, 4)) - board[1][5] = preload("res://scenes/Bishop.tscn").instantiate() - board[1][5]._my_init(false, Vector2(1, 5)) - board[3][2] = preload("res://scenes/Queen.tscn").instantiate() - board[3][2]._my_init(false, Vector2(3, 2)) - board[4][4] = preload("res://scenes/Assassin.tscn").instantiate() - board[4][4]._my_init(false, Vector2(4, 4)) - board[3][4] = preload("res://scenes/Pawn.tscn").instantiate() - board[3][4]._my_init(false, Vector2(3, 4)) - board[4][3] = preload("res://scenes/Mage.tscn").instantiate() - board[4][3]._my_init(false, Vector2(4, 3)) - board[7][5] = preload("res://scenes/Rook.tscn").instantiate() - board[7][5]._my_init(false, Vector2(7, 5)) + #board[0][7] = preload("res://scenes/Rook.tscn").instantiate() + #board[0][7]._my_init(true, Vector2(0, 7)) +# + #board[1][6] = preload("res://scenes/Wizard.tscn").instantiate() + #board[1][6]._my_init(true, Vector2(1, 6)) + #board[1][7] = preload("res://scenes/Bishop.tscn").instantiate() + #board[1][7]._my_init(true, Vector2(1, 7)) + #board[2][7] = preload("res://scenes/King.tscn").instantiate() + #board[2][7]._my_init(true, Vector2(2, 7)) + #board[3][6] = preload("res://scenes/Queen.tscn").instantiate() + #board[3][6]._my_init(true, Vector2(3, 6)) + #board[4][2] = preload("res://scenes/Pawn.tscn").instantiate() + #board[4][2]._my_init(true, Vector2(4, 2)) + #board[7][2] = preload("res://scenes/Pawn.tscn").instantiate() + #board[7][2]._my_init(true, Vector2(7, 2)) + #board[5][7] = preload("res://scenes/Knight.tscn").instantiate() + #board[5][7]._my_init(true, Vector2(5, 7)) + #board[6][7] = preload("res://scenes/Assassin.tscn").instantiate() + #board[6][7]._my_init(true, Vector2(6, 7)) + #board[7][6] = preload("res://scenes/Mage.tscn").instantiate() + #board[7][6]._my_init(true, Vector2(7, 6)) + #board[7][7] = preload("res://scenes/Rook.tscn").instantiate() + #board[7][7]._my_init(true, Vector2(7, 7)) +# + #board[0][4] = preload("res://scenes/Rook.tscn").instantiate() + #board[0][4]._my_init(false, Vector2(0, 4)) + #board[1][5] = preload("res://scenes/Bishop.tscn").instantiate() + #board[1][5]._my_init(false, Vector2(1, 5)) + #board[3][2] = preload("res://scenes/Queen.tscn").instantiate() + #board[3][2]._my_init(false, Vector2(3, 2)) + #board[4][4] = preload("res://scenes/Assassin.tscn").instantiate() + #board[4][4]._my_init(false, Vector2(4, 4)) + #board[3][4] = preload("res://scenes/Pawn.tscn").instantiate() + #board[3][4]._my_init(false, Vector2(3, 4)) + #board[4][3] = preload("res://scenes/Mage.tscn").instantiate() + #board[4][3]._my_init(false, Vector2(4, 3)) + #board[7][5] = preload("res://scenes/Rook.tscn").instantiate() + #board[7][5]._my_init(false, Vector2(7, 5)) #potential 'holes', not quite working yet #board[3][3] = '/' diff --git a/scripts/ui/display_piece_manager.gd b/scripts/ui/display_piece_manager.gd new file mode 100644 index 0000000000000000000000000000000000000000..98f088aba69eed376ddb9bf5c5c49d9984e41bf5 --- /dev/null +++ b/scripts/ui/display_piece_manager.gd @@ -0,0 +1,41 @@ +extends Control + +@onready var piece_container: HBoxContainer = $PieceContainer + +func refresh_pieces_display() -> void: + for child in piece_container.get_children(): + child.queue_free() + + var available_pieces = RunData.get_pieces() + + for piece in available_pieces: + var piece_button = create_piece_button(piece) + piece_container.add_child(piece_button) + +# Dynamically creates buttons +func create_piece_button(piece_name: String) -> TextureButton: + var button = TextureButton.new() + + var texture = load("res://Assets/Resized Chess Piece Assets/White_" + piece_name.to_lower() + ".png") + if texture: + button.texture_normal = texture + + # button properties + button.custom_minimum_size = Vector2(64, 64) + button.stretch_mode = TextureButton.STRETCH_KEEP_ASPECT_CENTERED + button.tooltip_text = piece_name.capitalize() + + # Hover effects to indicate users + button.mouse_entered.connect(func(): button.modulate = Color(1.2, 1.2, 1.2)) + button.mouse_exited.connect(func(): button.modulate = Color(1, 1, 1)) + + button.pressed.connect(func(): _on_piece_button_pressed(piece_name)) + + return button + +func _on_piece_button_pressed(piece_name: String) -> void: + for button in piece_container.get_children(): + if button.tooltip_text.to_lower() == piece_name: + button.modulate = Color(0.8, 0.8, 1.2) + else: + button.modulate = Color(1, 1, 1) diff --git a/scripts/ui/game_ui.gd b/scripts/ui/game_ui.gd index 0302950e1e92c1e67b7ac27d0e86fb73c0f1d95b..ad6f799b38f37a7d2ad94cdb709b64da51c82641 100644 --- a/scripts/ui/game_ui.gd +++ b/scripts/ui/game_ui.gd @@ -3,55 +3,15 @@ class_name GameUI @onready var state_manager: Node = $"../StateManager" +@onready var display_piece_manager: Control = $DisplayPieceManager @onready var gold_display: Label = $GoldDisplay -@onready var piece_container: HBoxContainer = $PieceContainer - -signal piece_selected(piece_name: String) # Called when the node enters the scene tree for the first time. func _ready() -> void: update_gold_display() RunData.currency_changed.connect(update_gold_display) - refresh_pieces_display() + display_piece_manager.refresh_pieces_display() func update_gold_display(new_currency: int = RunData.get_currency()) -> void: gold_display.text = "Gold: %d" % new_currency -func refresh_pieces_display() -> void: - for child in piece_container.get_children(): - child.queue_free() - - var available_pieces = RunData.get_pieces() - - for piece in available_pieces: - var piece_button = create_piece_button(piece) - piece_container.add_child(piece_button) - -# Dynamically creates buttons -func create_piece_button(piece_name: String) -> TextureButton: - var button = TextureButton.new() - - var texture = load("res://Assets/Resized Chess Piece Assets/White_" + piece_name.to_lower() + ".png") - if texture: - button.texture_normal = texture - - # button properties - button.custom_minimum_size = Vector2(64, 64) - button.stretch_mode = TextureButton.STRETCH_KEEP_ASPECT_CENTERED - button.tooltip_text = piece_name.capitalize() - - # Hover effects to indicate users - button.mouse_entered.connect(func(): button.modulate = Color(1.2, 1.2, 1.2)) - button.mouse_exited.connect(func(): button.modulate = Color(1, 1, 1)) - - button.pressed.connect(func(): _on_piece_button_pressed(piece_name)) - - return button - -func _on_piece_button_pressed(piece_name: String) -> void: - piece_selected.emit(piece_name) - for button in piece_container.get_children(): - if button.tooltip_text.to_lower() == piece_name: - button.modulate = Color(0.8, 0.8, 1.2) - else: - button.modulate = Color(1, 1, 1)