From 6cab6f05e7aef08245ec71c7b5672e47c2003131 Mon Sep 17 00:00:00 2001
From: noeld <zkw603@usask.ca>
Date: Wed, 29 Jan 2025 16:23:06 -0600
Subject: [PATCH] implemented linear interpolation to piece movement

---
 .godot/editor/filesystem_cache8    |  41 +++++----
 .godot/editor/filesystem_update4   |   1 +
 .godot/editor/project_metadata.cfg |   2 +-
 .godot/uid_cache.bin               | Bin 331 -> 398 bytes
 assets/sprites/tile.png            | Bin 0 -> 277 bytes
 assets/sprites/tile.png.import     |  34 +++++++
 project.godot                      |   2 +-
 scenes/game.tscn                   |   4 +-
 scripts/game.gd                    | 138 ++++++++++++++++++++---------
 9 files changed, 158 insertions(+), 64 deletions(-)
 create mode 100644 assets/sprites/tile.png
 create mode 100644 assets/sprites/tile.png.import

diff --git a/.godot/editor/filesystem_cache8 b/.godot/editor/filesystem_cache8
index 02a0f17..ffe9807 100644
--- a/.godot/editor/filesystem_cache8
+++ b/.godot/editor/filesystem_cache8
@@ -1,20 +1,23 @@
 ea4bc82a6ad023ab7ee23ee620429895
-::res://::1738185073
-::res://assets/::1738184945
-::res://assets/noise/::1738185019
-noise2.tres::NoiseTexture2D::5054739835828921764::1738185019::0::1::::<><>::
-noise3.tres::NoiseTexture2D::906885015046579772::1738185019::0::1::::<><>::
-noise.tres::NoiseTexture2D::1693764769519573005::1738185019::0::1::::<><>::
-::res://assets/shaders/::1738185054
-bg.gdshader::Shader::-1::1738185054::0::1::::<><>::
-color.gdshader::Shader::-1::1738185054::0::1::::<><>::
-shadow.gdshader::Shader::-1::1738185054::0::1::::<><>::
-::res://assets/sprites/::1738184945
-bishop.png::CompressedTexture2D::4631301773944929250::1738107147::1738179312::1::::<><>::
-knight.png::CompressedTexture2D::3545640967717948854::1738126203::1738179312::1::::<><>::
-pawn.png::CompressedTexture2D::1338760335342038528::1738109355::1738179312::1::::<><>::
-rook.png::CompressedTexture2D::6790909281007670776::1738106894::1738179312::1::::<><>::
-::res://scenes/::1738185052
-game.tscn::PackedScene::8577524005707705072::1738185052::0::1::::<><>::res://scripts/game.gd<>res://assets/shaders/bg.gdshader<>uid://yeqb8ndri7xp::::res://assets/noise/noise.tres<>uid://ceas3dsjeq4ge::::res://assets/noise/noise2.tres<>uid://m6ki73qfbp2s::::res://assets/noise/noise3.tres
-::res://scripts/::1738184945
-game.gd::GDScript::-1::1738184821::0::1::::game<>Node<>::
+::res://::1738186081
+icon.svg::CompressedTexture2D::6378281210119878262::1738185626::1738186049::1::::<><>::
+README.md::TextFile::-1::1738185626::0::1::::<><>::
+::res://assets/::1738185626
+::res://assets/noise/::1738186081
+noise2.tres::NoiseTexture2D::5054739835828921764::1738186081::0::1::::<><>::
+noise3.tres::NoiseTexture2D::906885015046579772::1738186081::0::1::::<><>::
+noise.tres::NoiseTexture2D::1693764769519573005::1738186081::0::1::::<><>::
+::res://assets/shaders/::1738187247
+bg.gdshader::Shader::-1::1738187247::0::1::::<><>::
+color.gdshader::Shader::-1::1738187247::0::1::::<><>::
+shadow.gdshader::Shader::-1::1738187247::0::1::::<><>::
+::res://assets/sprites/::1738186897
+bishop.png::CompressedTexture2D::4631301773944929250::1738185626::1738186049::1::::<><>::
+knight.png::CompressedTexture2D::3545640967717948854::1738185626::1738186049::1::::<><>::
+pawn.png::CompressedTexture2D::1338760335342038528::1738185626::1738186049::1::::<><>::
+rook.png::CompressedTexture2D::6790909281007670776::1738185626::1738186049::1::::<><>::
+tile.png::CompressedTexture2D::8704336058451696509::1738187423::1738187427::1::::<><>::
+::res://scenes/::1738187247
+game.tscn::PackedScene::8577524005707705072::1738187247::0::1::::<><>::res://scripts/game.gd<>res://assets/shaders/bg.gdshader<>uid://yeqb8ndri7xp::::res://assets/noise/noise.tres<>uid://ceas3dsjeq4ge::::res://assets/noise/noise2.tres<>uid://m6ki73qfbp2s::::res://assets/noise/noise3.tres
+::res://scripts/::1738187247
+game.gd::GDScript::-1::1738187247::0::1::::game<>Node<>::
diff --git a/.godot/editor/filesystem_update4 b/.godot/editor/filesystem_update4
index f1a4e25..f65008d 100644
--- a/.godot/editor/filesystem_update4
+++ b/.godot/editor/filesystem_update4
@@ -5,3 +5,4 @@ res://assets/shaders/bg.gdshader
 res://assets/noise/noise.tres
 res://assets/noise/noise2.tres
 res://assets/noise/noise3.tres
