chess-game/Scene/Pieces/piece.gd
2026-03-06 20:12:38 +01:00

77 lines
1.9 KiB
GDScript
Executable file

@tool
class_name Piece
extends Node3D
@export var piece_res : PieceRes
var is_moving : bool = false
var target : Vector2
var start_pos :Vector3
var start_coord: Vector2i
var mesh_instance_3d: MeshInstance3D
var possible_movements: Array[Vector2i]
#@export var color : StandardMaterial3D = preload("uid://brrbuo0i0e5bh") as StandardMaterial3D:
#set(material):
#color = material
#if Engine.is_editor_hint():
#mesh.material_override = color
#get:
#return color
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
for rule in piece_res.rules:
rule.ready(self)
print(piece_res.material)
var mesh_instance = MeshInstance3D.new()
mesh_instance.mesh = piece_res.mesh
mesh_instance.mesh.surface_set_material(0,piece_res.material)
add_child(mesh_instance)
mesh_instance_3d = mesh_instance
start_coord = to_coord()
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
if is_moving:
#move to target
var x_diff = 0
var z_diff = 0
if target.x < start_pos.x:
x_diff = -(start_pos.x - target.x)
else:
x_diff = (target.x - start_pos.x)
if target.y < start_pos.z:
z_diff = -(start_pos.z - target.y)
else:
z_diff = (target.y - start_pos.z)
global_translate(Vector3(x_diff, 0, z_diff).normalized() * delta * piece_res.movement_speed)
if abs(position.x - target.x) < 0.1:
position.x = target.x
if abs(target.y - position.z) < 0.1:
position.z = target.y
if position.z == target.y and position.x == target.x:
is_moving = false
pass
pass
func move_to(new_target: Vector2):
for moverule_script in piece_res.rules:
moverule_script.before_move(self)
#if piece_res.piece_type == PieceRes.PieceType.PAWN:
#possible_movements = [Vector2i(0,1)]
target = new_target * 2
start_pos = position
is_moving = true
pass
func to_coord() -> Vector2i:
return Vector2i(position.x / 2, position.z / 2)
func die():
queue_free()
pass