Skip to content

Commit

Permalink
RRayCast: add the getDirection() and getOrigin() methods
Browse files Browse the repository at this point in the history
  • Loading branch information
stephengold committed Sep 20, 2024
1 parent af3060c commit 693de5a
Show file tree
Hide file tree
Showing 2 changed files with 119 additions and 0 deletions.
44 changes: 44 additions & 0 deletions src/main/java/com/github/stephengold/joltjni/RRayCast.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,38 @@ public RRayCast(RVec3Arg startLocation, Vec3Arg offset) {
// *************************************************************************
// new methods exposed

/**
* Copy the end offset. The ray cast is unaffected. (native attribute:
* mDirection)
*
* @return a new offset vector (relative to the start location)
*/
public Vec3 getDirection() {
long raycastVa = va();
float x = getDirectionX(raycastVa);
float y = getDirectionY(raycastVa);
float z = getDirectionZ(raycastVa);
Vec3 result = new Vec3(x, y, z);

return result;
}

/**
* Copy the start location. The ray cast is unaffected. (native attribute:
* mOrigin)
*
* @return a new location vector
*/
public RVec3 getOrigin() {
long raycastVa = va();
double x = getOriginX(raycastVa);
double y = getOriginY(raycastVa);
double z = getOriginZ(raycastVa);
RVec3 result = new RVec3(x, y, z);

return result;
}

/**
* Return a point on the ray with the specified fraction. The ray cast is
* unaffected.
Expand All @@ -77,6 +109,18 @@ native private static long createRRayCast(

native private static void free(long raycastVa);

native private static float getDirectionX(long raycastVa);

native private static float getDirectionY(long raycastVa);

native private static float getDirectionZ(long raycastVa);

native private static double getOriginX(long raycastVa);

native private static double getOriginY(long raycastVa);

native private static double getOriginZ(long raycastVa);

native private static double getPointOnRayX(long raycastVa, float fraction);

native private static double getPointOnRayY(long raycastVa, float fraction);
Expand Down
75 changes: 75 additions & 0 deletions src/main/native/glue/r/RRayCast.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,81 @@ JNIEXPORT void JNICALL Java_com_github_stephengold_joltjni_RRayCast_free
delete pRayCast;
}

/*
* Class: com_github_stephengold_joltjni_RRayCast
* Method: getDirectionX
* Signature: (J)F
*/
JNIEXPORT jfloat JNICALL Java_com_github_stephengold_joltjni_RRayCast_getDirectionX
(JNIEnv *, jclass, jlong raycastVa) {
const RRayCast * const pRayCast = reinterpret_cast<RRayCast *> (raycastVa);
const float result = pRayCast->mDirection.GetX();
return result;
}

/*
* Class: com_github_stephengold_joltjni_RRayCast
* Method: getDirectionY
* Signature: (J)F
*/
JNIEXPORT jfloat JNICALL Java_com_github_stephengold_joltjni_RRayCast_getDirectionY
(JNIEnv *, jclass, jlong raycastVa) {
const RRayCast * const pRayCast = reinterpret_cast<RRayCast *> (raycastVa);
const float result = pRayCast->mDirection.GetY();
return result;
}

/*
* Class: com_github_stephengold_joltjni_RRayCast
* Method: getDirectionZ
* Signature: (J)F
*/
JNIEXPORT jfloat JNICALL Java_com_github_stephengold_joltjni_RRayCast_getDirectionZ
(JNIEnv *, jclass, jlong raycastVa) {
const RRayCast * const pRayCast = reinterpret_cast<RRayCast *> (raycastVa);
const float result = pRayCast->mDirection.GetZ();
return result;
}

/*
* Class: com_github_stephengold_joltjni_RRayCast
* Method: getOriginX
* Signature: (J)D
*/
JNIEXPORT jdouble JNICALL Java_com_github_stephengold_joltjni_RRayCast_getOriginX
(JNIEnv *, jclass, jlong raycastVa) {
const RRayCast * const pRayCast = reinterpret_cast<RRayCast *> (raycastVa);
const RVec3 rvec3 = pRayCast->mOrigin;
const double result = rvec3.GetX();
return result;
}

/*
* Class: com_github_stephengold_joltjni_RRayCast
* Method: getOriginY
* Signature: (J)D
*/
JNIEXPORT jdouble JNICALL Java_com_github_stephengold_joltjni_RRayCast_getOriginY
(JNIEnv *, jclass, jlong raycastVa) {
const RRayCast * const pRayCast = reinterpret_cast<RRayCast *> (raycastVa);
const RVec3 rvec3 = pRayCast->mOrigin;
const double result = rvec3.GetY();
return result;
}

/*
* Class: com_github_stephengold_joltjni_RRayCast
* Method: getOriginZ
* Signature: (J)D
*/
JNIEXPORT jdouble JNICALL Java_com_github_stephengold_joltjni_RRayCast_getOriginZ
(JNIEnv *, jclass, jlong raycastVa) {
const RRayCast * const pRayCast = reinterpret_cast<RRayCast *> (raycastVa);
const RVec3 rvec3 = pRayCast->mOrigin;
const double result = rvec3.GetZ();
return result;
}

/*
* Class: com_github_stephengold_joltjni_RRayCast
* Method: getPointOnRayX
Expand Down

0 comments on commit 693de5a

Please sign in to comment.