debug console cleanup
							parent
							
								
									166dc3664b
								
							
						
					
					
						commit
						b542bbe01c
					
				
											
												Binary file not shown.
											
										
									
								|  | @ -0,0 +1,33 @@ | |||
| [remap] | ||||
| 
 | ||||
| importer="font_data_dynamic" | ||||
| type="FontFile" | ||||
| uid="uid://dpxde42hku7e4" | ||||
| path="res://.godot/imported/RobotoMono-Bold.ttf-5ef56699eefec9ae3f60998f926ed5e6.fontdata" | ||||
| 
 | ||||
| [deps] | ||||
| 
 | ||||
| source_file="res://Assets/Fonts/RobotoMono-Bold.ttf" | ||||
| dest_files=["res://.godot/imported/RobotoMono-Bold.ttf-5ef56699eefec9ae3f60998f926ed5e6.fontdata"] | ||||
| 
 | ||||
| [params] | ||||
| 
 | ||||
| Rendering=null | ||||
| antialiasing=1 | ||||
| generate_mipmaps=false | ||||
| multichannel_signed_distance_field=false | ||||
| msdf_pixel_range=8 | ||||
| msdf_size=48 | ||||
| allow_system_fallback=true | ||||
| force_autohinter=false | ||||
| hinting=1 | ||||
| subpixel_positioning=1 | ||||
| oversampling=0.0 | ||||
| Fallbacks=null | ||||
| fallbacks=[] | ||||
| Compress=null | ||||
| compress=true | ||||
| preload=[] | ||||
| language_support={} | ||||
| script_support={} | ||||
| opentype_features={} | ||||
											
												Binary file not shown.
											
										
									
								|  | @ -0,0 +1,33 @@ | |||
| [remap] | ||||
| 
 | ||||
| importer="font_data_dynamic" | ||||
| type="FontFile" | ||||
| uid="uid://634gg67hl134" | ||||
| path="res://.godot/imported/RobotoMono-BoldItalic.ttf-2187145e1604e9580f88c665eb740135.fontdata" | ||||
| 
 | ||||
| [deps] | ||||
| 
 | ||||
| source_file="res://Assets/Fonts/RobotoMono-BoldItalic.ttf" | ||||
| dest_files=["res://.godot/imported/RobotoMono-BoldItalic.ttf-2187145e1604e9580f88c665eb740135.fontdata"] | ||||
| 
 | ||||
| [params] | ||||
| 
 | ||||
| Rendering=null | ||||
| antialiasing=1 | ||||
| generate_mipmaps=false | ||||
| multichannel_signed_distance_field=false | ||||
| msdf_pixel_range=8 | ||||
| msdf_size=48 | ||||
| allow_system_fallback=true | ||||
| force_autohinter=false | ||||
| hinting=1 | ||||
| subpixel_positioning=1 | ||||
| oversampling=0.0 | ||||
| Fallbacks=null | ||||
| fallbacks=[] | ||||
| Compress=null | ||||
| compress=true | ||||
| preload=[] | ||||
| language_support={} | ||||
| script_support={} | ||||
| opentype_features={} | ||||
											
												Binary file not shown.
											
										
									
								|  | @ -0,0 +1,33 @@ | |||
| [remap] | ||||
| 
 | ||||
| importer="font_data_dynamic" | ||||
| type="FontFile" | ||||
| uid="uid://dj0652yei7yiw" | ||||
| path="res://.godot/imported/RobotoMono-Italic.ttf-989ab307e516d9cd034e27188c7b1633.fontdata" | ||||
| 
 | ||||
| [deps] | ||||
| 
 | ||||
| source_file="res://Assets/Fonts/RobotoMono-Italic.ttf" | ||||
| dest_files=["res://.godot/imported/RobotoMono-Italic.ttf-989ab307e516d9cd034e27188c7b1633.fontdata"] | ||||
| 
 | ||||
| [params] | ||||
| 
 | ||||
