extends Control class_name PromptManager @export var multi_choice_button_scene: PackedScene = preload("res://objects/multi_choice_button.tscn") @export var prompt_text_format: String = "[center]%s[/center]" var current_prompt: Prompt var player: Player: set = set_player func _ready() -> void: hide_everything() func hide_everything(): # hide all children for child in get_children(): child.visible = false func display_prompt(prompt: Prompt): if prompt == null: print("Displaying no prompt") visible = false return print("Displaying prompt \"%s\"" % prompt.text) current_prompt = prompt visible = true hide_everything() $PromptLabel.text = prompt_text_format % prompt.format_text() $PromptLabel.visible = true # clear all prompt buttons for button in $MultichoiceButtons.get_children(): $MultichoiceButtons.remove_child(button) button.queue_free() if prompt.type == Prompt.PromptType.LONG_TEXT: $LongTextEdit.visible = true $LongTextEdit.text = "" $SubmitButton.visible = true elif prompt.type == Prompt.PromptType.TEXT: $LineEdit.visible = true $LineEdit.text = "" $SubmitButton.visible = true #$LongTextEdit.placeholder_text = prompt.options elif prompt.type == Prompt.PromptType.MULTIPLE_CHOICE or prompt.type == Prompt.PromptType.PLAYER: $MultichoiceButtons.visible = true for option in prompt.options: var button: Button = multi_choice_button_scene.instantiate() as Button button.text = option $MultichoiceButtons.add_child(button) button.connect("pressed", submit_result.bind(option)) elif prompt.type == Prompt.PromptType.CONFIRMATION: $SubmitButton.visible = true elif prompt.type == Prompt.PromptType.SHOW_TEAM: $SubmitButton.visible = true var team: Team = Team.teams.get(prompt.context.get("team")) if team != null: $SubmitButton.disabled = true $TeamCard.connect("revealed", func(): $SubmitButton.disabled = false) $TeamCard.team = team $TeamCard.visible = true $TeamCard.appear() elif prompt.type == Prompt.PromptType.SHOW_ROLE: $SubmitButton.visible = true var role: Role = Role.roles.get(prompt.context.get("role")) if role != null: $SubmitButton.disabled = true $RoleCard.connect("revealed", func(): $SubmitButton.disabled = false) $RoleCard.role = role $RoleCard.visible = true $RoleCard.appear() func submit_button_pressed() -> void: if current_prompt == null: return match current_prompt.type as Prompt.PromptType: Prompt.PromptType.TEXT: submit_result($LineEdit.text) Prompt.PromptType.LONG_TEXT: submit_result($LongTextEdit.text) Prompt.PromptType.CONFIRMATION,Prompt.PromptType.SHOW_ROLE,Prompt.PromptType.SHOW_TEAM: submit_result("confirmed") func submit_result(result: String): var prompt: Prompt = current_prompt visible = false current_prompt = null player.submit_prompt_answer.rpc(prompt.id, result) func set_player(value: Player) -> void: if player != null: player.disconnect("prompt_changed", display_prompt) player = value player.connect("prompt_changed", display_prompt) display_prompt(player.current_prompt)