4
0
Fork 0
WolfBox/scripts/prompt_manager.gd

102 lines
3.0 KiB
GDScript

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)