| Rendering=null | ||||
| antialiasing=1 | ||||
| generate_mipmaps=false | ||||
| multichannel_signed_distance_field=false | ||||
| msdf_pixel_range=8 | ||||
| msdf_size=48 | ||||
| allow_system_fallback=true | ||||
| force_autohinter=false | ||||
| hinting=1 | ||||
| subpixel_positioning=1 | ||||
| oversampling=0.0 | ||||
| Fallbacks=null | ||||
| fallbacks=[] | ||||
| Compress=null | ||||
| compress=true | ||||
| preload=[] | ||||
| language_support={} | ||||
| script_support={} | ||||
| opentype_features={} | ||||
											
												Binary file not shown.
											
										
									
								|  | @ -0,0 +1,33 @@ | |||
| [remap] | ||||
| 
 | ||||
| importer="font_data_dynamic" | ||||
| type="FontFile" | ||||
| uid="uid://br1ivkgagsm6e" | ||||
| path="res://.godot/imported/RobotoMono-Regular.ttf-d60df72f1dd7eaf3651e080d6852d0c6.fontdata" | ||||
| 
 | ||||
| [deps] | ||||
| 
 | ||||
| source_file="res://Assets/Fonts/RobotoMono-Regular.ttf" | ||||
| dest_files=["res://.godot/imported/RobotoMono-Regular.ttf-d60df72f1dd7eaf3651e080d6852d0c6.fontdata"] | ||||
| 
 | ||||
| [params] | ||||
| 
 | ||||
| Rendering=null | ||||
| antialiasing=1 | ||||
| generate_mipmaps=false | ||||
| multichannel_signed_distance_field=false | ||||
| msdf_pixel_range=8 | ||||
| msdf_size=48 | ||||
| allow_system_fallback=true | ||||
| force_autohinter=false | ||||
| hinting=1 | ||||
| subpixel_positioning=1 | ||||
| oversampling=0.0 | ||||
| Fallbacks=null | ||||
| fallbacks=[] | ||||
| Compress=null | ||||
| compress=true | ||||
| preload=[] | ||||
| language_support={} | ||||
| script_support={} | ||||
| opentype_features={} | ||||
											
												Binary file not shown.
											
										
									
								|  | @ -0,0 +1,33 @@ | |||
| [remap] | ||||
| 
 | ||||
| importer="font_data_dynamic" | ||||
| type="FontFile" | ||||
| uid="uid://bm6pfkq3ihl5o" | ||||
| path="res://.godot/imported/iosevka-bold.ttf-97aa97b299fedb67e54814ad33f00008.fontdata" | ||||
| 
 | ||||
| [deps] | ||||
| 
 | ||||
| source_file="res://Assets/Fonts/iosevka-bold.ttf" | ||||
| dest_files=["res://.godot/imported/iosevka-bold.ttf-97aa97b299fedb67e54814ad33f00008.fontdata"] | ||||
| 
 | ||||
| [params] | ||||
| 
 | ||||
| Rendering=null | ||||
| antialiasing=1 | ||||
| generate_mipmaps=false | ||||
| multichannel_signed_distance_field=false | ||||
| msdf_pixel_range=8 | ||||
| msdf_size=48 | ||||
| allow_system_fallback=true | ||||
| force_autohinter=false | ||||
| hinting=1 | ||||
| subpixel_positioning=1 | ||||
| oversampling=0.0 | ||||
| Fallbacks=null | ||||
| fallbacks=[] | ||||
| Compress=null | ||||
| compress=true | ||||
| preload=[] | ||||
| language_support={} | ||||
| script_support={} | ||||
| opentype_features={} | ||||
											
												Binary file not shown.
											
										
									
								|  | @ -0,0 +1,33 @@ | |||
| [remap] | ||||
| 
 | ||||
| importer="font_data_dynamic" | ||||
| type="FontFile" | ||||
| uid="uid://bc2ex8d8klivt" | ||||
| path="res://.godot/imported/iosevka-medium.ttf-4b57839c72f99191e193eecde1f3b96c.fontdata" | ||||
| 
 | ||||
| [deps] | ||||
| 
 | ||||
| source_file="res://Assets/Fonts/iosevka-medium.ttf" | ||||
| dest_files=["res://.godot/imported/iosevka-medium.ttf-4b57839c72f99191e193eecde1f3b96c.fontdata"] | ||||
| 
 | ||||
| [params] | ||||
| 
 | ||||
