From a943890e2be025b86e66f83f45562a9612febdc4 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Fri, 10 Feb 2023 07:07:00 -0700 Subject: [PATCH] NAT Godot Playground click-and-drag proof of concept --- projects/nat-godot-playground/.gitignore | 3 ++ projects/nat-godot-playground/EntryControl.gd | 28 ++++++++++++ projects/nat-godot-playground/Main.tscn | 41 ++++++++++++++++++ projects/nat-godot-playground/Playground.gd | 27 ++++++++++++ .../nat-godot-playground/default_env.tres | 7 +++ projects/nat-godot-playground/icon.png | Bin 0 -> 3305 bytes .../nat-godot-playground.csproj | 6 +++ .../nat-godot-playground.sln | 19 ++++++++ projects/nat-godot-playground/project.godot | 31 +++++++++++++ 9 files changed, 162 insertions(+) create mode 100644 projects/nat-godot-playground/.gitignore create mode 100644 projects/nat-godot-playground/EntryControl.gd create mode 100644 projects/nat-godot-playground/Main.tscn create mode 100644 projects/nat-godot-playground/Playground.gd create mode 100644 projects/nat-godot-playground/default_env.tres create mode 100644 projects/nat-godot-playground/icon.png create mode 100644 projects/nat-godot-playground/nat-godot-playground.csproj create mode 100644 projects/nat-godot-playground/nat-godot-playground.sln create mode 100644 projects/nat-godot-playground/project.godot diff --git a/projects/nat-godot-playground/.gitignore b/projects/nat-godot-playground/.gitignore new file mode 100644 index 00000000..429a8581 --- /dev/null +++ b/projects/nat-godot-playground/.gitignore @@ -0,0 +1,3 @@ +*.import +.import/ +.mono/ diff --git a/projects/nat-godot-playground/EntryControl.gd b/projects/nat-godot-playground/EntryControl.gd new file mode 100644 index 00000000..37331a32 --- /dev/null +++ b/projects/nat-godot-playground/EntryControl.gd @@ -0,0 +1,28 @@ +extends PanelContainer + + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" +var z = 0 + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass + + +func _on_EntryControl_mouse_entered(): + var current_focus_z = get_parent().current_focus_z + if is_nan(current_focus_z) or current_focus_z <= self.z: + get_parent().current_focus = self + get_parent().current_focus_z = self.z + +func _on_EntryControl_mouse_exited(): + if get_parent().current_focus == self: + get_parent().current_focus = null + get_parent().current_focus_z = NAN diff --git a/projects/nat-godot-playground/Main.tscn b/projects/nat-godot-playground/Main.tscn new file mode 100644 index 00000000..d5a1337a --- /dev/null +++ b/projects/nat-godot-playground/Main.tscn @@ -0,0 +1,41 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://Playground.gd" type="Script" id=1] +[ext_resource path="res://EntryControl.gd" type="Script" id=2] + +[node name="Control" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 + +[node name="PlaygroundTabContainer" type="TabContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_right = 8.0 +margin_bottom = 36.0 + +[node name="PlaygroundScrollContainer" type="ScrollContainer" parent="PlaygroundTabContainer"] +margin_right = -8.0 +margin_bottom = -36.0 +rect_min_size = Vector2( 1280, 720 ) + +[node name="Playground" type="Control" parent="PlaygroundTabContainer/PlaygroundScrollContainer"] +margin_right = 1280.0 +margin_bottom = 720.0 +rect_min_size = Vector2( 1280, 720 ) +script = ExtResource( 1 ) + +[node name="EntryContainer" type="PanelContainer" parent="PlaygroundTabContainer/PlaygroundScrollContainer/Playground"] +margin_right = 40.0 +margin_bottom = 40.0 +mouse_filter = 1 +script = ExtResource( 2 ) + +[node name="EntryLabel" type="Label" parent="PlaygroundTabContainer/PlaygroundScrollContainer/Playground/EntryContainer"] +margin_left = 7.0 +margin_top = 13.0 +margin_right = 192.0 +margin_bottom = 27.0 +text = "Hello NAT Godot Playground!" + +[connection signal="mouse_entered" from="PlaygroundTabContainer/PlaygroundScrollContainer/Playground/EntryContainer" to="PlaygroundTabContainer/PlaygroundScrollContainer/Playground/EntryContainer" method="_on_EntryControl_mouse_entered"] +[connection signal="mouse_exited" from="PlaygroundTabContainer/PlaygroundScrollContainer/Playground/EntryContainer" to="PlaygroundTabContainer/PlaygroundScrollContainer/Playground/EntryContainer" method="_on_EntryControl_mouse_exited"] diff --git a/projects/nat-godot-playground/Playground.gd b/projects/nat-godot-playground/Playground.gd new file mode 100644 index 00000000..b4aa1918 --- /dev/null +++ b/projects/nat-godot-playground/Playground.gd @@ -0,0 +1,27 @@ +extends Control + + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" + + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + +var current_focus = null +var current_focus_z = NAN + +func get_drag_data(position): + return current_focus + +func can_drop_data(position, data): + return data != null + +func drop_data(position, data): + data.rect_position = position + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass diff --git a/projects/nat-godot-playground/default_env.tres b/projects/nat-godot-playground/default_env.tres new file mode 100644 index 00000000..20207a4a --- /dev/null +++ b/projects/nat-godot-playground/default_env.tres @@ -0,0 +1,7 @@ +[gd_resource type="Environment" load_steps=2 format=2] + +[sub_resource type="ProceduralSky" id=1] + +[resource] +background_mode = 2 +background_sky = SubResource( 1 ) diff --git a/projects/nat-godot-playground/icon.png b/projects/nat-godot-playground/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c98fbb601c83c81ec8c22b1dba7d1d57c62b323c GIT binary patch literal 3305 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 literal 0 HcmV?d00001 diff --git a/projects/nat-godot-playground/nat-godot-playground.csproj b/projects/nat-godot-playground/nat-godot-playground.csproj new file mode 100644 index 00000000..bad8b030 --- /dev/null +++ b/projects/nat-godot-playground/nat-godot-playground.csproj @@ -0,0 +1,6 @@ + + + net472 + natgodotplayground + + \ No newline at end of file diff --git a/projects/nat-godot-playground/nat-godot-playground.sln b/projects/nat-godot-playground/nat-godot-playground.sln new file mode 100644 index 00000000..e1978392 --- /dev/null +++ b/projects/nat-godot-playground/nat-godot-playground.sln @@ -0,0 +1,19 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nat-godot-playground", "nat-godot-playground.csproj", "{8A39B658-D6F9-4C5F-A2C3-1AFC696ED561}" +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 + {8A39B658-D6F9-4C5F-A2C3-1AFC696ED561}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A39B658-D6F9-4C5F-A2C3-1AFC696ED561}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A39B658-D6F9-4C5F-A2C3-1AFC696ED561}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU + {8A39B658-D6F9-4C5F-A2C3-1AFC696ED561}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU + {8A39B658-D6F9-4C5F-A2C3-1AFC696ED561}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU + {8A39B658-D6F9-4C5F-A2C3-1AFC696ED561}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU + EndGlobalSection +EndGlobal diff --git a/projects/nat-godot-playground/project.godot b/projects/nat-godot-playground/project.godot new file mode 100644 index 00000000..5a7b66a2 --- /dev/null +++ b/projects/nat-godot-playground/project.godot @@ -0,0 +1,31 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=4 + +[application] + +config/name="nat-godot-playground" +run/main_scene="res://Main.tscn" +config/icon="res://icon.png" + +[gui] + +common/drop_mouse_on_gui_input_disabled=true + +[mono] + +project/assembly_name="nat-godot-playground" + +[physics] + +common/enable_pause_aware_picking=true + +[rendering] + +environment/default_environment="res://default_env.tres"