Skip to content

Commit 577bdc7

Browse files
committed
-
1 parent 116c49b commit 577bdc7

8 files changed

Lines changed: 32 additions & 7 deletions

File tree

src/GameDefs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -810,7 +810,7 @@ enum ePedestrianDeathReason
810810
ePedestrianDeathReason_Fried,
811811
ePedestrianDeathReason_Electrocuted,
812812
ePedestrianDeathReason_Drowned,
813-
ePedestrianDeathReason_HitByCar, // blown in car
813+
ePedestrianDeathReason_HitByCar,
814814
};
815815

816816
decl_enum_strings(ePedestrianDeathReason);

src/GameParams.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ GameParams::GameParams()
1010

1111
void GameParams::SetToDefaults()
1212
{
13-
mPedestrianBoundsSphereRadius = Convert::MapUnitsToMeters(0.15f);
13+
mPedestrianBoundsSphereRadius = Convert::MapUnitsToMeters(0.13f);
1414

1515
mPedestrianTurnSpeed = 260.0f;
1616
mPedestrianTurnSpeedSlideOnCar = 120.0f;
@@ -30,7 +30,7 @@ void GameParams::SetToDefaults()
3030
mWeaponsRechargeTime[eWeaponType_RocketLauncher] = 1.0f * 3.0f;
3131

3232
// weapons distance todo
33-
mWeaponsDistance[eWeaponType_Fists] = mPedestrianBoundsSphereRadius + Convert::MapUnitsToMeters(0.6f);
33+
mWeaponsDistance[eWeaponType_Fists] = mPedestrianBoundsSphereRadius + 0.2f;
3434
mWeaponsDistance[eWeaponType_Pistol] = Convert::MapUnitsToMeters(1.0f);
3535
mWeaponsDistance[eWeaponType_Machinegun] = Convert::MapUnitsToMeters(1.0f);
3636
mWeaponsDistance[eWeaponType_Flamethrower] = Convert::MapUnitsToMeters(1.0f);

src/Pedestrian.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ void Pedestrian::ComputeDrawHeight(const glm::vec3& position)
181181
}
182182

183183
float drawOffset = 0.02f; // todo: magic numbers
184-
if (IsUnconscious())
184+
if (IsUnconscious() || IsDead())
185185
{
186186
drawOffset = 0.001f; // todo: magic numbers
187187
}
@@ -381,3 +381,20 @@ void Pedestrian::SetDead(ePedestrianDeathReason deathReason)
381381
}
382382
}
383383

384+
void Pedestrian::ReceiveHitByCar(Vehicle* targetCar, float impulse)
385+
{
386+
debug_assert(targetCar);
387+
388+
if (IsDead())
389+
return;
390+
391+
// todo: magic numbers
392+
if (impulse > 4.0f)
393+
{
394+
Die(ePedestrianDeathReason_HitByCar, nullptr);
395+
return;
396+
}
397+
398+
// todo
399+
}
400+

src/Pedestrian.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ class Pedestrian final: public GameObject
6666
// get damage from weapon, it may be ignored depending on its current state
6767
void ReceiveDamage(eWeaponType weapon, Pedestrian* attacker);
6868

69+
// get damage from vehicle, it may be ignored depending on its current state
70+
// @param impulse: Impact value
71+
void ReceiveHitByCar(Vehicle* targetCar, float impulse);
72+
6973
// check if pedestrian entering/exiting or driving car at this moment
7074
bool IsCarPassenger() const;
7175
bool IsCarDriver() const;

src/PedestrianStates.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,7 @@ void PedestrianStatesManager::StateDead_ProcessEnter(const PedestrianStateEvent&
324324
debug_assert(stateEvent.mID == ePedestrianStateEvent_Die);
325325
mPedestrian->SetAnimation(eSpriteAnimID_Ped_LiesOnFloor, eSpriteAnimLoop_FromStart);
326326
mPedestrian->SetDead(stateEvent.mDeathReason);
327+
mPedestrian->mPhysicsComponent->ClearForces();
327328
}
328329

329330
//////////////////////////////////////////////////////////////////////////

src/PhysicsComponents.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ glm::vec3 PhysicsComponent::GetPosition() const
8787

8888
glm::vec2 PhysicsComponent::GetLinearVelocity() const
8989
{
90-
const b2Vec2& b2position = mPhysicsBody->GetLinearVelocity();
91-
return { b2position.x, b2position.y };
90+
const b2Vec2& b2velocity = mPhysicsBody->GetLinearVelocity();
91+
return { b2velocity.x, b2velocity.y };
9292
}
9393

9494
cxx::angle_t PhysicsComponent::GetAngularVelocity() const

src/PhysicsManager.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -659,5 +659,8 @@ void PhysicsManager::QueryObjectsWithinBox(const glm::vec2& aaboxCenter, const g
659659

660660
void PhysicsManager::HandleContactPedVsCar(b2Contact* contact, float impulse, PedPhysicsComponent* ped, CarPhysicsComponent* car)
661661
{
662+
if (!ped->ShouldCollideWith(PHYSICS_OBJCAT_CAR))
663+
return;
662664

665+
ped->mReferencePed->ReceiveHitByCar(car->mReferenceCar, impulse);
663666
}

src/System.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ bool SystemStartupParams::ParseStartupParams(int argc, char *argv[])
7373
{
7474
ClearParams();
7575

76-
for (int iarg = 1; iarg < argc; )
76+
for (int iarg = 0; iarg < argc; )
7777
{
7878
if (cxx_stricmp(argv[iarg], "-mapname") == 0 && (argc > iarg + 1))
7979
{

0 commit comments

Comments
 (0)