64 lines
1.4 KiB
GDScript
64 lines
1.4 KiB
GDScript
extends MarginContainer
|
|
|
|
@export var scrollContainer:ScrollContainer
|
|
@export var messages:VBoxContainer
|
|
@export var messageHistory := 10
|
|
|
|
var messageLinePrefab = preload("res://scenes/ui/MessageLine.tscn")
|
|
|
|
func _ready():
|
|
CommandDispatcher.DISPLAY_MESSAGE.connect(_onMessageReceived)
|
|
CommandDispatcher.DISPLAY_COMMAND_PROMPT.connect(displayCommandPrompt)
|
|
CommandDispatcher.DISPLAY_CLEAR.connect(clearWindow)
|
|
|
|
func _on_command(text):
|
|
displayCommand(text)
|
|
|
|
|
|
func _onMessageReceived(message):
|
|
displayMessage(message)
|
|
|
|
|
|
func displayCommandPrompt():
|
|
messages.add_child(messageLinePrefab.instantiate())
|
|
|
|
|
|
func clearWindow():
|
|
for item in messages.get_children():
|
|
messages.remove_child(item)
|
|
item.queue_free()
|
|
|
|
|
|
func scrollToEnd():
|
|
await scrollContainer.get_v_scroll_bar().changed
|
|
|
|
if (messages.get_child_count() > messageHistory):
|
|
messages.get_child(0).queue_free()
|
|
|
|
scrollContainer.scroll_vertical = scrollContainer.get_v_scroll_bar().max_value
|
|
|
|
|
|
func displayMessage(message):
|
|
|
|
var messageLine = messageLinePrefab.instantiate()
|
|
|
|
messageLine.text = "%s\n\n" % message
|
|
|
|
messages.add_child(messageLine)
|
|
|
|
scrollToEnd()
|
|
|
|
|
|
func displayCommand(message):
|
|
|
|
var currentMessageLine:RichTextLabel
|
|
|
|
if (messages.get_child_count() == 0):
|
|
displayCommandPrompt()
|
|
|
|
currentMessageLine = messages.get_children()[messages.get_children().size() - 1]
|
|
|
|
currentMessageLine.text = currentMessageLine.text.insert(currentMessageLine.text.length() - 2, message)
|
|
|
|
scrollToEnd()
|