Started writing custom UI element. Basically a line edit that validates input against some regex

This commit is contained in:
nc5432 2025-05-15 14:58:18 -04:00
parent 09fb20ad19
commit b33ff60e64
3 changed files with 80 additions and 61 deletions

View File

@ -1,59 +1,8 @@
[gd_scene load_steps=8 format=3 uid="uid://df8hwr5ra06wb"] [gd_scene load_steps=9 format=3 uid="uid://df8hwr5ra06wb"]
[ext_resource type="Theme" uid="uid://yag0j3f13um7" path="res://themes/main.tres" id="1_0ykhv"] [ext_resource type="Theme" uid="uid://yag0j3f13um7" path="res://themes/main.tres" id="1_0ykhv"]
[ext_resource type="Script" uid="uid://klufydtxtbjy" path="res://scripts/MainMenu.gd" id="1_yqorp"] [ext_resource type="Script" uid="uid://klufydtxtbjy" path="res://scripts/MainMenu.gd" id="1_yqorp"]
[ext_resource type="Script" uid="uid://ebdck5q0ra7i" path="res://scripts/NumberEdit.gd" id="3_2wh52"]
[sub_resource type="Animation" id="Animation_0ykhv"]
resource_name = "ShowPlay"
length = 0.2
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("PlayMenu:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.01),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("PlayMenu:scale")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.1, 0.2),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector2(0.1, 1), Vector2(0.1, 1), Vector2(1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("PlayMenu:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(393, 917), Vector2(393, 157)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("PlayMenu:size")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(366, 334), Vector2(366, 334)]
}
[sub_resource type="Animation" id="Animation_2wh52"] [sub_resource type="Animation" id="Animation_2wh52"]
length = 0.001 length = 0.001
@ -202,6 +151,58 @@ tracks/11/keys = {
"values": [Vector2(366, 334)] "values": [Vector2(366, 334)]
} }
[sub_resource type="Animation" id="Animation_0ykhv"]
resource_name = "ShowPlay"
length = 0.2
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("PlayMenu:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.01),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("PlayMenu:scale")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.1, 0.2),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector2(0.1, 1), Vector2(0.1, 1), Vector2(1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("PlayMenu:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(393, 917), Vector2(393, 157)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("PlayMenu:size")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(366, 334), Vector2(366, 334)]
}
[sub_resource type="Animation" id="Animation_ow34m"] [sub_resource type="Animation" id="Animation_ow34m"]
resource_name = "ShowScores" resource_name = "ShowScores"
length = 0.2 length = 0.2
@ -388,7 +389,7 @@ anchor_bottom = 0.5
offset_left = -183.0 offset_left = -183.0
offset_top = 593.0 offset_top = 593.0
offset_right = 183.0 offset_right = 183.0
offset_bottom = 927.0 offset_bottom = 932.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
scale = Vector2(0.1, 1) scale = Vector2(0.1, 1)
@ -457,12 +458,17 @@ max_value = 30.0
value = 10.0 value = 10.0
rounded = true rounded = true
[node name="Counter" type="RichTextLabel" parent="PlayMenu/MarginContainer/VBoxContainer/Width"] [node name="Counter" type="LineEdit" parent="PlayMenu/MarginContainer/VBoxContainer/Width"]
custom_minimum_size = Vector2(30, 0)
layout_mode = 2 layout_mode = 2
bbcode_enabled = true text = "10"
text = "[center]10[/center]" alignment = 1
fit_content = true max_length = 2
emoji_menu_enabled = false
virtual_keyboard_type = 2
flat = true
select_all_on_focus = true
caret_blink = true
script = ExtResource("3_2wh52")
[node name="Height" type="HBoxContainer" parent="PlayMenu/MarginContainer/VBoxContainer"] [node name="Height" type="HBoxContainer" parent="PlayMenu/MarginContainer/VBoxContainer"]
layout_mode = 2 layout_mode = 2
@ -537,7 +543,7 @@ anchor_bottom = 0.5
offset_left = -183.0 offset_left = -183.0
offset_top = 593.0 offset_top = 593.0
offset_right = 183.0 offset_right = 183.0
offset_bottom = 927.0 offset_bottom = 1000.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
scale = Vector2(0.1, 1) scale = Vector2(0.1, 1)
@ -897,7 +903,7 @@ anchor_bottom = 0.5
offset_left = -183.0 offset_left = -183.0
offset_top = 593.0 offset_top = 593.0
offset_right = 183.0 offset_right = 183.0
offset_bottom = 927.0 offset_bottom = 2692.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
scale = Vector2(0.1, 1) scale = Vector2(0.1, 1)

View File

@ -0,0 +1,12 @@
class_name RegexEdit extends LineEdit
@export var regexPattern: String = "^[0-9]{0,2}"
var regex: RegEx = RegEx.new()
var oldText: String = "10"
func _enter_tree() -> void:
connect("text_changed", textChanged)
func textChanged(newText: String) -> void:
pass

View File

@ -0,0 +1 @@
uid://ebdck5q0ra7i