| Rendering=null | ||||
| antialiasing=1 | ||||
| generate_mipmaps=false | ||||
| multichannel_signed_distance_field=false | ||||
| msdf_pixel_range=8 | ||||
| msdf_size=48 | ||||
| allow_system_fallback=true | ||||
| force_autohinter=false | ||||
| hinting=1 | ||||
| subpixel_positioning=1 | ||||
| oversampling=0.0 | ||||
| Fallbacks=null | ||||
| fallbacks=[] | ||||
| Compress=null | ||||
| compress=true | ||||
| preload=[] | ||||
| language_support={} | ||||
| script_support={} | ||||
| opentype_features={} | ||||
											
												Binary file not shown.
											
										
									
								|  | @ -0,0 +1,33 @@ | |||
| [remap] | ||||
| 
 | ||||
| importer="font_data_dynamic" | ||||
| type="FontFile" | ||||
| uid="uid://c88b18xteq6b8" | ||||
| path="res://.godot/imported/iosevka.ttf-42231c60126a7f0f1b381cf93906a3ed.fontdata" | ||||
| 
 | ||||
| [deps] | ||||
| 
 | ||||
| source_file="res://Assets/Fonts/iosevka.ttf" | ||||
| dest_files=["res://.godot/imported/iosevka.ttf-42231c60126a7f0f1b381cf93906a3ed.fontdata"] | ||||
| 
 | ||||
| [params] | ||||
| 
 | ||||
| Rendering=null | ||||
| antialiasing=1 | ||||
| generate_mipmaps=false | ||||
| multichannel_signed_distance_field=false | ||||
| msdf_pixel_range=8 | ||||
| msdf_size=48 | ||||
| allow_system_fallback=true | ||||
| force_autohinter=false | ||||
| hinting=1 | ||||
| subpixel_positioning=1 | ||||
| oversampling=0.0 | ||||
| Fallbacks=null | ||||
| fallbacks=[] | ||||
| Compress=null | ||||
| compress=true | ||||
| preload=[] | ||||
| language_support={} | ||||
| script_support={} | ||||
| opentype_features={} | ||||
|  | @ -2,6 +2,10 @@ namespace SupaLidlGame.Debug; | |||
| 
 | ||||
| public class CharIterator : Iterator<char> | ||||
| { | ||||
|     public int Line { get; protected set; } = 1; | ||||
| 
 | ||||
|     public int Column { get; protected set; } = 0; | ||||
| 
 | ||||
|     public CharIterator(string str) : base(str.ToCharArray()) | ||||
|     { | ||||
| 
 | ||||
|  | @ -18,7 +22,7 @@ public class CharIterator : Iterator<char> | |||
|         if (c == '\n') | ||||
|         { | ||||
|             Line++; | ||||
|             Column = 0; | ||||
|             Column = 1; | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|  |  | |||
|  | @ -18,6 +18,7 @@ public sealed partial class DebugConsole : Control | |||
|                 { | ||||
|                     _entry.PlaceholderText = "Enter Godot expression from " + | ||||
|                         _context.GetPath(); | ||||
|                     _entry.SetContext(_context); | ||||
|                     GetParent<Window>().Title = "Supa Developer Console: " + | ||||
|                         _context.GetPath(); | ||||
|                 } | ||||
|  | @ -27,6 +28,8 @@ public sealed partial class DebugConsole : Control | |||
| 
 | ||||
|     private Entry _entry; | ||||
| 
 | ||||
|     public Entry Entry => _entry; | ||||
| 
 | ||||
|     private RichTextLabel _output; | ||||
| 
 | ||||
|     private Node ctx => Context; | ||||
|  | @ -45,17 +48,21 @@ public sealed partial class DebugConsole : Control | |||
|             } | ||||
|             catch (InterpreterException ex) | ||||
|             { | ||||
|                 _output.Text += ex.Message + '\n'; | ||||
|                 _output.Text += ex.Message; | ||||
|                 if (!ex.Message.StartsWith("Error occurred while")) | ||||
|                 { | ||||
|                     _output.Text += $" @{ex.Line}:{ex.Column}" + '\n'; | ||||
|                     _output.Text += input + '\n'; | ||||
|                     _output.Text += new string(' ', ex.Column - 1) + "^\n"; | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     _output.Text += '\n'; | ||||
|                 } | ||||
|             } | ||||
|         }; | ||||
|     } | ||||
| 
 | ||||
