2025-05-31 22:21:22 +01:00
|
|
|
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]"
|
|
|
|
|
2025-06-21 14:35:32 +01:00
|
|
|
var current_prompt: Prompt
|
2025-05-31 22:21:22 +01:00
|
|
|
|
|
|
|
var player: Player:
|
2025-06-21 14:35:32 +01:00
|
|
|
set = set_player
|
|
|
|
|
|
|
|
func _ready() -> void:
|
|
|
|
hide_everything()
|
|
|
|
|
|
|
|
func hide_everything():
|
|
|
|
# hide all children
|
|
|
|
for child in get_children():
|
|
|
|
child.visible = false
|
2025-05-31 22:21:22 +01:00
|
|
|
|
2025-06-21 14:35:32 +01:00
|
|
|
func display_prompt(prompt: Prompt):
|
|
|
|
if prompt == null:
|
|
|
|
print("Displaying no prompt")
|
2025-05-31 22:21:22 +01:00
|
|
|
visible = false
|
|
|
|
return
|
|
|
|
|
2025-06-21 14:35:32 +01:00
|
|
|
print("Displaying prompt \"%s\"" % prompt.text)
|
2025-05-31 22:21:22 +01:00
|
|
|
current_prompt = prompt
|
|
|
|
|
|
|
|
visible = true
|
|
|
|
|
2025-06-21 14:35:32 +01:00
|
|
|
hide_everything()
|
2025-05-31 22:21:22 +01:00
|
|
|
|
2025-06-21 14:35:32 +01:00
|
|
|
$PromptLabel.text = prompt_text_format % prompt.format_text()
|
2025-05-31 22:21:22 +01:00
|
|
|
$PromptLabel.visible = true
|
|
|
|
|
|
|
|
# clear all prompt buttons
|
|
|
|
for button in $MultichoiceButtons.get_children():
|
|
|
|
$MultichoiceButtons.remove_child(button)
|
|
|
|
button.queue_free()
|
|
|
|
|
2025-06-21 14:35:32 +01:00
|
|
|
if prompt.type == Prompt.PromptType.LONG_TEXT:
|
2025-05-31 22:21:22 +01:00
|
|
|
$LongTextEdit.visible = true
|
|
|
|
$LongTextEdit.text = ""
|
|
|
|
$SubmitButton.visible = true
|
2025-06-21 14:35:32 +01:00
|
|
|
elif prompt.type == Prompt.PromptType.TEXT:
|
2025-05-31 22:21:22 +01:00
|
|
|
$LineEdit.visible = true
|
|
|
|
$LineEdit.text = ""
|
|
|
|
$SubmitButton.visible = true
|
|
|
|
#$LongTextEdit.placeholder_text = prompt.options
|
2025-06-21 14:35:32 +01:00
|
|
|
elif prompt.type == Prompt.PromptType.MULTIPLE_CHOICE or prompt.type == Prompt.PromptType.PLAYER:
|
2025-05-31 22:21:22 +01:00
|
|
|
$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))
|
2025-06-21 14:35:32 +01:00
|
|
|
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()
|
2025-05-31 22:21:22 +01:00
|
|
|
|
|
|
|
func submit_button_pressed() -> void:
|
2025-06-21 14:35:32 +01:00
|
|
|
if current_prompt == null:
|
2025-05-31 22:21:22 +01:00
|
|
|
return
|
2025-06-21 14:35:32 +01:00
|
|
|
match current_prompt.type as Prompt.PromptType:
|
|
|
|
Prompt.PromptType.TEXT:
|
2025-05-31 22:21:22 +01:00
|
|
|
submit_result($LineEdit.text)
|
2025-06-21 14:35:32 +01:00
|
|
|
Prompt.PromptType.LONG_TEXT:
|
2025-05-31 22:21:22 +01:00
|
|
|
submit_result($LongTextEdit.text)
|
2025-06-21 14:35:32 +01:00
|
|
|
Prompt.PromptType.CONFIRMATION,Prompt.PromptType.SHOW_ROLE,Prompt.PromptType.SHOW_TEAM:
|
|
|
|
submit_result("confirmed")
|
2025-05-31 22:21:22 +01:00
|
|
|
|
|
|
|
func submit_result(result: String):
|
2025-06-21 14:35:32 +01:00
|
|
|
var prompt: Prompt = current_prompt
|
2025-05-31 22:21:22 +01:00
|
|
|
visible = false
|
2025-06-21 14:35:32 +01:00
|
|
|
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)
|