extends AspectRatioContainer @onready var button := $TextureButton @onready var preview :=$TextureButton/PreviewContainer/Preview @onready var cost := $TextureButton/Cost @onready var avaibility := $TextureButton/AvaiabilityRect @onready var recharge_timer := $RechargeTimer @onready var forbidden_rect := $TextureButton/Forbidden @onready var locked_rect := $TextureButton/Locked var held_resource : SeedpacketResource var forbidden : bool = false var locked : bool = false var hotbar : bool = false var disabled : bool = false #region Godot methods func _ready() -> void: LevelEventBus.entity_placed.connect(on_entity_placed) LevelEventBus.sun_count_updated.connect(on_sun_count_updated) LevelEventBus.state_changed.connect(on_level_state_changed) func _process(_delta: float) -> void: button.disabled = recharge_timer.time_left > 0 or forbidden or locked or disabled update_contents() #endregion #region Signal methods func on_pressed(): LevelEventBus.packet_selected.emit(held_resource) if LevelData.state == LevelData.LevelStates.Game: LevelEventBus.packet_selected_during_game.emit(held_resource) func on_entity_placed(entity : SeedpacketResource): if entity == held_resource: recharge_timer.start() #endregion func set_resource(to : SeedpacketResource): held_resource = to update_contents() func update_contents(): cost.text = str(held_resource.cost) preview.texture = held_resource.preview avaibility.visible = forbidden or locked or disabled locked_rect.visible = locked forbidden_rect.visible = forbidden func on_sun_count_updated(to : float): if hotbar: disabled = held_resource.cost < to func on_level_state_changed(state : LevelData.LevelStates): match state: LevelData.LevelStates.Game: disabled = held_resource.cost < LevelData.sun_count LevelData.LevelStates.PlantPick: disabled = false _: disabled = true