Merge pull request #317 from westonCoder/moving-platform-movement-matching
Made Player Movement Match Moving Platforms
This commit is contained in:
commit
0da90ce622
|
@ -162,6 +162,8 @@ void playerInit(struct Player* player, struct Location* startLocation, struct Ve
|
||||||
player->body.transform = player->lookTransform;
|
player->body.transform = player->lookTransform;
|
||||||
|
|
||||||
player->anchoredTo = NULL;
|
player->anchoredTo = NULL;
|
||||||
|
player->lastAnchorToPosition = gZeroVec;
|
||||||
|
player->lastAnchorToVelocity = gZeroVec;
|
||||||
|
|
||||||
collisionObjectUpdateBB(&player->collisionObject);
|
collisionObjectUpdateBB(&player->collisionObject);
|
||||||
|
|
||||||
|
@ -531,6 +533,9 @@ struct SKAnimationClip* playerDetermineNextClip(struct Player* player, float* bl
|
||||||
#define FOOTING_CAST_DISTANCE (PLAYER_HEAD_HEIGHT + 0.2f)
|
#define FOOTING_CAST_DISTANCE (PLAYER_HEAD_HEIGHT + 0.2f)
|
||||||
|
|
||||||
void playerUpdateFooting(struct Player* player, float maxStandDistance) {
|
void playerUpdateFooting(struct Player* player, float maxStandDistance) {
|
||||||
|
if (player->anchoredTo){
|
||||||
|
player->lastAnchorToPosition = player->anchoredTo->transform.position;
|
||||||
|
}
|
||||||
player->anchoredTo = NULL;
|
player->anchoredTo = NULL;
|
||||||
|
|
||||||
struct Vector3 castOffset;
|
struct Vector3 castOffset;
|
||||||
|
@ -653,7 +658,11 @@ void playerUpdate(struct Player* player) {
|
||||||
int isDead = playerIsDead(player);
|
int isDead = playerIsDead(player);
|
||||||
|
|
||||||
if (!isDead && (player->flags & PlayerFlagsGrounded) && controllerActionGet(ControllerActionJump)) {
|
if (!isDead && (player->flags & PlayerFlagsGrounded) && controllerActionGet(ControllerActionJump)) {
|
||||||
player->body.velocity.y = JUMP_IMPULSE;
|
player->body.velocity.y += JUMP_IMPULSE;
|
||||||
|
if (!vector3IsZero(&player->lastAnchorToVelocity) && player->anchoredTo != NULL){
|
||||||
|
player->body.velocity.x += player->lastAnchorToVelocity.x;
|
||||||
|
player->body.velocity.z += player->lastAnchorToVelocity.z;
|
||||||
|
}
|
||||||
player->flags |= PlayerJustJumped;
|
player->flags |= PlayerJustJumped;
|
||||||
hudResolvePrompt(&gScene.hud, CutscenePromptTypeJump);
|
hudResolvePrompt(&gScene.hud, CutscenePromptTypeJump);
|
||||||
}
|
}
|
||||||
|
@ -728,6 +737,10 @@ void playerUpdate(struct Player* player) {
|
||||||
}
|
}
|
||||||
|
|
||||||
targetVelocity.y = player->body.velocity.y;
|
targetVelocity.y = player->body.velocity.y;
|
||||||
|
if (!vector3IsZero(&player->lastAnchorToVelocity) && !(player->flags & PlayerFlagsGrounded) && !(player->anchoredTo)){
|
||||||
|
targetVelocity.x += player->lastAnchorToVelocity.x/FIXED_DELTA_TIME;
|
||||||
|
targetVelocity.z += player->lastAnchorToVelocity.z/FIXED_DELTA_TIME;
|
||||||
|
}
|
||||||
|
|
||||||
float velocityDot = vector3Dot(&player->body.velocity, &targetVelocity);
|
float velocityDot = vector3Dot(&player->body.velocity, &targetVelocity);
|
||||||
int isAccelerating = velocityDot > 0.0f;
|
int isAccelerating = velocityDot > 0.0f;
|
||||||
|
@ -774,6 +787,13 @@ void playerUpdate(struct Player* player) {
|
||||||
vector3Sub(&player->body.transform.position, &player->lastAnchorPoint, &player->body.transform.position);
|
vector3Sub(&player->body.transform.position, &player->lastAnchorPoint, &player->body.transform.position);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!vector3IsZero(&player->lastAnchorToPosition) && player->anchoredTo){
|
||||||
|
vector3Sub(&player->anchoredTo->transform.position, &player->lastAnchorToPosition, &player->lastAnchorToVelocity);
|
||||||
|
}
|
||||||
|
else if (!(player->anchoredTo) && (player->flags & PlayerFlagsGrounded)){
|
||||||
|
player->lastAnchorToVelocity = gZeroVec;
|
||||||
|
}
|
||||||
|
|
||||||
struct Box3D sweptBB = player->collisionObject.boundingBox;
|
struct Box3D sweptBB = player->collisionObject.boundingBox;
|
||||||
collisionObjectUpdateBB(&player->collisionObject);
|
collisionObjectUpdateBB(&player->collisionObject);
|
||||||
box3DUnion(&sweptBB, &player->collisionObject.boundingBox, &sweptBB);
|
box3DUnion(&sweptBB, &player->collisionObject.boundingBox, &sweptBB);
|
||||||
|
|
|
@ -44,6 +44,8 @@ struct Player {
|
||||||
float yawVelocity;
|
float yawVelocity;
|
||||||
enum PlayerFlags flags;
|
enum PlayerFlags flags;
|
||||||
struct RigidBody* anchoredTo;
|
struct RigidBody* anchoredTo;
|
||||||
|
struct Vector3 lastAnchorToPosition;
|
||||||
|
struct Vector3 lastAnchorToVelocity;
|
||||||
struct Vector3 relativeAnchor;
|
struct Vector3 relativeAnchor;
|
||||||
struct Vector3 lastAnchorPoint;
|
struct Vector3 lastAnchorPoint;
|
||||||
short flyingSoundLoopId;
|
short flyingSoundLoopId;
|
||||||
|
|
Loading…
Reference in a new issue