diff --git a/.gitignore b/.gitignore index bf83296..6186357 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,4 @@ -# ---> Godot # Godot 4+ specific ignores .godot/ - -# Godot-specific ignores -.import/ -export.cfg +/android/ export_presets.cfg - -# Imported translations (automatically generated from CSV files) -*.translation - -# Mono-specific ignores -.mono/ -data_*/ -mono_crash.*.json - diff --git a/Models/3stHelen.glb b/Models/3stHelen.glb new file mode 100644 index 0000000..06ed7ec Binary files /dev/null and b/Models/3stHelen.glb differ diff --git a/Models/3stHelen.glb.import b/Models/3stHelen.glb.import new file mode 100644 index 0000000..1daebe8 --- /dev/null +++ b/Models/3stHelen.glb.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://f0fkcs7erhop" +path="res://.godot/imported/3stHelen.glb-c3541fdb7863c3136dcc986fabbb06be.scn" + +[deps] + +source_file="res://Models/3stHelen.glb" +dest_files=["res://.godot/imported/3stHelen.glb-c3541fdb7863c3136dcc986fabbb06be.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/Models/3stHelen_beak.png b/Models/3stHelen_beak.png new file mode 100644 index 0000000..d16ab10 Binary files /dev/null and b/Models/3stHelen_beak.png differ diff --git a/Models/3stHelen_beak.png.import b/Models/3stHelen_beak.png.import new file mode 100644 index 0000000..c7dc48c --- /dev/null +++ b/Models/3stHelen_beak.png.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bprmuf7jpffy3" +path.s3tc="res://.godot/imported/3stHelen_beak.png-da72f62ca7ac7e5bf5593b4d1be3a7ee.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} +generator_parameters={ +"md5": "e62a49cd7edd0e5c4fe2d3d2bc6a61b9" +} + +[deps] + +source_file="res://Models/3stHelen_beak.png" +dest_files=["res://.godot/imported/3stHelen_beak.png-da72f62ca7ac7e5bf5593b4d1be3a7ee.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/Models/3stHelen_shoes.png b/Models/3stHelen_shoes.png new file mode 100644 index 0000000..0b47cc0 Binary files /dev/null and b/Models/3stHelen_shoes.png differ diff --git a/Models/3stHelen_shoes.png.import b/Models/3stHelen_shoes.png.import new file mode 100644 index 0000000..7fa6728 --- /dev/null +++ b/Models/3stHelen_shoes.png.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cm8h5o5urcvym" +path.s3tc="res://.godot/imported/3stHelen_shoes.png-97c060c3fc3442bff6f75c94bc90506a.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} +generator_parameters={ +"md5": "239e23627ba253afcd70dc24f1087fb1" +} + +[deps] + +source_file="res://Models/3stHelen_shoes.png" +dest_files=["res://.godot/imported/3stHelen_shoes.png-97c060c3fc3442bff6f75c94bc90506a.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/Models/Chuck.fbx.import b/Models/Chuck.fbx.import new file mode 100644 index 0000000..fee6fc1 --- /dev/null +++ b/Models/Chuck.fbx.import @@ -0,0 +1,38 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cs0va7jp6fjfa" +path="res://.godot/imported/Chuck.fbx-e0f76e66bd2d66a68bf43edbd8d1d948.scn" + +[deps] + +source_file="res://3-Stage/Models/Chuck.fbx" +dest_files=["res://.godot/imported/Chuck.fbx-e0f76e66bd2d66a68bf43edbd8d1d948.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/Models/Helen.fbx.import b/Models/Helen.fbx.import new file mode 100644 index 0000000..11a121e --- /dev/null +++ b/Models/Helen.fbx.import @@ -0,0 +1,38 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://5i7srffes8ut" +path="res://.godot/imported/Helen.fbx-a3dcdd674756aa7b6860353ece3f39df.scn" + +[deps] + +source_file="res://3-Stage/Models/Helen.fbx" +dest_files=["res://.godot/imported/Helen.fbx-a3dcdd674756aa7b6860353ece3f39df.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/Models/Jasper.fbx.import b/Models/Jasper.fbx.import new file mode 100644 index 0000000..820701e --- /dev/null +++ b/Models/Jasper.fbx.import @@ -0,0 +1,38 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b4xrsr1w4t017" +path="res://.godot/imported/Jasper.fbx-172cc49326619adb06baca5b9e28470b.scn" + +[deps] + +source_file="res://3-Stage/Models/Jasper.fbx" +dest_files=["res://.godot/imported/Jasper.fbx-172cc49326619adb06baca5b9e28470b.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/Models/Munch.fbx.import b/Models/Munch.fbx.import new file mode 100644 index 0000000..748c19c --- /dev/null +++ b/Models/Munch.fbx.import @@ -0,0 +1,38 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://y5jsfwdmgwkq" +path="res://.godot/imported/Munch.fbx-5aedcf1ca9583a75c301f71dc6519957.scn" + +[deps] + +source_file="res://3-Stage/Models/Munch.fbx" +dest_files=["res://.godot/imported/Munch.fbx-5aedcf1ca9583a75c301f71dc6519957.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/Models/Pasqually.fbx.import b/Models/Pasqually.fbx.import new file mode 100644 index 0000000..4eec3f9 --- /dev/null +++ b/Models/Pasqually.fbx.import @@ -0,0 +1,38 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://c66qevr67an0l" +path="res://.godot/imported/Pasqually.fbx-764599cdc792a8e7936bfd485f85d0d3.scn" + +[deps] + +source_file="res://3-Stage/Models/Pasqually.fbx" +dest_files=["res://.godot/imported/Pasqually.fbx-764599cdc792a8e7936bfd485f85d0d3.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/Models/Room.glb b/Models/Room.glb new file mode 100644 index 0000000..0f1dd04 Binary files /dev/null and b/Models/Room.glb differ diff --git a/Models/Room.glb.import b/Models/Room.glb.import new file mode 100644 index 0000000..a2980ee --- /dev/null +++ b/Models/Room.glb.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bhoeqcsdb0fx2" +path="res://.godot/imported/Room.glb-057b6820edeabb93a1fe769eeffdac34.scn" + +[deps] + +source_file="res://Models/Room.glb" +dest_files=["res://.godot/imported/Room.glb-057b6820edeabb93a1fe769eeffdac34.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/Models/Stage.glb b/Models/Stage.glb new file mode 100644 index 0000000..09de518 Binary files /dev/null and b/Models/Stage.glb differ diff --git a/Models/Stage.glb.import b/Models/Stage.glb.import new file mode 100644 index 0000000..f5efa03 --- /dev/null +++ b/Models/Stage.glb.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://btvomf1ayoypu" +path="res://.godot/imported/Stage.glb-38d445218888b57ffbbfd79eb6fd72c0.scn" + +[deps] + +source_file="res://Models/Stage.glb" +dest_files=["res://.godot/imported/Stage.glb-38d445218888b57ffbbfd79eb6fd72c0.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/Scenes/GUI/Controls/FlowSlider.tscn b/Scenes/GUI/Controls/FlowSlider.tscn new file mode 100644 index 0000000..d2dfd56 --- /dev/null +++ b/Scenes/GUI/Controls/FlowSlider.tscn @@ -0,0 +1,42 @@ +[gd_scene load_steps=2 format=3 uid="uid://blg1c3v4o44of"] + +[ext_resource type="Script" uid="uid://blhv0kms1sleu" path="res://Scripts/FlowSlider.gd" id="1_q164o"] + +[node name="FlowSlider" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = -1280.0 +offset_bottom = -720.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_q164o") + +[node name="Panel" type="Panel" parent="."] +layout_mode = 0 +offset_right = 96.0 +offset_bottom = 32.0 + +[node name="Slider" type="HSlider" parent="Panel"] +layout_mode = 2 +offset_left = 4.0 +offset_right = 64.0 +offset_bottom = 32.0 +size_flags_vertical = 1 +max_value = 5.0 +step = 0.1 +value = 1.0 + +[node name="ValueLabel" type="Label" parent="Panel"] +layout_mode = 2 +offset_left = 64.0 +offset_right = 96.0 +offset_bottom = 32.0 +size_flags_horizontal = 8 +size_flags_vertical = 1 +text = "1.0" +horizontal_alignment = 1 +vertical_alignment = 1 + +[connection signal="value_changed" from="Panel/Slider" to="." method="_on_slider_value_changed"] diff --git a/Scenes/GUI/Controls/IndicatorLight.tscn b/Scenes/GUI/Controls/IndicatorLight.tscn new file mode 100644 index 0000000..998e838 --- /dev/null +++ b/Scenes/GUI/Controls/IndicatorLight.tscn @@ -0,0 +1,49 @@ +[gd_scene load_steps=4 format=3 uid="uid://cbf3x44mvo701"] + +[ext_resource type="Script" uid="uid://cg157l4uo7ki8" path="res://Scripts/IndicatorLight.gd" id="1_l718a"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1pi70"] +bg_color = Color(0, 0, 0, 1) +corner_radius_top_left = 12 +corner_radius_top_right = 12 +corner_radius_bottom_right = 12 +corner_radius_bottom_left = 12 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5m0fm"] +bg_color = Color(0, 1, 0, 1) +corner_radius_top_left = 12 +corner_radius_top_right = 12 +corner_radius_bottom_right = 12 +corner_radius_bottom_left = 12 + +[node name="IndicatorLight" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = -1280.0 +offset_bottom = -720.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_l718a") + +[node name="Container" type="Panel" parent="."] +layout_mode = 0 +offset_right = 32.0 +offset_bottom = 32.0 + +[node name="Black" type="Panel" parent="."] +layout_mode = 0 +offset_left = 4.0 +offset_top = 4.0 +offset_right = 28.0 +offset_bottom = 28.0 +theme_override_styles/panel = SubResource("StyleBoxFlat_1pi70") + +[node name="Green" type="Panel" parent="."] +layout_mode = 0 +offset_left = 4.0 +offset_top = 4.0 +offset_right = 28.0 +offset_bottom = 28.0 +theme_override_styles/panel = SubResource("StyleBoxFlat_5m0fm") diff --git a/Scenes/GUI/EditorScreen.tscn b/Scenes/GUI/EditorScreen.tscn new file mode 100644 index 0000000..8d87dad --- /dev/null +++ b/Scenes/GUI/EditorScreen.tscn @@ -0,0 +1,1040 @@ +[gd_scene load_steps=7 format=3 uid="uid://oiehbor0dlqx"] + +[ext_resource type="Script" uid="uid://dfiwoln8mdwm8" path="res://Scripts/EditorScreen.gd" id="1_sd512"] +[ext_resource type="PackedScene" uid="uid://blg1c3v4o44of" path="res://Scenes/GUI/Controls/FlowSlider.tscn" id="2_jo1ms"] +[ext_resource type="PackedScene" uid="uid://btre5j66mpchy" path="res://Scenes/Stages/HelenHouse.tscn" id="2_p1t5g"] +[ext_resource type="ButtonGroup" uid="uid://bij2tonqeslpt" path="res://Scenes/GUI/FlyoutButtonGroup.tres" id="3_p1t5g"] +[ext_resource type="PackedScene" uid="uid://cbf3x44mvo701" path="res://Scenes/GUI/Controls/IndicatorLight.tscn" id="4_wuj6m"] + +[sub_resource type="ViewportTexture" id="ViewportTexture_g6u4d"] +viewport_path = NodePath("SubViewport") + +[node name="EditorScreen" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_sd512") + +[node name="SubViewport" type="SubViewport" parent="."] +size = Vector2i(1280, 720) +size_2d_override = Vector2i(640, 360) + +[node name="HelenHouse" parent="SubViewport" instance=ExtResource("2_p1t5g")] + +[node name="ColorRect" type="ColorRect" parent="."] +layout_mode = 0 +offset_right = 1280.0 +offset_bottom = 720.0 +color = Color(0.187176, 0.187176, 0.187176, 1) + +[node name="CameraPreview" type="TextureRect" parent="."] +layout_mode = 0 +offset_left = 636.0 +offset_top = 48.0 +offset_right = 1276.0 +offset_bottom = 408.0 +texture = SubResource("ViewportTexture_g6u4d") +expand_mode = 2 + +[node name="Label" type="Label" parent="."] +layout_mode = 0 +offset_left = 144.0 +offset_top = 48.0 +offset_right = 632.0 +offset_bottom = 408.0 +text = "Welcome to Pneumatic Plaything Animatronic Simulator! + +You can press the buttons to the side to +control the bot, or adjust its flows. + +Open the Controls menu to see all of the keybinds. + +More features will be coming in the future, so stay tuned!" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="MenuBar" type="Panel" parent="."] +layout_mode = 0 +offset_left = 4.0 +offset_top = 4.0 +offset_right = 1276.0 +offset_bottom = 44.0 + +[node name="Wordmark" type="Label" parent="MenuBar"] +layout_mode = 0 +offset_left = 1044.0 +offset_top = 4.0 +offset_right = 1268.0 +offset_bottom = 36.0 +text = "Pneumatic Plaything v0.2" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="SequencerPanel" type="Panel" parent="."] +layout_mode = 0 +offset_left = 4.0 +offset_top = 412.0 +offset_right = 1276.0 +offset_bottom = 716.0 + +[node name="FlyoutButtons" type="Panel" parent="."] +layout_mode = 0 +offset_left = 4.0 +offset_top = 48.0 +offset_right = 140.0 +offset_bottom = 408.0 + +[node name="MovementsFlyoutButton" type="Button" parent="FlyoutButtons"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 4.0 +offset_right = 132.0 +offset_bottom = 36.0 +toggle_mode = true +button_group = ExtResource("3_p1t5g") +text = "Movements" + +[node name="FlowsFlyoutButton" type="Button" parent="FlyoutButtons"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 40.0 +offset_right = 132.0 +offset_bottom = 72.0 +toggle_mode = true +button_group = ExtResource("3_p1t5g") +text = "Flows" + +[node name="CameraFlyoutButton" type="Button" parent="FlyoutButtons"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 76.0 +offset_right = 132.0 +offset_bottom = 108.0 +toggle_mode = true +button_group = ExtResource("3_p1t5g") +text = "Camera" + +[node name="Movements" type="Panel" parent="."] +visible = false +layout_mode = 0 +offset_left = 144.0 +offset_top = 48.0 +offset_right = 484.0 +offset_bottom = 412.0 + +[node name="Buttons" type="Control" parent="Movements"] +anchors_preset = 0 + +[node name="Mouth" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 4.0 +offset_right = 132.0 +offset_bottom = 36.0 +text = "Mouth" + +[node name="LeftEar" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 40.0 +offset_right = 132.0 +offset_bottom = 72.0 +text = "Left Ear" + +[node name="RightEar" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 76.0 +offset_right = 132.0 +offset_bottom = 108.0 +text = "Right Ear" + +[node name="LeftEyelid" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 112.0 +offset_right = 132.0 +offset_bottom = 144.0 +text = "Left Eyelid" + +[node name="RightEyelid" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 148.0 +offset_right = 132.0 +offset_bottom = 180.0 +text = "Right Eyelid" + +[node name="EyesLeft" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 184.0 +offset_right = 132.0 +offset_bottom = 216.0 +text = "Eyes Left" + +[node name="EyesRight" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 220.0 +offset_right = 132.0 +offset_bottom = 252.0 +text = "Eyes Right" + +[node name="HeadLeft" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 256.0 +offset_right = 132.0 +offset_bottom = 288.0 +text = "Head Left" + +[node name="HeadRight" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 292.0 +offset_right = 132.0 +offset_bottom = 324.0 +text = "Head Right" + +[node name="HeadUp" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 328.0 +offset_right = 132.0 +offset_bottom = 360.0 +text = "Head Up" + +[node name="LeftArmUp" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 172.0 +offset_top = 4.0 +offset_right = 300.0 +offset_bottom = 36.0 +text = "Left Arm Up" + +[node name="LeftArmTwist" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 172.0 +offset_top = 40.0 +offset_right = 300.0 +offset_bottom = 72.0 +text = "Left Arm Twist" + +[node name="LeftElbow" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 172.0 +offset_top = 76.0 +offset_right = 300.0 +offset_bottom = 108.0 +text = "Left Elbow" + +[node name="RightArmUp" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 172.0 +offset_top = 112.0 +offset_right = 300.0 +offset_bottom = 144.0 +text = "Right Arm Up" + +[node name="RightArmTwist" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 172.0 +offset_top = 148.0 +offset_right = 300.0 +offset_bottom = 180.0 +text = "R. Arm Twist" + +[node name="RightElbow" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 172.0 +offset_top = 184.0 +offset_right = 300.0 +offset_bottom = 216.0 +text = "Right Elbow" + +[node name="BodyLeft" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 172.0 +offset_top = 220.0 +offset_right = 300.0 +offset_bottom = 252.0 +text = "Body Left" + +[node name="BodyRight" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 172.0 +offset_top = 256.0 +offset_right = 300.0 +offset_bottom = 288.0 +text = "Body Right" + +[node name="BodyLean" type="Button" parent="Movements/Buttons"] +layout_mode = 0 +offset_left = 172.0 +offset_top = 292.0 +offset_right = 300.0 +offset_bottom = 324.0 +text = "Body Lean" + +[node name="IndicatorLights" type="Control" parent="Movements"] +anchors_preset = 0 + +[node name="Mouth" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 136.0 +offset_top = 4.0 +offset_right = 136.0 +offset_bottom = 4.0 + +[node name="Left Ear" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 136.0 +offset_top = 40.0 +offset_right = 136.0 +offset_bottom = 40.0 + +[node name="Right Ear" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 136.0 +offset_top = 76.0 +offset_right = 136.0 +offset_bottom = 76.0 + +[node name="Left Eyelid" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 136.0 +offset_top = 112.0 +offset_right = 136.0 +offset_bottom = 112.0 + +[node name="Right Eyelid" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 136.0 +offset_top = 148.0 +offset_right = 136.0 +offset_bottom = 148.0 + +[node name="Eyes Left" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 136.0 +offset_top = 184.0 +offset_right = 136.0 +offset_bottom = 184.0 + +[node name="Eyes Right" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 136.0 +offset_top = 220.0 +offset_right = 136.0 +offset_bottom = 220.0 + +[node name="Head Left" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 136.0 +offset_top = 256.0 +offset_right = 136.0 +offset_bottom = 256.0 + +[node name="Head Right" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 136.0 +offset_top = 292.0 +offset_right = 136.0 +offset_bottom = 292.0 + +[node name="Head Up" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 136.0 +offset_top = 328.0 +offset_right = 136.0 +offset_bottom = 328.0 + +[node name="Left Arm Up" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 304.0 +offset_top = 4.0 +offset_right = 304.0 +offset_bottom = 4.0 + +[node name="Left Arm Twist" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 304.0 +offset_top = 40.0 +offset_right = 304.0 +offset_bottom = 40.0 + +[node name="Left Elbow" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 304.0 +offset_top = 76.0 +offset_right = 304.0 +offset_bottom = 76.0 + +[node name="Right Arm Up" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 304.0 +offset_top = 112.0 +offset_right = 304.0 +offset_bottom = 112.0 + +[node name="Right Arm Twist" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 304.0 +offset_top = 148.0 +offset_right = 304.0 +offset_bottom = 148.0 + +[node name="Right Elbow" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 304.0 +offset_top = 184.0 +offset_right = 304.0 +offset_bottom = 184.0 + +[node name="Body Left" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 304.0 +offset_top = 220.0 +offset_right = 304.0 +offset_bottom = 220.0 + +[node name="Body Right" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 304.0 +offset_top = 256.0 +offset_right = 304.0 +offset_bottom = 256.0 + +[node name="Body Lean" parent="Movements/IndicatorLights" instance=ExtResource("4_wuj6m")] +layout_mode = 1 +offset_left = 304.0 +offset_top = 292.0 +offset_right = 304.0 +offset_bottom = 292.0 + +[node name="FlowControls" type="Panel" parent="."] +visible = false +layout_mode = 0 +offset_left = 144.0 +offset_top = 48.0 +offset_right = 812.0 +offset_bottom = 440.0 + +[node name="Labels" type="Control" parent="FlowControls"] +anchors_preset = 0 +offset_top = -40.0 +offset_bottom = -40.0 + +[node name="MovementsLabel1" type="Label" parent="FlowControls/Labels"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 40.0 +offset_right = 132.0 +offset_bottom = 72.0 +text = "Movement" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="MovementsLabel2" type="Label" parent="FlowControls/Labels"] +layout_mode = 0 +offset_left = 336.0 +offset_top = 40.0 +offset_right = 464.0 +offset_bottom = 72.0 +text = "Movement" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="InFlowsLabel1" type="Label" parent="FlowControls/Labels"] +layout_mode = 0 +offset_left = 136.0 +offset_top = 40.0 +offset_right = 232.0 +offset_bottom = 72.0 +text = "In Flow" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="InFlowsLabel2" type="Label" parent="FlowControls/Labels"] +layout_mode = 0 +offset_left = 468.0 +offset_top = 40.0 +offset_right = 564.0 +offset_bottom = 72.0 +text = "In Flow" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="OutFlowsLabel1" type="Label" parent="FlowControls/Labels"] +layout_mode = 0 +offset_left = 236.0 +offset_top = 40.0 +offset_right = 332.0 +offset_bottom = 72.0 +text = "Out Flow" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="OutFlowsLabel2" type="Label" parent="FlowControls/Labels"] +layout_mode = 0 +offset_left = 568.0 +offset_top = 40.0 +offset_right = 664.0 +offset_bottom = 72.0 +text = "Out Flow" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="InFlows" type="Control" parent="FlowControls"] +anchors_preset = 0 +offset_top = -40.0 +offset_bottom = -40.0 + +[node name="MouthFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 135.5 +offset_top = 72.0 +offset_right = 135.5 +offset_bottom = 72.0 +value = 3.0 + +[node name="LeftEarFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 135.5 +offset_top = 108.0 +offset_right = 135.5 +offset_bottom = 108.0 +value = 3.5 + +[node name="RightEarFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 135.5 +offset_top = 144.0 +offset_right = 135.5 +offset_bottom = 144.0 +value = 3.5 + +[node name="LeftEyelidFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 135.5 +offset_top = 180.0 +offset_right = 135.5 +offset_bottom = 180.0 +value = 1.5 + +[node name="RightEyelidFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 135.5 +offset_top = 216.0 +offset_right = 135.5 +offset_bottom = 216.0 +value = 1.5 + +[node name="EyesLeftFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 135.5 +offset_top = 252.0 +offset_right = 135.5 +offset_bottom = 252.0 +value = 2.0 + +[node name="EyesRightFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 135.5 +offset_top = 288.0 +offset_right = 135.5 +offset_bottom = 288.0 +value = 2.0 + +[node name="HeadLeftFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 135.5 +offset_top = 324.0 +offset_right = 135.5 +offset_bottom = 324.0 +value = 1.5 + +[node name="HeadRightFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 135.5 +offset_top = 360.0 +offset_right = 135.5 +offset_bottom = 360.0 +value = 1.5 + +[node name="HeadUpFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 135.5 +offset_top = 396.0 +offset_right = 135.5 +offset_bottom = 396.0 + +[node name="LeftArmUpFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 467.5 +offset_top = 72.0 +offset_right = 467.5 +offset_bottom = 72.0 +value = 0.8 + +[node name="LeftArmTwistFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 467.5 +offset_top = 108.0 +offset_right = 467.5 +offset_bottom = 108.0 +value = 0.8 + +[node name="LeftElbowFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 467.5 +offset_top = 144.0 +offset_right = 467.5 +offset_bottom = 144.0 + +[node name="RightArmUpFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 467.5 +offset_top = 180.0 +offset_right = 467.5 +offset_bottom = 180.0 +value = 0.8 + +[node name="RightArmTwistFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 467.5 +offset_top = 216.0 +offset_right = 467.5 +offset_bottom = 216.0 +value = 0.8 + +[node name="RightElbowFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 467.5 +offset_top = 252.0 +offset_right = 467.5 +offset_bottom = 252.0 + +[node name="BodyLeftFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 467.5 +offset_top = 288.0 +offset_right = 467.5 +offset_bottom = 288.0 +value = 0.7 + +[node name="BodyRightFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 467.5 +offset_top = 324.0 +offset_right = 467.5 +offset_bottom = 324.0 +value = 0.7 + +[node name="BodyLeanFlow" parent="FlowControls/InFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 467.5 +offset_top = 360.0 +offset_right = 467.5 +offset_bottom = 360.0 + +[node name="OutFlows" type="Control" parent="FlowControls"] +anchors_preset = 0 +offset_top = -40.0 +offset_bottom = -40.0 + +[node name="MouthFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 235.5 +offset_top = 72.0 +offset_right = 235.5 +offset_bottom = 72.0 +value = 2.0 + +[node name="LeftEarFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 235.5 +offset_top = 108.0 +offset_right = 235.5 +offset_bottom = 108.0 +value = 1.5 + +[node name="RightEarFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 235.5 +offset_top = 144.0 +offset_right = 235.5 +offset_bottom = 144.0 +value = 1.5 + +[node name="LeftEyelidFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 235.5 +offset_top = 180.0 +offset_right = 235.5 +offset_bottom = 180.0 +value = 2.0 + +[node name="RightEyelidFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 235.5 +offset_top = 216.0 +offset_right = 235.5 +offset_bottom = 216.0 +value = 2.0 + +[node name="EyesLeftFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 235.5 +offset_top = 252.0 +offset_right = 235.5 +offset_bottom = 252.0 +value = 2.0 + +[node name="EyesRightFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 235.5 +offset_top = 288.0 +offset_right = 235.5 +offset_bottom = 288.0 +value = 2.0 + +[node name="HeadLeftFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 235.5 +offset_top = 324.0 +offset_right = 235.5 +offset_bottom = 324.0 +value = 1.5 + +[node name="HeadRightFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 235.5 +offset_top = 360.0 +offset_right = 235.5 +offset_bottom = 360.0 +value = 1.5 + +[node name="HeadUpFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 235.5 +offset_top = 396.0 +offset_right = 235.5 +offset_bottom = 396.0 + +[node name="LeftArmUpFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 567.5 +offset_top = 72.0 +offset_right = 567.5 +offset_bottom = 72.0 +value = 0.6 + +[node name="LeftArmTwistFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 567.5 +offset_top = 108.0 +offset_right = 567.5 +offset_bottom = 108.0 +value = 0.8 + +[node name="LeftElbowFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 567.5 +offset_top = 144.0 +offset_right = 567.5 +offset_bottom = 144.0 + +[node name="RightArmUpFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 567.5 +offset_top = 180.0 +offset_right = 567.5 +offset_bottom = 180.0 +value = 0.6 + +[node name="RightArmTwistFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 567.5 +offset_top = 216.0 +offset_right = 567.5 +offset_bottom = 216.0 +value = 0.8 + +[node name="RightElbowFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 567.5 +offset_top = 252.0 +offset_right = 567.5 +offset_bottom = 252.0 + +[node name="BodyLeftFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 567.5 +offset_top = 288.0 +offset_right = 567.5 +offset_bottom = 288.0 +value = 0.7 + +[node name="BodyRightFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 567.5 +offset_top = 324.0 +offset_right = 567.5 +offset_bottom = 324.0 +value = 0.7 + +[node name="BodyLeanFlow" parent="FlowControls/OutFlows" instance=ExtResource("2_jo1ms")] +layout_mode = 1 +offset_left = 567.5 +offset_top = 360.0 +offset_right = 567.5 +offset_bottom = 360.0 +value = 0.8 + +[node name="MovementLabels" type="Control" parent="FlowControls"] +layout_mode = 3 +anchors_preset = 0 + +[node name="Mouth" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 32.0 +offset_right = 132.0 +offset_bottom = 64.0 +text = "Mouth" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="LeftEar" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 68.0 +offset_right = 132.0 +offset_bottom = 100.0 +text = "Left Ear" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="RightEar" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 104.0 +offset_right = 132.0 +offset_bottom = 136.0 +text = "Right Ear" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="LeftEyelid" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 140.0 +offset_right = 132.0 +offset_bottom = 172.0 +text = "Left Eyelid" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="RightEyelid" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 176.0 +offset_right = 132.0 +offset_bottom = 208.0 +text = "Right Eyelid" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="EyesLeft" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 212.0 +offset_right = 132.0 +offset_bottom = 244.0 +text = "Eyes Left" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="EyesRight" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 248.0 +offset_right = 132.0 +offset_bottom = 280.0 +text = "Eyes Right" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="HeadLeft" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 284.0 +offset_right = 132.0 +offset_bottom = 316.0 +text = "Head Left" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="HeadRight" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 320.0 +offset_right = 132.0 +offset_bottom = 352.0 +text = "Head Right" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="HeadUp" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 356.0 +offset_right = 132.0 +offset_bottom = 388.0 +text = "Head Up" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="LeftArmUp" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 336.0 +offset_top = 32.0 +offset_right = 464.0 +offset_bottom = 64.0 +text = "Left Arm Up" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="LeftArmTwist" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 336.0 +offset_top = 68.0 +offset_right = 464.0 +offset_bottom = 100.0 +text = "Left Arm Twist" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="LeftElbow" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 336.0 +offset_top = 104.0 +offset_right = 464.0 +offset_bottom = 136.0 +text = "Left Elbow" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="RightArmUp" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 336.0 +offset_top = 140.0 +offset_right = 464.0 +offset_bottom = 172.0 +text = "Right Arm Up" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="RightArmTwist" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 336.0 +offset_top = 176.0 +offset_right = 464.0 +offset_bottom = 208.0 +text = "R. Arm Twist" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="RightElbow" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 336.0 +offset_top = 212.0 +offset_right = 464.0 +offset_bottom = 244.0 +text = "Right Elbow" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="BodyLeft" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 336.0 +offset_top = 248.0 +offset_right = 464.0 +offset_bottom = 280.0 +text = "Body Left" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="BodyRight" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 336.0 +offset_top = 284.0 +offset_right = 464.0 +offset_bottom = 316.0 +text = "Body Right" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="BodyLean" type="Label" parent="FlowControls/MovementLabels"] +layout_mode = 0 +offset_left = 336.0 +offset_top = 320.0 +offset_right = 464.0 +offset_bottom = 352.0 +text = "Body Lean" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="CameraFullScreen" type="TextureRect" parent="."] +visible = false +layout_mode = 0 +offset_right = 1280.0 +offset_bottom = 720.0 +texture = SubResource("ViewportTexture_g6u4d") +expand_mode = 2 + +[connection signal="toggled" from="FlyoutButtons/MovementsFlyoutButton" to="." method="_on_movements_flyout_button_toggled"] +[connection signal="toggled" from="FlyoutButtons/FlowsFlyoutButton" to="." method="_on_flows_flyout_button_toggled"] +[connection signal="button_down" from="Movements/Buttons/Mouth" to="." method="_on_mouth_button_down"] +[connection signal="button_up" from="Movements/Buttons/Mouth" to="." method="_on_mouth_button_up"] +[connection signal="button_down" from="Movements/Buttons/LeftEar" to="." method="_on_left_ear_button_down"] +[connection signal="button_up" from="Movements/Buttons/LeftEar" to="." method="_on_left_ear_button_up"] +[connection signal="button_down" from="Movements/Buttons/RightEar" to="." method="_on_right_ear_button_down"] +[connection signal="button_up" from="Movements/Buttons/RightEar" to="." method="_on_right_ear_button_up"] +[connection signal="button_down" from="Movements/Buttons/LeftEyelid" to="." method="_on_left_eyelid_button_down"] +[connection signal="button_up" from="Movements/Buttons/LeftEyelid" to="." method="_on_left_eyelid_button_up"] +[connection signal="button_down" from="Movements/Buttons/RightEyelid" to="." method="_on_right_eyelid_button_down"] +[connection signal="button_up" from="Movements/Buttons/RightEyelid" to="." method="_on_right_eyelid_button_up"] +[connection signal="button_down" from="Movements/Buttons/EyesLeft" to="." method="_on_eyes_left_button_down"] +[connection signal="button_up" from="Movements/Buttons/EyesLeft" to="." method="_on_eyes_left_button_up"] +[connection signal="button_down" from="Movements/Buttons/EyesRight" to="." method="_on_eyes_right_button_down"] +[connection signal="button_up" from="Movements/Buttons/EyesRight" to="." method="_on_eyes_right_button_up"] +[connection signal="button_down" from="Movements/Buttons/HeadLeft" to="." method="_on_head_left_button_down"] +[connection signal="button_up" from="Movements/Buttons/HeadLeft" to="." method="_on_head_left_button_up"] +[connection signal="button_down" from="Movements/Buttons/HeadRight" to="." method="_on_head_right_button_down"] +[connection signal="button_up" from="Movements/Buttons/HeadRight" to="." method="_on_head_right_button_up"] +[connection signal="button_down" from="Movements/Buttons/HeadUp" to="." method="_on_head_up_button_down"] +[connection signal="button_up" from="Movements/Buttons/HeadUp" to="." method="_on_head_up_button_up"] +[connection signal="button_down" from="Movements/Buttons/LeftArmUp" to="." method="_on_left_arm_up_button_down"] +[connection signal="button_up" from="Movements/Buttons/LeftArmUp" to="." method="_on_left_arm_up_button_up"] +[connection signal="button_down" from="Movements/Buttons/LeftArmTwist" to="." method="_on_left_arm_twist_button_down"] +[connection signal="button_up" from="Movements/Buttons/LeftArmTwist" to="." method="_on_left_arm_twist_button_up"] +[connection signal="button_down" from="Movements/Buttons/LeftElbow" to="." method="_on_left_elbow_button_down"] +[connection signal="button_up" from="Movements/Buttons/LeftElbow" to="." method="_on_left_elbow_button_up"] +[connection signal="button_down" from="Movements/Buttons/RightArmUp" to="." method="_on_right_arm_up_button_down"] +[connection signal="button_up" from="Movements/Buttons/RightArmUp" to="." method="_on_right_arm_up_button_up"] +[connection signal="button_down" from="Movements/Buttons/RightArmTwist" to="." method="_on_right_arm_twist_button_down"] +[connection signal="button_up" from="Movements/Buttons/RightArmTwist" to="." method="_on_right_arm_twist_button_up"] +[connection signal="button_down" from="Movements/Buttons/RightElbow" to="." method="_on_right_elbow_button_down"] +[connection signal="button_up" from="Movements/Buttons/RightElbow" to="." method="_on_right_elbow_button_up"] +[connection signal="button_down" from="Movements/Buttons/BodyLeft" to="." method="_on_body_left_button_down"] +[connection signal="button_up" from="Movements/Buttons/BodyLeft" to="." method="_on_body_left_button_up"] +[connection signal="button_down" from="Movements/Buttons/BodyRight" to="." method="_on_body_right_button_down"] +[connection signal="button_up" from="Movements/Buttons/BodyRight" to="." method="_on_body_right_button_up"] +[connection signal="button_down" from="Movements/Buttons/BodyLean" to="." method="_on_body_lean_button_down"] +[connection signal="button_up" from="Movements/Buttons/BodyLean" to="." method="_on_body_lean_button_up"] diff --git a/Scenes/GUI/FlyoutButtonGroup.tres b/Scenes/GUI/FlyoutButtonGroup.tres new file mode 100644 index 0000000..1576676 --- /dev/null +++ b/Scenes/GUI/FlyoutButtonGroup.tres @@ -0,0 +1,4 @@ +[gd_resource type="ButtonGroup" format=3 uid="uid://bij2tonqeslpt"] + +[resource] +allow_unpress = true diff --git a/Scenes/Stages/HelenHouse.tscn b/Scenes/Stages/HelenHouse.tscn new file mode 100644 index 0000000..0e46785 --- /dev/null +++ b/Scenes/Stages/HelenHouse.tscn @@ -0,0 +1,46 @@ +[gd_scene load_steps=6 format=3 uid="uid://btre5j66mpchy"] + +[ext_resource type="PackedScene" uid="uid://f0fkcs7erhop" path="res://Models/3stHelen.glb" id="2_e7oou"] +[ext_resource type="Script" uid="uid://bu68w4jnh0n2b" path="res://Scripts/HelenController.gd" id="3_e2vvs"] +[ext_resource type="PackedScene" uid="uid://bhoeqcsdb0fx2" path="res://Models/Room.glb" id="4_pv43k"] +[ext_resource type="PackedScene" uid="uid://btvomf1ayoypu" path="res://Models/Stage.glb" id="5_afett"] + +[sub_resource type="Environment" id="Environment_axk5g"] +ambient_light_source = 1 + +[node name="HelenHouse" type="Node3D"] + +[node name="3stHelen" parent="." instance=ExtResource("2_e7oou")] +transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0.25, 0) +script = ExtResource("3_e2vvs") + +[node name="Room" parent="." instance=ExtResource("4_pv43k")] +transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0, 0) + +[node name="Stage" parent="." instance=ExtResource("5_afett")] +transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0, 0) + +[node name="Camera3D" type="Camera3D" parent="."] +transform = Transform3D(-1, 1.31601e-08, -1.50421e-07, 0, 0.996195, 0.0871557, 1.50996e-07, 0.0871557, -0.996195, 0, 1.5, -3) +fov = 60.0 + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_axk5g") + +[node name="SpotLight3D" type="SpotLight3D" parent="."] +transform = Transform3D(-0.972974, -0.0597654, 0.223048, 2.26267e-08, 0.965926, 0.258819, -0.230916, 0.251824, -0.939821, 0.217544, 1.75308, -1.04223) +light_color = Color(1, 0.9625, 0.85, 1) +light_energy = 2.0 +spot_range = 1.3068 +spot_angle = 27.449 +spot_angle_attenuation = 0.1 + +[node name="OmniLight3D" type="OmniLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2.5, -3) +light_color = Color(1, 0.960784, 0.85098, 1) +light_energy = 0.5 + +[node name="OmniLight3D2" type="OmniLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 2.5, -3) +light_color = Color(1, 0.960784, 0.85098, 1) +light_energy = 0.5 diff --git a/Scripts/EditorScreen.gd b/Scripts/EditorScreen.gd new file mode 100644 index 0000000..3209ad4 --- /dev/null +++ b/Scripts/EditorScreen.gd @@ -0,0 +1,161 @@ +extends Control + +signal movement_in(movement, rate) +signal movement_out(movement, rate) + +func _ready() -> void: + var animatronic = $"SubViewport/HelenHouse/3stHelen" + movement_in.connect(animatronic._movement_in) + movement_out.connect(animatronic._movement_out) + movement_in.connect(self._movement_in) + movement_out.connect(self._movement_out) + +func _input(event: InputEvent) -> void: + if event.is_action_pressed("toggle_editor_screen"): + $CameraPreview.visible = !$CameraPreview.visible; + $CameraFullScreen.visible = !$CameraFullScreen.visible; + +func _on_movements_flyout_button_toggled(toggled_on: bool) -> void: + $Movements.visible = toggled_on + +func _on_flows_flyout_button_toggled(toggled_on: bool) -> void: + $FlowControls.visible = toggled_on + +func _movement_in(movement, rate): + get_node("Movements/IndicatorLights/" + movement).turn_on(); + +func _movement_out(movement, rate): + get_node("Movements/IndicatorLights/" + movement).turn_off(); + + +func _on_mouth_button_down() -> void: + movement_in.emit("Mouth", $FlowControls/InFlows/MouthFlow.value) + +func _on_mouth_button_up() -> void: + movement_out.emit("Mouth", $FlowControls/OutFlows/MouthFlow.value) + + +func _on_left_ear_button_down() -> void: + movement_in.emit("Left Ear", $FlowControls/InFlows/LeftEarFlow.value) + +func _on_left_ear_button_up() -> void: + movement_out.emit("Left Ear", $FlowControls/OutFlows/LeftEarFlow.value) + + +func _on_right_ear_button_down() -> void: + movement_in.emit("Right Ear", $FlowControls/InFlows/RightEarFlow.value) + +func _on_right_ear_button_up() -> void: + movement_out.emit("Right Ear", $FlowControls/OutFlows/RightEarFlow.value) + + +func _on_left_eyelid_button_down() -> void: + movement_in.emit("Left Eyelid", $FlowControls/InFlows/LeftEyelidFlow.value) + +func _on_left_eyelid_button_up() -> void: + movement_out.emit("Left Eyelid", $FlowControls/OutFlows/LeftEyelidFlow.value) + + +func _on_right_eyelid_button_down() -> void: + movement_in.emit("Right Eyelid", $FlowControls/InFlows/RightEyelidFlow.value) + +func _on_right_eyelid_button_up() -> void: + movement_out.emit("Right Eyelid", $FlowControls/OutFlows/RightEyelidFlow.value) + + +func _on_eyes_left_button_down() -> void: + movement_in.emit("Eyes Left", $FlowControls/InFlows/EyesLeftFlow.value) + +func _on_eyes_left_button_up() -> void: + movement_out.emit("Eyes Left", $FlowControls/OutFlows/EyesLeftFlow.value) + + +func _on_eyes_right_button_down() -> void: + movement_in.emit("Eyes Right", $FlowControls/InFlows/EyesRightFlow.value) + +func _on_eyes_right_button_up() -> void: + movement_out.emit("Eyes Right", $FlowControls/OutFlows/EyesRightFlow.value) + + +func _on_head_left_button_down() -> void: + movement_in.emit("Head Left", $FlowControls/InFlows/HeadLeftFlow.value) + +func _on_head_left_button_up() -> void: + movement_out.emit("Head Left", $FlowControls/OutFlows/HeadLeftFlow.value) + + +func _on_head_right_button_down() -> void: + movement_in.emit("Head Right", $FlowControls/InFlows/HeadRightFlow.value) + +func _on_head_right_button_up() -> void: + movement_out.emit("Head Right", $FlowControls/OutFlows/HeadRightFlow.value) + + +func _on_head_up_button_down() -> void: + movement_in.emit("Head Up", $FlowControls/InFlows/HeadUpFlow.value) + +func _on_head_up_button_up() -> void: + movement_out.emit("Head Up", $FlowControls/OutFlows/HeadUpFlow.value) + + +func _on_left_arm_up_button_down() -> void: + movement_in.emit("Left Arm Up", $FlowControls/InFlows/LeftArmUpFlow.value) + +func _on_left_arm_up_button_up() -> void: + movement_out.emit("Left Arm Up", $FlowControls/OutFlows/LeftArmUpFlow.value) + + +func _on_left_arm_twist_button_down() -> void: + movement_in.emit("Left Arm Twist", $FlowControls/InFlows/LeftArmTwistFlow.value) + +func _on_left_arm_twist_button_up() -> void: + movement_out.emit("Left Arm Twist", $FlowControls/OutFlows/LeftArmTwistFlow.value) + + +func _on_left_elbow_button_down() -> void: + movement_in.emit("Left Elbow", $FlowControls/InFlows/LeftElbowFlow.value) + +func _on_left_elbow_button_up() -> void: + movement_out.emit("Left Elbow", $FlowControls/OutFlows/LeftElbowFlow.value) + + +func _on_right_arm_up_button_down() -> void: + movement_in.emit("Right Arm Up", $FlowControls/InFlows/RightArmUpFlow.value) + +func _on_right_arm_up_button_up() -> void: + movement_out.emit("Right Arm Up", $FlowControls/OutFlows/RightArmUpFlow.value) + + +func _on_right_arm_twist_button_down() -> void: + movement_in.emit("Right Arm Twist", $FlowControls/InFlows/RightArmTwistFlow.value) + +func _on_right_arm_twist_button_up() -> void: + movement_out.emit("Right Arm Twist", $FlowControls/OutFlows/RightArmTwistFlow.value) + + +func _on_right_elbow_button_down() -> void: + movement_in.emit("Right Elbow", $FlowControls/InFlows/RightElbowFlow.value) + +func _on_right_elbow_button_up() -> void: + movement_out.emit("Right Elbow", $FlowControls/OutFlows/RightElbowFlow.value) + + +func _on_body_left_button_down() -> void: + movement_in.emit("Body Left", $FlowControls/InFlows/BodyLeftFlow.value) + +func _on_body_left_button_up() -> void: + movement_out.emit("Body Left", $FlowControls/OutFlows/BodyLeftFlow.value) + + +func _on_body_right_button_down() -> void: + movement_in.emit("Body Right", $FlowControls/InFlows/BodyRightFlow.value) + +func _on_body_right_button_up() -> void: + movement_out.emit("Body Right", $FlowControls/OutFlows/BodyRightFlow.value) + + +func _on_body_lean_button_down() -> void: + movement_in.emit("Body Lean", $FlowControls/InFlows/BodyLeanFlow.value) + +func _on_body_lean_button_up() -> void: + movement_out.emit("Body Lean", $FlowControls/OutFlows/BodyLeanFlow.value) diff --git a/Scripts/EditorScreen.gd.uid b/Scripts/EditorScreen.gd.uid new file mode 100644 index 0000000..b1ff1e5 --- /dev/null +++ b/Scripts/EditorScreen.gd.uid @@ -0,0 +1 @@ +uid://dfiwoln8mdwm8 diff --git a/Scripts/FlowSlider.gd b/Scripts/FlowSlider.gd new file mode 100644 index 0000000..0c85b45 --- /dev/null +++ b/Scripts/FlowSlider.gd @@ -0,0 +1,10 @@ +extends Control + +@export var value : float = 1.0 + +func _ready() -> void: + $Panel/Slider.value = self.value + +func _on_slider_value_changed(value: float) -> void: + self.value = $Panel/Slider.value + $Panel/ValueLabel.text = str(self.value) diff --git a/Scripts/FlowSlider.gd.uid b/Scripts/FlowSlider.gd.uid new file mode 100644 index 0000000..e71dd11 --- /dev/null +++ b/Scripts/FlowSlider.gd.uid @@ -0,0 +1 @@ +uid://blhv0kms1sleu diff --git a/Scripts/HelenController.gd b/Scripts/HelenController.gd new file mode 100644 index 0000000..0818448 --- /dev/null +++ b/Scripts/HelenController.gd @@ -0,0 +1,14 @@ +extends Node3D + +var animation_player + +func _ready(): + animation_player = $AnimationPlayer + +func _movement_in(movement, rate): + animation_player.speed_scale = rate + animation_player.play(movement) + +func _movement_out(movement, rate): + animation_player.speed_scale = rate + animation_player.play_backwards(movement) diff --git a/Scripts/HelenController.gd.uid b/Scripts/HelenController.gd.uid new file mode 100644 index 0000000..b63dd10 --- /dev/null +++ b/Scripts/HelenController.gd.uid @@ -0,0 +1 @@ +uid://bu68w4jnh0n2b diff --git a/Scripts/IndicatorLight.gd b/Scripts/IndicatorLight.gd new file mode 100644 index 0000000..bbf57ae --- /dev/null +++ b/Scripts/IndicatorLight.gd @@ -0,0 +1,22 @@ +extends Control + +@export var on: bool = false + +func _ready() -> void: + $Green.visible = self.on + +func turn_on() -> void: + self.on = true + $Green.visible = self.on + +func turn_off() -> void: + self.on = false + $Green.visible = self.on + +func toggle() -> void: + self.on = !self.on + $Green.visible = self.on + +func set_state(value: bool) -> void: + self.on = value + $Green.visible = self.on diff --git a/Scripts/IndicatorLight.gd.uid b/Scripts/IndicatorLight.gd.uid new file mode 100644 index 0000000..acb38ca --- /dev/null +++ b/Scripts/IndicatorLight.gd.uid @@ -0,0 +1 @@ +uid://cg157l4uo7ki8 diff --git a/UI/BlankCam.png b/UI/BlankCam.png new file mode 100644 index 0000000..ee39acd Binary files /dev/null and b/UI/BlankCam.png differ diff --git a/UI/BlankCam.png.import b/UI/BlankCam.png.import new file mode 100644 index 0000000..876e952 --- /dev/null +++ b/UI/BlankCam.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://s3yr2wasxv03" +path="res://.godot/imported/BlankCam.png-3a3fce0de965b84e3e9f90ae65ca082a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://UI/BlankCam.png" +dest_files=["res://.godot/imported/BlankCam.png-3a3fce0de965b84e3e9f90ae65ca082a.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/icon.png b/icon.png new file mode 100644 index 0000000..bf8c711 Binary files /dev/null and b/icon.png differ diff --git a/icon.png.import b/icon.png.import new file mode 100644 index 0000000..3064ba9 --- /dev/null +++ b/icon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dhjuhhilgmxq3" +path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.png" +dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.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/project.godot b/project.godot new file mode 100644 index 0000000..1572dca --- /dev/null +++ b/project.godot @@ -0,0 +1,37 @@ +; 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=5 + +[application] + +config/name="Pneumatic Plaything" +config/version="v0.1" +run/main_scene="uid://oiehbor0dlqx" +config/features=PackedStringArray("4.4", "GL Compatibility") +boot_splash/show_image=false +config/icon="uid://dhjuhhilgmxq3" + +[display] + +window/size/viewport_width=1280 +window/size/viewport_height=720 + +[input] + +toggle_editor_screen={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":6,"pressure":0.0,"pressed":true,"script":null) +] +} + +[rendering] + +renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility"