diff --git a/project.godot b/project.godot index bde8b8b..70b6010 100644 --- a/project.godot +++ b/project.godot @@ -120,6 +120,11 @@ hotkey_fullscreen={ , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194342,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) ] } +console={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194334,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} [internationalization] diff --git a/scenes/gui/console.tscn b/scenes/gui/console.tscn new file mode 100644 index 0000000..041ffff --- /dev/null +++ b/scenes/gui/console.tscn @@ -0,0 +1,34 @@ +[gd_scene load_steps=2 format=3 uid="uid://bt4pohi6srcvi"] + +[ext_resource type="Script" path="res://src/scene-scripts/console.cs" id="1_c6bre"] + +[node name="console" type="CanvasLayer"] +script = ExtResource("1_c6bre") + +[node name="panel_container" type="PanelContainer" parent="."] +anchors_preset = 10 +anchor_right = 1.0 +grow_horizontal = 2 + +[node name="v_box_container" type="VBoxContainer" parent="panel_container"] +layout_mode = 2 + +[node name="rich_text_label" type="RichTextLabel" parent="panel_container/v_box_container"] +custom_minimum_size = Vector2(0, 150) +layout_mode = 2 +bbcode_enabled = true +scroll_following = true + +[node name="line_edit" type="LineEdit" parent="panel_container/v_box_container"] +layout_mode = 2 +placeholder_text = "Type in cheat or command. Use \"help\" for help." +max_length = 200 +clear_button_enabled = true +flat = true +draw_control_chars = true +select_all_on_focus = true +caret_blink = true +caret_blink_interval = 0.5 +caret_force_displayed = true + +[connection signal="text_submitted" from="panel_container/v_box_container/line_edit" to="." method="OnLineEditTextSubmitted"] diff --git a/scenes/player.tscn b/scenes/player.tscn index 3e6a0de..e19f96a 100644 --- a/scenes/player.tscn +++ b/scenes/player.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=14 format=3 uid="uid://bxaheg7l4h1ip"] +[gd_scene load_steps=15 format=3 uid="uid://bxaheg7l4h1ip"] [ext_resource type="Script" path="res://src/scene-scripts/player.cs" id="1_qehox"] [ext_resource type="Texture2D" uid="uid://olceowuycu8c" path="res://assets/textures/debug/dummy-player-atlas.png" id="2_yu1q5"] [ext_resource type="PackedScene" uid="uid://bkm7365u1mm3o" path="res://scenes/gui/dialog_bubble.tscn" id="3_8f573"] +[ext_resource type="PackedScene" uid="uid://bt4pohi6srcvi" path="res://scenes/gui/console.tscn" id="4_kw3hh"] [sub_resource type="AtlasTexture" id="AtlasTexture_tokqm"] atlas = ExtResource("2_yu1q5") @@ -139,3 +140,6 @@ position = Vector2(0, 38) rotation = 1.57345 shape = SubResource("CapsuleShape2D_38v5o") metadata/_edit_lock_ = true + +[node name="console" parent="." instance=ExtResource("4_kw3hh")] +visible = false diff --git a/src/scene-scripts/console.cs b/src/scene-scripts/console.cs new file mode 100644 index 0000000..32d37e2 --- /dev/null +++ b/src/scene-scripts/console.cs @@ -0,0 +1,56 @@ +using Godot; + +public partial class console : CanvasLayer +{ + public RichTextLabel textblock; + public LineEdit line; + public string error = "Not found! :("; + public override void _Ready() + { + textblock = GetNode("panel_container/v_box_container/rich_text_label"); + line = GetNode("panel_container/v_box_container/line_edit"); + } + public override void _Process(double delta) + { + if (Input.IsActionJustPressed("console")) + { + Visible = !Visible; + line.GrabFocus(); + if (GetParent().Name == "player") GetParent().allowMovement = !Visible; + } + } + public void OnLineEditTextSubmitted(string command) + { + command = command.ToLower(); + line.Clear(); + if (command.Length != 0) textblock.AddText("\n>" + command); + Variant args; + if (command.Split(' ').Length == 2) + { + int i = command.IndexOf(" ") + 1; + args = command.Substring(i); + Call(command.Split(' ')[0], args); + } + if (command.Split(' ').Length > 2) + { + int i = command.IndexOf(" ") + 1; + args = command.Substring(i).Split(' '); + Callv(command.Split(' ')[0], args.AsGodotArray()); + } + else Call(command); + } + + + public void help() + { + textblock.AddText("\n============ Help ============"); + textblock.AddText("\n1. consoleclear - Clears the console"); + textblock.AddText("\n2. speed - Multiplies the player speed by the given value"); + } + public void consoleclear() => textblock.Clear(); + public void speed(float multiplier) + { + if (GetParent().Name == "player") GetParent().speedMultiplier = Mathf.Clamp(multiplier, 0.01f, 15f); + textblock.AddText("\nSet speed to " + Mathf.Clamp(multiplier, 0.01f, 15f)); + } +} diff --git a/src/scene-scripts/player.cs b/src/scene-scripts/player.cs index bbb2683..3e67dce 100644 --- a/src/scene-scripts/player.cs +++ b/src/scene-scripts/player.cs @@ -7,6 +7,7 @@ public partial class player : CharacterBody2D [Export] public string playerName; [Export] public int speed = 200; + public float speedMultiplier = 1; public bool allowMovement = true; public Vector2 movement; public AnimatedSprite2D animatedSprite; @@ -29,7 +30,7 @@ public partial class player : CharacterBody2D if (allowMovement) movement = Input.GetVector("move_left", "move_right", "move_up", "move_down"); else movement = Vector2.Zero; if (movement.Length() != 0) rotCenter.Rotation = new Vector2((float)Math.Round(movement.X, 0), (float)Math.Round(movement.Y, 0)).Angle(); - MoveAndCollide(movement * speed * (float)delta); + MoveAndCollide(movement * speed * speedMultiplier * (float)delta); } public override void _Process(double delta) {