+res://scripts/game.gd
diff --git a/.godot/editor/project_metadata.cfg b/.godot/editor/project_metadata.cfg
index 6737b94..a5f2614 100644
--- a/.godot/editor/project_metadata.cfg
+++ b/.godot/editor/project_metadata.cfg
@@ -19,7 +19,7 @@ scenes=["res://scenes/game.tscn", "res://scenes/chess_board.tscn", "res://chess_
 [color_picker]
 
 picker_shape=3
-recent_presets=PackedColorArray(0.055, 0.298, 0.496, 1, 1, 0.9, 0.8, 1, 0.970807, 0.889286, 0.967011, 1, 0.971, 0.889, 0.967, 1, 1, 1, 1, 1, 0.481789, 0.481789, 0.481789, 1, 0.720467, 0.720468, 0.720467, 1, 0.779291, 0.779291, 0.779291, 1, 0.82606, 0.82606, 0.82606, 1)
+recent_presets=PackedColorArray(0.1, 0.25, 0.6, 0.997, 0.1, 0.25, 0.6, 0.996, 0.826, 0.826, 0.826, 0.9, 0.1, 0.25, 0.6, 0.899, 0.1, 0.25, 0.6, 0.8, 0.826, 0.826, 0.826, 0.8, 0.1, 0.25, 0.6, 0.9, 0.1, 0.25, 0.6, 1, 0.826, 0.826, 0.826, 1)
 color_mode=2
 
 [shader_setup]
diff --git a/.godot/uid_cache.bin b/.godot/uid_cache.bin
index 6d04f9aee4d8a858e8ad0fe0095d5d67f22783db..e90b294fb09102a059760bd16b024bb1e29d38f5 100644
GIT binary patch
delta 57
zcmX@j)W^)owUN<_QK_tKU*C6=mIyuu28N>4Vk>?9%;fw$z2dU;TIt1t?aXH?Cf=9i
ND9Ox8)hozL2LKw16RQ9K

delta 10
RcmeBUKF!3)v60b>5daUN0%ZUI

