diff --git a/prefabs/character.tscn b/prefabs/character.tscn index 8bd0a7c..5a37dae 100644 --- a/prefabs/character.tscn +++ b/prefabs/character.tscn @@ -11,3 +11,5 @@ visible = false [node name="InteractionRay" parent="Head" index="3" instance=ExtResource("2_xofgc")] transform = Transform3D(1.2, 0, 0, 0, 1.2, 0, 0, 0, 1.2, 0, 0, 0) + +[node name="GrabFixPoint" type="Node3D" parent="Head" index="4"] diff --git a/project.godot b/project.godot index 423bcdf..f07d6eb 100644 --- a/project.godot +++ b/project.godot @@ -64,6 +64,25 @@ interact={ "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":69,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null) ] } +wheel_up={ +"deadzone": 0.2, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":4,"canceled":false,"pressed":false,"double_click":false,"script":null) +] +} +wheel_down={ +"deadzone": 0.2, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":5,"canceled":false,"pressed":false,"double_click":false,"script":null) +] +} +grab={ +"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":82,"key_label":0,"unicode":114,"location":0,"echo":false,"script":null) +] +} + +[physics] + +3d/physics_engine="Jolt Physics" [rendering] diff --git a/scenes/blockout_room.tscn b/scenes/blockout_room.tscn index 25b3cac..de5f3d8 100644 --- a/scenes/blockout_room.tscn +++ b/scenes/blockout_room.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=28 format=3 uid="uid://gq33ysuit61b"] +[gd_scene load_steps=31 format=3 uid="uid://gq33ysuit61b"] [ext_resource type="Script" uid="uid://o17v5m75ew03" path="res://scenes/custom_render.gd" id="1_gcpng"] [ext_resource type="PackedScene" uid="uid://c70o7nk6wxcmx" path="res://models/UndertakerBlockout.fbx" id="2_gfayn"] @@ -10,6 +10,7 @@ [ext_resource type="Script" uid="uid://bmxu5xdxlq0e6" path="res://scenes/flickering_oven_light.gd" id="7_sve1f"] [ext_resource type="VoxelGIData" uid="uid://bfwtxdvx4w12w" path="res://scenes/blockout_room.VoxelGI_data.res" id="8_dp7jk"] [ext_resource type="Shader" uid="uid://bf2nxtrto5u5r" path="res://scenes/main_render.gdshader" id="9_k5i88"] +[ext_resource type="Script" uid="uid://bgrc6ktuxyrm6" path="res://scenes/pickupable.gd" id="10_5747v"] [sub_resource type="BoxShape3D" id="BoxShape3D_gfayn"] size = Vector3(12.2438965, 0.48779297, 13.901489) @@ -92,8 +93,12 @@ glow_intensity = 1.43 glow_strength = 1.04 glow_bloom = 0.16 +[sub_resource type="BoxMesh" id="BoxMesh_5747v"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_mu0to"] + [sub_resource type="Curve" id="Curve_gcpng"] -_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.26234567, 0.14241672), 0.0, 0.0, 0, 0, Vector2(0.5092592, 0.3427866), 0.0, 0.0, 0, 0, Vector2(0.79320985, 0.6313193), 0.0, 0.0, 0, 0, Vector2(0.87962955, 0.96794075), 0.0, 0.0, 0, 0, Vector2(1, 1), 0.063336894, 0.0, 0, 0] +_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.26234567, 0.14241672), 0.0, 0.0, 0, 0, Vector2(0.5092592, 0.3427866), 0.0, 0.0, 0, 0, Vector2(0.7561728, 0.6233045), 0.0, 0.0, 0, 0, Vector2(0.8641975, 0.97595555), 0.0, 0.0, 0, 0, Vector2(1, 1), 0.063336894, 0.0, 0, 0] point_count = 6 [sub_resource type="CurveTexture" id="CurveTexture_5747v"] @@ -175,6 +180,9 @@ script = ExtResource("4_ui586") [node name="Character" parent="SubViewportContainer/SubViewport" instance=ExtResource("4_tedjo")] +[node name="GrabFixPoint" parent="SubViewportContainer/SubViewport/Character/Head" index="4"] +transform = Transform3D(-0.9766723, 0, -0.21473524, 0, 1, 0, 0.21473524, 0, -0.9766723, 0, 0, 0) + [node name="Lever" parent="SubViewportContainer/SubViewport" instance=ExtResource("5_tedjo")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 1.884376, 1.4100053, 4.976951) @@ -290,6 +298,26 @@ environment = SubResource("Environment_dp7jk") transform = Transform3D(0.5765749, 0.8170443, 0, -0.8170443, 0.5765749, 0, 0, 0, 1, -2.4286354, 2.0967534, -0.82138157) light_energy = 0.05 +[node name="PhysBox" type="RigidBody3D" parent="SubViewportContainer/SubViewport"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.3421727, 0.88496697, 0) +freeze_mode = 1 +script = ExtResource("10_5747v") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="SubViewportContainer/SubViewport/PhysBox"] +mesh = SubResource("BoxMesh_5747v") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="SubViewportContainer/SubViewport/PhysBox"] +shape = SubResource("BoxShape3D_mu0to") + +[node name="PhysBox2" type="RigidBody3D" parent="SubViewportContainer/SubViewport"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.3421727, 1.967477, 0) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="SubViewportContainer/SubViewport/PhysBox2"] +mesh = SubResource("BoxMesh_5747v") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="SubViewportContainer/SubViewport/PhysBox2"] +shape = SubResource("BoxShape3D_mu0to") + [node name="TextureRect" type="TextureRect" parent="."] material = SubResource("ShaderMaterial_gcpng") anchors_preset = 15 @@ -302,3 +330,5 @@ texture = SubResource("ViewportTexture_dp7jk") [connection signal="on_hit" from="SubViewportContainer/SubViewport/Interactable" to="SubViewportContainer/SubViewport/DebugPrinter" method="_on_interactable_on_hit"] [connection signal="changed" from="SubViewportContainer/SubViewport/Lever" to="SubViewportContainer/SubViewport/LidCrane" method="set_grab"] + +[editable path="SubViewportContainer/SubViewport/Character"] diff --git a/scenes/pickupable.gd b/scenes/pickupable.gd new file mode 100644 index 0000000..c0455ea --- /dev/null +++ b/scenes/pickupable.gd @@ -0,0 +1,41 @@ +extends RigidBody3D + +@onready var grab_fix_point: Node3D = $"../Character/Head/GrabFixPoint" + +var grabbed: bool = false + +var rotate_todo:float = 0 + +func _input(event: InputEvent) -> void: + if event.is_action_pressed("wheel_up"): + rotate_todo += 30 + if event.is_action_pressed("wheel_down"): + rotate_todo -= 30 + + if event.is_action_pressed("grab"): + grabbed = !grabbed + print("grab: %s"%grabbed) + if grabbed: + grab_fix_point.global_position = global_position + freeze = true + else: + freeze = false + + +func self_rotate(amount_deg:float): + var axis = Plane(Vector3.UP).project(-grab_fix_point.global_transform.basis.z).normalized() + var amount_rad =deg_to_rad(amount_deg) + print("Rotating around %s by %s deg or %s rad"%[axis,amount_deg,amount_rad]) + rotate(axis,amount_rad) + print("New rotation: %s"%rotation_degrees) + + +func _physics_process(_delta: float) -> void: + + + if grabbed: + self_rotate(rotate_todo) + rotate_todo = 0 + #var axis = Plane(Vector3.UP).project(-grab_fix_point.global_transform.basis.z).normalized() + #rotate(axis,_delta*3.14) + global_position = grab_fix_point.global_position diff --git a/scenes/pickupable.gd.uid b/scenes/pickupable.gd.uid new file mode 100644 index 0000000..17fab2c --- /dev/null +++ b/scenes/pickupable.gd.uid @@ -0,0 +1 @@ +uid://bgrc6ktuxyrm6