ChessBuilder/Systems/PieceContainer.gd

56 lines
No EOL
1.5 KiB
GDScript

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.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