├── .gitignore ├── LICENSE ├── godot ├── assets │ └── theme │ │ ├── button │ │ ├── disabled.stylebox │ │ ├── focused.stylebox │ │ ├── hover.stylebox │ │ ├── normal.stylebox │ │ └── pressed.stylebox │ │ ├── empty.stylebox │ │ ├── fonts │ │ ├── default_font.tres │ │ ├── default_font_bold.tres │ │ ├── default_font_code.tres │ │ ├── font_title.tres │ │ ├── montserrat │ │ │ ├── Montserrat-Black.ttf │ │ │ ├── Montserrat-Bold.ttf │ │ │ └── Montserrat-Medium.ttf │ │ └── source_code_pro │ │ │ └── SourceCodePro-Medium.otf │ │ ├── gdquest.theme │ │ ├── icons │ │ ├── chevron-right.svg │ │ ├── chevron-right.svg.import │ │ ├── chevron-up.svg │ │ └── chevron-up.svg.import │ │ ├── panel │ │ └── panel.stylebox │ │ ├── separator │ │ └── line.tres │ │ └── slider │ │ ├── grabber_area.stylebox │ │ └── slider.stylebox ├── demos │ └── VariablesPanel │ │ ├── GUI.gd │ │ ├── GUI.tscn │ │ ├── VariableControl.gd │ │ └── VariableControl.tscn ├── icon.png ├── icon.png.import ├── project.godot └── src │ ├── Components │ ├── ColorPalette │ │ ├── ColorPalette.tscn │ │ └── ColorSwatch │ │ │ ├── ColorSwatch.gd │ │ │ └── ColorSwatch.tscn │ ├── TextEdit │ │ ├── TextEdit.gd │ │ ├── TextEdit.tscn │ │ └── keywords.json │ └── Title.tscn │ ├── Debug │ ├── DebugDock.gd │ ├── DebugPanel.gd │ └── DebugPanel.tscn │ └── Styleguide.tscn └── img └── gdquest-ui-debug-tools-banner.svg /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Godot-specific ignores 3 | .import/ 4 | export.cfg 5 | export_presets.cfg 6 | 7 | # Mono-specific ignores 8 | .mono/ 9 | 10 | # We use symlinks to automatically keep all our addons up to date 11 | addons/ 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 GDQuest and contributors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /godot/assets/theme/button/disabled.stylebox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GDQuest/godot-debug-ui-toolkit/64d0eece58566fa3448bc4e58e571c1ebd77bd5f/godot/assets/theme/button/disabled.stylebox -------------------------------------------------------------------------------- /godot/assets/theme/button/focused.stylebox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GDQuest/godot-debug-ui-toolkit/64d0eece58566fa3448bc4e58e571c1ebd77bd5f/godot/assets/theme/button/focused.stylebox -------------------------------------------------------------------------------- /godot/assets/theme/button/hover.stylebox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GDQuest/godot-debug-ui-toolkit/64d0eece58566fa3448bc4e58e571c1ebd77bd5f/godot/assets/theme/button/hover.stylebox -------------------------------------------------------------------------------- /godot/assets/theme/button/normal.stylebox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GDQuest/godot-debug-ui-toolkit/64d0eece58566fa3448bc4e58e571c1ebd77bd5f/godot/assets/theme/button/normal.stylebox -------------------------------------------------------------------------------- /godot/assets/theme/button/pressed.stylebox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GDQuest/godot-debug-ui-toolkit/64d0eece58566fa3448bc4e58e571c1ebd77bd5f/godot/assets/theme/button/pressed.stylebox -------------------------------------------------------------------------------- /godot/assets/theme/empty.stylebox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GDQuest/godot-debug-ui-toolkit/64d0eece58566fa3448bc4e58e571c1ebd77bd5f/godot/assets/theme/empty.stylebox -------------------------------------------------------------------------------- /godot/assets/theme/fonts/default_font.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="DynamicFont" load_steps=2 format=2] 2 | 3 | [ext_resource path="res://assets/theme/fonts/montserrat/Montserrat-Medium.ttf" type="DynamicFontData" id=1] 4 | 5 | 6 | [resource] 7 | 8 | size = 20 9 | use_filter = true 10 | font_data = ExtResource( 1 ) 11 | 12 | -------------------------------------------------------------------------------- /godot/assets/theme/fonts/default_font_bold.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="DynamicFont" load_steps=2 format=2] 2 | 3 | [ext_resource path="res://assets/theme/fonts/montserrat/Montserrat-Bold.ttf" type="DynamicFontData" id=1] 4 | 5 | 6 | [resource] 7 | 8 | size = 20 9 | use_filter = true 10 | font_data = ExtResource( 1 ) 11 | 12 | -------------------------------------------------------------------------------- /godot/assets/theme/fonts/default_font_code.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="DynamicFont" load_steps=2 format=2] 2 | 3 | [ext_resource path="res://assets/theme/fonts/source_code_pro/SourceCodePro-Medium.otf" type="DynamicFontData" id=1] 4 | 5 | 6 | [resource] 7 | 8 | size = 20 9 | use_filter = true 10 | font_data = ExtResource( 1 ) 11 | 12 | -------------------------------------------------------------------------------- /godot/assets/theme/fonts/font_title.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="DynamicFont" load_steps=2 format=2] 2 | 3 | [ext_resource path="res://assets/theme/fonts/montserrat/Montserrat-Black.ttf" type="DynamicFontData" id=1] 4 | 5 | 6 | [resource] 7 | 8 | size = 28 9 | use_filter = true 10 | font_data = ExtResource( 1 ) 11 | 12 | -------------------------------------------------------------------------------- /godot/assets/theme/fonts/montserrat/Montserrat-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GDQuest/godot-debug-ui-toolkit/64d0eece58566fa3448bc4e58e571c1ebd77bd5f/godot/assets/theme/fonts/montserrat/Montserrat-Black.ttf -------------------------------------------------------------------------------- /godot/assets/theme/fonts/montserrat/Montserrat-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GDQuest/godot-debug-ui-toolkit/64d0eece58566fa3448bc4e58e571c1ebd77bd5f/godot/assets/theme/fonts/montserrat/Montserrat-Bold.ttf -------------------------------------------------------------------------------- /godot/assets/theme/fonts/montserrat/Montserrat-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GDQuest/godot-debug-ui-toolkit/64d0eece58566fa3448bc4e58e571c1ebd77bd5f/godot/assets/theme/fonts/montserrat/Montserrat-Medium.ttf -------------------------------------------------------------------------------- /godot/assets/theme/fonts/source_code_pro/SourceCodePro-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GDQuest/godot-debug-ui-toolkit/64d0eece58566fa3448bc4e58e571c1ebd77bd5f/godot/assets/theme/fonts/source_code_pro/SourceCodePro-Medium.otf -------------------------------------------------------------------------------- /godot/assets/theme/gdquest.theme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GDQuest/godot-debug-ui-toolkit/64d0eece58566fa3448bc4e58e571c1ebd77bd5f/godot/assets/theme/gdquest.theme -------------------------------------------------------------------------------- /godot/assets/theme/icons/chevron-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /godot/assets/theme/icons/chevron-right.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/chevron-right.svg-f77dee7a088177a2ac1d467f4c7cd3e1.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/theme/icons/chevron-right.svg" 13 | dest_files=[ "res://.import/chevron-right.svg-f77dee7a088177a2ac1d467f4c7cd3e1.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=true 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | stream=false 32 | size_limit=0 33 | detect_3d=true 34 | svg/scale=1.0 35 | -------------------------------------------------------------------------------- /godot/assets/theme/icons/chevron-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /godot/assets/theme/icons/chevron-up.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/chevron-up.svg-48b5b69265734774d0a7516dcc6f0863.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/theme/icons/chevron-up.svg" 13 | dest_files=[ "res://.import/chevron-up.svg-48b5b69265734774d0a7516dcc6f0863.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=true 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | stream=false 32 | size_limit=0 33 | detect_3d=true 34 | svg/scale=1.0 35 | -------------------------------------------------------------------------------- /godot/assets/theme/panel/panel.stylebox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GDQuest/godot-debug-ui-toolkit/64d0eece58566fa3448bc4e58e571c1ebd77bd5f/godot/assets/theme/panel/panel.stylebox -------------------------------------------------------------------------------- /godot/assets/theme/separator/line.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="StyleBoxLine" format=2] 2 | 3 | [resource] 4 | 5 | color = Color( 1, 1, 1, 0.196078 ) 6 | thickness = 2 7 | 8 | -------------------------------------------------------------------------------- /godot/assets/theme/slider/grabber_area.stylebox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GDQuest/godot-debug-ui-toolkit/64d0eece58566fa3448bc4e58e571c1ebd77bd5f/godot/assets/theme/slider/grabber_area.stylebox -------------------------------------------------------------------------------- /godot/assets/theme/slider/slider.stylebox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GDQuest/godot-debug-ui-toolkit/64d0eece58566fa3448bc4e58e571c1ebd77bd5f/godot/assets/theme/slider/slider.stylebox -------------------------------------------------------------------------------- /godot/demos/VariablesPanel/GUI.gd: -------------------------------------------------------------------------------- 1 | tool 2 | extends PanelContainer 3 | # This is an example editor tool for creating dynamic variable controls using the provided theme. 4 | 5 | 6 | # Use this variable to set the number of variable controls 7 | export(int, 0, 10) var controls := 1 setget set_controls 8 | 9 | const VariableControl := preload("res://demos/VariablesPanel/VariableControl.tscn") 10 | 11 | onready var variable_controls := $MarginContainer/VBoxContainer/VariableControls 12 | onready var edited_scene_root := get_tree().edited_scene_root 13 | 14 | 15 | func _ready() -> void: 16 | for idx in range(controls): 17 | if idx < variable_controls.get_child_count(): 18 | continue 19 | 20 | var control := VariableControl.instance() 21 | variable_controls.add_child(control) 22 | control.owner = edited_scene_root 23 | 24 | 25 | func set_controls(new_controls: int) -> void: 26 | if not is_inside_tree(): yield(self, 'ready') 27 | 28 | if controls < new_controls: 29 | for idx in range(new_controls): 30 | if idx < variable_controls.get_child_count(): 31 | continue 32 | 33 | var control := VariableControl.instance() 34 | variable_controls.add_child(control) 35 | control.owner = edited_scene_root 36 | else: 37 | for idx in range(new_controls, controls): 38 | var child := variable_controls.get_child(idx) 39 | if child: child.queue_free() 40 | 41 | controls = new_controls 42 | -------------------------------------------------------------------------------- /godot/demos/VariablesPanel/GUI.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=4 format=2] 2 | 3 | [ext_resource path="res://assets/theme/gdquest.theme" type="Theme" id=1] 4 | [ext_resource path="res://demos/VariablesPanel/GUI.gd" type="Script" id=2] 5 | [ext_resource path="res://demos/VariablesPanel/VariableControl.tscn" type="PackedScene" id=3] 6 | 7 | [node name="GUI" type="PanelContainer"] 8 | anchor_bottom = 1.0 9 | margin_right = 442.0 10 | theme = ExtResource( 1 ) 11 | script = ExtResource( 2 ) 12 | __meta__ = { 13 | "_edit_use_anchors_": false 14 | } 15 | controls = 2 16 | 17 | [node name="MarginContainer" type="MarginContainer" parent="."] 18 | margin_right = 454.0 19 | margin_bottom = 1080.0 20 | custom_constants/margin_right = 20 21 | custom_constants/margin_top = 20 22 | custom_constants/margin_left = 20 23 | custom_constants/margin_bottom = 20 24 | 25 | [node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"] 26 | margin_left = 20.0 27 | margin_top = 20.0 28 | margin_right = 434.0 29 | margin_bottom = 1060.0 30 | 31 | [node name="VariableControls" type="VBoxContainer" parent="MarginContainer/VBoxContainer"] 32 | margin_right = 414.0 33 | margin_bottom = 128.0 34 | 35 | [node name="MaxSpeed" parent="MarginContainer/VBoxContainer/VariableControls" instance=ExtResource( 3 )] 36 | margin_right = 414.0 37 | margin_bottom = 60.0 38 | 39 | [node name="NamesAreTakenFromNodes" parent="MarginContainer/VBoxContainer/VariableControls" instance=ExtResource( 3 )] 40 | margin_top = 68.0 41 | margin_right = 414.0 42 | margin_bottom = 128.0 43 | 44 | [node name="Help" type="Label" parent="MarginContainer/VBoxContainer"] 45 | margin_top = 136.0 46 | margin_right = 414.0 47 | margin_bottom = 191.0 48 | text = " 49 | (example) Help" 50 | 51 | [node name="GridContainer" type="GridContainer" parent="MarginContainer/VBoxContainer"] 52 | margin_top = 199.0 53 | margin_right = 414.0 54 | margin_bottom = 255.0 55 | columns = 3 56 | 57 | [node name="Sep1" type="Control" parent="MarginContainer/VBoxContainer/GridContainer"] 58 | margin_right = 15.0 59 | margin_bottom = 26.0 60 | 61 | [node name="Up" type="Label" parent="MarginContainer/VBoxContainer/GridContainer"] 62 | margin_left = 19.0 63 | margin_right = 42.0 64 | margin_bottom = 26.0 65 | text = "W" 66 | align = 1 67 | 68 | [node name="Sep2" type="Control" parent="MarginContainer/VBoxContainer/GridContainer"] 69 | margin_left = 46.0 70 | margin_right = 63.0 71 | margin_bottom = 26.0 72 | __meta__ = { 73 | "_edit_use_anchors_": false 74 | } 75 | 76 | [node name="Left" type="Label" parent="MarginContainer/VBoxContainer/GridContainer"] 77 | margin_top = 30.0 78 | margin_right = 15.0 79 | margin_bottom = 56.0 80 | text = "A" 81 | align = 1 82 | 83 | [node name="Down" type="Label" parent="MarginContainer/VBoxContainer/GridContainer"] 84 | margin_left = 19.0 85 | margin_top = 30.0 86 | margin_right = 42.0 87 | margin_bottom = 56.0 88 | text = "S" 89 | align = 1 90 | 91 | [node name="Right" type="Label" parent="MarginContainer/VBoxContainer/GridContainer"] 92 | margin_left = 46.0 93 | margin_top = 30.0 94 | margin_right = 63.0 95 | margin_bottom = 56.0 96 | text = "D" 97 | align = 1 98 | 99 | [node name="Info" type="Label" parent="MarginContainer/VBoxContainer"] 100 | margin_top = 263.0 101 | margin_right = 414.0 102 | margin_bottom = 724.0 103 | text = " 104 | Info 105 | 106 | Use mouse scroll wheel to scroll through 107 | values on the text area. 108 | 109 | Text area focus is grabbed when mouse 110 | is moved over, and lost when mouse 111 | moves away. 112 | 113 | Use export variable on the GUI node to 114 | set the number of variable controls. 115 | 116 | Use export variables on individual 117 | Variable Control nodes to set default 118 | min/max & values." 119 | -------------------------------------------------------------------------------- /godot/demos/VariablesPanel/VariableControl.gd: -------------------------------------------------------------------------------- 1 | tool 2 | extends VBoxContainer 3 | 4 | signal value_changed(value) 5 | 6 | export var min_value: = 0.0 setget set_min_value 7 | export var max_value: = 100.0 setget set_max_value 8 | export var value: = 0.0 setget set_value 9 | 10 | onready var label: Label = $HBoxContainer/Label 11 | onready var spin_box: SpinBox = $HBoxContainer/SpinBox 12 | onready var slider: HSlider = $HSlider 13 | 14 | 15 | func _ready() -> void: 16 | _set_label_text() 17 | connect("renamed", self, "_set_label_text") 18 | spin_box.connect("mouse_entered", spin_box.get_line_edit(), "grab_focus") 19 | spin_box.connect("mouse_exited", spin_box.get_line_edit(), "release_focus") 20 | spin_box.connect("value_changed", self, "_set_value") 21 | slider.connect("value_changed", self, "_set_value") 22 | 23 | 24 | func set_min_value(new_min_value: float) -> void: 25 | if not is_inside_tree(): 26 | yield(self, "ready") 27 | 28 | min_value = new_min_value 29 | 30 | spin_box.min_value = min_value 31 | slider.min_value = min_value 32 | 33 | 34 | func set_max_value(new_max_value: float) -> void: 35 | if not is_inside_tree(): 36 | yield(self, "ready") 37 | 38 | max_value = new_max_value 39 | 40 | spin_box.max_value = max_value 41 | slider.max_value = max_value 42 | 43 | 44 | func set_value(new_value: float) -> void: 45 | if not is_inside_tree(): 46 | yield(self, "ready") 47 | 48 | value = clamp(new_value, min_value, max_value) 49 | 50 | spin_box.value = value 51 | slider.value = value 52 | 53 | emit_signal("value_changed", value) 54 | 55 | 56 | func _set_value(new_value: float) -> void: 57 | value = new_value 58 | 59 | property_list_changed_notify() 60 | emit_signal("value_changed", value) 61 | 62 | 63 | func _set_label_text() -> void: 64 | if not is_inside_tree(): 65 | yield(self, "ready") 66 | 67 | label.text = name.capitalize() 68 | -------------------------------------------------------------------------------- /godot/demos/VariablesPanel/VariableControl.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=2] 2 | 3 | [ext_resource path="res://demos/VariablesPanel/VariableControl.gd" type="Script" id=1] 4 | 5 | [node name="VariableControl" type="VBoxContainer"] 6 | margin_right = 78.0 7 | margin_bottom = 44.0 8 | script = ExtResource( 1 ) 9 | __meta__ = { 10 | "_edit_use_anchors_": false 11 | } 12 | 13 | [node name="HBoxContainer" type="HBoxContainer" parent="."] 14 | margin_right = 179.0 15 | margin_bottom = 24.0 16 | __meta__ = { 17 | "_edit_lock_": true 18 | } 19 | 20 | [node name="Label" type="Label" parent="HBoxContainer"] 21 | margin_top = 5.0 22 | margin_right = 101.0 23 | margin_bottom = 19.0 24 | size_flags_horizontal = 2 25 | text = "Variable Control" 26 | __meta__ = { 27 | "_edit_lock_": true 28 | } 29 | 30 | [node name="SpinBox" type="SpinBox" parent="HBoxContainer"] 31 | margin_left = 105.0 32 | margin_right = 179.0 33 | margin_bottom = 24.0 34 | align = 2 35 | __meta__ = { 36 | "_edit_lock_": true 37 | } 38 | 39 | [node name="HSlider" type="HSlider" parent="."] 40 | margin_top = 28.0 41 | margin_right = 179.0 42 | margin_bottom = 44.0 43 | __meta__ = { 44 | "_edit_lock_": true 45 | } 46 | -------------------------------------------------------------------------------- /godot/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GDQuest/godot-debug-ui-toolkit/64d0eece58566fa3448bc4e58e571c1ebd77bd5f/godot/icon.png -------------------------------------------------------------------------------- /godot/icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://icon.png" 13 | dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=true 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | stream=false 32 | size_limit=0 33 | detect_3d=true 34 | svg/scale=1.0 35 | -------------------------------------------------------------------------------- /godot/project.godot: -------------------------------------------------------------------------------- 1 | ; Engine configuration file. 2 | ; It's best edited using the editor UI and not directly, 3 | ; since the parameters that go here are not all obvious. 4 | ; 5 | ; Format: 6 | ; [section] ; section goes between [] 7 | ; param=value ; assign values to parameters 8 | 9 | config_version=4 10 | 11 | _global_script_classes=[ { 12 | "base": "MarginContainer", 13 | "class": "ColorPalette", 14 | "language": "GDScript", 15 | "path": "res://addons/color_palette/interface/ColorPalette.gd" 16 | }, { 17 | "base": "Button", 18 | "class": "ColorSwatch", 19 | "language": "GDScript", 20 | "path": "res://addons/color_palette/interface/color_swatch/ColorSwatch.gd" 21 | }, { 22 | "base": "MarginContainer", 23 | "class": "Docker", 24 | "language": "GDScript", 25 | "path": "res://addons/gdquest_docker/interface/Docker.gd" 26 | }, { 27 | "base": "Control", 28 | "class": "RichEditorInterface", 29 | "language": "GDScript", 30 | "path": "res://addons/rich_text_editor/interface/RichEditorInterface.gd" 31 | }, { 32 | "base": "EditorPlugin", 33 | "class": "RichTextPlugin", 34 | "language": "GDScript", 35 | "path": "res://addons/rich_text_editor/RichTextEditor.gd" 36 | } ] 37 | _global_script_class_icons={ 38 | "ColorPalette": "", 39 | "ColorSwatch": "", 40 | "Docker": "", 41 | "RichEditorInterface": "", 42 | "RichTextPlugin": "" 43 | } 44 | 45 | [application] 46 | 47 | config/name="GDquest Godot Theme" 48 | config/description="UI themes and visual styleguide to reuse across GDQuest projects" 49 | run/main_scene="res://src/Styleguide.tscn" 50 | config/icon="res://icon.png" 51 | 52 | [display] 53 | 54 | window/size/width=1920 55 | window/size/height=1080 56 | 57 | [editor_plugins] 58 | 59 | enabled=PoolStringArray( ) 60 | -------------------------------------------------------------------------------- /godot/src/Components/ColorPalette/ColorPalette.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=2] 2 | 3 | [ext_resource path="res://src/Components/ColorPalette/ColorSwatch/ColorSwatch.tscn" type="PackedScene" id=1] 4 | 5 | 6 | [node name="ColorPalette" type="MarginContainer"] 7 | editor/display_folded = true 8 | anchor_left = 0.5 9 | anchor_top = 0.5 10 | anchor_right = 0.5 11 | anchor_bottom = 0.5 12 | margin_left = -100.0 13 | margin_top = -75.0 14 | margin_right = 100.0 15 | margin_bottom = 75.0 16 | 17 | [node name="Column" type="VBoxContainer" parent="."] 18 | margin_right = 200.0 19 | margin_bottom = 150.0 20 | 21 | [node name="Label" type="Label" parent="Column"] 22 | margin_right = 200.0 23 | margin_bottom = 14.0 24 | text = "Palette name" 25 | 26 | [node name="Grid" type="GridContainer" parent="Column"] 27 | margin_top = 18.0 28 | margin_right = 200.0 29 | margin_bottom = 82.0 30 | columns = 6 31 | 32 | [node name="ColorSwatch" parent="Column/Grid" instance=ExtResource( 1 )] 33 | color = Color( 0.0352941, 0.65098, 0.792157, 1 ) 34 | 35 | [node name="ColorSwatch2" parent="Column/Grid" instance=ExtResource( 1 )] 36 | margin_left = 68.0 37 | margin_right = 132.0 38 | color = Color( 0, 0.27451, 1, 1 ) 39 | 40 | [node name="Grid2" type="GridContainer" parent="Column"] 41 | margin_top = 86.0 42 | margin_right = 200.0 43 | margin_bottom = 150.0 44 | columns = 6 45 | 46 | [node name="ColorSwatch5" parent="Column/Grid2" instance=ExtResource( 1 )] 47 | color = Color( 0.172549, 0.713726, 0.219608, 1 ) 48 | 49 | [node name="ColorSwatch4" parent="Column/Grid2" instance=ExtResource( 1 )] 50 | margin_left = 68.0 51 | margin_right = 132.0 52 | color = Color( 1, 0.607843, 0, 1 ) 53 | 54 | [node name="ColorSwatch6" parent="Column/Grid2" instance=ExtResource( 1 )] 55 | margin_left = 136.0 56 | margin_right = 200.0 57 | color = Color( 1, 0, 0.305882, 1 ) 58 | 59 | -------------------------------------------------------------------------------- /godot/src/Components/ColorPalette/ColorSwatch/ColorSwatch.gd: -------------------------------------------------------------------------------- 1 | tool 2 | extends Button 3 | 4 | 5 | onready var color_rect : ColorRect = $ColorRect 6 | 7 | export var color : = Color('ffffff') setget set_color 8 | 9 | 10 | func set_color(value:Color) -> void: 11 | color = value 12 | if not color_rect: 13 | return 14 | color_rect.color = value 15 | 16 | 17 | func _ready() -> void: 18 | self.color = color 19 | -------------------------------------------------------------------------------- /godot/src/Components/ColorPalette/ColorSwatch/ColorSwatch.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=2] 2 | 3 | [ext_resource path="res://src/Components/ColorPalette/ColorSwatch/ColorSwatch.gd" type="Script" id=1] 4 | 5 | 6 | 7 | [node name="ColorSwatch" type="Button"] 8 | margin_right = 64.0 9 | margin_bottom = 64.0 10 | rect_min_size = Vector2( 64, 64 ) 11 | script = ExtResource( 1 ) 12 | 13 | [node name="ColorRect" type="ColorRect" parent="."] 14 | anchor_right = 1.0 15 | anchor_bottom = 1.0 16 | margin_left = 8.0 17 | margin_top = 8.0 18 | margin_right = -8.0 19 | margin_bottom = -8.0 20 | mouse_filter = 2 21 | color = Color( 0.0352941, 0.65098, 0.792157, 1 ) 22 | 23 | -------------------------------------------------------------------------------- /godot/src/Components/TextEdit/TextEdit.gd: -------------------------------------------------------------------------------- 1 | tool 2 | extends TextEdit 3 | # Adds syntax highlighting for common GDScript keywords on 4 | # top of TextEdit's defaults 5 | 6 | 7 | export var class_color : = Color(0.6, 0.6, 1.0) 8 | export var member_color : = Color(0.6, 1.0, 0.6) 9 | export var keyword_color : = Color(1.0, 0.6, 0.6) 10 | export var quotes_color : = Color(1.0, 1.0, 0.6) 11 | export var comments_color : = Color("959595") 12 | 13 | 14 | func _ready() -> void: 15 | _add_keywords_highlighting() 16 | 17 | 18 | func _add_keywords_highlighting() -> void: 19 | add_color_region('"', '"', quotes_color) 20 | add_color_region("'", "'", quotes_color) 21 | add_color_region("# ", "\n", comments_color, true) 22 | 23 | var classes : = ClassDB.get_class_list() 24 | for cls in classes: 25 | add_keyword_color(cls, class_color) 26 | var properties : = ClassDB.class_get_property_list(cls) 27 | for property in properties: 28 | for key in property: 29 | add_keyword_color(key, member_color) 30 | 31 | var content : = get_file_content("res://src/Components/TextEdit/keywords.json") 32 | var keywords : Array = parse_json(content) 33 | for keyword in keywords: 34 | add_keyword_color(keyword, keyword_color) 35 | 36 | 37 | func get_file_content(path:String) -> String: 38 | var file = File.new() 39 | var error : int = file.open(path, file.READ) 40 | var content : = "" 41 | if error == OK: 42 | content = file.get_as_text() 43 | file.close() 44 | return content 45 | -------------------------------------------------------------------------------- /godot/src/Components/TextEdit/TextEdit.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=2] 2 | 3 | [ext_resource path="res://assets/theme/gdquest.theme" type="Theme" id=1] 4 | [ext_resource path="res://src/Components/TextEdit/TextEdit.gd" type="Script" id=2] 5 | 6 | 7 | 8 | [node name="TextEdit" type="TextEdit"] 9 | anchor_right = 1.0 10 | anchor_bottom = 1.0 11 | mouse_default_cursor_shape = 0 12 | theme = ExtResource( 1 ) 13 | highlight_current_line = true 14 | syntax_highlighting = true 15 | show_line_numbers = true 16 | highlight_all_occurrences = true 17 | wrap_enabled = true 18 | script = ExtResource( 2 ) 19 | 20 | -------------------------------------------------------------------------------- /godot/src/Components/TextEdit/keywords.json: -------------------------------------------------------------------------------- 1 | [ 2 | "onready", 3 | "var", 4 | "export", 5 | "if", 6 | "elif", 7 | "else", 8 | "for", 9 | "do", 10 | "while", 11 | "match", 12 | "switch", 13 | "case", 14 | "break", 15 | "continue", 16 | "pass", 17 | "return", 18 | "class", 19 | "extends", 20 | "is", 21 | "self", 22 | "tool", 23 | "signal", 24 | "func", 25 | "static", 26 | "const", 27 | "enum", 28 | "setget", 29 | "breakpoint", 30 | "preload", 31 | "yield", 32 | "assert", 33 | "remote", 34 | "master", 35 | "slave", 36 | "sync", 37 | "Color8", 38 | "ColorN", 39 | "abs", 40 | "acos", 41 | "asin", 42 | "assert", 43 | "atan", 44 | "atan2", 45 | "bytes2var", 46 | "cartesian2polar", 47 | "ceil", 48 | "char", 49 | "clamp", 50 | "convert", 51 | "cos", 52 | "cosh", 53 | "db2linear", 54 | "decials", 55 | "dectime", 56 | "def2rad", 57 | "dict2inst", 58 | "ease", 59 | "expo", 60 | "floor", 61 | "fmod", 62 | "fposmod", 63 | "funcref", 64 | "hash", 65 | "inst2dict", 66 | "instance_from_id", 67 | "inverse_lerp", 68 | "is_inf", 69 | "is_nan", 70 | "len", 71 | "lerp", 72 | "linear2db", 73 | "load", 74 | "log", 75 | "max", 76 | "min", 77 | "nearest_po2", 78 | "parse_json", 79 | "polar2cartesian", 80 | "pow", 81 | "preload", 82 | "print", 83 | "print_stack", 84 | "printerr", 85 | "printraw", 86 | "prints", 87 | "printt", 88 | "rad2def", 89 | "rand_range", 90 | "rand_seed", 91 | "randf", 92 | "randi", 93 | "randomize", 94 | "range", 95 | "range_lerp", 96 | "round", 97 | "seed", 98 | "sign", 99 | "sin", 100 | "sinh", 101 | "sqrt", 102 | "stepify", 103 | "str", 104 | "str2var", 105 | "tan", 106 | "tanh", 107 | "to_json", 108 | "type_exists", 109 | "typeof", 110 | "validate_json", 111 | "var2bytes", 112 | "var2str", 113 | "weakref", 114 | "wrapf", 115 | "wrapi", 116 | "yield" 117 | ] 118 | -------------------------------------------------------------------------------- /godot/src/Components/Title.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=2] 2 | 3 | [ext_resource path="res://assets/theme/fonts/font_title.tres" type="DynamicFont" id=1] 4 | 5 | 6 | [node name="Title" type="Label"] 7 | anchor_left = 0.5 8 | anchor_top = 0.5 9 | anchor_right = 0.5 10 | anchor_bottom = 0.5 11 | margin_left = -376.0 12 | margin_top = -18.0 13 | margin_right = 376.0 14 | margin_bottom = 18.0 15 | custom_fonts/font = ExtResource( 1 ) 16 | text = "Color palette" 17 | align = 1 18 | valign = 1 19 | uppercase = true 20 | 21 | -------------------------------------------------------------------------------- /godot/src/Debug/DebugDock.gd: -------------------------------------------------------------------------------- 1 | extends MarginContainer 2 | # Contains UI widgets that display debug info about the game world 3 | 4 | 5 | func _ready() -> void: 6 | visible = false 7 | 8 | 9 | func _input(event: InputEvent) -> void: 10 | if event.is_action_pressed('toggle_debug_menu'): 11 | visible = not visible 12 | accept_event() 13 | -------------------------------------------------------------------------------- /godot/src/Debug/DebugPanel.gd: -------------------------------------------------------------------------------- 1 | tool 2 | extends Control 3 | # Displays the values of properties of a given node 4 | # You can directly change the `properties` property to display multiple values from the `reference` node 5 | # E.g. properties = PoolStringArray(['speed', 'position', 'modulate']) 6 | 7 | 8 | export var reference_path: NodePath 9 | export var properties: PoolStringArray setget set_properties 10 | export var round_decimals: = 2 11 | 12 | onready var _container: VBoxContainer = $VBoxContainer/MarginContainer/VBoxContainer 13 | onready var _title: Label = $VBoxContainer/ReferenceName 14 | onready var reference: Node = get_node(reference_path) setget set_reference 15 | 16 | var _step: = 1.0 / pow(10, round_decimals) 17 | 18 | func _ready() -> void: 19 | if not reference: 20 | return 21 | _setup() 22 | 23 | 24 | func _process(delta) -> void: 25 | _update() 26 | 27 | 28 | func _setup() -> void: 29 | _clear() 30 | _title.text = reference.name 31 | for property in properties: 32 | track(property) 33 | 34 | 35 | func _get_configuration_warning() -> String: 36 | return "" if not reference_path.is_empty() else "Reference Path should not be empty." 37 | 38 | 39 | func track(property: String) -> void: 40 | var label: = Label.new() 41 | label.autowrap = true 42 | label.name = property.capitalize() 43 | _container.add_child(label) 44 | if not property in properties: 45 | properties.append(property) 46 | 47 | 48 | func _clear() -> void: 49 | for property_label in _container.get_children(): 50 | property_label.queue_free() 51 | 52 | 53 | func _update() -> void: 54 | if Engine.editor_hint: 55 | return 56 | var search_array: Array = properties 57 | for property in properties: 58 | var value = reference.get(property) 59 | var label: Label = _container.get_child(search_array.find(property)) 60 | var text: = "" 61 | if value is float: 62 | text = str(stepify(value, _step)) 63 | if value is Vector2: 64 | text = "(%s %s)" % [ 65 | stepify(value.x, _step), 66 | stepify(value.y, _step) 67 | ] 68 | elif value is Vector3: 69 | text = get_vector3_as_string(value) 70 | elif value is Transform: 71 | var elements: PoolStringArray = [ 72 | get_vector3_as_string(value.basis.x), 73 | get_vector3_as_string(value.basis.y), 74 | get_vector3_as_string(value.basis.z), 75 | get_vector3_as_string(value.origin) 76 | ] 77 | text = elements.join("\n") 78 | else: 79 | text = str(value) 80 | label.text = "%s: %s" % [property.capitalize(), text] 81 | 82 | 83 | func get_vector2_as_string(vector: Vector2) -> String: 84 | return "(%s %s)" % [ 85 | stepify(vector.x, _step), 86 | stepify(vector.y, _step) 87 | ] 88 | 89 | 90 | func get_vector3_as_string(vector: Vector3) -> String: 91 | return "(%s %s %s)" % [ 92 | stepify(vector.x, _step), 93 | stepify(vector.y, _step), 94 | stepify(vector.z, _step) 95 | ] 96 | 97 | 98 | func set_properties(value: PoolStringArray) -> void: 99 | properties = value 100 | if not reference: 101 | return 102 | _setup() 103 | 104 | 105 | func set_reference(value: Node) -> void: 106 | reference = value 107 | if reference: 108 | _setup() 109 | -------------------------------------------------------------------------------- /godot/src/Debug/DebugPanel.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=4 format=2] 2 | 3 | [ext_resource path="res://assets/theme/gdquest.theme" type="Theme" id=1] 4 | [ext_resource path="res://src/Debug/DebugPanel.gd" type="Script" id=2] 5 | [ext_resource path="res://assets/theme/fonts/font_title.tres" type="DynamicFont" id=3] 6 | 7 | 8 | [node name="DebugPanel" type="PanelContainer"] 9 | anchor_right = 1.0 10 | anchor_bottom = 1.0 11 | margin_right = -1630.0 12 | margin_bottom = -998.0 13 | theme = ExtResource( 1 ) 14 | script = ExtResource( 2 ) 15 | reference_path = NodePath("") 16 | properties = PoolStringArray( ) 17 | 18 | [node name="VBoxContainer" type="VBoxContainer" parent="."] 19 | margin_right = 290.0 20 | margin_bottom = 102.0 21 | 22 | [node name="ReferenceName" type="Label" parent="VBoxContainer"] 23 | margin_right = 290.0 24 | margin_bottom = 54.0 25 | rect_min_size = Vector2( 0, 54 ) 26 | custom_fonts/font = ExtResource( 3 ) 27 | text = "DebugPanel" 28 | align = 1 29 | valign = 1 30 | 31 | [node name="MarginContainer" type="MarginContainer" parent="VBoxContainer"] 32 | margin_top = 62.0 33 | margin_right = 290.0 34 | margin_bottom = 102.0 35 | size_flags_horizontal = 3 36 | size_flags_vertical = 3 37 | custom_constants/margin_right = 20 38 | custom_constants/margin_top = 20 39 | custom_constants/margin_left = 20 40 | custom_constants/margin_bottom = 20 41 | 42 | [node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/MarginContainer"] 43 | margin_left = 20.0 44 | margin_top = 20.0 45 | margin_right = 270.0 46 | margin_bottom = 20.0 47 | size_flags_horizontal = 3 48 | size_flags_vertical = 3 49 | -------------------------------------------------------------------------------- /godot/src/Styleguide.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=5 format=2] 2 | 3 | [ext_resource path="res://assets/theme/gdquest.theme" type="Theme" id=1] 4 | [ext_resource path="res://src/Components/TextEdit/TextEdit.tscn" type="PackedScene" id=2] 5 | [ext_resource path="res://assets/theme/fonts/default_font_bold.tres" type="DynamicFont" id=3] 6 | [ext_resource path="res://src/Components/Title.tscn" type="PackedScene" id=4] 7 | 8 | [node name="Styleguide" type="Control"] 9 | anchor_right = 1.0 10 | anchor_bottom = 1.0 11 | theme = ExtResource( 1 ) 12 | __meta__ = { 13 | "_edit_lock_": true 14 | } 15 | 16 | [node name="Panel" type="PanelContainer" parent="."] 17 | margin_left = 32.0 18 | margin_top = 32.0 19 | margin_right = 848.0 20 | margin_bottom = 832.0 21 | 22 | [node name="MarginContainer" type="MarginContainer" parent="Panel"] 23 | margin_right = 816.0 24 | margin_bottom = 800.0 25 | custom_constants/margin_right = 32 26 | custom_constants/margin_top = 32 27 | custom_constants/margin_left = 32 28 | custom_constants/margin_bottom = 32 29 | 30 | [node name="Column" type="VBoxContainer" parent="Panel/MarginContainer"] 31 | margin_left = 32.0 32 | margin_top = 32.0 33 | margin_right = 784.0 34 | margin_bottom = 768.0 35 | 36 | [node name="VisualReference" type="VBoxContainer" parent="Panel/MarginContainer/Column"] 37 | margin_right = 752.0 38 | margin_bottom = 118.0 39 | 40 | [node name="Title3" parent="Panel/MarginContainer/Column/VisualReference" instance=ExtResource( 4 )] 41 | anchor_left = 0.0 42 | anchor_top = 0.0 43 | anchor_right = 0.0 44 | anchor_bottom = 0.0 45 | margin_left = 0.0 46 | margin_top = 0.0 47 | margin_right = 752.0 48 | margin_bottom = 36.0 49 | text = "Visual Reference" 50 | 51 | [node name="Label4" type="Label" parent="Panel/MarginContainer/Column/VisualReference"] 52 | margin_top = 44.0 53 | margin_right = 752.0 54 | margin_bottom = 70.0 55 | text = "Normal paragraph text" 56 | 57 | [node name="Row" type="HBoxContainer" parent="Panel/MarginContainer/Column/VisualReference"] 58 | margin_top = 78.0 59 | margin_right = 752.0 60 | margin_bottom = 118.0 61 | 62 | [node name="Button" type="Button" parent="Panel/MarginContainer/Column/VisualReference/Row"] 63 | margin_right = 245.0 64 | margin_bottom = 40.0 65 | rect_min_size = Vector2( 0, 40 ) 66 | size_flags_horizontal = 3 67 | text = "Button" 68 | 69 | [node name="Button2" type="Button" parent="Panel/MarginContainer/Column/VisualReference/Row"] 70 | margin_left = 253.0 71 | margin_right = 498.0 72 | margin_bottom = 40.0 73 | rect_min_size = Vector2( 0, 40 ) 74 | size_flags_horizontal = 3 75 | text = "Button" 76 | 77 | [node name="Button3" type="Button" parent="Panel/MarginContainer/Column/VisualReference/Row"] 78 | margin_left = 506.0 79 | margin_right = 752.0 80 | margin_bottom = 40.0 81 | rect_min_size = Vector2( 0, 40 ) 82 | size_flags_horizontal = 3 83 | text = "Button" 84 | 85 | [node name="HSeparator" type="HSeparator" parent="Panel/MarginContainer/Column"] 86 | margin_top = 126.0 87 | margin_right = 752.0 88 | margin_bottom = 130.0 89 | 90 | [node name="ColorPalette" type="VBoxContainer" parent="Panel/MarginContainer/Column"] 91 | margin_top = 138.0 92 | margin_right = 752.0 93 | margin_bottom = 386.0 94 | 95 | [node name="Title" parent="Panel/MarginContainer/Column/ColorPalette" instance=ExtResource( 4 )] 96 | anchor_left = 0.0 97 | anchor_top = 0.0 98 | anchor_right = 0.0 99 | anchor_bottom = 0.0 100 | margin_left = 0.0 101 | margin_top = 0.0 102 | margin_right = 752.0 103 | margin_bottom = 36.0 104 | 105 | [node name="Label2" type="Label" parent="Panel/MarginContainer/Column/ColorPalette"] 106 | margin_top = 44.0 107 | margin_right = 752.0 108 | margin_bottom = 70.0 109 | custom_fonts/font = ExtResource( 3 ) 110 | text = "Background" 111 | 112 | [node name="Row2" type="HBoxContainer" parent="Panel/MarginContainer/Column/ColorPalette"] 113 | margin_top = 78.0 114 | margin_right = 752.0 115 | margin_bottom = 118.0 116 | 117 | [node name="Color" type="ColorRect" parent="Panel/MarginContainer/Column/ColorPalette/Row2"] 118 | margin_right = 372.0 119 | margin_bottom = 40.0 120 | rect_min_size = Vector2( 0, 40 ) 121 | size_flags_horizontal = 3 122 | color = Color( 0, 0, 0, 1 ) 123 | 124 | [node name="Label" type="Label" parent="Panel/MarginContainer/Column/ColorPalette/Row2/Color"] 125 | anchor_right = 1.0 126 | anchor_bottom = 1.0 127 | margin_left = 16.0 128 | margin_bottom = -1.0 129 | text = "Dark" 130 | valign = 1 131 | 132 | [node name="Color2" type="ColorRect" parent="Panel/MarginContainer/Column/ColorPalette/Row2"] 133 | margin_left = 380.0 134 | margin_right = 752.0 135 | margin_bottom = 40.0 136 | rect_min_size = Vector2( 0, 40 ) 137 | size_flags_horizontal = 3 138 | color = Color( 0.301961, 0.294118, 0.321569, 1 ) 139 | 140 | [node name="Label" type="Label" parent="Panel/MarginContainer/Column/ColorPalette/Row2/Color2"] 141 | anchor_right = 1.0 142 | anchor_bottom = 1.0 143 | margin_left = 16.0 144 | margin_bottom = -1.0 145 | text = "Faint" 146 | valign = 1 147 | 148 | [node name="Label3" type="Label" parent="Panel/MarginContainer/Column/ColorPalette"] 149 | margin_top = 126.0 150 | margin_right = 752.0 151 | margin_bottom = 152.0 152 | custom_fonts/font = ExtResource( 3 ) 153 | text = "Theme" 154 | 155 | [node name="Row4" type="HBoxContainer" parent="Panel/MarginContainer/Column/ColorPalette"] 156 | margin_top = 160.0 157 | margin_right = 752.0 158 | margin_bottom = 200.0 159 | 160 | [node name="Color" type="ColorRect" parent="Panel/MarginContainer/Column/ColorPalette/Row4"] 161 | margin_right = 372.0 162 | margin_bottom = 40.0 163 | rect_min_size = Vector2( 0, 40 ) 164 | size_flags_horizontal = 3 165 | color = Color( 0.0352941, 0.65098, 0.792157, 1 ) 166 | 167 | [node name="Label" type="Label" parent="Panel/MarginContainer/Column/ColorPalette/Row4/Color"] 168 | anchor_right = 1.0 169 | anchor_bottom = 1.0 170 | margin_left = 16.0 171 | text = "Primary" 172 | valign = 1 173 | 174 | [node name="Color2" type="ColorRect" parent="Panel/MarginContainer/Column/ColorPalette/Row4"] 175 | margin_left = 380.0 176 | margin_right = 752.0 177 | margin_bottom = 40.0 178 | rect_min_size = Vector2( 0, 40 ) 179 | size_flags_horizontal = 3 180 | color = Color( 0, 0.27451, 1, 1 ) 181 | 182 | [node name="Label4" type="Label" parent="Panel/MarginContainer/Column/ColorPalette/Row4/Color2"] 183 | anchor_right = 1.0 184 | anchor_bottom = 1.0 185 | margin_left = 20.0 186 | text = "Secondary" 187 | valign = 1 188 | 189 | [node name="Row3" type="HBoxContainer" parent="Panel/MarginContainer/Column/ColorPalette"] 190 | margin_top = 208.0 191 | margin_right = 752.0 192 | margin_bottom = 248.0 193 | 194 | [node name="Color" type="ColorRect" parent="Panel/MarginContainer/Column/ColorPalette/Row3"] 195 | margin_right = 245.0 196 | margin_bottom = 40.0 197 | rect_min_size = Vector2( 0, 40 ) 198 | size_flags_horizontal = 3 199 | color = Color( 0.172549, 0.713726, 0.219608, 1 ) 200 | 201 | [node name="Label" type="Label" parent="Panel/MarginContainer/Column/ColorPalette/Row3/Color"] 202 | anchor_right = 1.0 203 | anchor_bottom = 1.0 204 | margin_left = 16.0 205 | text = "Success" 206 | valign = 1 207 | 208 | [node name="Color2" type="ColorRect" parent="Panel/MarginContainer/Column/ColorPalette/Row3"] 209 | margin_left = 253.0 210 | margin_right = 498.0 211 | margin_bottom = 40.0 212 | rect_min_size = Vector2( 0, 40 ) 213 | size_flags_horizontal = 3 214 | color = Color( 1, 0.607843, 0, 1 ) 215 | 216 | [node name="Label" type="Label" parent="Panel/MarginContainer/Column/ColorPalette/Row3/Color2"] 217 | anchor_right = 1.0 218 | anchor_bottom = 1.0 219 | margin_left = 16.0 220 | text = "Warning" 221 | valign = 1 222 | 223 | [node name="Color3" type="ColorRect" parent="Panel/MarginContainer/Column/ColorPalette/Row3"] 224 | margin_left = 506.0 225 | margin_right = 752.0 226 | margin_bottom = 40.0 227 | rect_min_size = Vector2( 0, 40 ) 228 | size_flags_horizontal = 3 229 | color = Color( 1, 0, 0.305882, 1 ) 230 | 231 | [node name="Label" type="Label" parent="Panel/MarginContainer/Column/ColorPalette/Row3/Color3"] 232 | anchor_right = 1.0 233 | anchor_bottom = 1.0 234 | margin_left = 16.0 235 | text = "Error" 236 | valign = 1 237 | 238 | [node name="HSeparator2" type="HSeparator" parent="Panel/MarginContainer/Column"] 239 | margin_top = 394.0 240 | margin_right = 752.0 241 | margin_bottom = 398.0 242 | 243 | [node name="CodeBlock2" type="VBoxContainer" parent="Panel/MarginContainer/Column"] 244 | margin_top = 406.0 245 | margin_right = 752.0 246 | margin_bottom = 730.0 247 | 248 | [node name="Title2" parent="Panel/MarginContainer/Column/CodeBlock2" instance=ExtResource( 4 )] 249 | anchor_left = 0.0 250 | anchor_top = 0.0 251 | anchor_right = 0.0 252 | anchor_bottom = 0.0 253 | margin_left = 0.0 254 | margin_top = 0.0 255 | margin_right = 752.0 256 | margin_bottom = 36.0 257 | text = "Code block" 258 | 259 | [node name="TextEdit" parent="Panel/MarginContainer/Column/CodeBlock2" instance=ExtResource( 2 )] 260 | anchor_right = 0.0 261 | anchor_bottom = 0.0 262 | margin_top = 44.0 263 | margin_right = 752.0 264 | margin_bottom = 324.0 265 | rect_min_size = Vector2( 0, 280 ) 266 | text = "tool 267 | extends TextEdit 268 | \"\"\" 269 | Adds syntax highlighting for common GDScript keywords on 270 | top of TextEdit's defaults 271 | \"\"\" 272 | 273 | export var class_color : = Color(0.6, 0.6, 1.0) 274 | export var member_color : = Color(0.6, 1.0, 0.6) 275 | export var keyword_color : = Color(1.0, 0.6, 0.6) 276 | export var quotes_color : = Color(1.0, 1.0, 0.6) 277 | export var comments_color : = Color(\"959595\") 278 | 279 | func _ready() -> void: 280 | _add_keywords_highlighting() 281 | " 282 | class_color = Color( 0.6, 0.6, 1, 1 ) 283 | member_color = Color( 0.6, 1, 0.6, 1 ) 284 | keyword_color = Color( 1, 0.6, 0.6, 1 ) 285 | quotes_color = Color( 1, 1, 0.6, 1 ) 286 | comments_color = Color( 0.584314, 0.584314, 0.584314, 1 ) 287 | 288 | [node name="Panel2" type="Panel" parent="."] 289 | margin_left = 880.0 290 | margin_top = 32.0 291 | margin_right = 1696.0 292 | margin_bottom = 512.0 293 | 294 | [node name="Column" type="VBoxContainer" parent="Panel2"] 295 | anchor_right = 1.0 296 | anchor_bottom = 1.0 297 | margin_left = 32.0 298 | margin_top = 32.0 299 | margin_right = -32.0 300 | margin_bottom = -32.0 301 | 302 | [node name="Title3" parent="Panel2/Column" instance=ExtResource( 4 )] 303 | anchor_left = 0.0 304 | anchor_top = 0.0 305 | anchor_right = 0.0 306 | anchor_bottom = 0.0 307 | margin_left = 0.0 308 | margin_top = 0.0 309 | margin_right = 752.0 310 | margin_bottom = 36.0 311 | text = "Styleguide" 312 | 313 | [node name="Label3" type="Label" parent="Panel2/Column"] 314 | margin_top = 44.0 315 | margin_right = 752.0 316 | margin_bottom = 157.0 317 | text = "The project contains reusable UI components to create in-game debug tools efficiently. 318 | We're designing these tools both for debugging purposes and to visualize information for tutorials." 319 | autowrap = true 320 | 321 | [node name="HSeparator" type="HSeparator" parent="Panel2/Column"] 322 | margin_top = 165.0 323 | margin_right = 752.0 324 | margin_bottom = 169.0 325 | 326 | [node name="Title4" parent="Panel2/Column" instance=ExtResource( 4 )] 327 | anchor_left = 0.0 328 | anchor_top = 0.0 329 | anchor_right = 0.0 330 | anchor_bottom = 0.0 331 | margin_left = 0.0 332 | margin_top = 177.0 333 | margin_right = 752.0 334 | margin_bottom = 213.0 335 | text = "Design Principles" 336 | 337 | [node name="Label2" type="RichTextLabel" parent="Panel2/Column"] 338 | margin_top = 221.0 339 | margin_right = 752.0 340 | margin_bottom = 361.0 341 | rect_min_size = Vector2( 0, 140 ) 342 | bbcode_enabled = true 343 | bbcode_text = "- [b]Simple[/b] and sober. We're going for a flat design that doesn't draw too much attention away from what's happening in the game. 344 | - [b]Informative[/b]. Colors, shape, and animations should be intentional and convey meaning." 345 | text = "- Simple and sober. We're going for a flat design that doesn't draw too much attention away from what's happening in the game. 346 | - Informative. Colors, shape, and animations should be intentional and convey meaning." 347 | scroll_active = false 348 | -------------------------------------------------------------------------------- /img/gdquest-ui-debug-tools-banner.svg: -------------------------------------------------------------------------------- 1 | GODOTThemeCheckBoxDropdownItem 1Item 2Item 3Item 4Item 5Item 655% --------------------------------------------------------------------------------