18.5
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user