@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