|     enum PathType | ||||
|     { | ||||
|         Node, | ||||
|         Property | ||||
|     }; | ||||
| 
 | ||||
|     public IEnumerable<NodePathToken> SplitPath(NodePath path) | ||||
|     { | ||||
|         CharIterator iterator = new(path); | ||||
|  | @ -67,6 +74,40 @@ public sealed partial class DebugConsole : Control | |||
|         return Variant.From(path).AsNodePath(); | ||||
|     } | ||||
| 
 | ||||
|     public object GetNodeOrProperty(NodePath path) | ||||
|     { | ||||
|         var tokens = new List<NodePathToken>(SplitPath(path)); | ||||
|         Node variant = Context ?? this; | ||||
|         for (int i = 0; i < tokens.Count; i++) | ||||
|         { | ||||
|             var subpath = tokens[i]; | ||||
|             if (i == tokens.Count - 1) | ||||
|             { | ||||
|                 if (subpath.Type == NodePathTokenType.Property) | ||||
|                 { | ||||
|                     return new PropertyPointer(variant, subpath.Path); | ||||
|                 } | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 if (subpath.Type == NodePathTokenType.Node) | ||||
|                 { | ||||
|                     if (subpath.Path != "") | ||||
|                     { | ||||
|                         variant = variant.GetNode(subpath.Path); | ||||
|                     } | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     variant = variant.GetIndexed(subpath.Path) | ||||
|                         .AsGodotObject() as Node; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return variant; | ||||
|     } | ||||
| 
 | ||||
|     public Variant From(NodePath path) | ||||
|     { | ||||
|         Variant variant = Context ?? this; | ||||
|  | @ -103,7 +144,6 @@ public sealed partial class DebugConsole : Control | |||
|             for (int i = 0; i < tokens.Count; i++) | ||||
|             { | ||||
|                 var subpath = tokens[i]; | ||||
|                 GD.Print(subpath); | ||||
|                 if (i == tokens.Count - 1) | ||||
|                 { | ||||
|                     if (subpath.Type == NodePathTokenType.Property) | ||||
|  | @ -154,6 +194,11 @@ public sealed partial class DebugConsole : Control | |||
|         GD.Print(text); | ||||
|     } | ||||
| 
 | ||||
|     public void Inspect(NodePath node) | ||||
|     { | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     public void Execute(string str) | ||||
|     { | ||||
|         //str = Sanitizer.Sanitize(str); | ||||
|  |  | |||
|  | @ -1,4 +1,6 @@ | |||
| using Godot; | ||||
| using GodotUtilities; | ||||
| using System.Linq; | ||||
| 
 | ||||
| namespace SupaLidlGame.Debug; | ||||
| 
 | ||||
|  | @ -10,6 +12,9 @@ public partial class Entry : CodeEdit | |||
|     public override void _Ready() | ||||
|     { | ||||
|         GuiInput += OnGuiInput; | ||||
| 
 | ||||
|         AddStringDelimiter("\'", "\"", true); | ||||
|         AddStringDelimiter("'", "'", true); | ||||
|     } | ||||
| 
 | ||||
|     /* | ||||
|  | @ -28,12 +33,12 @@ public partial class Entry : CodeEdit | |||
| 
 | ||||
|     public void OnGuiInput(InputEvent @event) | ||||
|     { | ||||
|         if (@event is InputEventKey key) | ||||
|         if (@event is InputEventKey key && key.Pressed) | ||||
|         { | ||||
|             if (key.KeyLabel == Key.Enter) | ||||
|             { | ||||
|                 AcceptEvent(); | ||||
|                 if (!key.Pressed) | ||||
|                 if (key.Pressed) | ||||
|                 { | ||||
|                     EmitSignal(SignalName.ConsoleInput, Text); | ||||
| 
 | ||||
|  | @ -45,4 +50,17 @@ public partial class Entry : CodeEdit | |||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public void SetContext(Node context) | ||||
|     { | ||||
|         var properties = context.GetPropertyList(); | ||||
|         var propNames = properties.Select((prop) => prop["name"].ToString()); | ||||
|         foreach (var prop in propNames) | ||||
|         { | ||||
|             AddCodeCompletionOption( | ||||
|                 CodeCompletionKind.Member, | ||||
|                 prop, prop); | ||||
|         } | ||||
|         UpdateCodeCompletionOptions(true); | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,53 @@ | |||
| using Godot; | ||||
| using Godot.Collections; | ||||
| using System.Linq; | ||||
| 
 | ||||
| namespace SupaLidlGame.Debug; | ||||
| 
 | ||||
| public partial class Inspector : Node | ||||
| { | ||||
|     private Node _target; | ||||
| 
 | ||||
|     private Array<Dictionary> _props; | ||||
| 
 | ||||
|     private Dictionary<string, Label> _labels; | ||||
| 
 | ||||
|     public Node Target | ||||
|     { | ||||
|         get => _target; | ||||
|         set | ||||
|         { | ||||
|             _target = value; | ||||
|             UpdateTarget(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public override void _Process(double delta) | ||||
|     { | ||||
|         foreach (var kv in _labels) | ||||
|         { | ||||
|             string propName = kv.Key; | ||||
|             var node = kv.Value; | ||||
|             node.Text = _target.Get(propName).ToString(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public void UpdateTarget() | ||||
|     { | ||||
|         foreach (var kv in _labels) | ||||
|         { | ||||
|             var node = kv.Value; | ||||
|             node.QueueFree(); | ||||
|         } | ||||
|         _labels.Clear(); | ||||
|         LoadAllProperties(); | ||||
|     } | ||||
| 
 | ||||
|     public void LoadAllProperties() | ||||
|     { | ||||
|         _props = _target.GetPropertyList(); | ||||
|         foreach (var kv in _props) | ||||
|         { | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -4,10 +4,6 @@ namespace SupaLidlGame.Debug; | |||
| 
 | ||||
| public class Iterator<T> where T : struct | ||||
| { | ||||
|     public int Line { get; protected set; } = 1; | ||||
| 
 | ||||
|     public int Column { get; protected set; } = 0; | ||||
| 
 | ||||
|     public int Index { get; protected set; } = -1; | ||||
| 
 | ||||
|     protected List<T> _elements; | ||||
|  |  | |||
|  | @ -0,0 +1,20 @@ | |||
| using Godot; | ||||
| 
 | ||||
| namespace SupaLidlGame.Debug; | ||||
| 
 | ||||
| public struct PropertyPointer | ||||
| { | ||||
|     public Node Node { get; set; } | ||||
| 
 | ||||
|     public string Property { get; set; } | ||||
| 
 | ||||
|     public PropertyPointer(Node node, string property) | ||||
|     { | ||||
|         Node = node; | ||||
|         Property = property; | ||||
|     } | ||||
| 
 | ||||
|     public Variant Dereferenced => Node.Get(Property); | ||||
| 
 | ||||
|     public void Set(Variant value) => Node.Set(Property, value); | ||||
| } | ||||
|  | @ -12,23 +12,31 @@ public class LiteralExpression : Expression | |||
|         Literal = literal; | ||||
|     } | ||||
| 
 | ||||
|     public string EscapedLiteral() | ||||
|     { | ||||
|         return Literal.Value.Replace("\"", "\\\"") | ||||
|             .Replace("'", "\\'") | ||||
|             .Replace("\n", "\\n") | ||||
|             .Replace("\t", "\\t"); | ||||
|     } | ||||
| 
 | ||||
|     public override string Transpile() | ||||
|     { | ||||
|         var val = EscapedLiteral(); | ||||
|         if (Literal.Type == TokenType.NodePath) | ||||
|         { | ||||
|             var val = Regex.Escape(Literal.Value); | ||||
|             return $"from.call(\"{val}\")"; | ||||
|         } | ||||
|         else if (Literal.Type == TokenType.String) | ||||
|         { | ||||
|             return $"\"{Literal.Value}\""; | ||||
|             return $"\"{val}\""; | ||||
|         } | ||||
|         return Literal.Value; | ||||
|     } | ||||
| 
 | ||||
|     public string TranspileNodePath() | ||||
|     { | ||||
|         var val = Regex.Escape(Literal.Value); | ||||
|         var val = EscapedLiteral(); | ||||
|         return $"to_node_path.call(\"{val}\")"; | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,68 @@ | |||
| using SupaLidlGame.Debug; | ||||
| using Godot; | ||||
| 
 | ||||
| namespace SupaLidlGame.UI.Debug; | ||||
| 
 | ||||
| public partial class DebugUI : CanvasLayer | ||||
| { | ||||
|     private bool _areWindowsVisible = false; | ||||
|     private Window _lastFocusedWindow = null; | ||||
| 
 | ||||
|     public bool AreWindowsVisible | ||||
|     { | ||||
|         get => _areWindowsVisible; | ||||
|         set | ||||
|         { | ||||
|             _areWindowsVisible = value; | ||||
|             foreach (var node in GetChildren()) | ||||
|             { | ||||
|                 if (node is Window w) | ||||
|                 { | ||||
|                     w.Visible = value; | ||||
|                 } | ||||
|                 else if (node is Control c) | ||||
|                 { | ||||
|                     c.Visible = value; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     //public override void _Ready() | ||||
|     //{ | ||||
|     //    AreWindowsVisible = false; | ||||
| 
 | ||||
|     //    ChildEnteredTree += (Node child) => | ||||
|     //    { | ||||
|     //        if (child is Window w) | ||||
|     //        { | ||||
|     //            void setFocus() | ||||
|     //            { | ||||
|     //                _lastFocusedWindow = w; | ||||
|     //            } | ||||
|     //            w.FocusEntered += setFocus; | ||||
|     //        } | ||||
|     //    }; | ||||
| 
 | ||||
|     //    _lastFocusedWindow = GetNode<Window>("%ConsoleWindow"); | ||||
|     //} | ||||
| 
 | ||||
|     public override void _UnhandledInput(InputEvent @event) | ||||
|     { | ||||
|         if (@event is InputEventKey key) | ||||
|         { | ||||
|             if (key.Keycode == Key.Quoteleft) | ||||
|             { | ||||
|                 if (key.Pressed) | ||||
|                 { | ||||
|                     Toggle(); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public void Toggle() | ||||
|     { | ||||
|         AreWindowsVisible = !AreWindowsVisible; | ||||
|     } | ||||
| } | ||||
|  | @ -1,34 +1,33 @@ | |||
| [gd_scene load_steps=3 format=3 uid="uid://be8bc4eivsg4s"] | ||||
| [gd_scene load_steps=4 format=3 uid="uid://be8bc4eivsg4s"] | ||||
| 
 | ||||
| [ext_resource type="Script" path="res://Debug/DebugConsole.cs" id="1_3fw5a"] | ||||
| [ext_resource type="Script" path="res://UI/Debug/DebugUI.cs" id="1_b7eq2"] | ||||
| [ext_resource type="Script" path="res://Debug/Entry.cs" id="2_kdlsh"] | ||||
| 
 | ||||
| [node name="DebugUI" type="Control"] | ||||
| layout_mode = 3 | ||||
| anchors_preset = 15 | ||||
| anchor_right = 1.0 | ||||
| anchor_bottom = 1.0 | ||||
| grow_horizontal = 2 | ||||
| grow_vertical = 2 | ||||
| [node name="DebugUI" type="CanvasLayer"] | ||||
| process_mode = 3 | ||||
| script = ExtResource("1_b7eq2") | ||||
| 
 | ||||
| [node name="Window" type="Window" parent="."] | ||||
| disable_3d = true | ||||
| gui_embed_subwindows = true | ||||
| [node name="ConsoleWindow" type="Window" parent="."] | ||||
| unique_name_in_owner = true | ||||
| handle_input_locally = false | ||||
| title = "Supa Developer Console" | ||||
| position = Vector2i(32, 32) | ||||
| size = Vector2i(1280, 720) | ||||
| visible = false | ||||
| always_on_top = true | ||||
| 
 | ||||
| [node name="DebugConsole" type="Control" parent="Window"] | ||||
| layout_mode = 3 | ||||
| [node name="DebugConsole" type="ColorRect" parent="ConsoleWindow"] | ||||
| unique_name_in_owner = true | ||||
| anchors_preset = 15 | ||||
| anchor_right = 1.0 | ||||
| anchor_bottom = 1.0 | ||||
| grow_horizontal = 2 | ||||
| grow_vertical = 2 | ||||
| color = Color(0.117647, 0.117647, 0.180392, 1) | ||||
| script = ExtResource("1_3fw5a") | ||||
| 
 | ||||
| [node name="VBoxContainer" type="VBoxContainer" parent="Window/DebugConsole"] | ||||
| [node name="VBoxContainer" type="VBoxContainer" parent="ConsoleWindow/DebugConsole"] | ||||
| layout_mode = 1 | ||||
| anchors_preset = 15 | ||||
| anchor_right = 1.0 | ||||
|  | @ -36,23 +35,21 @@ anchor_bottom = 1.0 | |||
| grow_horizontal = 2 | ||||
| grow_vertical = 2 | ||||
| 
 | ||||
| [node name="Output" type="RichTextLabel" parent="Window/DebugConsole/VBoxContainer"] | ||||
| [node name="Output" type="RichTextLabel" parent="ConsoleWindow/DebugConsole/VBoxContainer"] | ||||
| unique_name_in_owner = true | ||||
| layout_mode = 2 | ||||
| size_flags_vertical = 3 | ||||
| theme_override_font_sizes/normal_font_size = 24 | ||||
| theme_override_font_sizes/bold_font_size = 24 | ||||
| theme_override_font_sizes/normal_font_size = 16 | ||||
| theme_override_font_sizes/bold_font_size = 16 | ||||
| bbcode_enabled = true | ||||
| text = "[b]/root/World:[/b] \\echo :CurrentPlayer:Health | ||||
| 100 | ||||
| " | ||||
| scroll_following = true | ||||
| 
 | ||||
| [node name="Entry" type="CodeEdit" parent="Window/DebugConsole/VBoxContainer"] | ||||
| [node name="Entry" type="CodeEdit" parent="ConsoleWindow/DebugConsole/VBoxContainer"] | ||||
| unique_name_in_owner = true | ||||
| custom_minimum_size = Vector2(0, 48) | ||||
| custom_minimum_size = Vector2(0, 36) | ||||
| layout_mode = 2 | ||||
| theme_override_font_sizes/font_size = 24 | ||||
| theme_override_colors/background_color = Color(0.0941176, 0.0941176, 0.145098, 1) | ||||
| theme_override_font_sizes/font_size = 16 | ||||
| placeholder_text = "Enter a GDScript expression or \\command..." | ||||
| draw_control_chars = true | ||||
| code_completion_enabled = true | ||||
|  |  | |||
|  | @ -0,0 +1,16 @@ | |||
| [gd_resource type="Theme" load_steps=6 format=3 uid="uid://f403wogmdo7s"] | ||||
| 
 | ||||
| [ext_resource type="FontFile" uid="uid://dpxde42hku7e4" path="res://Assets/Fonts/RobotoMono-Bold.ttf" id="1_luw4j"] | ||||
| [ext_resource type="FontFile" uid="uid://dj0652yei7yiw" path="res://Assets/Fonts/RobotoMono-Italic.ttf" id="2_eyrn1"] | ||||
| [ext_resource type="FontFile" uid="uid://634gg67hl134" path="res://Assets/Fonts/RobotoMono-BoldItalic.ttf" id="3_cod6d"] | ||||
| [ext_resource type="FontFile" uid="uid://br1ivkgagsm6e" path="res://Assets/Fonts/RobotoMono-Regular.ttf" id="4_5u55u"] | ||||
| 
 | ||||
| [sub_resource type="FontVariation" id="FontVariation_x2wu6"] | ||||
| base_font = ExtResource("4_5u55u") | ||||
| 
 | ||||
| [resource] | ||||
| default_font = SubResource("FontVariation_x2wu6") | ||||
| /fonts/Bold = ExtResource("1_luw4j") | ||||
| /fonts/Italic = ExtResource("2_eyrn1") | ||||
| /fonts/Oblique = ExtResource("3_cod6d") | ||||
| /fonts/Regular = ExtResource("4_5u55u") | ||||
|  | @ -23,7 +23,6 @@ EventBus="*res://Events/EventBus.cs" | |||
| BaseUI="*res://UI/Base.tscn" | ||||
| World="*res://Scenes/Level.tscn" | ||||
| AudioManager="*res://Audio/AudioManager.cs" | ||||
| Panku="*res://addons/panku_console/console.tscn" | ||||
| DebugUi="*res://UI/Debug/DebugUI.tscn" | ||||
| 
 | ||||
| [dialogue_manager] | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue