extends TextureButton class_name InsectButton @onready var hex = $Hex @onready var tile_count_label = $Hex/TileCountLabel @onready var insect_icon = $Hex/InsectIcon var BEE = load("res://Tile/Prefabs/Bee.tres") @export var insect_resource: TileResource = BEE 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_black: bool = false var disable_amount_display: bool = false var tile_count: int = 1 var selected: bool = false var hovered: bool = false var deactivated: bool = false func update_color(_is_black: bool) -> void: is_black = _is_black if is_black: hex.texture = HEX_BLACK else: hex.texture = HEX_WHITE update_tile_count_display() insect_icon.texture = insect_resource.ui_texture if is_black != GameData.is_player_black and not GameData.debug: disabled = true return func is_empty() -> bool: return tile_count <= 0 func update_tile_count_display() -> void: tile_count_label.text = str(tile_count) if is_empty(): disable() func decrement_tile_count() -> void: tile_count -= 1 update_tile_count_display() func disable() -> void: disabled = true deactivated = true var tween = get_tree().create_tween() tween.tween_property(self, "modulate", Color.DIM_GRAY, 0.15) func enable() -> void: disabled = false deactivated = false var tween = get_tree().create_tween() tween.tween_property(self, "modulate", Color.WHITE, 0.15) func _on_placement_cancelled() -> void: refresh_state() func _on_insect_placed(resource: TileResource, _is_black: bool, pos: Vector4i) -> void: refresh_state() if insect_resource == resource and _is_black == is_black: decrement_tile_count() func refresh_state() -> void: selected = false if not is_empty(): enable() if hovered and not is_empty(): hover() else: unhover() # Called when the node enters the scene tree for the first time. func _ready() -> void: update_color(is_black) if disable_amount_display: $Hex/TileCountLabel.visible = false GameEvents.insect_selected.connect(_on_insect_selected) GameEvents.insect_placement_cancelled.connect(_on_placement_cancelled) GameEvents.insect_placed.connect(_on_insect_placed) GameEvents.insect_tile_selected.connect(_on_insect_tile_selected) GameEvents.insect_tile_moved.connect(_on_insect_tile_moved) GameEvents.insect_tile_deselected.connect(_on_insect_tile_deselected) func _on_insect_tile_deselected(tile: InsectTile) -> void: refresh_state() func _on_insect_tile_selected(tile: InsectTile) -> void: disable() func _on_insect_tile_moved(tile: InsectTile, to: Vector4i) -> void: refresh_state() func _on_insect_selected(button: InsectButton, _is_black: bool) -> void: if button != self: disable() func hover() -> void: if GameData.is_player_black != is_black and not GameData.debug: return 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: if GameData.is_player_black != is_black and not GameData.debug: return 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(): hovered = true if not deactivated: hover() func _on_mouse_exited(): hovered = false if not selected: unhover() func _on_pressed(): if is_empty(): return if GameData.is_player_black != is_black and not GameData.debug: return selected = true GameEvents.insect_selected.emit(self, is_black) release_focus() func _input(event): if Input.is_action_just_pressed("ui_accept"): release_focus() return