diff --git a/assets/sprites/tile.png b/assets/sprites/tile.png
new file mode 100644
index 0000000000000000000000000000000000000000..e6ede1414cd84d9356fa0668dc95368e2497a8f5
GIT binary patch
literal 277
zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|&U?BzhE&XX
zd)tujkbwxx#rZOZf-;jdb}ES^u=t+Z^XPrZw5LgBRpF-TQtik0*)KhD_0ILuRlisy
z9_OD{nyZ&=-M6aBea7+B=^sP?M?arjuIs^|yTFr<_$QmheNXETySM&*{_@)%hQ0#P
Vs#<P~Wk9bnc)I$ztaD0e0syn!UQqx5

literal 0
HcmV?d00001

diff --git a/assets/sprites/tile.png.import b/assets/sprites/tile.png.import
new file mode 100644
index 0000000..0b5db69
--- /dev/null
+++ b/assets/sprites/tile.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dwape4q5iuaa4"
+path="res://.godot/imported/tile.png-e74c868307bb18815f2ead8ba25ec565.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/sprites/tile.png"
+dest_files=["res://.godot/imported/tile.png-e74c868307bb18815f2ead8ba25ec565.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/project.godot b/project.godot
index b9a45b9..8ccc4a1 100644
--- a/project.godot
+++ b/project.godot
@@ -11,7 +11,7 @@ config_version=5
 [application]
 
 config/name="Go Save The King"
-
+run/main_scene="res://scenes/game.tscn"
 config/features=PackedStringArray("4.3", "GL Compatibility")
 config/icon="res://icon.svg"
 
diff --git a/scenes/game.tscn b/scenes/game.tscn
index ffa215b..4882d47 100644
--- a/scenes/game.tscn
+++ b/scenes/game.tscn
@@ -21,8 +21,8 @@ shader_parameter/noise3 = ExtResource("5_hkjcj")
 script = ExtResource("1_cbchi")
 X = 8
 Y = 8
-dark = Color(0.055, 0.298, 0.496, 1)
-light = Color(0.82606, 0.82606, 0.82606, 1)
+dark = Color(0.1, 0.25, 0.6, 1)
+light = Color(0.826, 0.826, 0.826, 1)
 
 [node name="ShadowContainer" type="Node2D" parent="."]
 
diff --git a/scripts/game.gd b/scripts/game.gd
index bf2a486..2ec2bfa 100644
--- a/scripts/game.gd
+++ b/scripts/game.gd
@@ -4,8 +4,11 @@ class_name game
 @export var X : int
 @export var Y : int
 @export var tile_size = 64
-@export var dark = Color(0,0,0)
-@export var light =Color(1,1,1)
+@export var dark = Color(0,0,0,1)
+@export var light =Color(1,1,1,1)
+
+@onready var dark_tile_shader: ShaderMaterial = ShaderMaterial.new()
+@onready var light_tile_shader: ShaderMaterial = ShaderMaterial.new()
 
 @onready var opponent_shader: ShaderMaterial = ShaderMaterial.new()
 
@@ -22,6 +25,9 @@ var selected_piece_position
 var valid_moves = []
 @onready var selected_shader: ShaderMaterial = ShaderMaterial.new()
 
+var target_position
+var moving: bool
+
 
 
 func _ready() -> void:
@@ -80,10 +86,18 @@ func _process(delta: float) -> void:
 	piece_container.position = translate()
 	
 	#attempt at linear interpolation for smooth movement of pieces#
-	#if selected_piece != null:
-		#var target_position = selected_piece_position*tile_size
-		#if selected_piece.position != target_position:
-			#selected_piece.position = selected_piece.position.lerp(target_position, 5 * delta)
+
+	if moving:
+		if selected_piece.position != selected_piece_position:
+			if selected_piece.position.distance_to(target_position) < 0.1:
+				selected_piece.position = selected_piece_position
+				unselect_piece()
+				moving = false
+			else:  # Snap to exact position
+				selected_piece.position = selected_piece.position.lerp(selected_piece_position, 5 * delta)
+		else:
+			moving = false
+			unselect_piece()
 
 
 func draw_pieces():
@@ -124,7 +138,7 @@ func translate() -> Vector2:
 	#places top left corner at 2/3 of x axis and 1/2 of y axis, then translates to center 
 	return Vector2(screen_size.x * 2 / 3 - board_x_offset, screen_size.y / 2 - board_y_offset)
 
-
+#color rect version
 func draw_board(X, Y):
 	for x in range(X):
 		for y in range(Y):
@@ -143,7 +157,6 @@ func draw_board(X, Y):
 				var screen_size = get_viewport().get_visible_rect().size
 				var board_x_offset = X * tile_size / 2
 				var board_y_offset = Y * tile_size / 2
-				#tile_container.position = placement()
 				
 				var shadow_shader = ShaderMaterial.new()
 				shadow_shader.shader = preload("res://assets/shaders/shadow.gdshader")
@@ -154,9 +167,48 @@ func draw_board(X, Y):
 				
 				shadow.material = shadow_shader
 				shadow_container.add_child(shadow)
-				#shadow_container.position = placement()
 
 
+##textured rect version
+#func draw_board(X, Y):
+	#dark_tile_shader.shader = preload("res://assets/shaders/color.gdshader").duplicate()
+	#dark_tile_shader.set_shader_parameter('r', 0.1)
+	#dark_tile_shader.set_shader_parameter('g', 0.25)
+	#dark_tile_shader.set_shader_parameter('b', 0.6)
+	#
+	#light_tile_shader.shader = preload("res://assets/shaders/color.gdshader").duplicate()
+	#light_tile_shader.set_shader_parameter('r', 0.85)
+	#light_tile_shader.set_shader_parameter('g', 0.85)
+	#light_tile_shader.set_shader_parameter('b', 0.85)
+	#
+	#for x in range(X):
+		#for y in range(Y):
+			#if board[x][y] == '/':
+				#pass
+			#else:
+				#var tile = TextureRect.new()
+				#tile.texture = preload("res://assets/sprites/tile.png")
+				#if (x + y)%2 == 0:
+					#tile.material = light_tile_shader
+				#else:
+					#tile.material = dark_tile_shader
+				#tile.size = Vector2(tile_size, tile_size)
+				#tile.position = Vector2(x * tile_size, y * tile_size)
+				#
+				#tile_container.add_child(tile)
+				#var screen_size = get_viewport().get_visible_rect().size
+				#var board_x_offset = X * tile_size / 2
+				#var board_y_offset = Y * tile_size / 2
+				#
+				#var shadow_shader = ShaderMaterial.new()
+				#shadow_shader.shader = preload("res://assets/shaders/shadow.gdshader")
+				#
+				#var shadow = ColorRect.new()
+				#shadow.size = Vector2(tile_size, tile_size)
+				#shadow.position = Vector2(x * tile_size + 15, y * tile_size + 15)
+				#
+				#shadow.material = shadow_shader
+				#shadow_container.add_child(shadow)
 
 #detects if mouse events occur within the board
 func is_on_board(position : Vector2) -> bool:
@@ -168,32 +220,33 @@ func is_on_board(position : Vector2) -> bool:
 func _input(event):
 	if event is InputEventMouseButton:
 		#handles only mouse clicks
-		if event.pressed:
-			#translate the mouse click position to 'home' coordinates (start at 0,0)
-			var translated_postition = event.position - translate()
-			#if the click is within the board, proceed
-			if is_on_board(translated_postition):
-				#translates mouse position to array index. 
-				#example: (66.5, 99.9) = (1, 1) , (120.0, 12.0) = (2, 0)
-				var mouse_position = Vector2(int(translated_postition.x / tile_size), int(translated_postition.y / tile_size))
-				
-				var x = mouse_position.x
-				var y = mouse_position.y
-				
-				#if mouse click is a left click, proceed
-				if event.button_index == MOUSE_BUTTON_LEFT:
-					#if the tile is a player's piece, select or deselect it
-					if !is_empty(x,y) && !(is_opponent(x,y)):
-						#if there is a currently selected piece that is on the selected tile, deselect that piece
-						if selected_piece!=null:
-							if board[x][y] == board[selected_piece_position.x][selected_piece_position.y]:
-								unselect_piece(x,y)
-						#otherwise, select the piece
+		if !moving:
+			if event.pressed:
+				#translate the mouse click position to 'home' coordinates (start at 0,0)
+				var translated_postition = event.position - translate()
+				#if the click is within the board, proceed
+				if is_on_board(translated_postition):
+					#translates mouse position to array index. 
+					#example: (66.5, 99.9) = (1, 1) , (120.0, 12.0) = (2, 0)
+					var mouse_position = Vector2(int(translated_postition.x / tile_size), int(translated_postition.y / tile_size))
+					
+					var x = mouse_position.x
+					var y = mouse_position.y
+					
+					#if mouse click is a left click, proceed
+					if event.button_index == MOUSE_BUTTON_LEFT:
+						#if the tile is a player's piece, select or deselect it
+						if !is_empty(x,y) && !(is_opponent(x,y)):
+							#if there is a currently selected piece that is on the selected tile, deselect that piece
+							if selected_piece!=null:
+								if board[x][y] == board[selected_piece_position.x][selected_piece_position.y]:
+									unselect_piece()
+							#otherwise, select the piece
+							else:
+								select_piece(x,y)
+						#if the tile is empty or an opponents piece, move the selected piece to that tile
 						else:
-							select_piece(x,y)
-					#if the tile is empty or an opponents piece, move the selected piece to that tile
-					else:
-						move_selected_piece(x,y)
+							move_selected_piece(x,y)
 
 
 func is_opponent(x,y):
@@ -228,7 +281,7 @@ func remove_piece(x,y):
 			break
 			
 func select_piece(x,y):
-	unselect_piece(x,y)
+	unselect_piece()
 	
 	#iterate through the pieces in piece_container, if that piece is at location x,y, select it
 	for child in piece_container.get_children():
@@ -242,7 +295,7 @@ func select_piece(x,y):
 			#highlight the valid moves the selected piece can make
 			highlight_tiles()
 
-func unselect_piece(x,y):
+func unselect_piece():
 	if selected_piece != null:
 		selected_piece.material = null
 		selected_piece = null
@@ -461,13 +514,16 @@ func move_selected_piece(x,y):
 			#update selected_piece's screen coordinate position
 			selected_piece_position = Vector2(x*tile_size, y*tile_size)
 			#
-			selected_piece.position = selected_piece_position
+			#selected_piece.position = selected_piece_position
 			board[x][y] = selected_piece_value
+			
+			target_position = selected_piece_position
 		
-		#clear selection after move
-		selected_piece.material = null
-		selected_piece = null
-		selected_piece_value = null
+		##clear selection after move
+		#selected_piece.material = null
+		#selected_piece = null
+		#selected_piece_value = null
 		remove_highlight()
+		moving = true
 		
 		
-- 
GitLab