49 lines
No EOL
1.3 KiB
GDScript
49 lines
No EOL
1.3 KiB
GDScript
class_name PieceContainer extends Button
|
|
|
|
var piece: Pawn = null
|
|
@onready var overlays: Node = $Overlays
|
|
@onready var effects: Node = $Effects
|
|
|
|
func _init() -> void:
|
|
# Create containers for different types of children
|
|
var overlays_node = Node.new()
|
|
overlays_node.name = "Overlays"
|
|
add_child(overlays_node)
|
|
|
|
var effects_node = Node.new()
|
|
effects_node.name = "Effects"
|
|
add_child(effects_node)
|
|
|
|
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:
|
|
overlays.add_child(overlay)
|
|
|
|
func remove_overlay(overlay_name: String) -> void:
|
|
var overlay = overlays.get_node_or_null(overlay_name)
|
|
if overlay:
|
|
overlay.queue_free()
|
|
|
|
func get_overlay(overlay_name: String) -> Node:
|
|
return overlays.get_node_or_null(overlay_name)
|
|
|
|
func has_piece() -> bool:
|
|
return piece != null |