This commit is contained in:
Guillaume Vern
2025-10-10 15:46:35 +02:00
parent 80a4c128cc
commit a2385360db
225 changed files with 5490 additions and 314 deletions
+60
View File
@@ -136,6 +136,7 @@ func _ready():
_grab_points.push_back(grab_point)
@onready var rumble_timer = 0.0
@onready var shoot_timer = 0.0
func _process(delta):
if _controller:
@@ -143,14 +144,73 @@ func _process(delta):
if _gpu_particles != null and is_picked_up():
_gpu_particles.amount_ratio = trigger_level
rumble_timer -= delta
shoot_timer -= delta
if shoot_timer <= 0.0 && trigger_level >= 0.1:
shoot_projectile()
shoot_timer = 0.1;
if rumble_timer <= 0.0:
_controller.trigger_haptic_pulse(&"haptic", 30, trigger_level, 0.11, 0.0)
rumble_timer = 0.1
else:
shoot_timer = 0.0
rumble_timer = 0.0
func shoot_projectile() -> void:
var projectile = Area3D.new()
# Enable monitoring for overlaps
projectile.monitoring = true
projectile.monitorable = true
get_tree().current_scene.add_child(projectile)
# Position it a bit forward/up from current position
projectile.global_transform = global_transform
projectile.global_transform.origin += Vector3(0.0, 0.2, 0.0)
# Add a collision shape (SphereShape3D)
var collider = CollisionShape3D.new()
var shape = SphereShape3D.new()
shape.radius = 0.5
collider.shape = shape
projectile.add_child(collider)
# Connect signal with new syntax and bind projectile instance
projectile.body_entered.connect(Callable(self, "_on_projectile_body_entered").bind(projectile))
projectile.set_meta("velocity", -global_transform.basis.z.normalized() * 1.0)
var script := GDScript.new()
script.source_code = '''
extends Area3D
func _start_lifetime_timer():
await get_tree().create_timer(0.5).timeout
if is_inside_tree():
queue_free()
'''
script.reload()
projectile.set_script(script)
# Start lifetime timer (using deferred call to ensure it's on the scene tree)
projectile.call_deferred("_start_lifetime_timer")
func _physics_process(delta: float) -> void:
# Move all Area3D projectiles manually
var current_scene = get_tree().current_scene
if current_scene:
for projectile in get_tree().current_scene.get_children():
if projectile is Area3D and projectile.has_meta("velocity"):
projectile.global_translate(projectile.get_meta("velocity") * delta)
func _on_projectile_body_entered(body: Node, projectile: Area3D) -> void:
if projectile and projectile.is_inside_tree():
projectile.queue_free()
# Called when the node exits the tree
func _exit_tree():
# Skip if not picked up
@@ -1,7 +1,7 @@
[gd_scene load_steps=7 format=3 uid="uid://clujaf3u776a3"]
[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/viewport_2d_in_3d.gd" id="1"]
[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/viewport_2d_in_3d_body.gd" id="2"]
[ext_resource type="Script" uid="uid://4xvdmrnws44w" path="res://addons/godot-xr-tools/objects/viewport_2d_in_3d.gd" id="1"]
[ext_resource type="Script" uid="uid://dru0ogdcxwjuf" path="res://addons/godot-xr-tools/objects/viewport_2d_in_3d_body.gd" id="2"]
[sub_resource type="QuadMesh" id="1"]
resource_local_to_scene = true
@@ -21,9 +21,6 @@ size = Vector3(3, 2, 0.02)
[node name="Viewport2Din3D" type="Node3D"]
script = ExtResource("1")
alpha_scissor_threshold = 0.25
unshaded = false
filter = true
[node name="Viewport" type="SubViewport" parent="."]
disable_3d = true