From fae45c25916f708f6cdb180bfd6286270d541d1b Mon Sep 17 00:00:00 2001 From: noeld <zkw603@usask.ca> Date: Wed, 29 Jan 2025 21:04:51 -0600 Subject: [PATCH] fixed lerping, added particle effect --- .godot/editor/create_recent.Node | 1 + .godot/editor/editor_layout.cfg | 8 +- .godot/editor/filesystem_cache8 | 21 ++-- .godot/editor/filesystem_update4 | 2 + ...state-c2a7af834e91ff64325daddf58e45dc0.cfg | 4 +- ...lding-c2a7af834e91ff64325daddf58e45dc0.cfg | 2 +- .godot/editor/project_metadata.cfg | 2 +- .godot/editor/script_editor_cache.cfg | 6 +- .godot/uid_cache.bin | Bin 398 -> 469 bytes scenes/explosion.tscn | 17 +++ scenes/game.tscn | 18 +++ scripts/game.gd | 111 ++++++++++-------- 12 files changed, 119 insertions(+), 73 deletions(-) create mode 100644 scenes/explosion.tscn diff --git a/.godot/editor/create_recent.Node b/.godot/editor/create_recent.Node index c10194c..42bcef4 100644 --- a/.godot/editor/create_recent.Node +++ b/.godot/editor/create_recent.Node @@ -1,3 +1,4 @@ +CPUParticles2D Node Control ColorRect diff --git a/.godot/editor/editor_layout.cfg b/.godot/editor/editor_layout.cfg index 25a1db8..f6013bd 100644 --- a/.godot/editor/editor_layout.cfg +++ b/.godot/editor/editor_layout.cfg @@ -10,14 +10,14 @@ dock_split_2=0 dock_split_3=0 dock_hsplit_1=0 dock_hsplit_2=270 -dock_hsplit_3=-270 +dock_hsplit_3=-380 dock_hsplit_4=0 dock_filesystem_h_split_offset=240 dock_filesystem_v_split_offset=0 dock_filesystem_display_mode=2 dock_filesystem_file_sort=0 dock_filesystem_file_list_display_mode=1 -dock_filesystem_selected_paths=PackedStringArray("res://") +dock_filesystem_selected_paths=PackedStringArray("res://scenes/") dock_filesystem_uncollapsed_paths=PackedStringArray("Favorites", "res://", "res://assets/") dock_3="Scene,Import" dock_4="FileSystem" @@ -25,7 +25,7 @@ dock_5="Inspector,Node,History" [EditorNode] -open_scenes=PackedStringArray("res://scenes/game.tscn") +open_scenes=PackedStringArray("res://scenes/game.tscn", "res://scenes/explosion.tscn") current_scene="res://scenes/game.tscn" center_split_offset=0 selected_default_debugger_tab_idx=0 @@ -39,7 +39,7 @@ selected_script="res://scripts/game.gd" open_help=[] script_split_offset=70 list_split_offset=0 -zoom_factor=1.07143 +zoom_factor=1.0 [ShaderEditor] diff --git a/.godot/editor/filesystem_cache8 b/.godot/editor/filesystem_cache8 index ffe9807..caf51a3 100644 --- a/.godot/editor/filesystem_cache8 +++ b/.godot/editor/filesystem_cache8 @@ -1,23 +1,24 @@ ea4bc82a6ad023ab7ee23ee620429895 -::res://::1738186081 +::res://::1738190822 icon.svg::CompressedTexture2D::6378281210119878262::1738185626::1738186049::1::::<><>:: README.md::TextFile::-1::1738185626::0::1::::<><>:: +explosion.tscn::PackedScene::69466253159940830::1738190822::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 +::res://assets/shaders/::1738190822 +bg.gdshader::Shader::-1::1738190822::0::1::::<><>:: +color.gdshader::Shader::-1::1738190822::0::1::::<><>:: +shadow.gdshader::Shader::-1::1738190822::0::1::::<><>:: +::res://assets/sprites/::1738187427 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<>:: +::res://scenes/::1738190331 +game.tscn::PackedScene::8577524005707705072::1738190331::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/::1738189838 +game.gd::GDScript::-1::1738189838::0::1::::game<>Node<>:: diff --git a/.godot/editor/filesystem_update4 b/.godot/editor/filesystem_update4 index f65008d..1db6d14 100644 --- a/.godot/editor/filesystem_update4 +++ b/.godot/editor/filesystem_update4 @@ -6,3 +6,5 @@ res://assets/noise/noise.tres res://assets/noise/noise2.tres res://assets/noise/noise3.tres res://scripts/game.gd +res://explosion.tscn +res://scenes/explosion.tscn diff --git a/.godot/editor/game.tscn-editstate-c2a7af834e91ff64325daddf58e45dc0.cfg b/.godot/editor/game.tscn-editstate-c2a7af834e91ff64325daddf58e45dc0.cfg index 0f74bc0..c6fde18 100644 --- a/.godot/editor/game.tscn-editstate-c2a7af834e91ff64325daddf58e45dc0.cfg +++ b/.godot/editor/game.tscn-editstate-c2a7af834e91ff64325daddf58e45dc0.cfg @@ -8,7 +8,7 @@ Anim={ "grid_snap_active": false, "grid_step": Vector2(8, 8), "grid_visibility": 1, -"ofs": Vector2(-671.966, -320.708), +"ofs": Vector2(-1180.52, -464.792), "primary_grid_step": Vector2i(8, 8), "show_group_gizmos": true, "show_guides": true, @@ -34,7 +34,7 @@ Anim={ "snap_rotation_step": 0.261799, "snap_scale": false, "snap_scale_step": 0.1, -"zoom": 0.561231 +"zoom": 0.529732 } 3D={ "fov": 70.01, diff --git a/.godot/editor/game.tscn-folding-c2a7af834e91ff64325daddf58e45dc0.cfg b/.godot/editor/game.tscn-folding-c2a7af834e91ff64325daddf58e45dc0.cfg index 205f7ca..892d185 100644 --- a/.godot/editor/game.tscn-folding-c2a7af834e91ff64325daddf58e45dc0.cfg +++ b/.godot/editor/game.tscn-folding-c2a7af834e91ff64325daddf58e45dc0.cfg @@ -1,5 +1,5 @@ [folding] -node_unfolds=[NodePath("."), PackedStringArray("opponent_shader", "Editor Description"), NodePath("ShadowContainer"), PackedStringArray("Ordering"), NodePath("TileContainer"), PackedStringArray("Transform", "Ordering"), NodePath("PieceContainer"), PackedStringArray("Ordering", "Process", "Texture"), NodePath("Background"), PackedStringArray("Layout", "material", "Ordering", "Layout/Transform", "Layout/Grow Direction", "Layout/Container Sizing", "Layout/Anchor Points", "Layout/Anchor Offsets", "Texture")] +node_unfolds=[NodePath("."), PackedStringArray("opponent_shader", "Editor Description"), NodePath("ShadowContainer"), PackedStringArray("Ordering"), NodePath("TileContainer"), PackedStringArray("Transform", "Ordering"), NodePath("PieceContainer"), PackedStringArray("Ordering", "Process", "Texture"), NodePath("Background"), PackedStringArray("Layout", "material", "Ordering", "Layout/Transform", "Layout/Grow Direction", "Layout/Container Sizing", "Layout/Anchor Points", "Layout/Anchor Offsets", "Texture"), NodePath("Explosion"), PackedStringArray("Ordering", "Transform", "Scale", "Time")] resource_unfolds=["res://scenes/game.tscn::ShaderMaterial_gdbwp", PackedStringArray("Shader Parameters", "Resource")] nodes_folded=[] diff --git a/.godot/editor/project_metadata.cfg b/.godot/editor/project_metadata.cfg index a5f2614..7b43e08 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.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) +recent_presets=PackedColorArray(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, 0, 0, 0, 1) color_mode=2 [shader_setup] diff --git a/.godot/editor/script_editor_cache.cfg b/.godot/editor/script_editor_cache.cfg index 575a982..3afe2fc 100644 --- a/.godot/editor/script_editor_cache.cfg +++ b/.godot/editor/script_editor_cache.cfg @@ -3,10 +3,10 @@ state={ "bookmarks": PackedInt32Array(), "breakpoints": PackedInt32Array(), -"column": 25, +"column": 27, "folded_lines": Array[int]([]), -"h_scroll_position": 139, -"row": 75, +"h_scroll_position": 0, +"row": 99, "scroll_position": 75.0, "selection": false, "syntax_highlighter": "GDScript" diff --git a/.godot/uid_cache.bin b/.godot/uid_cache.bin index e90b294fb09102a059760bd16b024bb1e29d38f5..9c0b92ff71f5adcc7c2d531e6b6e658ef8ad0939 100644 GIT binary patch delta 82 zcmeBUzRJwVvyriv(f!_`%6x;<-xx#~7#NCDi>>taQ!5H`@{2R`^YluJlk;Hm(s23W L<kY;>Vl-s{#*`i* delta 10 Rcmcc0+{etwwUM!x5daYu0<{1D diff --git a/scenes/explosion.tscn b/scenes/explosion.tscn new file mode 100644 index 0000000..219401f --- /dev/null +++ b/scenes/explosion.tscn @@ -0,0 +1,17 @@ +[gd_scene format=3 uid="uid://8wdmqxipuyg"] + +[node name="Explosion" type="Node2D"] + +[node name="CPUParticles2D" type="CPUParticles2D" parent="."] +emitting = false +amount = 40 +lifetime = 5.0 +one_shot = true +speed_scale = 4.59 +explosiveness = 1.0 +emission_shape = 3 +emission_rect_extents = Vector2(1, 1) +gravity = Vector2(0, 0) +radial_accel_min = 29.85 +radial_accel_max = 70.25 +color = Color(0, 0, 0, 1) diff --git a/scenes/game.tscn b/scenes/game.tscn index 4882d47..50acfb4 100644 --- a/scenes/game.tscn +++ b/scenes/game.tscn @@ -41,3 +41,21 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 + +[node name="Explosion" type="CPUParticles2D" parent="."] +z_index = 1 +emitting = false +amount = 40 +lifetime = 4.0 +one_shot = true +speed_scale = 5.0 +explosiveness = 1.0 +lifetime_randomness = 1.0 +emission_shape = 3 +emission_rect_extents = Vector2(1, 1) +gravity = Vector2(0, 0) +radial_accel_min = 29.85 +radial_accel_max = 70.25 +scale_amount_min = 2.0 +scale_amount_max = 3.0 +color = Color(0, 0, 0, 1) diff --git a/scripts/game.gd b/scripts/game.gd index 2ec2bfa..a8fead8 100644 --- a/scripts/game.gd +++ b/scripts/game.gd @@ -28,6 +28,7 @@ var valid_moves = [] var target_position var moving: bool +@onready var explosion_effect = $Explosion func _ready() -> void: @@ -87,14 +88,18 @@ func _process(delta: float) -> void: #attempt at linear interpolation for smooth movement of pieces# + #lerp for smooth movement of pieces if moving: + #if piece is not at target position, linearly interpolate to target if selected_piece.position != selected_piece_position: + #if within threshold, snap to position to avoid floating point error 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) + # Snap to exact position + else: + selected_piece.position = selected_piece.position.lerp(selected_piece_position, 10 * delta) else: moving = false unselect_piece() @@ -168,47 +173,46 @@ func draw_board(X, Y): shadow.material = shadow_shader shadow_container.add_child(shadow) - -##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) +#textured rect version +func draw_board_texture_rect(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: @@ -276,10 +280,14 @@ func remove_piece(x,y): for child in piece_container.get_children(): #translate x,y index values to screen coordinates if child.position == Vector2(x*tile_size, y*tile_size): + + explosion_effect.position = child.position + translate() + Vector2(tile_size/2, tile_size/2) + explosion_effect.restart() piece_container.remove_child(child) child.queue_free() break - + + func select_piece(x,y): unselect_piece() @@ -509,21 +517,20 @@ func move_selected_piece(x,y): #if tile has opponent piece, remove piece if is_opponent(x,y): remove_piece(x,y) + #clear the selected_piece's previous position board[selected_piece_position.x][selected_piece_position.y] = '0' #update selected_piece's screen coordinate position selected_piece_position = Vector2(x*tile_size, y*tile_size) - # - #selected_piece.position = selected_piece_position board[x][y] = selected_piece_value target_position = selected_piece_position + moving = true + + else: + unselect_piece() + + remove_highlight() - ##clear selection after move - #selected_piece.material = null - #selected_piece = null - #selected_piece_value = null - remove_highlight() - moving = true -- GitLab