Requested alterations implemented

This commit is contained in:
Weston Salinas 2023-03-21 22:13:03 -05:00
parent 62cc0289c0
commit 4d88d9c3c4

View file

@ -256,16 +256,25 @@ int playerIsGrabbing(struct Player* player) {
return player->grabConstraint.object != NULL;
}
int playerRaycastGrab(struct Player* player, struct RaycastHit* hit) {
int playerRaycastGrab(struct Player* player, struct RaycastHit* hit, int checkPastObject) {
struct Ray ray;
ray.origin = player->lookTransform.position;
quatMultVector(&player->lookTransform.rotation, &gForward, &ray.dir);
vector3Negate(&ray.dir, &ray.dir);
int result;
player->collisionObject.collisionLayers = 0;
int result = collisionSceneRaycast(&gCollisionScene, player->body.currentRoom, &ray, COLLISION_LAYERS_GRABBABLE | COLLISION_LAYERS_TANGIBLE, GRAB_RAYCAST_DISTANCE, 1, hit);
if (checkPastObject){
short prevCollisionLayers = player->grabConstraint.object->collisionLayers;
player->grabConstraint.object->collisionLayers = 0;
result = collisionSceneRaycast(&gCollisionScene, player->body.currentRoom, &ray, COLLISION_LAYERS_TANGIBLE, GRAB_RAYCAST_DISTANCE, 1, hit);
player->grabConstraint.object->collisionLayers = prevCollisionLayers;
}
else{
result = collisionSceneRaycast(&gCollisionScene, player->body.currentRoom, &ray, COLLISION_LAYERS_GRABBABLE | COLLISION_LAYERS_TANGIBLE, GRAB_RAYCAST_DISTANCE, 1, hit);
}
player->collisionObject.collisionLayers = PLAYER_COLLISION_LAYERS;
@ -289,7 +298,7 @@ void playerUpdateGrabbedObject(struct Player* player) {
} else {
struct RaycastHit hit;
if (playerRaycastGrab(player, &hit)) {
if (playerRaycastGrab(player, &hit, 0)) {
hit.object->flags |= COLLISION_OBJECT_INTERACTED;
if (hit.object->body && (hit.object->body->flags & RigidBodyFlagsGrabbable)) {
@ -337,25 +346,14 @@ void playerUpdateGrabbedObject(struct Player* player) {
struct Quaternion grabRotation = player->lookTransform.rotation;
// try to determine how far away to set the grab dist
struct Ray ray;
struct RaycastHit hit;
struct Vector3 temp_grab_dist = gGrabDistance;
ray.origin = player->lookTransform.position;
quatMultVector(&player->lookTransform.rotation, &gForward, &ray.dir);
vector3Negate(&ray.dir, &ray.dir);
//hide player/the object player is holding to determine if there is a wall closer
player->grabConstraint.object->collisionLayers = 0;
player->collisionObject.collisionLayers = 0;
if (collisionSceneRaycast(&gCollisionScene, player->body.currentRoom, &ray, 1, GRAB_RAYCAST_DISTANCE, 1, &hit)){
if (playerRaycastGrab(player, &hit, 1)){
float dist = hit.distance;
// bound distance to between -0.1 and the gGrabDistance.z
temp_grab_dist.z = maxf(((-1.0f*fabsf(dist))+0.2f), gGrabDistance.z);
temp_grab_dist.z = minf(temp_grab_dist.z, -0.2f);
}
player->grabConstraint.object->collisionLayers = COLLISION_LAYERS_GRABBABLE | COLLISION_LAYERS_TANGIBLE;
player->collisionObject.collisionLayers = PLAYER_COLLISION_LAYERS;
//drop the object if grab distance becomes too close to player
if (fabsf(temp_grab_dist.z) < 0.3){
playerSetGrabbing(player, NULL);
return;