added rich text label instead of regular label for terminal but there are bugs
This commit is contained in:
@@ -4,7 +4,7 @@ class_name TerminalControls
|
|||||||
@onready var historyContainer = $MarginContainer/ScrollContainer/VBoxContainer
|
@onready var historyContainer = $MarginContainer/ScrollContainer/VBoxContainer
|
||||||
@onready var caret = $MarginContainer/ScrollContainer/VBoxContainer/Label/Caret
|
@onready var caret = $MarginContainer/ScrollContainer/VBoxContainer/Label/Caret
|
||||||
@onready var blink_timer = $MarginContainer/ScrollContainer/VBoxContainer/Label/CaretTimer
|
@onready var blink_timer = $MarginContainer/ScrollContainer/VBoxContainer/Label/CaretTimer
|
||||||
@export var terminalLine: Label
|
@export var terminalLine: RichTextLabel
|
||||||
|
|
||||||
var command: String
|
var command: String
|
||||||
var directory: String = "~/"
|
var directory: String = "~/"
|
||||||
@@ -24,9 +24,9 @@ var fileSystem: Dictionary = {
|
|||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
terminalLine.text = "user@work "+ directory + " "
|
terminalLine.text = "user@work "+ directory + " "
|
||||||
UpdateCaretPos()
|
|
||||||
blink_timer.start()
|
blink_timer.start()
|
||||||
Help()
|
Help()
|
||||||
|
UpdateCaretPos()
|
||||||
|
|
||||||
# --- Caret Blinking Logic ---
|
# --- Caret Blinking Logic ---
|
||||||
func _on_caret_timer_timeout() -> void:
|
func _on_caret_timer_timeout() -> void:
|
||||||
@@ -110,19 +110,36 @@ func EnterCommand() -> void:
|
|||||||
|
|
||||||
# --- History and FileSystem Helpers ---
|
# --- History and FileSystem Helpers ---
|
||||||
func CreateHistoryEntry(content: String) -> void:
|
func CreateHistoryEntry(content: String) -> void:
|
||||||
var label = Label.new()
|
# var label = Label.new()
|
||||||
label.text = content
|
# label.text = content
|
||||||
label.label_settings = LabelSettings.new()
|
# label.label_settings = LabelSettings.new()
|
||||||
label.label_settings.font_size = 42
|
# label.label_settings.font_size = 42
|
||||||
label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
|
# label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
|
||||||
label.custom_minimum_size = Vector2(1400, 0)
|
# label.custom_minimum_size = Vector2(1400, 0)
|
||||||
#
|
#
|
||||||
#if terminalLine.text.length() > 200:
|
#if terminalLine.text.length() > 200:
|
||||||
#for child in historyContainer.get_children():
|
#for child in historyContainer.get_children():
|
||||||
#if child != terminalLine:
|
#if child != terminalLine:
|
||||||
#child.queue_free()
|
#child.queue_free()
|
||||||
historyContainer.add_child(label)
|
# historyContainer.add_child(label)
|
||||||
historyContainer.move_child(label, historyContainer.get_child_count() - 2)
|
# historyContainer.move_child(label, historyContainer.get_child_count() - 2)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var rtl = RichTextLabel.new()
|
||||||
|
rtl.bbcode_enabled = true
|
||||||
|
rtl.fit_content = true # Important for VBoxContainer
|
||||||
|
rtl.text = content
|
||||||
|
rtl.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
|
||||||
|
rtl.custom_minimum_size = Vector2(1400, 0)
|
||||||
|
rtl.add_theme_font_size_override("normal_font_size", 42)
|
||||||
|
|
||||||
|
# Optional: Set a theme or font override here
|
||||||
|
# rtl.add_theme_font_size_override("normal_font_size", 42)
|
||||||
|
|
||||||
|
historyContainer.add_child(rtl)
|
||||||
|
# Moves the entry above the input line
|
||||||
|
historyContainer.move_child(rtl, historyContainer.get_child_count() - 2)
|
||||||
|
|
||||||
func ResolvePath(current: String, target: String) -> String:
|
func ResolvePath(current: String, target: String) -> String:
|
||||||
if target.begins_with("~/"):
|
if target.begins_with("~/"):
|
||||||
@@ -194,11 +211,20 @@ help : Show this menu
|
|||||||
-------------------------")
|
-------------------------")
|
||||||
|
|
||||||
func ScrollUp():
|
func ScrollUp():
|
||||||
var scroll: ScrollContainer = $MarginContainer/ScrollContainer
|
#var scroll: ScrollContainer = $MarginContainer/ScrollContainer
|
||||||
|
|
||||||
await get_tree().create_timer(.0001).timeout
|
#await get_tree().create_timer(.0001).timeout
|
||||||
scroll.set_deferred("scroll_vertical", scroll.get_v_scroll_bar().value - 10 )
|
#scroll.set_deferred("scroll_vertical", scroll.get_v_scroll_bar().value - 10 )
|
||||||
call_deferred("ScrollUp")
|
#call_deferred("ScrollUp")
|
||||||
|
|
||||||
|
var scrolli: RichTextLabel = $MarginContainer/ScrollContainer/VBoxContainer/Label
|
||||||
|
|
||||||
|
var scroll = scrolli.get_v_scroll_bar()
|
||||||
|
|
||||||
|
var tween: = create_tween()
|
||||||
|
tween.tween_property(scroll, "value", scroll.value - (scroll.page - scroll.page * 0.1), 0.1)
|
||||||
|
get_tree().get_root().set_input_as_handled()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func ScrollDown():
|
func ScrollDown():
|
||||||
@@ -220,7 +246,22 @@ func GetBottomScroll():
|
|||||||
call_deferred("GetBottomScroll")
|
call_deferred("GetBottomScroll")
|
||||||
|
|
||||||
func UpdateCaretPos():
|
func UpdateCaretPos():
|
||||||
var last_char_index = terminalLine.text.length() - 1
|
|
||||||
var char_rect = terminalLine.get_character_bounds(max(0, last_char_index))
|
await get_tree().create_timer(.01).timeout
|
||||||
caret.position.x = char_rect.end.x + 1
|
var font = terminalLine.get_theme_font("normal_font")
|
||||||
caret.position.y = char_rect.position.y
|
var font_size = terminalLine.get_theme_font_size("normal_font_size")
|
||||||
|
var visible_text = terminalLine.get_parsed_text()
|
||||||
|
var lines = visible_text.split("\n")
|
||||||
|
var last_line = lines[-1]
|
||||||
|
var char_rectY = terminalLine.get_content_height()
|
||||||
|
var text_line = TextLine.new()
|
||||||
|
|
||||||
|
text_line.width = terminalLine.size.x
|
||||||
|
text_line.flags = TextServer.JUSTIFICATION_NONE
|
||||||
|
text_line.alignment = HORIZONTAL_ALIGNMENT_LEFT
|
||||||
|
text_line.add_string(last_line, font, font_size)
|
||||||
|
|
||||||
|
caret.position.x = text_line.get_line_width()
|
||||||
|
caret.position.y = char_rectY - 50
|
||||||
|
|
||||||
|
pass
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=22 format=3 uid="uid://cqtabc6coc58l"]
|
[gd_scene load_steps=23 format=3 uid="uid://cqtabc6coc58l"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://dmtpstry0o0a3" path="res://Assets/Scripts/Player Controls/player_movement.gd" id="1_48dl1"]
|
[ext_resource type="Script" uid="uid://dmtpstry0o0a3" path="res://Assets/Scripts/Player Controls/player_movement.gd" id="1_48dl1"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cbpsnsta7u3wl" path="res://Scenes/Special_Effects/PSX_style.tscn" id="2_gba58"]
|
[ext_resource type="PackedScene" uid="uid://cbpsnsta7u3wl" path="res://Scenes/Special_Effects/PSX_style.tscn" id="2_gba58"]
|
||||||
@@ -87,6 +87,9 @@ viewport_path = NodePath("Interactables/PC/Sprite3D/SubViewport")
|
|||||||
[sub_resource type="LabelSettings" id="LabelSettings_nmbs0"]
|
[sub_resource type="LabelSettings" id="LabelSettings_nmbs0"]
|
||||||
font_size = 42
|
font_size = 42
|
||||||
|
|
||||||
|
[sub_resource type="Theme" id="Theme_nmbs0"]
|
||||||
|
default_font_size = 42
|
||||||
|
|
||||||
[node name="Node3D" type="Node3D"]
|
[node name="Node3D" type="Node3D"]
|
||||||
|
|
||||||
[node name="PlayerController" type="Node3D" parent="."]
|
[node name="PlayerController" type="Node3D" parent="."]
|
||||||
@@ -242,7 +245,8 @@ scroll_vertical_custom_step = 0.001
|
|||||||
[node name="VBoxContainer" type="VBoxContainer" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer/ScrollContainer"]
|
[node name="VBoxContainer" type="VBoxContainer" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer/ScrollContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
|
||||||
[node name="Label" type="Label" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer/ScrollContainer/VBoxContainer"]
|
[node name="Label3" type="Label" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer/ScrollContainer/VBoxContainer"]
|
||||||
|
visible = false
|
||||||
clip_contents = true
|
clip_contents = true
|
||||||
custom_minimum_size = Vector2(1800, 0)
|
custom_minimum_size = Vector2(1800, 0)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
@@ -250,10 +254,20 @@ text = "a0ifjaojkfna"
|
|||||||
label_settings = SubResource("LabelSettings_nmbs0")
|
label_settings = SubResource("LabelSettings_nmbs0")
|
||||||
autowrap_mode = 3
|
autowrap_mode = 3
|
||||||
|
|
||||||
|
[node name="Label" type="RichTextLabel" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer/ScrollContainer/VBoxContainer"]
|
||||||
|
clip_contents = false
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_vertical = 0
|
||||||
|
theme = SubResource("Theme_nmbs0")
|
||||||
|
bbcode_enabled = true
|
||||||
|
text = "afafafafafafa"
|
||||||
|
fit_content = true
|
||||||
|
|
||||||
[node name="Caret" type="ColorRect" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer/ScrollContainer/VBoxContainer/Label"]
|
[node name="Caret" type="ColorRect" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer/ScrollContainer/VBoxContainer/Label"]
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
|
offset_top = -62.0
|
||||||
offset_right = 24.0
|
offset_right = 24.0
|
||||||
offset_bottom = 42.0
|
offset_bottom = -20.0
|
||||||
|
|
||||||
[node name="CaretTimer" type="Timer" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer/ScrollContainer/VBoxContainer/Label"]
|
[node name="CaretTimer" type="Timer" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer/ScrollContainer/VBoxContainer/Label"]
|
||||||
wait_time = 0.5
|
wait_time = 0.5
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user