class_name PieceContainer extends Button var piece: Pawn = null var effects: Node # Keep effects as a sub-node var overlay_nodes: Array[Node] = [] func _init() -> void: # Setup effects node effects = Node.new() effects.name = "Effects" add_child(effects) func set_piece(new_piece: Pawn) -> void: remove_piece() # Clean up any existing piece piece = new_piece if new_piece != null: add_child(new_piece) new_piece.position = Vector2(25, 25) func get_piece() -> Pawn: return piece func remove_piece(keep_piece: bool = false) -> Pawn: var old_piece = piece if piece != null: remove_child(piece) if !keep_piece: piece.queue_free() old_piece = null piece = null return old_piece func add_overlay(overlay: Node) -> void: if overlay is ColorRect: overlay.size = size overlay.position = Vector2.ZERO overlay.mouse_filter = Control.MOUSE_FILTER_IGNORE add_child(overlay) overlay_nodes.append(overlay) func remove_overlay(overlay_name: String) -> void: for overlay in overlay_nodes: if overlay != null and overlay.name == overlay_name: remove_child(overlay) overlay_nodes.erase(overlay) overlay.queue_free() break func get_overlay(overlay_name: String) -> Node: for overlay in overlay_nodes: if overlay.name == overlay_name: return overlay return null func has_piece() -> bool: return piece != null