mirror of
https://github.com/mwpenny/portal64-still-alive.git
synced 2024-10-19 22:27:36 -04:00
throw grabbed objects when using the portal buttons
This commit is contained in:
parent
d7b2bcfe67
commit
43b5a83f6f
|
@ -54,6 +54,7 @@
|
|||
#define MAX_ROTATE_RATE_DELTA MAX_ROTATE_RATE
|
||||
|
||||
#define JUMP_IMPULSE 2.7f
|
||||
#define THROW_IMPULSE 2.7f
|
||||
|
||||
struct Vector3 gGrabDistance = {0.0f, 0.0f, -1.5f};
|
||||
struct Vector3 gCameraOffset = {0.0f, 0.0f, 0.0f};
|
||||
|
@ -296,6 +297,20 @@ int playerIsGrabbing(struct Player* player) {
|
|||
return player->grabConstraint.object != NULL;
|
||||
}
|
||||
|
||||
void playerThrowObject(struct Player* player) {
|
||||
if (!playerIsGrabbing(player)) {
|
||||
return;
|
||||
}
|
||||
struct CollisionObject* object = player->grabConstraint.object;
|
||||
playerSetGrabbing(player, NULL);
|
||||
|
||||
struct Vector3 forward, right;
|
||||
playerGetMoveBasis(&player->lookTransform, &forward, &right);
|
||||
|
||||
vector3Scale(&forward, &forward, -1.0f * THROW_IMPULSE);
|
||||
rigidBodyAppyImpulse(object->body, &object->body->transform.position, &forward);
|
||||
}
|
||||
|
||||
int playerRaycastGrab(struct Player* player, struct RaycastHit* hit, int checkPastObject) {
|
||||
struct Ray ray;
|
||||
|
||||
|
|
|
@ -73,6 +73,7 @@ int playerIsDead(struct Player* player);
|
|||
void playerSetGrabbing(struct Player* player, struct CollisionObject* grabbing);
|
||||
void playerSignalPortalChanged(struct Player* player);
|
||||
int playerIsGrabbing(struct Player* player);
|
||||
void playerThrowObject(struct Player* player);
|
||||
|
||||
void playerSerialize(struct Serializer* serializer, SerializeAction action, struct Player* player);
|
||||
void playerDeserialize(struct Serializer* serializer, struct Player* player);
|
||||
|
|
|
@ -411,7 +411,7 @@ void sceneCheckPortals(struct Scene* scene) {
|
|||
}
|
||||
|
||||
if ((fireOrange || fireBlue) && playerIsGrabbing(&scene->player)){
|
||||
playerSetGrabbing(&scene->player, NULL);
|
||||
playerThrowObject(&scene->player);
|
||||
scene->ignorePortalGun = fireOrange && fireBlue ? IGNORE_FIRE_BOTH : (fireBlue ? IGNORE_FIRE_BLUE : IGNORE_FIRE_ORANGE); // prevent blocking other button
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue