I'm very confused here. I have this weapon class, and in my _attack() function, I'm shooting a raycast using my _query_collision() function.
This works fine:
extends BallisticWeapon
class_name HitscanWeapon
var raycast_origin_node: Node3D
func _attack() -> void:
super._attack()
# Collision detected and damage
var collision = _query_collision()
print(collision)
## Shoots out a ray from the weapon, and returns the first collision that
## it finds in that path.
func _query_collision() -> Dictionary:
var space := get_world_3d().direct_space_state
var query := PhysicsRayQueryParameters3D.create(
self.raycast_origin_node.global_position,
self.raycast_origin_node.global_position + -self.global_transform.basis.z * self.max_range
)
return space.intersect_ray(query)
But, if I add a destination: Vector3 argument to _query_collision(), replace the self.raycast_origin_node.global_position + -self.global_transform.basis.z with destination, and pass self.raycast_origin_node.global_position + -self.global_transform.basis.z from the _attack() function to _query_collision(), it no longer works.
func _attack() -> void:
super._attack()
# Collision detected and damage
var collision = _query_collision(self.raycast_origin_node.global_position + -self.global_transform.basis.z)
if collision:
print(collision)
## Shoots out a ray from the weapon, and returns the first collision that
## it finds in that path.
func _query_collision(destination: Vector3) -> Dictionary:
var space := get_world_3d().direct_space_state
var query := PhysicsRayQueryParameters3D.create(
self.raycast_origin_node.global_position,
destination * self.max_range
)
return space.intersect_ray(query)
What's going on here?