class_name CharacterCard extends Control ## One character in the character select popup: its picture and name. Clicking it picks ## the character. ## Emitted with the character's picture when the card is clicked. signal new_character_selected(img_texture: ImageTexture) @onready var panel: Panel = $Panel @onready var character_image: TextureRect = %CharacterTextureRect @onready var character_name_label: Label = %CharacterName func _input(event: InputEvent) -> void: if visible && Settings.character_select_open: if event is InputEventMouseButton && event.is_pressed() \ && event.get_button_index() == MOUSE_BUTTON_LEFT: var local_event: InputEvent = make_input_local(event) if Rect2(Vector2(0, 0), panel.size).has_point(local_event.position): GameLog.debug(character_name_label.text) new_character_selected.emit(character_image.texture) ## Shows [param character_name] and fetches its picture from the server. func set_character_name(character_name: String) -> void: panel.size = Vector2(240, 145) character_name_label.text = character_name.split(".")[0] character_name_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER var image_fetched: Callable = func image_fetched(image: PackedByteArray) -> void: var img: Image = Image.new() var err: Error = img.load_png_from_buffer(image) if err != OK: GameLog.debug("Character image is not a PNG, trying JPG: ", error_string(err)) var err2: Error = img.load_jpg_from_buffer(image) if err2 != OK: GameLog.warning("Could not load the image for ", character_name, ": ", error_string(err2)) var new_image: ImageTexture = ImageTexture.new() new_image.set_image(img) character_image.custom_minimum_size = Vector2(200, 100) character_image.size = Vector2(200, 100) character_image.size_flags_horizontal = Control.SIZE_SHRINK_CENTER character_image.size_flags_vertical = Control.SIZE_SHRINK_CENTER character_image.expand_mode = TextureRect.EXPAND_FIT_WIDTH_PROPORTIONAL character_image.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED character_image.texture = new_image MusicServerClient.fetch_character_image(character_name, image_fetched)