Added raycast

Added making object interactable
Added slider + knob
This commit is contained in:
2024-07-07 16:19:12 +02:00
parent 0ee0eb63c0
commit ea4f06feed
8 changed files with 260 additions and 0 deletions

27
scenes/Camera3D.gd Normal file
View File

@@ -0,0 +1,27 @@
extends Camera3D
@onready var raycast : RayCast3D = $RayCast3D
var last_collided_object : CollisionObject3D = null
func _process(_delta : float) -> void:
check_interaction()
func check_interaction() -> void:
if raycast.is_colliding():
var collider : CollisionObject3D = raycast.get_collider()
if collider != last_collided_object:
if last_collided_object != null:
print("Stopped looking at interactable object:", last_collided_object.name)
if last_collided_object.has_method("make_interactable"):
last_collided_object.make_interactable(false)
print("Started looking at interactable object:", collider.name)
last_collided_object = collider
if collider.has_method("make_interactable"):
collider.make_interactable(true)
else:
if last_collided_object != null:
print("Stopped looking at interactable object:", last_collided_object.name)
if last_collided_object.has_method("make_interactable"):
last_collided_object.make_interactable(false)
last_collided_object = null

64
scenes/control_panel.tscn Normal file
View File

@@ -0,0 +1,64 @@
[gd_scene load_steps=11 format=3 uid="uid://bte0jkgh6vd8x"]
[ext_resource type="Script" path="res://scripts/Slider1.gd" id="1_nyunj"]
[sub_resource type="BoxShape3D" id="BoxShape3D_6i38b"]
size = Vector3(3, 1, 1)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_4f8ex"]
albedo_color = Color(0.351563, 0.351563, 0.351563, 1)
[sub_resource type="BoxMesh" id="BoxMesh_ymgdf"]
material = SubResource("StandardMaterial3D_4f8ex")
size = Vector3(3, 1, 0.3)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_em8o8"]
albedo_color = Color(0.351563, 0.351563, 0.351563, 1)
[sub_resource type="BoxMesh" id="BoxMesh_7rk03"]
material = SubResource("StandardMaterial3D_em8o8")
size = Vector3(3, 0.1, 1)
[sub_resource type="BoxShape3D" id="BoxShape3D_gw828"]
size = Vector3(0.1, 0.05, 0.6)
[sub_resource type="BoxMesh" id="BoxMesh_5801d"]
size = Vector3(0.05, 0.05, 0.5)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ldgvd"]
albedo_color = Color(0.0438094, 0.444896, 0.673899, 1)
[sub_resource type="CylinderMesh" id="CylinderMesh_s3lht"]
material = SubResource("StandardMaterial3D_ldgvd")
top_radius = 0.02
bottom_radius = 0.02
height = 0.1
[node name="ControlPanel" type="StaticBody3D"]
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 0.5, 0.5)
shape = SubResource("BoxShape3D_6i38b")
[node name="Structure" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 0.5, 0.5)
mesh = SubResource("BoxMesh_ymgdf")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Structure"]
transform = Transform3D(1, 0, 0, 0, 0.939693, -0.34202, 0, 0.34202, 0.939693, 0, 0.55, 0)
mesh = SubResource("BoxMesh_7rk03")
[node name="Slider1" type="StaticBody3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.939693, -0.34202, 0, 0.34202, 0.939693, 0.182479, 1.06904, 0.591278)
script = ExtResource("1_nyunj")
[node name="RaycastCollider" type="CollisionShape3D" parent="Slider1"]
shape = SubResource("BoxShape3D_gw828")
[node name="Slider" type="MeshInstance3D" parent="Slider1"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
mesh = SubResource("BoxMesh_5801d")
[node name="Knob" type="MeshInstance3D" parent="Slider1/Slider"]
transform = Transform3D(-4.37115e-08, 1, -4.37115e-08, 0, -4.37114e-08, -1, -1, -4.37114e-08, 1.91069e-15, 0, 0.04, 0.25)
mesh = SubResource("CylinderMesh_s3lht")

4
scenes/main.gd Normal file
View File

@@ -0,0 +1,4 @@
extends Node3D
func _ready() -> void:
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED

32
scenes/main.tscn Normal file
View File

@@ -0,0 +1,32 @@
[gd_scene load_steps=6 format=3 uid="uid://dlekwle45c0y2"]
[ext_resource type="Script" path="res://scenes/main.gd" id="1_12te6"]
[ext_resource type="PackedScene" uid="uid://bte0jkgh6vd8x" path="res://scenes/control_panel.tscn" id="1_j1pw0"]
[ext_resource type="PackedScene" uid="uid://u6bx2c081h3n" path="res://scenes/player.tscn" id="2_04ebg"]
[sub_resource type="BoxShape3D" id="BoxShape3D_3nuje"]
size = Vector3(50, 2, 50)
[sub_resource type="BoxMesh" id="BoxMesh_py2d4"]
size = Vector3(50, 2, 50)
[node name="Main" type="Node3D"]
script = ExtResource("1_12te6")
[node name="ControlPanel" parent="." instance=ExtResource("1_j1pw0")]
[node name="SpotLight3D" type="SpotLight3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.568088, 0.822968, 0, -0.822968, 0.568088, 1.3562, 2.47603, 2.06382)
light_energy = 16.0
[node name="Player" parent="." instance=ExtResource("2_04ebg")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.26895, 1.48304, 1.97319)
[node name="Ground" type="StaticBody3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground"]
shape = SubResource("BoxShape3D_3nuje")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Ground/CollisionShape3D"]
mesh = SubResource("BoxMesh_py2d4")

42
scenes/player.tscn Normal file
View File

@@ -0,0 +1,42 @@
[gd_scene load_steps=4 format=3 uid="uid://u6bx2c081h3n"]
[ext_resource type="Script" path="res://scripts/Player.gd" id="1_s6pnw"]
[ext_resource type="Script" path="res://scenes/Camera3D.gd" id="2_vvm4p"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_vhrs0"]
radius = 0.2
[node name="Player" type="CharacterBody3D"]
script = ExtResource("1_s6pnw")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("CapsuleShape3D_vhrs0")
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.673565, 0)
script = ExtResource("2_vvm4p")
[node name="RayCast3D" type="RayCast3D" parent="Camera3D"]
target_position = Vector3(0, 0, -3)
[node name="PlayerUI" type="Control" parent="."]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="ColorRect" type="ColorRect" parent="PlayerUI"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -0.5
offset_top = -0.5
offset_right = 1.5
offset_bottom = 1.5
grow_horizontal = 2
grow_vertical = 2