From 5f65f10848fdc08269bbf0932e111715fe66b53c Mon Sep 17 00:00:00 2001
From: Alan <alanjfogel@gmail.com>
Date: Fri, 31 Jan 2025 13:48:29 -0600
Subject: [PATCH] Added Bishop piece

---
 .godot/editor/editor_layout.cfg               |  10 +--
 .godot/editor/filesystem_update4              |   2 +
 ...state-c2a7af834e91ff64325daddf58e45dc0.cfg |   2 +-
 .godot/editor/project_metadata.cfg            |   4 +-
 .godot/editor/script_editor_cache.cfg         |  28 ++++--
 .godot/global_script_class_cache.cfg          |   6 ++
 .godot/uid_cache.bin                          | Bin 3004 -> 3040 bytes
 scenes/Bishop.tscn                            |  10 +++
 scripts/Bishop.gd                             |  82 ++++++++++++++++++
 scripts/King.gd                               |   0
 scripts/Knight.gd                             |   0
 scripts/Queen.gd                              |   0
 scripts/game.gd                               |   4 +
 13 files changed, 131 insertions(+), 17 deletions(-)
 create mode 100644 scenes/Bishop.tscn
 create mode 100644 scripts/Bishop.gd
 create mode 100644 scripts/King.gd
 create mode 100644 scripts/Knight.gd
 create mode 100644 scripts/Queen.gd

diff --git a/.godot/editor/editor_layout.cfg b/.godot/editor/editor_layout.cfg
index 3eb99a4..5340275 100644
--- a/.godot/editor/editor_layout.cfg
+++ b/.godot/editor/editor_layout.cfg
@@ -25,17 +25,17 @@ dock_5="Inspector,Node,History"
 
 [EditorNode]
 
-open_scenes=PackedStringArray("res://scenes/game.tscn", "res://scenes/explosion.tscn", "res://scenes/Pawn.tscn", "res://scenes/Rook.tscn")
-current_scene="res://scenes/Pawn.tscn"
-center_split_offset=-320
+open_scenes=PackedStringArray("res://scenes/game.tscn", "res://scenes/explosion.tscn", "res://scenes/Pawn.tscn", "res://scenes/Rook.tscn", "res://scenes/Bishop.tscn")
+current_scene="res://scenes/Bishop.tscn"
+center_split_offset=-313
 selected_default_debugger_tab_idx=0
 selected_main_editor_idx=2
 selected_bottom_panel_item=0
 
 [ScriptEditor]
 
-open_scripts=["res://scripts/game.gd", "res://scripts/Pawn.gd", "res://scripts/Piece.gd", "res://scripts/Rook.gd"]
-selected_script="res://scripts/Rook.gd"
+open_scripts=["res://scripts/Bishop.gd", "res://scripts/game.gd", "res://scripts/Pawn.gd", "res://scripts/Piece.gd", "res://scripts/Rook.gd"]
+selected_script="res://scripts/Bishop.gd"
 open_help=[]
 script_split_offset=70
 list_split_offset=0
diff --git a/.godot/editor/filesystem_update4 b/.godot/editor/filesystem_update4
index b75cf9f..8a81da6 100644
--- a/.godot/editor/filesystem_update4
+++ b/.godot/editor/filesystem_update4
@@ -13,3 +13,5 @@ res://scripts/board.gd
 res://scenes/Pawn.tscn
 res://scenes/Rook.tscn
 res://scripts/Piece.gd
+res://scripts/Bishop.gd
+res://scenes/Bishop.tscn
diff --git a/.godot/editor/game.tscn-editstate-c2a7af834e91ff64325daddf58e45dc0.cfg b/.godot/editor/game.tscn-editstate-c2a7af834e91ff64325daddf58e45dc0.cfg
index 1c808c5..81cedcf 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]([])
+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@9272/@VSplitContainer@9094/@HSplitContainer@9096/@HSplitContainer@9098/@Control@9099/@SubViewportContainer@9100/@SubViewport@9101/Node2D/Sprite2D")])
diff --git a/.godot/editor/project_metadata.cfg b/.godot/editor/project_metadata.cfg
index f386566..c1e3fa6 100644
--- a/.godot/editor/project_metadata.cfg
+++ b/.godot/editor/project_metadata.cfg
@@ -13,8 +13,8 @@ last_selected_language="GDScript"
 
 [recent_files]
 
