extends TextureButton @onready var hex = $Hex @onready var tile_count_label = $Hex/TileCountLabel @onready var insect_icon = $Hex/InsectIcon @export var insect_resource: TileResource = preload("res://Tile/Prefabs/Bee.tres") const HEX_BLACK = preload("res://InsectTiles/Assets/UI/hex_black.svg") const HEX_WHITE = preload("res://InsectTiles/Assets/UI/hex_white.svg") @export var is_bee: bool = false @export var is_black: bool = false var tile_count: int = 1 var deactivated: bool = false var selected: bool = false var hovered: bool = false func disable() -> void: deactivated = true var tween = get_tree().create_tween() tween.tween_property(self, "modulate", Color.DIM_GRAY, 0.15) func enable() -> void: deactivated = false disabled = false var tween = get_tree().create_tween() tween.tween_property(self, "modulate", Color.WHITE, 0.15) func _on_placement_cancelled() -> void: if selected: tile_count += 1 tile_count_label.text = str(tile_count) selected = false if tile_count > 0: if not hovered: _on_mouse_exited() enable() return func _on_insect_placed(resource: TileResource, is_black: bool, pos: HexGrid.CubeCoordinates) -> void: if selected: selected = false if not hovered: _on_mouse_exited() if tile_count > 0: if not hovered: _on_mouse_exited() enable() return # Called when the node enters the scene tree for the first time. func _ready(): GameEvents.insect_selected.connect(_on_insect_selected) GameEvents.insect_placement_cancelled.connect(_on_placement_cancelled) GameEvents.insect_placed.connect(_on_insect_placed) tile_count_label.text = str(tile_count) insect_icon.texture = insect_resource.ui_texture if is_black: hex.texture = HEX_BLACK func _on_insect_selected(_resource: TileResource, _is_black: bool) -> void: disabled = true if _resource == insect_resource and _is_black == is_black: selected = true hover() else: unhover() disable() func hover() -> void: hovered = true var tween = get_tree().create_tween() tween.tween_property(hex, "position", Vector2(0, -16), 0.1).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_SPRING) func unhover() -> void: hovered = false var tween = get_tree().create_tween() tween.tween_property(hex, "position", Vector2(0, 0), 0.25).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_SPRING) func _on_mouse_entered(): if deactivated: return hover() func _on_mouse_exited(): hovered = false if selected: return if deactivated: return unhover() func _on_pressed(): if deactivated: return if selected: return if tile_count <= 0: return GameEvents.insect_selected.emit(insect_resource, is_black) tile_count -= 1 release_focus() tile_count_label.text = str(tile_count) func _input(event): if Input.is_action_just_pressed("ui_accept"): release_focus() return