Variant PhysicsDirectSpaceState::_intersect_shape(const RID& p_shape, const Transform& p_xform,int p_result_max,const Vector<RID>& p_exclude,uint32_t p_user_mask) { ERR_FAIL_INDEX_V(p_result_max,4096,Variant()); if (p_result_max<=0) return Variant(); Set<RID> exclude; for(int i=0;i<p_exclude.size();i++) exclude.insert(p_exclude[i]); ShapeResult *res=(ShapeResult*)alloca(p_result_max*sizeof(ShapeResult)); int rc = intersect_shape(p_shape,p_xform,0,res,p_result_max,exclude); if (rc==0) return Variant(); Ref<PhysicsShapeQueryResult> result = memnew( PhysicsShapeQueryResult ); result->result.resize(rc); for(int i=0;i<rc;i++) result->result[i]=res[i]; return result; }
Array PhysicsDirectSpaceState::_intersect_shape(const Ref<PhysicsShapeQueryParameters> &psq, int p_max_results) { Vector<ShapeResult> sr; sr.resize(p_max_results); int rc = intersect_shape(psq->shape,psq->transform,psq->margin,sr.ptr(),sr.size(),psq->exclude,psq->layer_mask,psq->object_type_mask); Array ret; ret.resize(rc); for(int i=0;i<rc;i++) { Dictionary d; d["rid"]=sr[i].rid; d["collider_id"]=sr[i].collider_id; d["collider"]=sr[i].collider; d["shape"]=sr[i].shape; ret[i]=d; } return ret; }