Skip to content

Commit 0bd39b8

Browse files
committed
-
1 parent 80105d0 commit 0bd39b8

2 files changed

Lines changed: 24 additions & 9 deletions

File tree

gamedata/entities/ped_animations.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,15 @@
4949
},
5050
"jump_onto_car":
5151
{
52-
"start_frame": 91, "num_frames": 3
52+
"start_frame": 91, "num_frames": 3, "fps": 12.0
5353
},
5454
"slide_on_car":
5555
{
56-
"start_frame": 94, "num_frames": 1, "fps": 1.0
56+
"start_frame": 94, "num_frames": 1, "fps": 8.0
5757
},
5858
"drop_off_car_sliding":
5959
{
60-
"start_frame": 95, "num_frames": 2
60+
"start_frame": 95, "num_frames": 2, "fps": 12.0
6161
},
6262
"fall_short":
6363
{

src/Pedestrian.cpp

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -381,18 +381,33 @@ void Pedestrian::ReceiveHitByCar(Vehicle* targetCar, float impulse)
381381
if (IsDead())
382382
return;
383383

384-
if (impulse > 2.6f || IsUnconscious()) // todo: magic numbers
384+
if (IsUnconscious())
385385
{
386386
Die(ePedestrianDeathReason_HitByCar, nullptr);
387387
return;
388388
}
389389

390-
// jump over
391-
if (mStatesManager.CanStartSlideOnCarState())
390+
glm::vec2 carPosition = targetCar->mPhysicsBody->GetPosition2();
391+
glm::vec2 pedPosition = mPhysicsBody->GetPosition2();
392+
glm::vec2 directionNormal = glm::normalize(pedPosition - carPosition);
393+
glm::vec2 directionVelocity = glm::dot(directionNormal, targetCar->mPhysicsBody->GetLinearVelocity()) * directionNormal;
394+
float speedInDirection = glm::dot(directionVelocity, directionNormal);
395+
speedInDirection = fabs(speedInDirection);
396+
397+
float killSpeed = 6.0f; // todo: magic numbers
398+
if (speedInDirection > killSpeed)
392399
{
393-
PedestrianStateEvent evData { ePedestrianStateEvent_PushByCar };
394-
mStatesManager.ChangeState(ePedestrianState_SlideOnCar, evData);
395-
return;
400+
Die(ePedestrianDeathReason_HitByCar, nullptr);
401+
}
402+
else if (speedInDirection > 1.0f)// todo: magic numbers
403+
{
404+
// jump over
405+
if (mStatesManager.CanStartSlideOnCarState())
406+
{
407+
PedestrianStateEvent evData { ePedestrianStateEvent_PushByCar };
408+
mStatesManager.ChangeState(ePedestrianState_SlideOnCar, evData);
409+
return;
410+
}
396411
}
397412
}
398413

0 commit comments

Comments
 (0)