Resolved interaction system

This commit is contained in:
Rendo 2025-12-25 19:36:34 +05:00
commit 22cdc782f9
9 changed files with 96 additions and 73 deletions

View file

@ -20,6 +20,10 @@ config/icon="res://icon.svg"
GuiSignalBus="*res://src/gui_signal_bus.gd"
ReactionRegistry="*res://src/reaction_registry.gd"
[global_group]
flask=""
[input]
drag_camera={

View file

@ -1,11 +1,6 @@
[gd_scene load_steps=4 format=3 uid="uid://b8edjit66j7st"]
[gd_scene load_steps=2 format=3 uid="uid://c2vxq6kqhris0"]
[ext_resource type="Script" uid="uid://crjao0jjv5yqs" path="res://src/drag/draggable_camera.gd" id="1_v4apc"]
[ext_resource type="Script" uid="uid://d77lra3ar60b" path="res://src/interactible/interactible_detector.gd" id="2_nstyr"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_hflkp"]
radius = 0.1
height = 10.5
[node name="Camera3D" type="Camera3D"]
transform = Transform3D(1, 0, 0, 0, 0.86602545, 0.5, 0, -0.5, 0.8660253, 0, 0, 0)
@ -13,12 +8,3 @@ script = ExtResource("1_v4apc")
[node name="DragRaycast" type="RayCast3D" parent="."]
target_position = Vector3(0, 0, -10)
[node name="InteractionArea" type="Area3D" parent="."]
collision_layer = 0
collision_mask = 4
script = ExtResource("2_nstyr")
[node name="CollisionShape3D" type="CollisionShape3D" parent="InteractionArea"]
transform = Transform3D(1, 0, 0, 0, -2.9802322e-08, -1, 0, 1, -2.9802322e-08, 0, 3.5762787e-07, -5.2500005)
shape = SubResource("CapsuleShape3D_hflkp")

View file

@ -1,7 +1,7 @@
[gd_scene load_steps=6 format=3 uid="uid://bjxjcx2qu16q5"]
[gd_scene load_steps=8 format=4 uid="uid://bjxjcx2qu16q5"]
[ext_resource type="Script" uid="uid://bjnv2g1ni0525" path="res://src/drag/draggable_object.gd" id="1_0xufn"]
[ext_resource type="PackedScene" uid="uid://b6ydpkle2ol20" path="res://assets/models/FlaskNew.glb" id="2_h7awq"]
[ext_resource type="Material" uid="uid://64m17act0kwu" path="res://assets/materials/mat_glass.tres" id="2_dbm1u"]
[ext_resource type="Script" uid="uid://bl0ojhc0thk1p" path="res://src/interactible/interactible.gd" id="4_dbm1u"]
[ext_resource type="Script" uid="uid://82ettbegollp" path="res://src/inventory.gd" id="7_h7awq"]
@ -9,17 +9,54 @@
radius = 0.1
height = 0.9921875
[node name="Flask" type="Area3D" node_paths=PackedStringArray("interactible")]
[sub_resource type="ArrayMesh" id="ArrayMesh_1ouf4"]
_surfaces = [{
"aabb": AABB(-1.0466492, -1, -1.0466493, 2.0932984, 9.491324, 2.0932984),
"format": 34359742465,
"index_count": 624,
"index_data": PackedByteArray("PwBAAEEAQQBAAEIAPwBDAEAARAA/AEEAAABDAD8AAwAAAD8AAwA/AEQAAAAEAEMABQAAAAMABQAEAAAAIgADAEQABQADACIARABBAEUAIgBEAEYARgBEAEUAIwAiAEYABQAiACMARQBBAEcAQQBCAEcARgBFAEgAIwBGAEkASQBGAEgASgAjAEkABQAjAEoARQBHAEsASABFAEsASgBJAEwASQBIAE0ATABJAE0ASABLAC4ATQBIAC4AEgBKAEwABQBKABIATABNAE4ATQAuAE8ATgBNAE8AEgBMAFAAUABMAE4AEQASAFAABQASABEAUABOAFEATgBPACsAUQBOACsAEQBQAFIAUgBQAFEADwARAFIABQARAA8AUgBRAFMAUQArAFQAUwBRAFQADwBSAFUAVQBSAFMADQAPAFUABQAPAA0AVQBTAFYAUwBUACoAVgBTACoADQBVAFcAVwBVAFYADAANAFcABQANAAwAVwBWAFgAVgAqAFkAWABWAFkADABXAFoAWgBXAFgACwAMAFoABQAMAAsAWgBYAFsAWABZACgAWwBYACgACwBaAFwAXABaAFsACgALAFwABQALAAoAXABbAF0AWwAoAF4AXQBbAF4ACgBcAF8AXwBcAF0ABQAKAAgACAAKAF8ABQAIAAcACABfAGAABwAIAGAAXwBdAGEAYABfAGEABQAHAAYABQAGAAQABwBgAGIABgAHAGIAYABhAGMAYgBgAGMABAAGAGQABgBiAGQABABkAEMAYgBjAGUAZABiAGUAQwBkAGYAZABlAGYAQwBmAEAAQABmACQAQAAkAEIAZgBlAGcAZgBnACQAZQBjACUAZQAlAGcAYwBoACUAYwBhAGgAZwAlAAEAJABnAGkAZwABAGkAJQBqAAEAJQBoAGoAYQAnAGgAYQBdACcAXQBeACcAaAAnACkAaAApAGoAJwBeAGsAJwBrACkAXgAJAGsAXgAoAAkAawBsACkAKQA5AGoAKQBsADkAawAtAGwACQAtAGsAbAAXADkAbAAYABcALQAYAGwAOQAXAA4ALQAZABgAagA5ADoAOQAOADoAagA6AAEAOgAOABMANwAZAC0ACQA3AC0ANwAWABkAOgATADsAAQA6ADsAOwATABQAAQA7AGkAOwAUADwAaQA7ADwAPAAUABUAaQA8ACYAJABpACYAQgAkACYAPAAVAD0AJgA8AD0APQAVABoAQgAmAD4AJgA9AD4ARwBCAD4APQAaADgAPgA9ADgAOAAaABsARwA+AAIAPgA4AAIASwBHAAIAOAAbADAAAgA4ADAAMAAbABwASwACAG0AAgAwAG0ALgBLAG0AMAAcADYAbQAwADYANgAcAB0ALgBtAC8AbQA2AC8ATwAuAC8ANgAdADIALwA2ADIAMgAdAB4ATwAvAG4ALwAyAG4AKwBPAG4AMgAeADMAbgAyADMAMwAeACEAKwBuABAAbgAzABAAVAArABAAMwAhADEAEAAzADEAMQAhACAAVAAQAG8AEAAxAG8AKgBUAG8AMQAgADQAbwAxADQANAAgAB8AKgBvACwAbwA0ACwAWQAqACwANAAfADUALAA0ADUANQAfABYANQAWADcALAA1AHAAWQAsAHAAcAA1ADcAKABZAHAAcAA3AAkAKABwAAkA"),
"lods": [0.19513263, PackedByteArray("AAAkAAIABAAkAAAABAAGACQABQAEAAAABQAGAAQABgAHACQABQAHAAYABwAIACQABQAIAAcAAwAAAAIABQAAAAMAJAAIACUABQAKAAgAJAAlACYACgAnAAgACAAnACUACgALACcABQALAAoACwAMACcABQAMAAsAJQAnAAEAJQABACYADAANACcABQANAAwAJwANACgABQAPAA0AJwAoACkAJwApAAEADQAqACgADwAqAA0AKAAJACkAKAAqAAkADwARACoABQARAA8AEQASACoABQASABEAEgArACoABQArABIAKgAsAAkAKgArACwACQAtACkABQAjACsABQAiACMAKwAjACIABQADACIAIgADAC4AKwAiAC4ALgADAAIAKwAuABAAKwAQACwALgACAC8ALgAvABAAAgAwAC8AEAAxACwALwAyABAAEAAzADEAEAAyADMAMwAhADEAMwAeACEAMgAeADMAMQAhACAAMgAdAB4AMQAgADQALAAxADQANAAgAB8ALAA0ADUANAAfADUALAA1AAkANQAfABYANgAdADIALwA2ADIANgAcAB0ALwAwADYAMAAcADYAMAAbABwANQAWADcACQA1ADcANwAWABkACQA3AC0ANwAZAC0ALQAZABgALQAYABcAOAAbADAALQAXADkAKQAtADkAOQAXAA4AKQA5AAEAAgA4ADAAOAAaABsAOQAOADoAAQA5ADoAOgAOABMAAQA6ADsAOgATADsAOwATABQAAQA7ACYAOwAUADwAJgA7ADwAPAAUABUAPAAVAD0AJgA8AD0APQAVABoAPQAaADgAJgA9AD4APgA9ADgAPgA4AAIAJAAmAD4AAgAkAD4A"), 1.8915809, PackedByteArray("AAABAAIAAwAAAAIABAABAAAABQAAAAMABQAEAAAABAAGAAEABQAGAAQABgAHAAEABQAHAAYABwAIAAEABQAIAAcACAAJAAEABQAKAAgACgAJAAgACgALAAkABQALAAoACwAMAAkABQAMAAsADAANAAkABQANAAwACQAOAAEABQAPAA0ADQAQAAkADwAQAA0ABQARAA8ADwARABAABQASABEAEQASABAABQAQABIADgATABQADgAUABUAAQAOABUAAQAVAAIACQAWAA4AEAAWAAkAFgAXAA4AFgAYABcAFgAZABgAFQAaABsAAgAVABsAGwAcAB0AGwAdAB4AAgAbAB4AHgAfABYAHgAgAB8AHgAhACAAEAAeABYAAgAeABAAEAAiAAIAIgADAAIABQADACIAEAAjACIABQAiACMABQAjABAA")],
"name": "mat_glass",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 113,
"vertex_data": PackedByteArray("AAAAAL4Ue7/CxUe+MNtUP9o5Dr8AAMAzAAAAANo5Dr8x21S/JuaYvb4Ue7/RkDi+NuaYPb4Ue7/SkDi+AAAAAAAAgL8AAACAsEINPr4Ue7+tQg2+0pA4Pr4Ue78u5pi9v8VHPr4Ue78AAGAzAABAtNo5Dr8v21Q/z5A4Pr4Ue7855pg9q0INPr4Ue7+wQg0+LOaYPb4Ue7/SkDg+AACQs74Ue7+/xUc+mviFP3fcB0HcdA40O+aYvb4Ue7/OkDg+L9tUv9o5Dr8AALC0sEINvr4Ue7+pQg0+0ZA4vr4Ue78o5pg92It3P3fcB0HzEs2+tnY9P3fcB0G1dj2/9hLNPnfcB0HZi3e/dBGEtHfcB0GZ+IU/2It3P3fcB0H6Es0+snY9P3fcB0G3dj0/7hLNPnfcB0Hbi3c/NJWzsnfcB0Gb+IW/5RLNvnfcB0Hbi3e/snY9v3fcB0G7dj2/2It3v3fcB0ECE82+mviFv3fcB0HfvdK0/hLNvnfcB0HXi3c/unY9v3fcB0Gzdj0/3It3v3fcB0HqEs0+qEINvr4Ue7+wQg2+zZA4vr4Ue7895pi9AAAAP/MENb/+//++8gQ1P/MENb8AAMAzF4MWP9o5Dr8Wgxa/+v//PvMENb8BAAA/AABwtPMENb/xBDU/FIMWP9o5Dr8YgxY/AgAAv/MENb/2//8+8AQ1v/MENb8AALC0GYMWv9o5Dr8TgxY/uumiPrgpBEFLp0Q/8v//vvMENb8CAAC/EYMWv9o5Dr8agxa/sumivrgpBEFMp0S/TKdEv7gpBEG26aI+SKdEv7gpBEHK6aK+L9tUv7gpBEEAALC0GYMWv7gpBEETgxY/xumivrgpBEFJp0Q/EYMWv7gpBEEagxa/AABAtLgpBEEv21Q/AAAAALgpBEEx21S/SqdEP7gpBEHD6aI+MNtUP7gpBEEAAMAzTKdEP7gpBEG+6aK+F4MWP7gpBEEWgxa/wemiPrgpBEFLp0S/wemiPto5Dr9Lp0S/AAAAAF6DbL8W78O+y7VZPjHbVL9RZgO/AAAAADHbVL/aOQ6/1IuKPvMENb90PSe/G/YVPl6DbL/0BLW+DPYVvl6DbL/3BLW+vbVZvjHbVL9TZgO/0IuKvl6DbL/ai4q+AADwNPMENb/wBDW/SyPJvjHbVL9VI8m+8gS1vl6DbL8m9hW+vsVHvr4Ue78AALCzxIuKvvMENb90PSe/Fu/Dvl6DbL8AAEC0UWYDvzHbVL/YtVm+2zkOvzHbVL8AAFC0bz0nv/MENb/ci4q+9gS1vl6DbL8Q9hU+U2YDvzHbVL/AtVk+2IuKvl6DbL/Ri4o+VCPJvjHbVL9MI8k+dD0nv/MENb/Ii4o+IvYVvl6DbL/yBLU+1bVZvjHbVL9RZgM/AAAAtF6DbL8W78M+AAAgtDHbVL/bOQ4/2ouKvvMENb9xPSc/FPYVPl6DbL/1BLU+w7VZPjHbVL9TZgM/0ouKPl6DbL/Wi4o+TSPJPjHbVL9SI8k+zIuKPvMENb90PSc/8wS1Pl6DbL8e9hU+Fu/DPl6DbL8AAEAzUWYDPzHbVL/QtVk+9AS1Pl6DbL8Y9hW+2jkOPzHbVL8AAKAz1YuKPl6DbL/Ui4q+UmYDPzHbVL/ItVm+TyPJPjHbVL9OI8m+dD0nP/MENb/Ri4q+cj0nP/MENb/Xi4o+TKdEP9o5Dr++6aK+SqdEP9o5Dr/D6aI+uumiPto5Dr9Lp0Q/FIMWP7gpBEEYgxY/sumivto5Dr9Mp0S/SKdEv9o5Dr/K6aK+TKdEv9o5Dr+26aI+xumivto5Dr9Jp0Q/")
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_nvewc"]
resource_name = "FlaskNew_Sphere"
_surfaces = [{
"aabb": AABB(-1.0466492, -1, -1.0466493, 2.0932984, 9.491324, 2.0932984),
"attribute_data": PackedByteArray("AABAPwEAcD////8+AQAwPwAAQD///y8///9HPwAAgD/+/08/AQBwPwAAOD8AAIA/AAAwPwEAcD8AACg/AACAPwAAID8BAHA///8PPwEAcD8AABg/AACAP/7/Vz8AAIA//v9fPwEAcD///2c/AACAP/7/bz8BAHA/AACAPwEAMD/+/3c/AACAPwAAgD8BADA//v9PPwEAMD///28/AQAwP/7/Xz8BADA/AAAwPwEAMD8AAEA///8vP////z4BADA/AAAgPwEAMD8AABA/AQAwP/7/fz4BADA//v9/PgEAMD///98+AQAwP///vz4BADA///+fPgEAMD////8+AQBwP///Bz8AAIA////vPgAAgD///98+AQBwP///zz4AAIA//v+/PgEAcD///58+AQBwP/7/rz4AAIA//P9/PgEAcD/+/48+AACAPwAAAAABADA//P9fPgAAgD/+/z8+AQBwPwAAAAABADA//v8/PgEAMD/8//89AQAwP/D/fz0BADA/+P//PQEAcD/8/x8+AACAP/D/fz0BAHA/4P//PAAAgD/8/789AACAPwAAID8AAEA//v+/PgAAQD////8+AABAPwAAID8BADA//v9/PgAAQD///78+AQAwP/j//z0AAEA/AAAAAAEAQD/8//89AQAwP/D/fz0BADA/AAAAAAEAMD/8//89AQAwP/7/Pz4BADA//v9/PgEAMD///58+AQAwP///3z4BADA/////PgEAMD8AABA/AQAwPwAAID8BADA/AAAwPwEAMD8AADA/AQAwPwAAQD///y8//v9PPwEAMD/+/18/AQAwP/7/Xz8BADA///9vPwEAMD8AAIA/AQAwP/7/Xz8BAEA/AACAPwEAQD8AAEA///9fPwAAMD8AAFA/AABAPwAAUD8AADA/AABAPwAAMD///18//v9PP///Xz///08/AABQP/7/Xz///18//v8/PwEAQD/+/18/AABQP/7/bz///18/AACAPwEAcD8AAIA///9fP///bz8AAFA/AACAPwAAUD/+/08/AQBAP/7/bz8BAEA///9vPwEAMD/+/08/AQAwPwAAED8BADA/AAAgPwAAUD8AABA/AABAPwAAID///18/AAAQPwAAUD8AABA///9fP////z4AAFA/////Pv//Xz///98+AQAwP///3z4AAEA////fPgAAUD///98+//9fP///vz4AAFA///+/Pv//Xz///58+AABAP///nz4AAFA///+fPv//Xz///58+AQAwP/7/fz4AAFA//v9/Pv//Xz/+/z8+AABAP/7/Pz4AAFA//v8/Pv//Xz/+/z8+AQAwP/z//z0AAFA/+P//Pf//Xz/w/389AABAP/D/fz0AAFA/8P9/Pf//Xz8AAAAAAABQPwAAAAD//18/AAAAAAEAcD/w/389AQAwP///vz4BADA/"),
"format": 34359742487,
"index_count": 624,
"index_data": PackedByteArray("UgBTAFQAVABTAFUAUgBWAFMAVwBSAFQAAABWAFIABAAAAFIABABSAFcAAwAAAAQAAAAGAFYABQAGAAAADAAEAFcACwAEAAwAVwBUAFgADABXAFkAWQBXAFgADgAMAFkADQAMAA4AWABUAFoAVABVAFoAWQBYAFsADgBZAFwAXABZAFsAXQAOAFwAEAAOAF0AXQBcAF4AXgBcAF8AXABbAF8AXgBfAGAAWwBYAGEAWABaAGEAXwBbAFAAWwBhAFAAYABfAGIAXwBQAGIAYABiAFEAUQBiAGMAUQBjAA8AYwBPAA8AYgBNAGMAYgBQAE0AYwBOAE8ATQBOAGMATgARAE8ATgATABEATAATAE4ATQBMAE4ATAAUABMAUABkAE0AZABMAE0AUABhAGQASwAUAEwAZABLAEwASwASABQAYQACAGQAAgBLAGQAYQBaAAIASgASAEsAAgBKAEsASgAWABIAWgBJAAIASQBKAAIAWgBVAEkASAAWAEoASQBIAEoASAAVABYAVQA4AEkAOABIAEkARwAVAEgAOABHAEgARwAYABUAVQA1ADgAUwA1AFUAZQBHADgANQBlADgARgAYAEcAZQBGAEcARgAZABgAUwBmADUAVgBmAFMANQBnAGUAZgBnADUAAQBGAGUAZwABAGUARQAZAEYAAQBFAEYARQAXABkAVgBoAGYABgBoAFYAZgBpAGcAaABpAGYABgAIAGgABwAIAAYAaABqAGkACABqAGgAaQA3AGcAZwA3AAEAagBrAGkAaQBrADcACAAJAGoACgAJAAgAagBsAGsACQBsAGoANwBtAAEAbQBFAAEAawBuADcANwBuAG0AbABvAGsAawBvAG4ACQAfAGwAIAAfAAkAbABwAG8AHwBwAGwAbwA2AG4AHwAiAHAAIQAiAB8AcABxAG8AbwBxADYAIgByAHAAcAByAHEAIgAkAHIAIwAkACIAbgA2ADoAbgA6AG0AcQBzADYAcgB0AHEAcQB0AHMAJAB1AHIAcgB1AHQAJAAlAHUAJgAlACQANgBzAHYANgB2ADoAdAA5AHMAdQB3AHQAdAB3ADkAJQB4AHUAdQB4AHcAJQAnAHgAKAAnACUAcwA5ABoAcwAaAHYAdwB5ADkAeAB6AHcAdwB6AHkAJwB7AHgAeAB7AHoAJwArAHsAKgArACcAOQB5AHwAOQB8ABoAegA7AHkAewB9AHoAegB9ADsAKwB+AHsAewB+AH0AKwAwAH4AMQAwACsAeQA7AD0AeQA9AHwAfQB/ADsAfgCAAH0AfQCAAH8AMACBAH4AfgCBAIAAMAAyAIEANAAyADAAgQCCAIAAgACCADwAgAA8AH8AgQCDAIIAMgCDAIEAMgCEAIMAMwCEADIAfwA8ACkAOwB/AIUAfwApAIUAOwCFAD0AKQA+AIUAKQA/AD4APwAvAD4APwAsAC8APgAvAC4AhQA+AEAAPgAuAEAAhQBAAD0AQAAuAC0APQBAAEEAQAAtAEEAPQBBAHwAQQAtABsAfABBAEIAQQAbAEIAfABCABoAQgAbAB4AGgBCAEMAQgAeAEMAGgBDAHYAQwAeAB0AdgBDAIYAQwAdAIYAdgCGADoAhgAdABwAOgCGAEQAhgAcAEQAOgBEAG0ARAAcABcAbQBEAEUARAAXAEUA"),
"lods": [0.19513263, PackedByteArray("AAA1AAIABQAGAAAABgA1AAAABwAIAAYABgAIADUACAAJADUACgAJAAgABAAAAAIAAwAAAAQAIAAfAAkACQAfADUAIQAiAB8AIwAkACIAIgA2AB8AIgAkADYANQAfADcAHwA2ADcAJgAlACQAJAAlADYANQA3ADgAKAAnACUAJQAnADYANwA2AAEANwABADgANgAnADkANgA5ADoANgA6AAEAJwA7ADkAOQAaADoAOQA7ABoAKgArACcAKwA7ACcAMQAwACsAKwAwADsAMAAyADsANAAyADAAMgA8ADsAMwA8ADIAOwA8AD0AOwA9ABoAPAApAD0AKQA+AD0AKQA/AD4APwAvAD4APwAsAC8APgAvAC4APgAuAEAAPQA+AEAAQAAuAC0APQBAAEEAQAAtAEEAPQBBABoAQQAtABsAQQAbAEIAGgBBAEIAQgAbAB4AGgBCAEMAQgAeAEMAQwAeAB0AGgBDADoAQwAdABwAOgBDAEQAQwAcAEQAOgBEAAEARAAcABcARAAXAEUAAQBEAEUARQAXABkAAQBFAEYARQAZAEYARgAZABgAAQBGADgARgAYAEcAOABGAEcARwAYABUARwAVAEgAOABHAEgASAAVABYAOABIAEkANQA4AEkASAAWAEoASQBIAEoASgAWABIAAgA1AEkASQBKAAIASgASAEsAAgBKAEsASwASABQASwAUAEwATAAUABMAAgBLAE0ATQBLAEwATAATAE4ATQBMAE4ATgATABEATgARAE8ADwBOAE8ATQBOAA8AUAACAE0AUABNAA8AUAAEAAIAUQBQAA8ADAAEAFAAUQAMAFAACwAEAAwAUQAOAAwADQAMAA4AEAAOAFEA"), 1.8915809, PackedByteArray("AAABAAIAAwAAAAQABAAAAAIABQAGAAAABgABAAAABwAIAAYABgAIAAEACAAJAAEACgAJAAgACwAEAAwADAAEAAIADQAMAA4ADwAOAAwAEAAOAA8ADwAMAAIAAgARAA8AAgASABEAEgATABEAEgAUABMAAgAVABIAFQAWABIAAQAVAAIAAQAXABUAFwAYABUAFwAZABgAGgAXAAEAGgAbABcAGwAcABcAGwAdABwAGwAeAB0AHwAaAAEACQAfAAEAIAAfAAkAIQAiAB8AIgAaAB8AIwAkACIAIgAkABoAJAAlABoAJgAlACQAJQAnABoAKAAnACUAJwApABoAKQAbABoAKgArACcAKwApACcAKQAsABsALAAtABsALAAuAC0ALAAvAC4AKwAwACkAMQAwACsAMAAyACkAMwApADIANAAyADAA")],
"material": ExtResource("2_dbm1u"),
"name": "mat_glass",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 135,
"vertex_data": PackedByteArray("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////v0jCSUL///+/Ls2XJv///7+9ytk0////v/9/Ul/+//+//39JQv///z/ZtL1K////P5emL03///8/45W9Sv///z9UllUW///+//9/AAAAAGD1/38AAP//YPWWk7Ib/f9A7f9/AAD//1zmuY5zHf///98biLIb/f9Arf9/AAD//6HZ/39VFv7//7//fwAA//+dyq0gUl95gmO8/38AAMLq/7/jd7IbgNr/v7Y9SUL///+/G2q9Sv///z9nWS9N////PyVLvUr///8/RXFzHf+//7//fwAAusz/v2hssht8pf6//38AADuV/7//fwAARLP/v4DLwCUAAP/fv6WAS/7//9+KwIpA/v///wXngzMAAP/f/3+KQP7//7+CswZn////3z9agEv/v/+/dD+KQHOKrrp8TAZn/7//v0U7MWH///8/eyWDWv///79+TgFj////P4djMWH///8//3+DWv///z93nDFh////P7nEMWH///8/g9qDWv///78x4blE////vwHjgDH///+/MeF4HP///79k5bIdAABArYPaAAD///+/zR54HP///7/9HIAx////v/kYgzP/P/+/zR65RP///797JYNa////v340wCX/P/+/dD+KQIt1UMVTpgAAAAD/v1q8rREAAL3S77MAAAAA/78JyWQVAABArd2tbw0AAL3SIVJvDX0l/7+kQ60RfSX/v8ZPHBj/P/+/isAAAAAA/78eQXAf/z//vyFSbiCCWv+/qmlVFjFsF8KrWVMmo260w6RDrSqCWv+/D0zwM9xx0sT1NmQVfSX/v/U2pDOBWv+/mhqxR4Fa/7+aGrIdfSX/v2TlsUcAAEDt4L5wHwAA/98JyaQzAABA7TiwHBgAAP/fWrytKgAAvpLdrW4gAAC+ku+z8DP/////U6ZTJv////+xx2Rl/v++kqSzCUn+/76SrKpaPP7/QO1uoN0t/v9A7XCf4T7////fG5g4MP///99klQlJ/v++0qyRWjz+/0Ctbo3dLf7/QK2ynWRl/v++0v9/8DP+//+//39TJv7//7+aaglJgdr/v1JuWjyB2v+/kHLdLYHa/79MYmRlgdr/v45g4T7/v/+/42c4MP+//79aTAlJfKX/v1JVWjx8pf+/kF/dLXyl/78PTPAzIo4ru6tZUyZbkUm8qmlVFs2T571NOGRlfaX/v4CxAWP///8/")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_1ouf4")
[node name="Flask" type="Area3D" node_paths=PackedStringArray("interactible") groups=["flask"]]
collision_layer = 5
script = ExtResource("1_0xufn")
interactible = NodePath("Interactible")
mask = PackedStringArray("flask")
[node name="DragArea" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
shape = SubResource("CapsuleShape3D_vcwhe")
[node name="FlaskNew" parent="." instance=ExtResource("2_h7awq")]
[node name="Flash" type="MeshInstance3D" parent="."]
transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0.1, 0)
mesh = SubResource("ArrayMesh_nvewc")
skeleton = NodePath("")
[node name="Inventory" type="Node" parent="."]
unique_name_in_owner = true
@ -28,5 +65,5 @@ open_on_top = true
metadata/_custom_type_script = "uid://82ettbegollp"
[node name="Interactible" type="ConfirmationDialog" parent="."]
cancel_button_text = "I WANNA MAKE YOU HATE ME"
script = ExtResource("4_dbm1u")
interaction_target_groups = PackedStringArray("test")

View file

@ -13,7 +13,7 @@ resource_local_to_scene = true
height = 0.5024414
radius = 0.22460938
[node name="Flask" type="Area3D" node_paths=PackedStringArray("interactible") groups=["test"]]
[node name="SubstanceJar" type="Area3D" node_paths=PackedStringArray("interactible")]
collision_layer = 5
script = ExtResource("1_o7vug")
interactible = NodePath("Interaction")

View file

@ -7,10 +7,10 @@ const SENSITIVITY = 0.01
var interaction_source: DraggableObject
var plane_position: Vector3
@onready var drag_raycast: RayCast3D = $DragRaycast
@onready var interaction_area: InteractibleDetector = $InteractionArea
func _process(_delta: float) -> void:
drag_raycast.target_position = project_local_ray_normal(get_viewport().get_mouse_position()) * 10.0
var ray_normal = project_local_ray_normal(get_viewport().get_mouse_position())
drag_raycast.target_position = ray_normal * 10.0
if drag_raycast.is_colliding():
plane_position = drag_raycast.get_collision_point()
@ -19,8 +19,8 @@ func _input(event: InputEvent) -> void:
global_position -= Vector3.RIGHT * event.relative.x * SENSITIVITY
global_position += Vector3.FORWARD * event.relative.y * SENSITIVITY
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
for draggable in interaction_area.filtered_draggables:
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and not event.pressed and interaction_source != null:
for draggable in interaction_source.filtered_draggables:
if draggable == interaction_source:
continue
interaction_source.interactible.try_interact(draggable)
@ -31,7 +31,6 @@ func start_interaction_seeking(new_interaction_source: DraggableObject) -> void:
if new_interaction_source.interactible == null:
return
interaction_source = new_interaction_source
interaction_area.set_mask(interaction_source.interactible.get_groups())
func end_interaction_seeking() -> void:
if interaction_source == null:

View file

@ -18,12 +18,27 @@ var dragged: bool = false:
@export var interactible: Interactible
@export var mask: PackedStringArray
var contacted_draggables: Array[DraggableObject]
var filtered_draggables: Array[DraggableObject]
func _ready() -> void:
area_entered.connect(on_area_entered)
area_exited.connect(on_area_exited)
func _mouse_enter() -> void:
mouse_in = true
func _mouse_exit() -> void:
mouse_in = false
func set_mask(new_mask: PackedStringArray) -> void:
mask.clear()
mask.append_array(new_mask)
filtered_draggables.clear()
for contacted in contacted_draggables:
filtered_draggables.append(contacted)
func _process(_delta: float) -> void:
if dragged == false:
return
@ -36,3 +51,21 @@ func _input(event: InputEvent) -> void:
dragged = true
if event.pressed == false:
dragged = false
func on_area_entered(area: Area3D) -> void:
if area is DraggableObject:
contacted_draggables.append(area)
if is_in_mask(area.get_groups()):
filtered_draggables.append(area)
func on_area_exited(area: Area3D) -> void:
if area is DraggableObject:
contacted_draggables.erase(area)
if filtered_draggables.has(area):
filtered_draggables.erase(area)
func is_in_mask(groups: Array[StringName]) -> bool:
for group in groups:
if group in mask:
return true
return false

View file

@ -2,7 +2,6 @@ extends ConfirmationDialog
class_name Interactible
@export var interaction_target_groups: PackedStringArray
@export var instant: bool = false
var current_draggable: DraggableObject
@ -15,18 +14,14 @@ func _ready() -> void:
confirmed.connect(interact)
canceled.connect(cancel_interaction)
func try_interact(draggable: DraggableObject) -> void:
if draggable.interactible != null:
var interaction: Interactible = draggable.interactible
for group in interaction.get_groups():
if group in interaction_target_groups:
current_draggable = draggable
current_interaction = interaction
func try_interact(draggable: DraggableObject) -> bool:
if draggable.interactible != null and visible == false:
if instant:
interact()
else:
popup_centered()
break
return true
return false
func interact():
interacted.emit(current_draggable)

View file

@ -1,37 +1,3 @@
extends Area3D
class_name InteractibleDetector
var mask: PackedStringArray
var contacted_draggables: Array[DraggableObject]
var filtered_draggables: Array[DraggableObject]
func set_mask(new_mask: PackedStringArray) -> void:
mask.clear()
mask.append_array(new_mask)
filtered_draggables.clear()
for contacted in contacted_draggables:
filtered_draggables.append(contacted)
func _ready() -> void:
area_entered.connect(on_area_entered)
area_exited.connect(on_area_exited)
func on_area_entered(area: Area3D) -> void:
if area is DraggableObject:
contacted_draggables.append(area)
if is_in_mask(area.get_groups()):
filtered_draggables.append(area)
func on_area_exited(area: Area3D) -> void:
if area is DraggableObject:
contacted_draggables.erase(area)
if filtered_draggables.has(area):
filtered_draggables.erase(area)
func is_in_mask(groups: Array[StringName]) -> bool:
for group in groups:
if group in mask:
return true
return false

View file

@ -9,3 +9,6 @@ func _ready() -> void:
jar_fill_material.albedo_color = substance.color
if substance.melting_point > 20 and not substance.is_solution:
jar_fill_material.albedo_texture = preload("res://assets/textures/solid.png")
get_parent().add_to_group("solid_source")
else:
get_parent().add_to_group("fluid_source")