extends AspectRatioContainer ## Class that allows player to choose SeedpacketResource class_name Seedpacket const PACKED_SCENE := preload("uid://bi4c34ii72y46") @onready var button : TextureButton = $TextureButton @onready var cost_label : Label = $TextureButton/Cost @onready var preview_texture : TextureRect = $TextureButton/PreviewContainer/Preview @onready var availability : ColorRect = $TextureButton/Availability @onready var forbidden : TextureRect = $TextureButton/Forbidden @onready var locked : TextureRect = $TextureButton/Locked @onready var recharge_timer : Timer = $RechargeTimer var held_resource : SeedpacketResource var handler : SeedpacketHandler #region Virtuals func _ready() -> void: focus_exited.connect(on_focus_exited) LevelEventBus.state_changed.connect(on_level_state_changed) func _process(_delta: float) -> void: button.disabled = recharge_timer.time_left > 0 or handler.is_avaiable() == false #endregion func set_resource(to : SeedpacketResource): held_resource = to recharge_timer.wait_time = held_resource.recharge_time func set_handler(to : SeedpacketHandler): if handler: handler.exit() handler = to update_contents() func update_contents(): cost_label.text = str(int(held_resource.cost)) preview_texture.texture = held_resource.preview availability.visible = handler.is_avaiable() == false handler.on_updated_contents() #region Signal recievers func on_pressed(): LevelEventBus.packet_selected.emit(held_resource) if LevelEventBus.packet_placed.is_connected(on_packet_placed) == false: LevelEventBus.packet_placed.connect(on_packet_placed) focus_exited.connect(disconnect_placement) func on_packet_placed(packet : SeedpacketResource): if held_resource != packet: return recharge_timer.start() disconnect_placement() func disconnect_placement(): LevelEventBus.packet_placed.disconnect(on_packet_placed) focus_exited.disconnect(disconnect_placement) func on_focus_exited(): LevelEventBus.packet_deselected.emit(held_resource) func on_level_state_changed(state : LevelData.LevelStates): if state == LevelData.LevelStates.Game: # Recharge with set wait time recharge_timer.start(held_resource.recharge_time * held_resource.initial_recharge_percent) recharge_timer.wait_time = held_resource.recharge_time #endregion