From e0da928eeeede4e235d127f76334303d8d4837b5 Mon Sep 17 00:00:00 2001 From: Damian Date: Sat, 23 Sep 2023 13:33:52 +0200 Subject: [PATCH 1/9] add simple decorative ui elements --- godot/SPECIAL.tres | 4 + godot/UI.tscn | 249 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 253 insertions(+) create mode 100644 godot/SPECIAL.tres diff --git a/godot/SPECIAL.tres b/godot/SPECIAL.tres new file mode 100644 index 0000000..fc7dd0c --- /dev/null +++ b/godot/SPECIAL.tres @@ -0,0 +1,4 @@ +[gd_resource type="Theme" format=3 uid="uid://b16massh2pdbt"] + +[resource] +/font_sizes/12 = 20 diff --git a/godot/UI.tscn b/godot/UI.tscn index 41e1f87..02fe41a 100644 --- a/godot/UI.tscn +++ b/godot/UI.tscn @@ -7,6 +7,7 @@ [node name="Node2D" type="Node2D"] [node name="Ingame" type="CanvasLayer" parent="."] +visible = false [node name="Eingabe" type="VBoxContainer" parent="Ingame"] anchors_preset = 12 @@ -106,3 +107,251 @@ focus_neighbor_bottom = NodePath("../Ingame/Eingabe") texture = SubResource("CompressedTexture2D_ncw85") expand_mode = 1 stretch_mode = 1 + +[node name="HauptMenü" type="CanvasLayer" parent="."] + +[node name="VBoxContainer" type="VBoxContainer" parent="HauptMenü"] +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -640.0 +offset_top = -520.0 +offset_right = 640.0 +offset_bottom = 520.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 0 + +[node name="Titelbild" type="TextureRect" parent="HauptMenü/VBoxContainer"] +custom_minimum_size = Vector2(0, 200) +layout_mode = 2 + +[node name="Pop up Menu Szenen" type="MenuButton" parent="HauptMenü/VBoxContainer"] +custom_minimum_size = Vector2(520, 50) +layout_mode = 2 +size_flags_horizontal = 4 +text = "Beispielszenen" +flat = false +icon_alignment = 1 +switch_on_hover = true +item_count = 12 +popup/item_0/text = "Fantasy" +popup/item_0/id = 0 +popup/item_0/separator = true +popup/item_1/text = "Fantasy 1" +popup/item_1/id = 1 +popup/item_2/text = "Fantasy 2" +popup/item_2/id = 2 +popup/item_3/text = "Sci Fi" +popup/item_3/id = 3 +popup/item_3/separator = true +popup/item_4/text = "Sci Fi 1" +popup/item_4/id = 4 +popup/item_5/text = "Sci Fi 2" +popup/item_5/id = 5 +popup/item_6/text = "Cyberpunk" +popup/item_6/id = 6 +popup/item_6/separator = true +popup/item_7/text = "Cyberpunk 1" +popup/item_7/id = 7 +popup/item_8/text = "Cyberpunk 2" +popup/item_8/id = 8 +popup/item_9/text = "Krimi" +popup/item_9/id = 9 +popup/item_9/separator = true +popup/item_10/text = "Krimi 1" +popup/item_10/id = 10 +popup/item_11/text = "Krimi 2" +popup/item_11/id = 11 + +[node name="TextEdit" type="TextEdit" parent="HauptMenü/VBoxContainer"] +custom_minimum_size = Vector2(520, 300) +layout_direction = 1 +layout_mode = 2 +size_flags_horizontal = 4 +placeholder_text = "Enter a custom setting" +drag_and_drop_selection_enabled = false +middle_mouse_paste_enabled = false + +[node name="Strength" type="HBoxContainer" parent="HauptMenü/VBoxContainer"] +custom_minimum_size = Vector2(520, 50) +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 2 + +[node name="StrengthLabel" type="TextEdit" parent="HauptMenü/VBoxContainer/Strength"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Strength" +editable = false +context_menu_enabled = false +shortcut_keys_enabled = false +selecting_enabled = false +deselect_on_focus_loss_enabled = false +drag_and_drop_selection_enabled = false +virtual_keyboard_enabled = false +middle_mouse_paste_enabled = false + +[node name="TextEdit" type="TextEdit" parent="HauptMenü/VBoxContainer/Strength"] +clip_contents = true +layout_mode = 2 +size_flags_horizontal = 3 +placeholder_text = "0" + +[node name="Perception" type="HBoxContainer" parent="HauptMenü/VBoxContainer"] +custom_minimum_size = Vector2(520, 50) +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 2 + +[node name="PerceptionLabel" type="TextEdit" parent="HauptMenü/VBoxContainer/Perception"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Perception" +editable = false +context_menu_enabled = false +shortcut_keys_enabled = false +selecting_enabled = false +deselect_on_focus_loss_enabled = false +drag_and_drop_selection_enabled = false +virtual_keyboard_enabled = false +middle_mouse_paste_enabled = false + +[node name="TextEdit" type="TextEdit" parent="HauptMenü/VBoxContainer/Perception"] +clip_contents = true +layout_mode = 2 +size_flags_horizontal = 3 +placeholder_text = "0" + +[node name="Endurance" type="HBoxContainer" parent="HauptMenü/VBoxContainer"] +custom_minimum_size = Vector2(520, 50) +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 2 + +[node name="EnduranceLabel" type="TextEdit" parent="HauptMenü/VBoxContainer/Endurance"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Endurance" +editable = false +context_menu_enabled = false +shortcut_keys_enabled = false +selecting_enabled = false +deselect_on_focus_loss_enabled = false +drag_and_drop_selection_enabled = false +virtual_keyboard_enabled = false +middle_mouse_paste_enabled = false + +[node name="TextEdit" type="TextEdit" parent="HauptMenü/VBoxContainer/Endurance"] +clip_contents = true +layout_mode = 2 +size_flags_horizontal = 3 +placeholder_text = "0" + +[node name="Charisma" type="HBoxContainer" parent="HauptMenü/VBoxContainer"] +custom_minimum_size = Vector2(520, 50) +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 2 + +[node name="CharismaLabel" type="TextEdit" parent="HauptMenü/VBoxContainer/Charisma"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Charisma" +editable = false +context_menu_enabled = false +shortcut_keys_enabled = false +selecting_enabled = false +deselect_on_focus_loss_enabled = false +drag_and_drop_selection_enabled = false +virtual_keyboard_enabled = false +middle_mouse_paste_enabled = false + +[node name="TextEdit" type="TextEdit" parent="HauptMenü/VBoxContainer/Charisma"] +clip_contents = true +layout_mode = 2 +size_flags_horizontal = 3 +placeholder_text = "0" + +[node name="Intelligence" type="HBoxContainer" parent="HauptMenü/VBoxContainer"] +custom_minimum_size = Vector2(520, 50) +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 2 + +[node name="CharismaLabel" type="TextEdit" parent="HauptMenü/VBoxContainer/Intelligence"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Intelligence" +editable = false +context_menu_enabled = false +shortcut_keys_enabled = false +selecting_enabled = false +deselect_on_focus_loss_enabled = false +drag_and_drop_selection_enabled = false +virtual_keyboard_enabled = false +middle_mouse_paste_enabled = false + +[node name="TextEdit" type="TextEdit" parent="HauptMenü/VBoxContainer/Intelligence"] +clip_contents = true +layout_mode = 2 +size_flags_horizontal = 3 +placeholder_text = "0" + +[node name="Agillity" type="HBoxContainer" parent="HauptMenü/VBoxContainer"] +custom_minimum_size = Vector2(520, 50) +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 2 + +[node name="AgillityLabel" type="TextEdit" parent="HauptMenü/VBoxContainer/Agillity"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Agillity" +editable = false +context_menu_enabled = false +shortcut_keys_enabled = false +selecting_enabled = false +deselect_on_focus_loss_enabled = false +drag_and_drop_selection_enabled = false +virtual_keyboard_enabled = false +middle_mouse_paste_enabled = false + +[node name="TextEdit" type="TextEdit" parent="HauptMenü/VBoxContainer/Agillity"] +clip_contents = true +layout_mode = 2 +size_flags_horizontal = 3 +placeholder_text = "0" + +[node name="Luck" type="HBoxContainer" parent="HauptMenü/VBoxContainer"] +custom_minimum_size = Vector2(520, 50) +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 2 + +[node name="LuckLabel" type="TextEdit" parent="HauptMenü/VBoxContainer/Luck"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Luck" +editable = false +context_menu_enabled = false +shortcut_keys_enabled = false +selecting_enabled = false +deselect_on_focus_loss_enabled = false +drag_and_drop_selection_enabled = false +virtual_keyboard_enabled = false +middle_mouse_paste_enabled = false + +[node name="TextEdit" type="TextEdit" parent="HauptMenü/VBoxContainer/Luck"] +clip_contents = true +layout_mode = 2 +size_flags_horizontal = 3 +placeholder_text = "0" + +[node name="Playbutton" type="Button" parent="HauptMenü/VBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 3 +text = " PLAY " -- 2.45.2 From b231650cc6d185a8cf646e96e312bb51d6b0e7d1 Mon Sep 17 00:00:00 2001 From: Damian Date: Sat, 23 Sep 2023 17:04:11 +0200 Subject: [PATCH 2/9] HomeScreen und Switching --- godot/God of AI.csproj | 7 - godot/God of AI.sln | 19 --- godot/GodofAi.jpg | Bin 0 -> 51722 bytes godot/GodofAi.jpg.import | 34 +++++ godot/Hauptmenü.cs | 19 +++ godot/Playbutton.cs | 27 ++++ godot/TextEdit.cs | 1 + godot/UI.tscn | 269 ++++++++++++++++++++------------------- godot/icon.svg.import | 2 +- 9 files changed, 221 insertions(+), 157 deletions(-) delete mode 100644 godot/God of AI.csproj delete mode 100644 godot/God of AI.sln create mode 100644 godot/GodofAi.jpg create mode 100644 godot/GodofAi.jpg.import create mode 100644 godot/Hauptmenü.cs create mode 100644 godot/Playbutton.cs diff --git a/godot/God of AI.csproj b/godot/God of AI.csproj deleted file mode 100644 index b012b57..0000000 --- a/godot/God of AI.csproj +++ /dev/null @@ -1,7 +0,0 @@ - - - net6.0 - true - GodofAI - - \ No newline at end of file diff --git a/godot/God of AI.sln b/godot/God of AI.sln deleted file mode 100644 index e78f2f3..0000000 --- a/godot/God of AI.sln +++ /dev/null @@ -1,19 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "God of AI", "God of AI.csproj", "{DE6878AB-07CF-4EBE-8489-F3CFBFE1694C}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - ExportDebug|Any CPU = ExportDebug|Any CPU - ExportRelease|Any CPU = ExportRelease|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {DE6878AB-07CF-4EBE-8489-F3CFBFE1694C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DE6878AB-07CF-4EBE-8489-F3CFBFE1694C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DE6878AB-07CF-4EBE-8489-F3CFBFE1694C}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU - {DE6878AB-07CF-4EBE-8489-F3CFBFE1694C}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU - {DE6878AB-07CF-4EBE-8489-F3CFBFE1694C}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU - {DE6878AB-07CF-4EBE-8489-F3CFBFE1694C}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU - EndGlobalSection -EndGlobal diff --git a/godot/GodofAi.jpg b/godot/GodofAi.jpg new file mode 100644 index 0000000000000000000000000000000000000000..91a4ab5de83c8374e03886f4dc372e46f2d95431 GIT binary patch literal 51722 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 XG!|)zrAmMnX^kpW0I5=?K+pf#XD$4Z literal 0 HcmV?d00001 diff --git a/godot/GodofAi.jpg.import b/godot/GodofAi.jpg.import new file mode 100644 index 0000000..8e892d3 --- /dev/null +++ b/godot/GodofAi.jpg.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://vn2ficr8n4n5" +path="res://.godot/imported/GodofAi.jpg-def59ddc939d56f01f5cd6cd7522f115.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://GodofAi.jpg" +dest_files=["res://.godot/imported/GodofAi.jpg-def59ddc939d56f01f5cd6cd7522f115.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/godot/Hauptmenü.cs b/godot/Hauptmenü.cs new file mode 100644 index 0000000..e36229d --- /dev/null +++ b/godot/Hauptmenü.cs @@ -0,0 +1,19 @@ +using Godot; +using System; + +public partial class Hauptmenü : Node2D +{ + // Called when the node enters the scene tree for the first time. + public override void _Ready() + { + var node = this.GetNode("HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame"); + node.SetProcess(false); + node.Hide(); + } + + // Called every frame. 'delta' is the elapsed time since the previous frame. + public override void _Process(double delta) + { + + } +} diff --git a/godot/Playbutton.cs b/godot/Playbutton.cs new file mode 100644 index 0000000..2d32737 --- /dev/null +++ b/godot/Playbutton.cs @@ -0,0 +1,27 @@ +using Godot; +using System; + +public partial class Playbutton : Button +{ + // Called when the node enters the scene tree for the first time. + public override void _Ready() + { + this.Pressed += ButtonPressed; + } + + // Called every frame. 'delta' is the elapsed time since the previous frame. + public override void _Process(double delta) + { + + } + + private void ButtonPressed() + { + GD.Print("a"); + var node = this.GetNode("Ingame/Ingame"); + node.SetProcess(true); + node.Show(); + var GParent = this.GetTree().Root.GetNode("Root/Hauptmenü/HauptMenü"); + GParent.Hide(); + } +} diff --git a/godot/TextEdit.cs b/godot/TextEdit.cs index 7e557b2..b8e4e51 100644 --- a/godot/TextEdit.cs +++ b/godot/TextEdit.cs @@ -11,5 +11,6 @@ public partial class TextEdit : Godot.TextEdit // Called every frame. 'delta' is the elapsed time since the previous frame. public override void _Process(double delta) { + } } diff --git a/godot/UI.tscn b/godot/UI.tscn index 02fe41a..61e87d6 100644 --- a/godot/UI.tscn +++ b/godot/UI.tscn @@ -1,116 +1,21 @@ -[gd_scene load_steps=3 format=3 uid="uid://1gar30yhw8ay"] +[gd_scene load_steps=6 format=3 uid="uid://1gar30yhw8ay"] +[ext_resource type="Script" path="res://Hauptmenü.cs" id="1_4eu52"] [ext_resource type="Script" path="res://TextEdit.cs" id="1_5gfrp"] +[ext_resource type="Texture2D" uid="uid://vn2ficr8n4n5" path="res://GodofAi.jpg" id="2_m684j"] +[ext_resource type="Script" path="res://Playbutton.cs" id="3_ucfae"] [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_ncw85"] -[node name="Node2D" type="Node2D"] +[node name="Root" type="Node2D"] -[node name="Ingame" type="CanvasLayer" parent="."] -visible = false +[node name="Hauptmenü" type="Node2D" parent="."] +position = Vector2(320, 20) +script = ExtResource("1_4eu52") -[node name="Eingabe" type="VBoxContainer" parent="Ingame"] -anchors_preset = 12 -anchor_top = 1.0 -anchor_right = 1.0 -anchor_bottom = 1.0 -offset_top = -360.0 -offset_right = -500.0 -grow_horizontal = 2 -grow_vertical = 0 -size_flags_vertical = 0 +[node name="HauptMenü" type="CanvasLayer" parent="Hauptmenü"] -[node name="TextEdit" type="TextEdit" parent="Ingame/Eingabe"] -layout_mode = 2 -size_flags_vertical = 3 -script = ExtResource("1_5gfrp") - -[node name="Story" type="VBoxContainer" parent="Ingame"] -anchors_preset = 11 -anchor_left = 1.0 -anchor_right = 1.0 -anchor_bottom = 1.0 -offset_left = -500.0 -grow_horizontal = 0 -grow_vertical = 2 -size_flags_horizontal = 8 - -[node name="TextEdit" type="TextEdit" parent="Ingame/Story"] -layout_mode = 2 -size_flags_vertical = 3 -placeholder_text = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet." -editable = false -context_menu_enabled = false -wrap_mode = 1 - -[node name="Stats" type="VBoxContainer" parent="Ingame"] -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -offset_left = 1280.0 -offset_right = -500.0 -offset_bottom = -360.0 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="TextEdit" type="TextEdit" parent="Ingame/Stats"] -layout_mode = 2 -size_flags_vertical = 3 -placeholder_text = "SampleStat = 1 -" -editable = false -context_menu_enabled = false - -[node name="TextEdit2" type="TextEdit" parent="Ingame/Stats"] -layout_mode = 2 -size_flags_vertical = 3 -editable = false -context_menu_enabled = false - -[node name="TextEdit3" type="TextEdit" parent="Ingame/Stats"] -layout_mode = 2 -size_flags_vertical = 3 -editable = false -context_menu_enabled = false - -[node name="TextEdit4" type="TextEdit" parent="Ingame/Stats"] -layout_mode = 2 -size_flags_vertical = 3 -editable = false -context_menu_enabled = false - -[node name="TextEdit5" type="TextEdit" parent="Ingame/Stats"] -layout_mode = 2 -size_flags_vertical = 3 -editable = false -context_menu_enabled = false - -[node name="TextEdit6" type="TextEdit" parent="Ingame/Stats"] -layout_mode = 2 -size_flags_vertical = 3 -editable = false -context_menu_enabled = false - -[node name="TextEdit7" type="TextEdit" parent="Ingame/Stats"] -layout_mode = 2 -size_flags_vertical = 3 -editable = false -context_menu_enabled = false - -[node name="Szenerie" type="TextureRect" parent="."] -offset_left = -3.0 -offset_top = -1.0 -offset_right = 1277.0 -offset_bottom = 719.0 -focus_neighbor_left = NodePath("../Ingame/Stats") -focus_neighbor_bottom = NodePath("../Ingame/Eingabe") -texture = SubResource("CompressedTexture2D_ncw85") -expand_mode = 1 -stretch_mode = 1 - -[node name="HauptMenü" type="CanvasLayer" parent="."] - -[node name="VBoxContainer" type="VBoxContainer" parent="HauptMenü"] +[node name="VBoxContainer" type="VBoxContainer" parent="Hauptmenü/HauptMenü"] anchors_preset = 8 anchor_left = 0.5 anchor_top = 0.5 @@ -124,11 +29,12 @@ grow_horizontal = 2 grow_vertical = 2 size_flags_horizontal = 0 -[node name="Titelbild" type="TextureRect" parent="HauptMenü/VBoxContainer"] +[node name="Titelbild" type="TextureRect" parent="Hauptmenü/HauptMenü/VBoxContainer"] custom_minimum_size = Vector2(0, 200) layout_mode = 2 +texture = ExtResource("2_m684j") -[node name="Pop up Menu Szenen" type="MenuButton" parent="HauptMenü/VBoxContainer"] +[node name="Pop up Menu Szenen" type="MenuButton" parent="Hauptmenü/HauptMenü/VBoxContainer"] custom_minimum_size = Vector2(520, 50) layout_mode = 2 size_flags_horizontal = 4 @@ -166,7 +72,7 @@ popup/item_10/id = 10 popup/item_11/text = "Krimi 2" popup/item_11/id = 11 -[node name="TextEdit" type="TextEdit" parent="HauptMenü/VBoxContainer"] +[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer"] custom_minimum_size = Vector2(520, 300) layout_direction = 1 layout_mode = 2 @@ -175,13 +81,13 @@ placeholder_text = "Enter a custom setting" drag_and_drop_selection_enabled = false middle_mouse_paste_enabled = false -[node name="Strength" type="HBoxContainer" parent="HauptMenü/VBoxContainer"] +[node name="Strength" type="HBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer"] custom_minimum_size = Vector2(520, 50) layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 2 -[node name="StrengthLabel" type="TextEdit" parent="HauptMenü/VBoxContainer/Strength"] +[node name="StrengthLabel" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Strength"] layout_mode = 2 size_flags_horizontal = 3 text = "Strength" @@ -194,19 +100,19 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="HauptMenü/VBoxContainer/Strength"] +[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Strength"] clip_contents = true layout_mode = 2 size_flags_horizontal = 3 placeholder_text = "0" -[node name="Perception" type="HBoxContainer" parent="HauptMenü/VBoxContainer"] +[node name="Perception" type="HBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer"] custom_minimum_size = Vector2(520, 50) layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 2 -[node name="PerceptionLabel" type="TextEdit" parent="HauptMenü/VBoxContainer/Perception"] +[node name="PerceptionLabel" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Perception"] layout_mode = 2 size_flags_horizontal = 3 text = "Perception" @@ -219,19 +125,19 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="HauptMenü/VBoxContainer/Perception"] +[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Perception"] clip_contents = true layout_mode = 2 size_flags_horizontal = 3 placeholder_text = "0" -[node name="Endurance" type="HBoxContainer" parent="HauptMenü/VBoxContainer"] +[node name="Endurance" type="HBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer"] custom_minimum_size = Vector2(520, 50) layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 2 -[node name="EnduranceLabel" type="TextEdit" parent="HauptMenü/VBoxContainer/Endurance"] +[node name="EnduranceLabel" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Endurance"] layout_mode = 2 size_flags_horizontal = 3 text = "Endurance" @@ -244,19 +150,19 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="HauptMenü/VBoxContainer/Endurance"] +[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Endurance"] clip_contents = true layout_mode = 2 size_flags_horizontal = 3 placeholder_text = "0" -[node name="Charisma" type="HBoxContainer" parent="HauptMenü/VBoxContainer"] +[node name="Charisma" type="HBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer"] custom_minimum_size = Vector2(520, 50) layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 2 -[node name="CharismaLabel" type="TextEdit" parent="HauptMenü/VBoxContainer/Charisma"] +[node name="CharismaLabel" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Charisma"] layout_mode = 2 size_flags_horizontal = 3 text = "Charisma" @@ -269,19 +175,19 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="HauptMenü/VBoxContainer/Charisma"] +[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Charisma"] clip_contents = true layout_mode = 2 size_flags_horizontal = 3 placeholder_text = "0" -[node name="Intelligence" type="HBoxContainer" parent="HauptMenü/VBoxContainer"] +[node name="Intelligence" type="HBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer"] custom_minimum_size = Vector2(520, 50) layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 2 -[node name="CharismaLabel" type="TextEdit" parent="HauptMenü/VBoxContainer/Intelligence"] +[node name="CharismaLabel" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Intelligence"] layout_mode = 2 size_flags_horizontal = 3 text = "Intelligence" @@ -294,19 +200,19 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="HauptMenü/VBoxContainer/Intelligence"] +[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Intelligence"] clip_contents = true layout_mode = 2 size_flags_horizontal = 3 placeholder_text = "0" -[node name="Agillity" type="HBoxContainer" parent="HauptMenü/VBoxContainer"] +[node name="Agillity" type="HBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer"] custom_minimum_size = Vector2(520, 50) layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 2 -[node name="AgillityLabel" type="TextEdit" parent="HauptMenü/VBoxContainer/Agillity"] +[node name="AgillityLabel" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Agillity"] layout_mode = 2 size_flags_horizontal = 3 text = "Agillity" @@ -319,19 +225,19 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="HauptMenü/VBoxContainer/Agillity"] +[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Agillity"] clip_contents = true layout_mode = 2 size_flags_horizontal = 3 placeholder_text = "0" -[node name="Luck" type="HBoxContainer" parent="HauptMenü/VBoxContainer"] +[node name="Luck" type="HBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer"] custom_minimum_size = Vector2(520, 50) layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 2 -[node name="LuckLabel" type="TextEdit" parent="HauptMenü/VBoxContainer/Luck"] +[node name="LuckLabel" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Luck"] layout_mode = 2 size_flags_horizontal = 3 text = "Luck" @@ -344,14 +250,117 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="HauptMenü/VBoxContainer/Luck"] +[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Luck"] clip_contents = true layout_mode = 2 size_flags_horizontal = 3 placeholder_text = "0" -[node name="Playbutton" type="Button" parent="HauptMenü/VBoxContainer"] +[node name="Playbutton" type="Button" parent="Hauptmenü/HauptMenü/VBoxContainer"] layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 3 text = " PLAY " +script = ExtResource("3_ucfae") + +[node name="Ingame" type="Node2D" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton"] +position = Vector2(-699, -1003) + +[node name="Ingame" type="CanvasLayer" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame"] + +[node name="Eingabe" type="VBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame"] +anchors_preset = 12 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = -360.0 +offset_right = -500.0 +grow_horizontal = 2 +grow_vertical = 0 +size_flags_vertical = 0 + +[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame/Eingabe"] +layout_mode = 2 +size_flags_vertical = 3 +script = ExtResource("1_5gfrp") + +[node name="Story" type="VBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame"] +anchors_preset = 11 +anchor_left = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -500.0 +grow_horizontal = 0 +grow_vertical = 2 +size_flags_horizontal = 8 + +[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame/Story"] +layout_mode = 2 +size_flags_vertical = 3 +placeholder_text = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet." +editable = false +context_menu_enabled = false +wrap_mode = 1 + +[node name="Stats" type="VBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 1280.0 +offset_right = -500.0 +offset_bottom = -360.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame/Stats"] +layout_mode = 2 +size_flags_vertical = 3 +placeholder_text = "SampleStat = 1 +" +editable = false +context_menu_enabled = false + +[node name="TextEdit2" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame/Stats"] +layout_mode = 2 +size_flags_vertical = 3 +editable = false +context_menu_enabled = false + +[node name="TextEdit3" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame/Stats"] +layout_mode = 2 +size_flags_vertical = 3 +editable = false +context_menu_enabled = false + +[node name="TextEdit4" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame/Stats"] +layout_mode = 2 +size_flags_vertical = 3 +editable = false +context_menu_enabled = false + +[node name="TextEdit5" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame/Stats"] +layout_mode = 2 +size_flags_vertical = 3 +editable = false +context_menu_enabled = false + +[node name="TextEdit6" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame/Stats"] +layout_mode = 2 +size_flags_vertical = 3 +editable = false +context_menu_enabled = false + +[node name="TextEdit7" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame/Stats"] +layout_mode = 2 +size_flags_vertical = 3 +editable = false +context_menu_enabled = false + +[node name="Szenerie" type="TextureRect" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame"] +offset_left = -3.0 +offset_top = -1.0 +offset_right = 1277.0 +offset_bottom = 719.0 +texture = SubResource("CompressedTexture2D_ncw85") +expand_mode = 1 +stretch_mode = 1 diff --git a/godot/icon.svg.import b/godot/icon.svg.import index 6c1bfba..b5a3868 100644 --- a/godot/icon.svg.import +++ b/godot/icon.svg.import @@ -2,7 +2,7 @@ importer="texture" type="CompressedTexture2D" -uid="uid://c5xk7a15wrsip" +uid="uid://dp2wwugsa03q" path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" metadata={ "vram_texture": false -- 2.45.2 From 0b7257c9719bf1548d8cdda3edf7abb55c8e749a Mon Sep 17 00:00:00 2001 From: finnf28 Date: Sat, 23 Sep 2023 19:42:38 +0200 Subject: [PATCH 3/9] merge --- godot/God of AI.csproj | 10 ++++++++++ godot/Playbutton.cs | 29 ++++++++++++++++++++--------- 2 files changed, 30 insertions(+), 9 deletions(-) create mode 100644 godot/God of AI.csproj diff --git a/godot/God of AI.csproj b/godot/God of AI.csproj new file mode 100644 index 0000000..5297071 --- /dev/null +++ b/godot/God of AI.csproj @@ -0,0 +1,10 @@ + + + net6.0 + true + GodofAI + + + + + \ No newline at end of file diff --git a/godot/Playbutton.cs b/godot/Playbutton.cs index 2d32737..c69859e 100644 --- a/godot/Playbutton.cs +++ b/godot/Playbutton.cs @@ -1,27 +1,38 @@ using Godot; using System; +using System.Net.Cache; public partial class Playbutton : Button { + private LLMApiRequest llmApiRequest; + // Called when the node enters the scene tree for the first time. public override void _Ready() { - this.Pressed += ButtonPressed; + SetProcess(false); + llmApiRequest = GetNode("/root/Node2D/HTTPRequests"); } - // Called every frame. 'delta' is the elapsed time since the previous frame. - public override void _Process(double delta) - { + public override void _Pressed() + { + // llmApiRequest.RequestCompleted += OnRequestCompleted; + // llmApiRequest.Request("https://api.github.com/repos/godotengine/godot/releases/latest"); + llmApiRequest?.PostToApi(OnRequestCompleted); + - } - - private void ButtonPressed() - { GD.Print("a"); var node = this.GetNode("Ingame/Ingame"); node.SetProcess(true); node.Show(); var GParent = this.GetTree().Root.GetNode("Root/Hauptmenü/HauptMenü"); GParent.Hide(); - } + } + + private void OnRequestCompleted(long result, long responseCode, string[] headers, byte[] body) + { + // Godot.Collections.Dictionary json = Json.ParseString(System.Text.Encoding.UTF8.GetString(body)).AsGodotDictionary(); + // GD.Print(json["name"]); + // GD.Print(Json.ParseString(System.Text.Encoding.UTF8.GetString(body)).AsGodotDictionary()); + GD.Print(System.Text.Encoding.UTF8.GetString(body)); + } } -- 2.45.2 From f70cef91bd2512ac827b1bf5c92bc057cccdbbdc Mon Sep 17 00:00:00 2001 From: finnf28 Date: Sat, 23 Sep 2023 19:57:43 +0200 Subject: [PATCH 4/9] added basic http request --- godot/God of AI.sln | 19 +++++++++++++++++++ godot/LLMApiRequests.cs | 37 +++++++++++++++++++++++++++++++++++++ godot/UI.tscn | 6 +++++- 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 godot/God of AI.sln create mode 100644 godot/LLMApiRequests.cs diff --git a/godot/God of AI.sln b/godot/God of AI.sln new file mode 100644 index 0000000..3113f5c --- /dev/null +++ b/godot/God of AI.sln @@ -0,0 +1,19 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "God of AI", "God of AI.csproj", "{9F042379-873C-42A6-B544-C877BAB3A96D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + ExportDebug|Any CPU = ExportDebug|Any CPU + ExportRelease|Any CPU = ExportRelease|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9F042379-873C-42A6-B544-C877BAB3A96D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9F042379-873C-42A6-B544-C877BAB3A96D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9F042379-873C-42A6-B544-C877BAB3A96D}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU + {9F042379-873C-42A6-B544-C877BAB3A96D}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU + {9F042379-873C-42A6-B544-C877BAB3A96D}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU + {9F042379-873C-42A6-B544-C877BAB3A96D}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU + EndGlobalSection +EndGlobal diff --git a/godot/LLMApiRequests.cs b/godot/LLMApiRequests.cs new file mode 100644 index 0000000..c4da0ba --- /dev/null +++ b/godot/LLMApiRequests.cs @@ -0,0 +1,37 @@ +using Godot; +using System; + +public partial class LLMApiRequest : HttpRequest +{ + public record AnswerRequest( + Message[] Context, + string Prompt + ); + + public record Message( + string Role, + string? Content + ); + + private bool PostToApiIsSet = false; + + // Called when the node enters the scene tree for the first time. + public override void _Ready() + { + SetProcess(false); + } + + public void PostToApi(Action action) + { + if(!PostToApiIsSet) + { + RequestCompleted += (long result, long responseCode, string[] headers, byte[] body) => action(result, responseCode, headers, body); + PostToApiIsSet = true; + } + + var answerRequest = new AnswerRequest(new[] { new Message("user", "Hello!"), }, "aodneris"); + + + Request($"http://localhost:5246/LLM/Test", new[] { "Content-Type: application/json" }, HttpClient.Method.Get, Newtonsoft.Json.JsonConvert.SerializeObject(answerRequest)); + } +} diff --git a/godot/UI.tscn b/godot/UI.tscn index 61e87d6..65f19ae 100644 --- a/godot/UI.tscn +++ b/godot/UI.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=6 format=3 uid="uid://1gar30yhw8ay"] +[gd_scene load_steps=7 format=3 uid="uid://1gar30yhw8ay"] [ext_resource type="Script" path="res://Hauptmenü.cs" id="1_4eu52"] [ext_resource type="Script" path="res://TextEdit.cs" id="1_5gfrp"] [ext_resource type="Texture2D" uid="uid://vn2ficr8n4n5" path="res://GodofAi.jpg" id="2_m684j"] [ext_resource type="Script" path="res://Playbutton.cs" id="3_ucfae"] +[ext_resource type="Script" path="res://LLMApiRequests.cs" id="5_pukni"] [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_ncw85"] @@ -364,3 +365,6 @@ offset_bottom = 719.0 texture = SubResource("CompressedTexture2D_ncw85") expand_mode = 1 stretch_mode = 1 + +[node name="LLMApiRequests" type="HTTPRequest" parent="."] +script = ExtResource("5_pukni") -- 2.45.2 From b44bcb8758df31f8dc94fd77652c539995d8461e Mon Sep 17 00:00:00 2001 From: Leon Wilzer Date: Sat, 23 Sep 2023 20:23:55 +0200 Subject: [PATCH 5/9] deutsch wurde vernichtet --- godot/{Hauptmenü.cs => MainMenu.cs} | 4 +- godot/Playbutton.cs | 26 +++---- godot/TextEdit.cs | 16 ----- godot/UI.tscn | 101 ++++++++++++++-------------- 4 files changed, 64 insertions(+), 83 deletions(-) rename godot/{Hauptmenü.cs => MainMenu.cs} (69%) delete mode 100644 godot/TextEdit.cs diff --git a/godot/Hauptmenü.cs b/godot/MainMenu.cs similarity index 69% rename from godot/Hauptmenü.cs rename to godot/MainMenu.cs index e36229d..717d74f 100644 --- a/godot/Hauptmenü.cs +++ b/godot/MainMenu.cs @@ -1,12 +1,12 @@ using Godot; using System; -public partial class Hauptmenü : Node2D +public partial class MainMenu : Node2D { // Called when the node enters the scene tree for the first time. public override void _Ready() { - var node = this.GetNode("HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame"); + var node = this.GetTree().Root.GetNode("Root/Ingame/IngameCanvas"); node.SetProcess(false); node.Hide(); } diff --git a/godot/Playbutton.cs b/godot/Playbutton.cs index c69859e..6946e9d 100644 --- a/godot/Playbutton.cs +++ b/godot/Playbutton.cs @@ -13,26 +13,26 @@ public partial class Playbutton : Button llmApiRequest = GetNode("/root/Node2D/HTTPRequests"); } - public override void _Pressed() - { - // llmApiRequest.RequestCompleted += OnRequestCompleted; - // llmApiRequest.Request("https://api.github.com/repos/godotengine/godot/releases/latest"); - llmApiRequest?.PostToApi(OnRequestCompleted); + public override void _Pressed() + { + // llmApiRequest.RequestCompleted += OnRequestCompleted; + // llmApiRequest.Request("https://api.github.com/repos/godotengine/godot/releases/latest"); + llmApiRequest?.PostToApi(OnRequestCompleted); GD.Print("a"); - var node = this.GetNode("Ingame/Ingame"); + var node = this.GetTree().Root.GetNode("Root/Ingame/IngameCanvas"); node.SetProcess(true); node.Show(); - var GParent = this.GetTree().Root.GetNode("Root/Hauptmenü/HauptMenü"); + var GParent = this.GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas"); GParent.Hide(); - } + } - private void OnRequestCompleted(long result, long responseCode, string[] headers, byte[] body) - { - // Godot.Collections.Dictionary json = Json.ParseString(System.Text.Encoding.UTF8.GetString(body)).AsGodotDictionary(); - // GD.Print(json["name"]); + private void OnRequestCompleted(long result, long responseCode, string[] headers, byte[] body) + { + // Godot.Collections.Dictionary json = Json.ParseString(System.Text.Encoding.UTF8.GetString(body)).AsGodotDictionary(); + // GD.Print(json["name"]); // GD.Print(Json.ParseString(System.Text.Encoding.UTF8.GetString(body)).AsGodotDictionary()); GD.Print(System.Text.Encoding.UTF8.GetString(body)); - } + } } diff --git a/godot/TextEdit.cs b/godot/TextEdit.cs deleted file mode 100644 index b8e4e51..0000000 --- a/godot/TextEdit.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Godot; -using System; - -public partial class TextEdit : Godot.TextEdit -{ - // Called when the node enters the scene tree for the first time. - public override void _Ready() - { - } - - // Called every frame. 'delta' is the elapsed time since the previous frame. - public override void _Process(double delta) - { - - } -} diff --git a/godot/UI.tscn b/godot/UI.tscn index 65f19ae..da2745d 100644 --- a/godot/UI.tscn +++ b/godot/UI.tscn @@ -1,7 +1,6 @@ -[gd_scene load_steps=7 format=3 uid="uid://1gar30yhw8ay"] +[gd_scene load_steps=6 format=3 uid="uid://1gar30yhw8ay"] -[ext_resource type="Script" path="res://Hauptmenü.cs" id="1_4eu52"] -[ext_resource type="Script" path="res://TextEdit.cs" id="1_5gfrp"] +[ext_resource type="Script" path="res://MainMenu.cs" id="1_m0gay"] [ext_resource type="Texture2D" uid="uid://vn2ficr8n4n5" path="res://GodofAi.jpg" id="2_m684j"] [ext_resource type="Script" path="res://Playbutton.cs" id="3_ucfae"] [ext_resource type="Script" path="res://LLMApiRequests.cs" id="5_pukni"] @@ -10,13 +9,13 @@ [node name="Root" type="Node2D"] -[node name="Hauptmenü" type="Node2D" parent="."] +[node name="MainMenu" type="Node2D" parent="."] position = Vector2(320, 20) -script = ExtResource("1_4eu52") +script = ExtResource("1_m0gay") -[node name="HauptMenü" type="CanvasLayer" parent="Hauptmenü"] +[node name="MainMenuCanvas" type="CanvasLayer" parent="MainMenu"] -[node name="VBoxContainer" type="VBoxContainer" parent="Hauptmenü/HauptMenü"] +[node name="VBoxContainer" type="VBoxContainer" parent="MainMenu/MainMenuCanvas"] anchors_preset = 8 anchor_left = 0.5 anchor_top = 0.5 @@ -30,12 +29,12 @@ grow_horizontal = 2 grow_vertical = 2 size_flags_horizontal = 0 -[node name="Titelbild" type="TextureRect" parent="Hauptmenü/HauptMenü/VBoxContainer"] +[node name="Titelbild" type="TextureRect" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(0, 200) layout_mode = 2 texture = ExtResource("2_m684j") -[node name="Pop up Menu Szenen" type="MenuButton" parent="Hauptmenü/HauptMenü/VBoxContainer"] +[node name="Pop up Menu Szenen" type="MenuButton" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) layout_mode = 2 size_flags_horizontal = 4 @@ -73,7 +72,7 @@ popup/item_10/id = 10 popup/item_11/text = "Krimi 2" popup/item_11/id = 11 -[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer"] +[node name="TextEdit" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 300) layout_direction = 1 layout_mode = 2 @@ -82,13 +81,13 @@ placeholder_text = "Enter a custom setting" drag_and_drop_selection_enabled = false middle_mouse_paste_enabled = false -[node name="Strength" type="HBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer"] +[node name="Strength" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 2 -[node name="StrengthLabel" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Strength"] +[node name="StrengthLabel" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Strength"] layout_mode = 2 size_flags_horizontal = 3 text = "Strength" @@ -101,19 +100,19 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Strength"] +[node name="TextEdit" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Strength"] clip_contents = true layout_mode = 2 size_flags_horizontal = 3 placeholder_text = "0" -[node name="Perception" type="HBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer"] +[node name="Perception" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 2 -[node name="PerceptionLabel" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Perception"] +[node name="PerceptionLabel" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Perception"] layout_mode = 2 size_flags_horizontal = 3 text = "Perception" @@ -126,19 +125,19 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Perception"] +[node name="TextEdit" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Perception"] clip_contents = true layout_mode = 2 size_flags_horizontal = 3 placeholder_text = "0" -[node name="Endurance" type="HBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer"] +[node name="Endurance" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 2 -[node name="EnduranceLabel" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Endurance"] +[node name="EnduranceLabel" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Endurance"] layout_mode = 2 size_flags_horizontal = 3 text = "Endurance" @@ -151,19 +150,19 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Endurance"] +[node name="TextEdit" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Endurance"] clip_contents = true layout_mode = 2 size_flags_horizontal = 3 placeholder_text = "0" -[node name="Charisma" type="HBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer"] +[node name="Charisma" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 2 -[node name="CharismaLabel" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Charisma"] +[node name="CharismaLabel" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Charisma"] layout_mode = 2 size_flags_horizontal = 3 text = "Charisma" @@ -176,19 +175,19 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Charisma"] +[node name="TextEdit" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Charisma"] clip_contents = true layout_mode = 2 size_flags_horizontal = 3 placeholder_text = "0" -[node name="Intelligence" type="HBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer"] +[node name="Intelligence" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 2 -[node name="CharismaLabel" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Intelligence"] +[node name="CharismaLabel" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Intelligence"] layout_mode = 2 size_flags_horizontal = 3 text = "Intelligence" @@ -201,19 +200,19 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Intelligence"] +[node name="TextEdit" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Intelligence"] clip_contents = true layout_mode = 2 size_flags_horizontal = 3 placeholder_text = "0" -[node name="Agillity" type="HBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer"] +[node name="Agillity" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 2 -[node name="AgillityLabel" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Agillity"] +[node name="AgillityLabel" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Agillity"] layout_mode = 2 size_flags_horizontal = 3 text = "Agillity" @@ -226,19 +225,19 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Agillity"] +[node name="TextEdit" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Agillity"] clip_contents = true layout_mode = 2 size_flags_horizontal = 3 placeholder_text = "0" -[node name="Luck" type="HBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer"] +[node name="Luck" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 2 -[node name="LuckLabel" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Luck"] +[node name="LuckLabel" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Luck"] layout_mode = 2 size_flags_horizontal = 3 text = "Luck" @@ -251,25 +250,27 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Luck"] +[node name="TextEdit" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Luck"] clip_contents = true layout_mode = 2 size_flags_horizontal = 3 placeholder_text = "0" -[node name="Playbutton" type="Button" parent="Hauptmenü/HauptMenü/VBoxContainer"] +[node name="Playbutton" type="Button" parent="MainMenu/MainMenuCanvas/VBoxContainer"] layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 3 text = " PLAY " script = ExtResource("3_ucfae") -[node name="Ingame" type="Node2D" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton"] -position = Vector2(-699, -1003) +[node name="LLMApiRequests" type="HTTPRequest" parent="."] +script = ExtResource("5_pukni") -[node name="Ingame" type="CanvasLayer" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame"] +[node name="Ingame" type="Node2D" parent="."] -[node name="Eingabe" type="VBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame"] +[node name="IngameCanvas" type="CanvasLayer" parent="Ingame"] + +[node name="Eingabe" type="VBoxContainer" parent="Ingame/IngameCanvas"] anchors_preset = 12 anchor_top = 1.0 anchor_right = 1.0 @@ -280,12 +281,11 @@ grow_horizontal = 2 grow_vertical = 0 size_flags_vertical = 0 -[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame/Eingabe"] +[node name="TextEdit" type="TextEdit" parent="Ingame/IngameCanvas/Eingabe"] layout_mode = 2 size_flags_vertical = 3 -script = ExtResource("1_5gfrp") -[node name="Story" type="VBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame"] +[node name="Story" type="VBoxContainer" parent="Ingame/IngameCanvas"] anchors_preset = 11 anchor_left = 1.0 anchor_right = 1.0 @@ -295,7 +295,7 @@ grow_horizontal = 0 grow_vertical = 2 size_flags_horizontal = 8 -[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame/Story"] +[node name="TextEdit" type="TextEdit" parent="Ingame/IngameCanvas/Story"] layout_mode = 2 size_flags_vertical = 3 placeholder_text = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet." @@ -303,7 +303,7 @@ editable = false context_menu_enabled = false wrap_mode = 1 -[node name="Stats" type="VBoxContainer" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame"] +[node name="Stats" type="VBoxContainer" parent="Ingame/IngameCanvas"] anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 @@ -313,7 +313,7 @@ offset_bottom = -360.0 grow_horizontal = 2 grow_vertical = 2 -[node name="TextEdit" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame/Stats"] +[node name="TextEdit" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] layout_mode = 2 size_flags_vertical = 3 placeholder_text = "SampleStat = 1 @@ -321,43 +321,43 @@ placeholder_text = "SampleStat = 1 editable = false context_menu_enabled = false -[node name="TextEdit2" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame/Stats"] +[node name="TextEdit2" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] layout_mode = 2 size_flags_vertical = 3 editable = false context_menu_enabled = false -[node name="TextEdit3" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame/Stats"] +[node name="TextEdit3" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] layout_mode = 2 size_flags_vertical = 3 editable = false context_menu_enabled = false -[node name="TextEdit4" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame/Stats"] +[node name="TextEdit4" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] layout_mode = 2 size_flags_vertical = 3 editable = false context_menu_enabled = false -[node name="TextEdit5" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame/Stats"] +[node name="TextEdit5" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] layout_mode = 2 size_flags_vertical = 3 editable = false context_menu_enabled = false -[node name="TextEdit6" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame/Stats"] +[node name="TextEdit6" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] layout_mode = 2 size_flags_vertical = 3 editable = false context_menu_enabled = false -[node name="TextEdit7" type="TextEdit" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame/Stats"] +[node name="TextEdit7" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] layout_mode = 2 size_flags_vertical = 3 editable = false context_menu_enabled = false -[node name="Szenerie" type="TextureRect" parent="Hauptmenü/HauptMenü/VBoxContainer/Playbutton/Ingame/Ingame"] +[node name="Szenerie" type="TextureRect" parent="Ingame/IngameCanvas"] offset_left = -3.0 offset_top = -1.0 offset_right = 1277.0 @@ -365,6 +365,3 @@ offset_bottom = 719.0 texture = SubResource("CompressedTexture2D_ncw85") expand_mode = 1 stretch_mode = 1 - -[node name="LLMApiRequests" type="HTTPRequest" parent="."] -script = ExtResource("5_pukni") -- 2.45.2 From 15a7f27cee25754be611c131fdaccdcb86032899 Mon Sep 17 00:00:00 2001 From: finnf28 Date: Sat, 23 Sep 2023 20:58:14 +0200 Subject: [PATCH 6/9] removed api stuff, it was buggy --- godot/LLMApiRequests.cs | 37 ------------------------------------- godot/Playbutton.cs | 6 +++--- godot/UI.tscn | 6 +----- 3 files changed, 4 insertions(+), 45 deletions(-) delete mode 100644 godot/LLMApiRequests.cs diff --git a/godot/LLMApiRequests.cs b/godot/LLMApiRequests.cs deleted file mode 100644 index c4da0ba..0000000 --- a/godot/LLMApiRequests.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Godot; -using System; - -public partial class LLMApiRequest : HttpRequest -{ - public record AnswerRequest( - Message[] Context, - string Prompt - ); - - public record Message( - string Role, - string? Content - ); - - private bool PostToApiIsSet = false; - - // Called when the node enters the scene tree for the first time. - public override void _Ready() - { - SetProcess(false); - } - - public void PostToApi(Action action) - { - if(!PostToApiIsSet) - { - RequestCompleted += (long result, long responseCode, string[] headers, byte[] body) => action(result, responseCode, headers, body); - PostToApiIsSet = true; - } - - var answerRequest = new AnswerRequest(new[] { new Message("user", "Hello!"), }, "aodneris"); - - - Request($"http://localhost:5246/LLM/Test", new[] { "Content-Type: application/json" }, HttpClient.Method.Get, Newtonsoft.Json.JsonConvert.SerializeObject(answerRequest)); - } -} diff --git a/godot/Playbutton.cs b/godot/Playbutton.cs index 6946e9d..4528e8b 100644 --- a/godot/Playbutton.cs +++ b/godot/Playbutton.cs @@ -4,20 +4,20 @@ using System.Net.Cache; public partial class Playbutton : Button { - private LLMApiRequest llmApiRequest; + // private LLMApiRequest llmApiRequest; // Called when the node enters the scene tree for the first time. public override void _Ready() { SetProcess(false); - llmApiRequest = GetNode("/root/Node2D/HTTPRequests"); + // llmApiRequest = GetNode("/root/Node2D/HTTPRequests"); } public override void _Pressed() { // llmApiRequest.RequestCompleted += OnRequestCompleted; // llmApiRequest.Request("https://api.github.com/repos/godotengine/godot/releases/latest"); - llmApiRequest?.PostToApi(OnRequestCompleted); + // llmApiRequest?.PostToApi(OnRequestCompleted); GD.Print("a"); diff --git a/godot/UI.tscn b/godot/UI.tscn index da2745d..a6c1db8 100644 --- a/godot/UI.tscn +++ b/godot/UI.tscn @@ -1,9 +1,8 @@ -[gd_scene load_steps=6 format=3 uid="uid://1gar30yhw8ay"] +[gd_scene load_steps=5 format=3 uid="uid://1gar30yhw8ay"] [ext_resource type="Script" path="res://MainMenu.cs" id="1_m0gay"] [ext_resource type="Texture2D" uid="uid://vn2ficr8n4n5" path="res://GodofAi.jpg" id="2_m684j"] [ext_resource type="Script" path="res://Playbutton.cs" id="3_ucfae"] -[ext_resource type="Script" path="res://LLMApiRequests.cs" id="5_pukni"] [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_ncw85"] @@ -263,9 +262,6 @@ size_flags_vertical = 3 text = " PLAY " script = ExtResource("3_ucfae") -[node name="LLMApiRequests" type="HTTPRequest" parent="."] -script = ExtResource("5_pukni") - [node name="Ingame" type="Node2D" parent="."] [node name="IngameCanvas" type="CanvasLayer" parent="Ingame"] -- 2.45.2 From 0b5029aab16d7d8286a5647af9fe03d13fe9db88 Mon Sep 17 00:00:00 2001 From: finnf28 Date: Sat, 23 Sep 2023 21:07:46 +0200 Subject: [PATCH 7/9] readded api stuff, it was buggy before, shouldnt now --- godot/LLMApiRequests.cs | 36 ++++++++++++++++++++++++++++++++++++ godot/Playbutton.cs | 10 ++++------ godot/UI.tscn | 6 +++++- 3 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 godot/LLMApiRequests.cs diff --git a/godot/LLMApiRequests.cs b/godot/LLMApiRequests.cs new file mode 100644 index 0000000..fd1569c --- /dev/null +++ b/godot/LLMApiRequests.cs @@ -0,0 +1,36 @@ +using Godot; +using System; + +public partial class LLMApiRequests : HttpRequest +{ + public record AnswerRequest( + Message[] Context, + string Prompt + ); + + public record Message( + string Role, + string? Content + ); + + private bool PostToApiIsSet = false; + + public override void _Ready() + { + SetProcess(false); + } + + public void PostToApi(Action action) + { + if(!PostToApiIsSet) + { + RequestCompleted += (long result, long responseCode, string[] headers, byte[] body) => action(result, responseCode, headers, body); + PostToApiIsSet = true; + } + + var answerRequest = new AnswerRequest(new[] { new Message("user", "Hello!"), }, "aodneris"); + + + Request($"http://localhost:5246/LLM/Test", new[] { "Content-Type: application/json" }, HttpClient.Method.Get, Newtonsoft.Json.JsonConvert.SerializeObject(answerRequest)); + } +} diff --git a/godot/Playbutton.cs b/godot/Playbutton.cs index 4528e8b..1a2fdc1 100644 --- a/godot/Playbutton.cs +++ b/godot/Playbutton.cs @@ -4,22 +4,20 @@ using System.Net.Cache; public partial class Playbutton : Button { - // private LLMApiRequest llmApiRequest; + private LLMApiRequests llmApiRequests; // Called when the node enters the scene tree for the first time. public override void _Ready() { SetProcess(false); - // llmApiRequest = GetNode("/root/Node2D/HTTPRequests"); + llmApiRequests = GetNode("/root/LLMApiRequests"); } public override void _Pressed() { - // llmApiRequest.RequestCompleted += OnRequestCompleted; - // llmApiRequest.Request("https://api.github.com/repos/godotengine/godot/releases/latest"); - // llmApiRequest?.PostToApi(OnRequestCompleted); + llmApiRequests?.PostToApi(OnRequestCompleted); + // GD.Print("is null? " + llmApiRequests is null); - GD.Print("a"); var node = this.GetTree().Root.GetNode("Root/Ingame/IngameCanvas"); node.SetProcess(true); diff --git a/godot/UI.tscn b/godot/UI.tscn index a6c1db8..2f288bb 100644 --- a/godot/UI.tscn +++ b/godot/UI.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=5 format=3 uid="uid://1gar30yhw8ay"] +[gd_scene load_steps=6 format=3 uid="uid://1gar30yhw8ay"] [ext_resource type="Script" path="res://MainMenu.cs" id="1_m0gay"] [ext_resource type="Texture2D" uid="uid://vn2ficr8n4n5" path="res://GodofAi.jpg" id="2_m684j"] [ext_resource type="Script" path="res://Playbutton.cs" id="3_ucfae"] +[ext_resource type="Script" path="res://LLMApiRequests.cs" id="4_ff2gi"] [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_ncw85"] @@ -361,3 +362,6 @@ offset_bottom = 719.0 texture = SubResource("CompressedTexture2D_ncw85") expand_mode = 1 stretch_mode = 1 + +[node name="LLMApiRequests" type="HTTPRequest" parent="."] +script = ExtResource("4_ff2gi") -- 2.45.2 From c8e0058ce313eec511b9852482cbf1f396b096d6 Mon Sep 17 00:00:00 2001 From: Leon Wilzer Date: Sat, 23 Sep 2023 21:50:54 +0200 Subject: [PATCH 8/9] tumbleweed --- godot/UI.tscn | 56 +++++++++++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/godot/UI.tscn b/godot/UI.tscn index 2f288bb..01776a5 100644 --- a/godot/UI.tscn +++ b/godot/UI.tscn @@ -100,11 +100,11 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Strength"] -clip_contents = true +[node name="SpinBox" type="SpinBox" parent="MainMenu/MainMenuCanvas/VBoxContainer/Strength"] layout_mode = 2 -size_flags_horizontal = 3 -placeholder_text = "0" +min_value = 1.0 +max_value = 10.0 +value = 1.0 [node name="Perception" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) @@ -125,11 +125,11 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Perception"] -clip_contents = true +[node name="SpinBox" type="SpinBox" parent="MainMenu/MainMenuCanvas/VBoxContainer/Perception"] layout_mode = 2 -size_flags_horizontal = 3 -placeholder_text = "0" +min_value = 1.0 +max_value = 10.0 +value = 1.0 [node name="Endurance" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) @@ -150,11 +150,11 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Endurance"] -clip_contents = true +[node name="SpinBox" type="SpinBox" parent="MainMenu/MainMenuCanvas/VBoxContainer/Endurance"] layout_mode = 2 -size_flags_horizontal = 3 -placeholder_text = "0" +min_value = 1.0 +max_value = 10.0 +value = 1.0 [node name="Charisma" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) @@ -175,11 +175,11 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Charisma"] -clip_contents = true +[node name="SpinBox" type="SpinBox" parent="MainMenu/MainMenuCanvas/VBoxContainer/Charisma"] layout_mode = 2 -size_flags_horizontal = 3 -placeholder_text = "0" +min_value = 1.0 +max_value = 10.0 +value = 1.0 [node name="Intelligence" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) @@ -200,11 +200,11 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Intelligence"] -clip_contents = true +[node name="SpinBox" type="SpinBox" parent="MainMenu/MainMenuCanvas/VBoxContainer/Intelligence"] layout_mode = 2 -size_flags_horizontal = 3 -placeholder_text = "0" +min_value = 1.0 +max_value = 10.0 +value = 1.0 [node name="Agillity" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) @@ -225,11 +225,11 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Agillity"] -clip_contents = true +[node name="SpinBox" type="SpinBox" parent="MainMenu/MainMenuCanvas/VBoxContainer/Agillity"] layout_mode = 2 -size_flags_horizontal = 3 -placeholder_text = "0" +min_value = 1.0 +max_value = 10.0 +value = 1.0 [node name="Luck" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) @@ -250,11 +250,11 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="TextEdit" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Luck"] -clip_contents = true +[node name="SpinBox" type="SpinBox" parent="MainMenu/MainMenuCanvas/VBoxContainer/Luck"] layout_mode = 2 -size_flags_horizontal = 3 -placeholder_text = "0" +min_value = 1.0 +max_value = 10.0 +value = 1.0 [node name="Playbutton" type="Button" parent="MainMenu/MainMenuCanvas/VBoxContainer"] layout_mode = 2 -- 2.45.2 From 597bd928d773b1f582ce7f9bfd8c2ed96bfb030e Mon Sep 17 00:00:00 2001 From: Leon Wilzer Date: Sun, 24 Sep 2023 12:10:42 +0200 Subject: [PATCH 9/9] ui --- godot/AttributeBox.cs | 30 ++++++++++++++++++ godot/LLMApiRequests.cs | 4 +-- godot/MainMenu.cs | 3 +- godot/Playbutton.cs | 38 +++++++++++++++++------ godot/Player.cs | 36 +++++++++++++++++++++ godot/UI.tscn | 69 ++++++++++++++++++++++++++++++++++------- 6 files changed, 156 insertions(+), 24 deletions(-) create mode 100644 godot/AttributeBox.cs create mode 100644 godot/Player.cs diff --git a/godot/AttributeBox.cs b/godot/AttributeBox.cs new file mode 100644 index 0000000..c382303 --- /dev/null +++ b/godot/AttributeBox.cs @@ -0,0 +1,30 @@ +using Godot; +using System; + +public partial class AttributeBox : SpinBox +{ + // Called when the node enters the scene tree for the first time. + public override void _Ready() + { + } + + // Called every frame. 'delta' is the elapsed time since the previous frame. + public override void _Process(double delta) + { + } + + public override void _ValueChanged(double new_value) + { + nuint Strength = (nuint) GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas/VBoxContainer/Strength/SpinBox").Value; + nuint Perception = (nuint) GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas/VBoxContainer/Perception/SpinBox").Value; + nuint Endurance = (nuint) GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas/VBoxContainer/Endurance/SpinBox").Value; + nuint Charisma = (nuint) GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas/VBoxContainer/Charisma/SpinBox").Value; + nuint Intelligence = (nuint) GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas/VBoxContainer/Intelligence/SpinBox").Value; + nuint Agility = (nuint) GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas/VBoxContainer/Agility/SpinBox").Value; + nuint Luck = (nuint) GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas/VBoxContainer/Luck/SpinBox").Value; + string Name = GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas/VBoxContainer/Name/NameEdit").Text; + Player player = new Player{Name = Name, Strength = Strength, Perception = Perception, Endurance = Endurance, Charisma = Charisma, Intelligence = Intelligence, Agility = Agility, Luck = Luck}; + + GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas/VBoxContainer/PointsLeft").Text = String.Format("Attribute Points Left: {0}", 35-player.StatSum()); + } +} diff --git a/godot/LLMApiRequests.cs b/godot/LLMApiRequests.cs index fd1569c..e2e7614 100644 --- a/godot/LLMApiRequests.cs +++ b/godot/LLMApiRequests.cs @@ -29,8 +29,8 @@ public partial class LLMApiRequests : HttpRequest } var answerRequest = new AnswerRequest(new[] { new Message("user", "Hello!"), }, "aodneris"); - - Request($"http://localhost:5246/LLM/Test", new[] { "Content-Type: application/json" }, HttpClient.Method.Get, Newtonsoft.Json.JsonConvert.SerializeObject(answerRequest)); + + Request($"http://localhost:5246/LLM/Test", new[] { "Content-Type: application/json" }, HttpClient.Method.Get, Newtonsoft.Json.JsonConvert.SerializeObject(answerRequest)); } } diff --git a/godot/MainMenu.cs b/godot/MainMenu.cs index 717d74f..e9af8d3 100644 --- a/godot/MainMenu.cs +++ b/godot/MainMenu.cs @@ -13,7 +13,6 @@ public partial class MainMenu : Node2D // Called every frame. 'delta' is the elapsed time since the previous frame. public override void _Process(double delta) - { - + { } } diff --git a/godot/Playbutton.cs b/godot/Playbutton.cs index 1a2fdc1..1f9d101 100644 --- a/godot/Playbutton.cs +++ b/godot/Playbutton.cs @@ -15,15 +15,35 @@ public partial class Playbutton : Button public override void _Pressed() { - llmApiRequests?.PostToApi(OnRequestCompleted); - // GD.Print("is null? " + llmApiRequests is null); - - GD.Print("a"); - var node = this.GetTree().Root.GetNode("Root/Ingame/IngameCanvas"); - node.SetProcess(true); - node.Show(); - var GParent = this.GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas"); - GParent.Hide(); + nuint Strength = (nuint) GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas/VBoxContainer/Strength/SpinBox").Value; + nuint Perception = (nuint) GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas/VBoxContainer/Perception/SpinBox").Value; + nuint Endurance = (nuint) GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas/VBoxContainer/Endurance/SpinBox").Value; + nuint Charisma = (nuint) GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas/VBoxContainer/Charisma/SpinBox").Value; + nuint Intelligence = (nuint) GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas/VBoxContainer/Intelligence/SpinBox").Value; + nuint Agility = (nuint) GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas/VBoxContainer/Agility/SpinBox").Value; + nuint Luck = (nuint) GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas/VBoxContainer/Luck/SpinBox").Value; + string Name = GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas/VBoxContainer/Name/NameEdit").Text; + Player player = new Player{Name = Name, Strength = Strength, Perception = Perception, Endurance = Endurance, Charisma = Charisma, Intelligence = Intelligence, Agility = Agility, Luck = Luck}; + + if (player.isValid()) + { + llmApiRequests?.PostToApi(OnRequestCompleted); + + var node = this.GetTree().Root.GetNode("Root/Ingame/IngameCanvas"); + node.SetProcess(true); + GetTree().Root.GetNode("Root/Ingame/IngameCanvas/Stats/Strength").Text = String.Format("Strength: {0}", Strength); + GetTree().Root.GetNode("Root/Ingame/IngameCanvas/Stats/Perception").Text = String.Format("Perception: {0}", Perception); + GetTree().Root.GetNode("Root/Ingame/IngameCanvas/Stats/Endurance").Text = String.Format("Endurance: {0}", Endurance); + GetTree().Root.GetNode("Root/Ingame/IngameCanvas/Stats/Charisma").Text = String.Format("Charisma: {0}", Charisma); + GetTree().Root.GetNode("Root/Ingame/IngameCanvas/Stats/Intelligence").Text = String.Format("Intelligence: {0}", Intelligence); + GetTree().Root.GetNode("Root/Ingame/IngameCanvas/Stats/Agility").Text = String.Format("Agility: {0}", Agility); + GetTree().Root.GetNode("Root/Ingame/IngameCanvas/Stats/Luck").Text = String.Format("Luck: {0}", Luck); + GetTree().Root.GetNode("Root/Ingame/IngameCanvas/Stats/Name").Text = String.Format("Name: {0}", Name); + + node.Show(); + var GParent = this.GetTree().Root.GetNode("Root/MainMenu/MainMenuCanvas"); + GParent.Hide(); + } } private void OnRequestCompleted(long result, long responseCode, string[] headers, byte[] body) diff --git a/godot/Player.cs b/godot/Player.cs new file mode 100644 index 0000000..5995e4b --- /dev/null +++ b/godot/Player.cs @@ -0,0 +1,36 @@ +public record Player +{ + public string Name { get; init; } + public nuint Strength { get; init; } + public nuint Perception { get; init; } + public nuint Endurance { get; init; } + public nuint Charisma { get; init; } + public nuint Intelligence { get; init; } + public nuint Agility { get; init; } + public nuint Luck { get; init; } + +// public Person(string Name, nuint Strength, nuint Perception, nuint Endurance, nuint Charisma, nuint Intelligence, nuint Agility, nuint Luck, ) +// { +// Name + //} + + public bool isValid() + { + return StatSum() <= 35; + } + + public nint StatSum() + { + nuint sum = 0; + + sum += Strength; + sum += Perception; + sum += Endurance; + sum += Charisma; + sum += Intelligence; + sum += Agility; + sum += Luck; + + return (nint) sum; + } +} diff --git a/godot/UI.tscn b/godot/UI.tscn index 01776a5..217726d 100644 --- a/godot/UI.tscn +++ b/godot/UI.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=6 format=3 uid="uid://1gar30yhw8ay"] +[gd_scene load_steps=7 format=3 uid="uid://1gar30yhw8ay"] [ext_resource type="Script" path="res://MainMenu.cs" id="1_m0gay"] [ext_resource type="Texture2D" uid="uid://vn2ficr8n4n5" path="res://GodofAi.jpg" id="2_m684j"] +[ext_resource type="Script" path="res://AttributeBox.cs" id="3_hpms0"] [ext_resource type="Script" path="res://Playbutton.cs" id="3_ucfae"] [ext_resource type="Script" path="res://LLMApiRequests.cs" id="4_ff2gi"] @@ -81,6 +82,39 @@ placeholder_text = "Enter a custom setting" drag_and_drop_selection_enabled = false middle_mouse_paste_enabled = false +[node name="PointsLeft" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer"] +custom_minimum_size = Vector2(520, 50) +layout_direction = 1 +layout_mode = 2 +size_flags_horizontal = 4 +text = "Attribute Points Left: 28" +editable = false +drag_and_drop_selection_enabled = false +middle_mouse_paste_enabled = false + +[node name="Name" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] +custom_minimum_size = Vector2(520, 50) +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 3 + +[node name="NameLabel" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Name"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Character Name:" +editable = false +context_menu_enabled = false +shortcut_keys_enabled = false +selecting_enabled = false +deselect_on_focus_loss_enabled = false +drag_and_drop_selection_enabled = false +virtual_keyboard_enabled = false +middle_mouse_paste_enabled = false + +[node name="NameEdit" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Name"] +layout_mode = 2 +size_flags_horizontal = 3 + [node name="Strength" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) layout_mode = 2 @@ -105,6 +139,7 @@ layout_mode = 2 min_value = 1.0 max_value = 10.0 value = 1.0 +script = ExtResource("3_hpms0") [node name="Perception" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) @@ -130,6 +165,7 @@ layout_mode = 2 min_value = 1.0 max_value = 10.0 value = 1.0 +script = ExtResource("3_hpms0") [node name="Endurance" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) @@ -155,6 +191,7 @@ layout_mode = 2 min_value = 1.0 max_value = 10.0 value = 1.0 +script = ExtResource("3_hpms0") [node name="Charisma" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) @@ -180,6 +217,7 @@ layout_mode = 2 min_value = 1.0 max_value = 10.0 value = 1.0 +script = ExtResource("3_hpms0") [node name="Intelligence" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) @@ -205,14 +243,15 @@ layout_mode = 2 min_value = 1.0 max_value = 10.0 value = 1.0 +script = ExtResource("3_hpms0") -[node name="Agillity" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] +[node name="Agility" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 2 -[node name="AgillityLabel" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Agillity"] +[node name="AgilityLabel" type="TextEdit" parent="MainMenu/MainMenuCanvas/VBoxContainer/Agility"] layout_mode = 2 size_flags_horizontal = 3 text = "Agillity" @@ -225,11 +264,12 @@ drag_and_drop_selection_enabled = false virtual_keyboard_enabled = false middle_mouse_paste_enabled = false -[node name="SpinBox" type="SpinBox" parent="MainMenu/MainMenuCanvas/VBoxContainer/Agillity"] +[node name="SpinBox" type="SpinBox" parent="MainMenu/MainMenuCanvas/VBoxContainer/Agility"] layout_mode = 2 min_value = 1.0 max_value = 10.0 value = 1.0 +script = ExtResource("3_hpms0") [node name="Luck" type="HBoxContainer" parent="MainMenu/MainMenuCanvas/VBoxContainer"] custom_minimum_size = Vector2(520, 50) @@ -255,6 +295,7 @@ layout_mode = 2 min_value = 1.0 max_value = 10.0 value = 1.0 +script = ExtResource("3_hpms0") [node name="Playbutton" type="Button" parent="MainMenu/MainMenuCanvas/VBoxContainer"] layout_mode = 2 @@ -310,7 +351,13 @@ offset_bottom = -360.0 grow_horizontal = 2 grow_vertical = 2 -[node name="TextEdit" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] +[node name="Name" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] +layout_mode = 2 +size_flags_vertical = 3 +editable = false +wrap_mode = 1 + +[node name="Strength" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] layout_mode = 2 size_flags_vertical = 3 placeholder_text = "SampleStat = 1 @@ -318,37 +365,37 @@ placeholder_text = "SampleStat = 1 editable = false context_menu_enabled = false -[node name="TextEdit2" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] +[node name="Perception" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] layout_mode = 2 size_flags_vertical = 3 editable = false context_menu_enabled = false -[node name="TextEdit3" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] +[node name="Endurance" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] layout_mode = 2 size_flags_vertical = 3 editable = false context_menu_enabled = false -[node name="TextEdit4" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] +[node name="Charisma" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] layout_mode = 2 size_flags_vertical = 3 editable = false context_menu_enabled = false -[node name="TextEdit5" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] +[node name="Intelligence" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] layout_mode = 2 size_flags_vertical = 3 editable = false context_menu_enabled = false -[node name="TextEdit6" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] +[node name="Agility" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] layout_mode = 2 size_flags_vertical = 3 editable = false context_menu_enabled = false -[node name="TextEdit7" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] +[node name="Luck" type="TextEdit" parent="Ingame/IngameCanvas/Stats"] layout_mode = 2 size_flags_vertical = 3 editable = false -- 2.45.2