Module: Jolt::SystemQueries
- Included in:
- System
- Defined in:
- lib/jolt/system_queries.rb
Instance Method Summary collapse
- #overlap_point(point, layer_mask: nil, &block) ⇒ Object
- #overlap_sphere(center, radius, layer_mask: nil, &block) ⇒ Object
- #raycast(origin:, direction:, layer_mask: nil) ⇒ Object
Instance Method Details
#overlap_point(point, layer_mask: nil, &block) ⇒ Object
45 46 47 48 49 50 51 52 53 |
# File 'lib/jolt/system_queries.rb', line 45 def overlap_point(point, layer_mask: nil, &block) point_native = Conversions.native_vec3(point, name: "point") collect_overlapping_bodies( :JPH_BroadPhaseQuery_CollidePoint, point_native.pointer, layer_mask:, &block ) end |
#overlap_sphere(center, radius, layer_mask: nil, &block) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/jolt/system_queries.rb', line 33 def overlap_sphere(center, radius, layer_mask: nil, &block) center_native = Conversions.native_vec3(center, name: "center") radius = Conversions.positive_float(radius, "radius") collect_overlapping_bodies( :JPH_BroadPhaseQuery_CollideSphere, center_native.pointer, radius, layer_mask:, &block ) end |
#raycast(origin:, direction:, layer_mask: nil) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/jolt/system_queries.rb', line 5 def raycast(origin:, direction:, layer_mask: nil) __check_alive! origin_native = Conversions.native_vec3(origin, name: "origin") direction_native = Conversions.native_vec3(direction, name: "direction") direction_vector = Conversions.vec3(direction_native) if direction_vector.length <= Float::EPSILON raise InvalidArgumentError, "direction must not be zero" end filter, filter_context = object_layer_filter(layer_mask) result = Native::RayCastResult.new hit = Native.JPH_NarrowPhaseQuery_CastRay( @narrow_phase_query, origin_native.pointer, direction_native.pointer, result.pointer, nil, filter, nil ) return nil unless hit build_hit(origin_native, direction_native, result) ensure Native.JPH_ObjectLayerFilter_Destroy(filter) if filter && !filter.null? filter_context = nil end |