-scripts=["res://scripts/Rook.gd", "res://scripts/Pawn.gd", "res://scripts/Piece.gd", "@GDScript", "int", "res://background.gd", "res://chess_board.tscn::GDScript_fv0wj", "res://tile_container.gd", "res://chess_board.gd"]
-scenes=["res://scenes/Rook.tscn", "res://scenes/Pawn.tscn", "res://scenes/explosion.tscn", "res://scenes/game.tscn", "res://scenes/chess_board.tscn", "res://chess_board.tscn"]
+scripts=["res://scripts/Bishop.gd", "res://scripts/Rook.gd", "res://scripts/Pawn.gd", "res://scripts/Piece.gd", "@GDScript", "int", "res://background.gd", "res://chess_board.tscn::GDScript_fv0wj", "res://tile_container.gd", "res://chess_board.gd"]
+scenes=["res://scenes/Bishop.tscn", "res://scenes/Rook.tscn", "res://scenes/Pawn.tscn", "res://scenes/explosion.tscn", "res://scenes/game.tscn", "res://scenes/chess_board.tscn", "res://chess_board.tscn"]
 
 [color_picker]
 
diff --git a/.godot/editor/script_editor_cache.cfg b/.godot/editor/script_editor_cache.cfg
index b3cfa14..ca83cea 100644
--- a/.godot/editor/script_editor_cache.cfg
+++ b/.godot/editor/script_editor_cache.cfg
@@ -3,7 +3,7 @@
 state={
 "bookmarks": PackedInt32Array(),
 "breakpoints": PackedInt32Array(),
-"column": 40,
+"column": 31,
 "folded_lines": Array[int]([]),
 "h_scroll_position": 0,
 "row": 122,
@@ -34,7 +34,7 @@ state={
 "column": 0,
 "folded_lines": Array[int]([]),
 "h_scroll_position": 0,
-"row": 10,
+"row": 17,
 "scroll_position": 0.0,
 "selection": false,
 "syntax_highlighter": "GDScript"
@@ -45,15 +45,25 @@ state={
 state={
 "bookmarks": PackedInt32Array(),
 "breakpoints": PackedInt32Array(),
-"column": 0,
+"column": 45,
 "folded_lines": Array[int]([]),
 "h_scroll_position": 0,
-"row": 10,
+"row": 11,
 "scroll_position": 0.0,
-"selection": true,
-"selection_from_column": 0,
-"selection_from_line": 10,
-"selection_to_column": 43,
-"selection_to_line": 10,
+"selection": false,
+"syntax_highlighter": "GDScript"
+}
+
+[res://scripts/Bishop.gd]
+
+state={
+"bookmarks": PackedInt32Array(),
+"breakpoints": PackedInt32Array(),
+"column": 19,
+"folded_lines": Array[int]([]),
+"h_scroll_position": 0,
+"row": 80,
+"scroll_position": 61.0,
+"selection": false,
 "syntax_highlighter": "GDScript"
 }
diff --git a/.godot/global_script_class_cache.cfg b/.godot/global_script_class_cache.cfg
index ae52abd..762b814 100644
--- a/.godot/global_script_class_cache.cfg
+++ b/.godot/global_script_class_cache.cfg
@@ -1,4 +1,10 @@
 list=Array[Dictionary]([{
+"base": &"Piece",
+"class": &"Bishop",
+"icon": "",
+"language": &"GDScript",
+"path": "res://scripts/Bishop.gd"
+}, {
 "base": &"Sprite2D",
 "class": &"Board",
 "icon": "",
diff --git a/.godot/uid_cache.bin b/.godot/uid_cache.bin
index 0599803417112f698de30a8febc454cd55790e8a..6909301c1a32ae2cb252b0ca334ad9019df34af7 100644
GIT binary patch
delta 47
zcmdlZ{y?13Vk6^jZj~QqxooO)wy8-lFfbIQ7F+4-7bmCYr55WuWfo`T7wDA~C+7hG
DbYc(F

delta 10
RcmaDLzDJzVd?Vv-ZU7Z~1A71f

diff --git a/scenes/Bishop.tscn b/scenes/Bishop.tscn
new file mode 100644
index 0000000..eb713ca
--- /dev/null
+++ b/scenes/Bishop.tscn
@@ -0,0 +1,10 @@
+[gd_scene load_steps=3 format=3 uid="uid://bf0kea272jnpo"]
+
+[ext_resource type="Script" path="res://scripts/Bishop.gd" id="1_l7uw0"]
+[ext_resource type="Texture2D" uid="uid://b68o4mj7wcwvq" path="res://assets/sprites/bishop.png" id="2_m57j0"]
+
+[node name="Node2D" type="Node2D"]
+script = ExtResource("1_l7uw0")
+
+[node name="Sprite2D" type="Sprite2D" parent="."]
+texture = ExtResource("2_m57j0")
diff --git a/scripts/Bishop.gd b/scripts/Bishop.gd
new file mode 100644
index 0000000..1e272c8
--- /dev/null
+++ b/scripts/Bishop.gd
@@ -0,0 +1,82 @@
+extends Piece
+
+class_name Bishop
+
+enum Upgrade {
+	MOVE_CARDINAL_ONE,
+}
+
+func _init(is_white: bool, position: Vector2):
+	super._init(is_white, position)
+	# Testing upgrades
+	upgrades.append(Upgrade.MOVE_CARDINAL_ONE)
+
+func get_valid_moves(board_state: Array, pos: Vector2) -> Array[Vector2]:
+	var valid_moves: Array[Vector2] = []
+	var x = pos.x
+	var y = pos.y
+
+	# Check moves in the top-right diagonal
+	for i in range(1, 8):
+		if x + i < 8 and y - i >= 0:
+			if board_state[x + i][y - i] == null:
+				valid_moves.append(Vector2(x + i, y - i))
+			elif not board_state[x + i][y - i].is_white:
+				valid_moves.append(Vector2(x + i, y - i))
+				break
+			else:
+				break
+		else:
+			break
+
+	# Check moves in the top-left diagonal
+	for i in range(1, 8):
+		if x - i >= 0 and y - i >= 0:
+			if board_state[x - i][y - i] == null:
+				valid_moves.append(Vector2(x - i, y - i))
+			elif not board_state[x - i][y - i].is_white:
+				valid_moves.append(Vector2(x - i, y - i))
+				break
+			else:
+				break
+		else:
+			break
+
+	# Check moves in the bottom-right diagonal
+	for i in range(1, 8):
+		if x + i < 8 and y + i < 8:
+			if board_state[x + i][y + i] == null:
+				valid_moves.append(Vector2(x + i, y + i))
+			elif not board_state[x + i][y + i].is_white:
+				valid_moves.append(Vector2(x + i, y + i))
+				break
+			else:
+				break
+		else:
+			break
+
+	# Check moves in the bottom-left diagonal
+	for i in range(1, 8):
+		if x - i >= 0 and y + i < 8:
+			if board_state[x - i][y + i] == null:
+				valid_moves.append(Vector2(x - i, y + i))
+			elif not board_state[x - i][y + i].is_white:
+				valid_moves.append(Vector2(x - i, y + i))
+				break
+			else:
+				break
+		else:
+			break
+	# Check for MOVE_CARDINAL_ONE upgrade
+	if Upgrade.MOVE_CARDINAL_ONE in upgrades:
+		# Check cardinal moves (one space)
+		if x > 0 and (board_state[x - 1][y] == null or not board_state[x - 1][y].is_white):
+			valid_moves.append(Vector2(x - 1, y))
+		if x < 7 and (board_state[x + 1][y] == null or not board_state[x + 1][y].is_white):
+			valid_moves.append(Vector2(x + 1, y))
+		if y > 0 and (board_state[x][y - 1] == null or not board_state[x][y - 1].is_white):
+			valid_moves.append(Vector2(x, y - 1))
+		if y < 7 and (board_state[x][y + 1] == null or not board_state[x][y + 1].is_white):
+			valid_moves.append(Vector2(x, y + 1))
+            
+	return valid_moves
diff --git a/scripts/King.gd b/scripts/King.gd
new file mode 100644
index 0000000..e69de29
diff --git a/scripts/Knight.gd b/scripts/Knight.gd
new file mode 100644
index 0000000..e69de29
diff --git a/scripts/Queen.gd b/scripts/Queen.gd
new file mode 100644
index 0000000..e69de29
diff --git a/scripts/game.gd b/scripts/game.gd
index 1c2eac7..ebad288 100644
--- a/scripts/game.gd
+++ b/scripts/game.gd
@@ -44,11 +44,13 @@ func _ready() -> void:
 	
 	#hard-coded setup of pieces
 	board[0][7] = Rook.new(true, Vector2(0, 7))
+	board[1][7] = Bishop.new(true, Vector2(1, 7))
 	board[3][7] = Pawn.new(true, Vector2(3, 7))
 	board[4][7] = Pawn.new(true, Vector2(4, 7))
 	board[7][7] = Rook.new(true, Vector2(7, 7))
 
 	board[0][4] = Rook.new(false, Vector2(0, 4))
+	board[1][5] = Bishop.new(false, Vector2(1, 5))
 	board[3][5] = Pawn.new(false, Vector2(3, 5))
 	board[4][4] = Pawn.new(false, Vector2(4, 4))
 	board[3][4] = Pawn.new(false, Vector2(3, 4))
@@ -111,6 +113,8 @@ func draw_pieces():
 					piece_scene = preload("res://scenes/Pawn.tscn")
 				elif board[x][y] is Rook:
 					piece_scene = preload("res://scenes/Rook.tscn")
+				elif board[x][y] is Bishop:
+					piece_scene = preload("res://scenes/Bishop.tscn")
 				# Add other piece types here (e.g., Knight, Bishop, Queen, King)
 				
 				if piece_scene:
-- 
GitLab