diff --git a/assets/design.afdesign b/assets/design.afdesign index c0044da..5e102a7 100644 --- a/assets/design.afdesign +++ b/assets/design.afdesign @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:065527a0fe822f47a1f45bed61a0dcca10f73004f9c012fb3539021ca6bd2fbd -size 2451944 +oid sha256:034fb07ad84872c283141a5f2ae34989b349cdf77328cab5458a9263f58e4967 +size 2984138 diff --git a/content/entities/light/light.gd b/content/entities/light/light.gd index 5f77c50..c46a3e4 100644 --- a/content/entities/light/light.gd +++ b/content/entities/light/light.gd @@ -12,7 +12,7 @@ func _ready(): sprite.set_frame(1) -func _on_toggle(): +func _on_click(event): HomeAdapters.adapter.set_state(entity_id, "off" if sprite.get_frame() == 0 else "on") if sprite.get_frame() == 0: sprite.set_frame(1) diff --git a/content/entities/light/light.tscn b/content/entities/light/light.tscn index c8ee172..ba9725e 100644 --- a/content/entities/light/light.tscn +++ b/content/entities/light/light.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=6 format=3 uid="uid://cw86rc42dv2d8"] +[gd_scene load_steps=7 format=3 uid="uid://cw86rc42dv2d8"] [ext_resource type="Script" path="res://content/entities/light/light.gd" id="1_ykxy3"] [ext_resource type="Texture2D" uid="uid://b72vsbcvqqxg7" path="res://assets/materials/swich_on.png" id="2_6gn2e"] [ext_resource type="Texture2D" uid="uid://cvc0o6dsktnvl" path="res://assets/materials/switch_off.png" id="3_qlm62"] +[ext_resource type="Script" path="res://content/functions/movable.gd" id="4_4sfxb"] [sub_resource type="SphereShape3D" id="SphereShape3D_ukj14"] radius = 0.1 @@ -31,3 +32,6 @@ shape = SubResource("SphereShape3D_ukj14") pixel_size = 0.0005 billboard = 1 sprite_frames = SubResource("SpriteFrames_ldpuo") + +[node name="Movable" type="Node" parent="."] +script = ExtResource("4_4sfxb") diff --git a/content/entities/sensor/sensor.gd b/content/entities/sensor/sensor.gd index f3da193..78716bc 100644 --- a/content/entities/sensor/sensor.gd +++ b/content/entities/sensor/sensor.gd @@ -12,5 +12,5 @@ func _ready(): label.text = new_state["state"] ) -func _on_toggle(): +func _on_click(event): pass \ No newline at end of file diff --git a/content/entities/sensor/sensor.tscn b/content/entities/sensor/sensor.tscn index 0cf6030..37ef248 100644 --- a/content/entities/sensor/sensor.tscn +++ b/content/entities/sensor/sensor.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=3 format=3 uid="uid://xsiy71rsqulj"] +[gd_scene load_steps=4 format=3 uid="uid://xsiy71rsqulj"] [ext_resource type="Script" path="res://content/entities/sensor/sensor.gd" id="1_57ac8"] +[ext_resource type="Script" path="res://content/functions/movable.gd" id="2_fpq5q"] [sub_resource type="SphereShape3D" id="SphereShape3D_r20gc"] radius = 0.1 @@ -13,3 +14,6 @@ shape = SubResource("SphereShape3D_r20gc") [node name="Label" type="Label3D" parent="."] text = "some text" + +[node name="Movable" type="Node" parent="."] +script = ExtResource("2_fpq5q") diff --git a/content/entities/switch/switch.gd b/content/entities/switch/switch.gd index 7c41724..3239121 100644 --- a/content/entities/switch/switch.gd +++ b/content/entities/switch/switch.gd @@ -22,7 +22,7 @@ func _ready(): ) -func _on_toggle(): +func _on_click(event): HomeAdapters.adapter.set_state(entity_id, "off" if sprite.get_frame() == 0 else "on") if sprite.get_frame() == 0: sprite.set_frame(1) diff --git a/content/entities/switch/switch.tscn b/content/entities/switch/switch.tscn index 4babc8f..a6cedf4 100644 --- a/content/entities/switch/switch.tscn +++ b/content/entities/switch/switch.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=6 format=3 uid="uid://cscl5k7lhopj5"] +[gd_scene load_steps=7 format=3 uid="uid://cscl5k7lhopj5"] [ext_resource type="Script" path="res://content/entities/switch/switch.gd" id="1_8ffhi"] [ext_resource type="Texture2D" uid="uid://b72vsbcvqqxg7" path="res://assets/materials/swich_on.png" id="1_w68gw"] [ext_resource type="Texture2D" uid="uid://cvc0o6dsktnvl" path="res://assets/materials/switch_off.png" id="2_86ba1"] +[ext_resource type="Script" path="res://content/functions/movable.gd" id="4_6xr03"] [sub_resource type="SphereShape3D" id="SphereShape3D_ukj14"] radius = 0.1 @@ -31,3 +32,6 @@ shape = SubResource("SphereShape3D_ukj14") pixel_size = 0.0005 billboard = 1 sprite_frames = SubResource("SpriteFrames_ldpuo") + +[node name="Movable" type="Node" parent="."] +script = ExtResource("4_6xr03") diff --git a/content/functions/function.gd b/content/functions/function.gd new file mode 100644 index 0000000..41e24be --- /dev/null +++ b/content/functions/function.gd @@ -0,0 +1,2 @@ +extends Node +class_name Function diff --git a/content/functions/movable.gd b/content/functions/movable.gd new file mode 100644 index 0000000..a729fe7 --- /dev/null +++ b/content/functions/movable.gd @@ -0,0 +1,22 @@ +@tool +extends Function +class_name Movable + +var hit_node := Node3D.new() + +func _on_grab_down(event): + event.controller.add_child(hit_node) + hit_node.global_position = get_parent().global_position + +func _on_grab_move(event): + get_parent().global_position = hit_node.global_position + get_parent().global_rotation = hit_node.global_rotation + +func _get_configuration_warnings() -> PackedStringArray: + var warnings := PackedStringArray() + + if get_parent() is StaticBody3D == false: + warnings.append("Movable requires a StaticBody3D as parent.") + + + return warnings diff --git a/content/main.tscn b/content/main.tscn index 5a04593..1da5ecb 100644 --- a/content/main.tscn +++ b/content/main.tscn @@ -57,7 +57,7 @@ script = ExtResource("1_tsqxc") ray = NodePath("RayCast3D") [node name="RayCast3D" type="RayCast3D" parent="XROrigin3D/XRControllerRight/Raycast"] -transform = Transform3D(1.91069e-15, 4.37114e-08, 1, 1, -4.37114e-08, 0, 4.37114e-08, 1, -4.37114e-08, 0, 0, 0) +transform = Transform3D(-2.58078e-11, 4.3714e-08, 1, 1, -4.37117e-08, 9.27469e-12, 4.37112e-08, 1, -4.3714e-08, 0, 0, 0) target_position = Vector3(0, -5, 0) [node name="StartXR" parent="." instance=ExtResource("1_i4c04")] diff --git a/content/raycast.gd b/content/raycast.gd index d8b634e..03a3c32 100644 --- a/content/raycast.gd +++ b/content/raycast.gd @@ -25,10 +25,13 @@ func _get_event_data(): } func _handle_move(): + if _is_pressed == false && _is_grabbed == false: + return + var distance = ray.get_collision_point().distance_to(_click_point) var collider = ray.get_collider() - if distance > 0.01: + if distance > 0.02: if _is_pressed: _call_fn(collider, "_on_press_move") _moved = true @@ -84,5 +87,10 @@ func _on_button_released(button): _moved = false func _call_fn(collider: Object, fn_name: String): - if collider != null && collider.has_method(fn_name): - collider.call(fn_name, _get_event_data()) + if collider != null: + if collider.has_method(fn_name): + collider.call(fn_name, _get_event_data()) + + for child in collider.get_children(): + if child is Function: + _call_fn(child, fn_name) diff --git a/content/ui/device/device.gd b/content/ui/device/device.gd index e11ab14..dba05ab 100644 --- a/content/ui/device/device.gd +++ b/content/ui/device/device.gd @@ -5,7 +5,7 @@ extends StaticBody3D signal click(id: String) -func _on_toggle(): +func _on_click(event): click.emit(id) func set_device_name(text): diff --git a/content/ui/entity/entity.gd b/content/ui/entity/entity.gd index e324331..aa7a3ad 100644 --- a/content/ui/entity/entity.gd +++ b/content/ui/entity/entity.gd @@ -5,7 +5,7 @@ extends StaticBody3D signal click(name: String) -func _on_toggle(): +func _on_click(event): click.emit(text) func set_entity_name(text): diff --git a/lib/home_adapters/hass_ws/hass.gd b/lib/home_adapters/hass_ws/hass.gd index 60e80cf..0197059 100644 --- a/lib/home_adapters/hass_ws/hass.gd +++ b/lib/home_adapters/hass_ws/hass.gd @@ -7,7 +7,7 @@ var request_timeout := 10.0 var url := "ws://192.168.33.33:8123/api/websocket" var token := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIzZjQ0ZGM2N2Y3YzY0MDc1OGZlMWI2ZjJlNmIxZjRkNSIsImlhdCI6MTY5ODAxMDcyOCwiZXhwIjoyMDEzMzcwNzI4fQ.K6ydLUC-4Q7BNIRCU1nWlI2s6sg9UCiOu-Lpedw2zJc" -var LOG_MESSAGES := true +var LOG_MESSAGES := false var authenticated := false var loading := true