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