Skip to content
Snippets Groups Projects
Commit 6cab6f05 authored by noeld's avatar noeld
Browse files

implemented linear interpolation to piece movement

parent c90e55f0
No related branches found
No related tags found
No related merge requests found
ea4bc82a6ad023ab7ee23ee620429895 ea4bc82a6ad023ab7ee23ee620429895
::res://::1738185073 ::res://::1738186081
::res://assets/::1738184945 icon.svg::CompressedTexture2D::6378281210119878262::1738185626::1738186049::1::::<><>::
::res://assets/noise/::1738185019 README.md::TextFile::-1::1738185626::0::1::::<><>::
noise2.tres::NoiseTexture2D::5054739835828921764::1738185019::0::1::::<><>:: ::res://assets/::1738185626
noise3.tres::NoiseTexture2D::906885015046579772::1738185019::0::1::::<><>:: ::res://assets/noise/::1738186081
noise.tres::NoiseTexture2D::1693764769519573005::1738185019::0::1::::<><>:: noise2.tres::NoiseTexture2D::5054739835828921764::1738186081::0::1::::<><>::
::res://assets/shaders/::1738185054 noise3.tres::NoiseTexture2D::906885015046579772::1738186081::0::1::::<><>::
bg.gdshader::Shader::-1::1738185054::0::1::::<><>:: noise.tres::NoiseTexture2D::1693764769519573005::1738186081::0::1::::<><>::
color.gdshader::Shader::-1::1738185054::0::1::::<><>:: ::res://assets/shaders/::1738187247
shadow.gdshader::Shader::-1::1738185054::0::1::::<><>:: bg.gdshader::Shader::-1::1738187247::0::1::::<><>::
::res://assets/sprites/::1738184945 color.gdshader::Shader::-1::1738187247::0::1::::<><>::
bishop.png::CompressedTexture2D::4631301773944929250::1738107147::1738179312::1::::<><>:: shadow.gdshader::Shader::-1::1738187247::0::1::::<><>::
knight.png::CompressedTexture2D::3545640967717948854::1738126203::1738179312::1::::<><>:: ::res://assets/sprites/::1738186897
pawn.png::CompressedTexture2D::1338760335342038528::1738109355::1738179312::1::::<><>:: bishop.png::CompressedTexture2D::4631301773944929250::1738185626::1738186049::1::::<><>::
rook.png::CompressedTexture2D::6790909281007670776::1738106894::1738179312::1::::<><>:: knight.png::CompressedTexture2D::3545640967717948854::1738185626::1738186049::1::::<><>::
::res://scenes/::1738185052 pawn.png::CompressedTexture2D::1338760335342038528::1738185626::1738186049::1::::<><>::
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 rook.png::CompressedTexture2D::6790909281007670776::1738185626::1738186049::1::::<><>::
::res://scripts/::1738184945 tile.png::CompressedTexture2D::8704336058451696509::1738187423::1738187427::1::::<><>::
game.gd::GDScript::-1::1738184821::0::1::::game<>Node<>:: ::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<>::
...@@ -5,3 +5,4 @@ res://assets/shaders/bg.gdshader ...@@ -5,3 +5,4 @@ res://assets/shaders/bg.gdshader
res://assets/noise/noise.tres res://assets/noise/noise.tres
res://assets/noise/noise2.tres res://assets/noise/noise2.tres
res://assets/noise/noise3.tres res://assets/noise/noise3.tres
res://scripts/game.gd
...@@ -19,7 +19,7 @@ scenes=["res://scenes/game.tscn", "res://scenes/chess_board.tscn", "res://chess_ ...@@ -19,7 +19,7 @@ scenes=["res://scenes/game.tscn", "res://scenes/chess_board.tscn", "res://chess_
[color_picker] [color_picker]
picker_shape=3 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 color_mode=2
[shader_setup] [shader_setup]
......
No preview for this file type
assets/sprites/tile.png

277 B

[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
...@@ -11,7 +11,7 @@ config_version=5 ...@@ -11,7 +11,7 @@ config_version=5
[application] [application]
config/name="Go Save The King" config/name="Go Save The King"
run/main_scene="res://scenes/game.tscn"
config/features=PackedStringArray("4.3", "GL Compatibility") config/features=PackedStringArray("4.3", "GL Compatibility")
config/icon="res://icon.svg" config/icon="res://icon.svg"
......
...@@ -21,8 +21,8 @@ shader_parameter/noise3 = ExtResource("5_hkjcj") ...@@ -21,8 +21,8 @@ shader_parameter/noise3 = ExtResource("5_hkjcj")
script = ExtResource("1_cbchi") script = ExtResource("1_cbchi")
X = 8 X = 8
Y = 8 Y = 8
dark = Color(0.055, 0.298, 0.496, 1) dark = Color(0.1, 0.25, 0.6, 1)
light = Color(0.82606, 0.82606, 0.82606, 1) light = Color(0.826, 0.826, 0.826, 1)
[node name="ShadowContainer" type="Node2D" parent="."] [node name="ShadowContainer" type="Node2D" parent="."]
......
...@@ -4,8 +4,11 @@ class_name game ...@@ -4,8 +4,11 @@ class_name game
@export var X : int @export var X : int
@export var Y : int @export var Y : int
@export var tile_size = 64 @export var tile_size = 64
@export var dark = Color(0,0,0) @export var dark = Color(0,0,0,1)
@export var light =Color(1,1,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() @onready var opponent_shader: ShaderMaterial = ShaderMaterial.new()
...@@ -22,6 +25,9 @@ var selected_piece_position ...@@ -22,6 +25,9 @@ var selected_piece_position
var valid_moves = [] var valid_moves = []
@onready var selected_shader: ShaderMaterial = ShaderMaterial.new() @onready var selected_shader: ShaderMaterial = ShaderMaterial.new()
var target_position
var moving: bool
func _ready() -> void: func _ready() -> void:
...@@ -80,10 +86,18 @@ func _process(delta: float) -> void: ...@@ -80,10 +86,18 @@ func _process(delta: float) -> void:
piece_container.position = translate() piece_container.position = translate()
#attempt at linear interpolation for smooth movement of pieces# #attempt at linear interpolation for smooth movement of pieces#
#if selected_piece != null:
#var target_position = selected_piece_position*tile_size if moving:
#if selected_piece.position != target_position: if selected_piece.position != selected_piece_position:
#selected_piece.position = selected_piece.position.lerp(target_position, 5 * delta) 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(): func draw_pieces():
...@@ -124,7 +138,7 @@ func translate() -> Vector2: ...@@ -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 #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) 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): func draw_board(X, Y):
for x in range(X): for x in range(X):
for y in range(Y): for y in range(Y):
...@@ -143,7 +157,6 @@ func draw_board(X, Y): ...@@ -143,7 +157,6 @@ func draw_board(X, Y):
var screen_size = get_viewport().get_visible_rect().size var screen_size = get_viewport().get_visible_rect().size
var board_x_offset = X * tile_size / 2 var board_x_offset = X * tile_size / 2
var board_y_offset = Y * tile_size / 2 var board_y_offset = Y * tile_size / 2
#tile_container.position = placement()
var shadow_shader = ShaderMaterial.new() var shadow_shader = ShaderMaterial.new()
shadow_shader.shader = preload("res://assets/shaders/shadow.gdshader") shadow_shader.shader = preload("res://assets/shaders/shadow.gdshader")
...@@ -154,9 +167,48 @@ func draw_board(X, Y): ...@@ -154,9 +167,48 @@ func draw_board(X, Y):
shadow.material = shadow_shader shadow.material = shadow_shader
shadow_container.add_child(shadow) 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 #detects if mouse events occur within the board
func is_on_board(position : Vector2) -> bool: func is_on_board(position : Vector2) -> bool:
...@@ -168,32 +220,33 @@ func is_on_board(position : Vector2) -> bool: ...@@ -168,32 +220,33 @@ func is_on_board(position : Vector2) -> bool:
func _input(event): func _input(event):
if event is InputEventMouseButton: if event is InputEventMouseButton:
#handles only mouse clicks #handles only mouse clicks
if event.pressed: if !moving:
#translate the mouse click position to 'home' coordinates (start at 0,0) if event.pressed:
var translated_postition = event.position - translate() #translate the mouse click position to 'home' coordinates (start at 0,0)
#if the click is within the board, proceed var translated_postition = event.position - translate()
if is_on_board(translated_postition): #if the click is within the board, proceed
#translates mouse position to array index. if is_on_board(translated_postition):
#example: (66.5, 99.9) = (1, 1) , (120.0, 12.0) = (2, 0) #translates mouse position to array index.
var mouse_position = Vector2(int(translated_postition.x / tile_size), int(translated_postition.y / tile_size)) #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 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 mouse click is a left click, proceed
#if the tile is a player's piece, select or deselect it if event.button_index == MOUSE_BUTTON_LEFT:
if !is_empty(x,y) && !(is_opponent(x,y)): #if the tile is a player's piece, select or deselect it
#if there is a currently selected piece that is on the selected tile, deselect that piece if !is_empty(x,y) && !(is_opponent(x,y)):
if selected_piece!=null: #if there is a currently selected piece that is on the selected tile, deselect that piece
if board[x][y] == board[selected_piece_position.x][selected_piece_position.y]: if selected_piece!=null:
unselect_piece(x,y) if board[x][y] == board[selected_piece_position.x][selected_piece_position.y]:
#otherwise, select the piece 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: else:
select_piece(x,y) move_selected_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)
func is_opponent(x,y): func is_opponent(x,y):
...@@ -228,7 +281,7 @@ func remove_piece(x,y): ...@@ -228,7 +281,7 @@ func remove_piece(x,y):
break break
func select_piece(x,y): 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 #iterate through the pieces in piece_container, if that piece is at location x,y, select it
for child in piece_container.get_children(): for child in piece_container.get_children():
...@@ -242,7 +295,7 @@ func select_piece(x,y): ...@@ -242,7 +295,7 @@ func select_piece(x,y):
#highlight the valid moves the selected piece can make #highlight the valid moves the selected piece can make
highlight_tiles() highlight_tiles()
func unselect_piece(x,y): func unselect_piece():
if selected_piece != null: if selected_piece != null:
selected_piece.material = null selected_piece.material = null
selected_piece = null selected_piece = null
...@@ -461,13 +514,16 @@ func move_selected_piece(x,y): ...@@ -461,13 +514,16 @@ func move_selected_piece(x,y):
#update selected_piece's screen coordinate position #update selected_piece's screen coordinate position
selected_piece_position = Vector2(x*tile_size, y*tile_size) 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 board[x][y] = selected_piece_value
target_position = selected_piece_position
#clear selection after move ##clear selection after move
selected_piece.material = null #selected_piece.material = null
selected_piece = null #selected_piece = null
selected_piece_value = null #selected_piece_value = null
remove_highlight() remove_highlight()
moving = true
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment