mirror of
https://github.com/GTAmodding/re3.git
synced 2025-10-12 20:40:33 +00:00
commit
8a7210cad1
35 changed files with 639 additions and 405 deletions
|
@ -200,7 +200,7 @@ CCivilianPed::ProcessControl(void)
|
|||
if (DyingOrDead())
|
||||
return;
|
||||
|
||||
GetWeapon()->Update(m_audioEntityId);
|
||||
GetWeapon()->Update(m_audioEntityId, nil);
|
||||
switch (m_nPedState) {
|
||||
case PED_WANDER_RANGE:
|
||||
case PED_WANDER_PATH:
|
||||
|
|
|
@ -589,7 +589,7 @@ CCopPed::ProcessControl(void)
|
|||
ArrestPlayer();
|
||||
return;
|
||||
}
|
||||
GetWeapon()->Update(m_audioEntityId);
|
||||
GetWeapon()->Update(m_audioEntityId, nil);
|
||||
if (m_moved.Magnitude() > 0.0f)
|
||||
Avoid();
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ CEmergencyPed::ProcessControl(void)
|
|||
return;
|
||||
|
||||
if(!DyingOrDead()) {
|
||||
GetWeapon()->Update(m_audioEntityId);
|
||||
GetWeapon()->Update(m_audioEntityId, nil);
|
||||
|
||||
if (IsPedInControl() && m_moved.Magnitude() > 0.0f)
|
||||
Avoid();
|
||||
|
|
378
src/peds/Ped.cpp
378
src/peds/Ped.cpp
|
@ -67,6 +67,9 @@ uint16 gnNumTempPedList;
|
|||
|
||||
CColPoint aTempPedColPts[MAX_COLLISION_POINTS];
|
||||
|
||||
// TODO(Miami)
|
||||
#define AUDIO_NOT_READY
|
||||
|
||||
// Corresponds to ped sounds (from SOUND_PED_DEATH to SOUND_PED_TAXI_CALL)
|
||||
PedAudioData CommentWaitTime[39] = {
|
||||
{500, 800, 500, 2},
|
||||
|
@ -645,6 +648,7 @@ CPed::CPed(uint32 pedType) : m_pedIK(this)
|
|||
m_maxWeaponTypeAllowed = WEAPONTYPE_UNARMED;
|
||||
m_currentWeapon = WEAPONTYPE_UNARMED;
|
||||
m_storedWeapon = WEAPONTYPE_UNIDENTIFIED;
|
||||
m_delayedWeapon = WEAPONTYPE_UNIDENTIFIED;
|
||||
|
||||
for(int i = 0; i < TOTAL_WEAPON_SLOTS; i++) {
|
||||
CWeapon &weapon = GetWeapon(i);
|
||||
|
@ -656,7 +660,7 @@ CPed::CPed(uint32 pedType) : m_pedIK(this)
|
|||
}
|
||||
|
||||
m_lastFightMove = FIGHTMOVE_NULL;
|
||||
GiveWeapon(WEAPONTYPE_UNARMED, 0);
|
||||
GiveWeapon(WEAPONTYPE_UNARMED, 0, true);
|
||||
m_wepAccuracy = 60;
|
||||
m_lastWepDam = -1;
|
||||
m_collPoly.valid = false;
|
||||
|
@ -1179,7 +1183,7 @@ CPed::FinishedReloadCB(CAnimBlendAssociation *reloadAssoc, void *arg)
|
|||
crouchFireAssoc = RpAnimBlendClumpGetAssociation(ped->GetClump(), ANIM_WEAPON_CROUCHFIRE);
|
||||
}
|
||||
if (!!weapon->m_bReload && reloadAssoc) {
|
||||
if (reloadAssoc->animId == ANIM_WEAPON_CROUCHRELOAD && !crouchFireAssoc) {
|
||||
if (reloadAssoc->animId == GetCrouchReloadAnim(weapon) && !crouchFireAssoc) {
|
||||
CAnimBlendAssociation *crouchAssoc = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_WEAPON_CROUCH, 8.0f);
|
||||
crouchAssoc->SetCurrentTime(crouchAssoc->hierarchy->totalLength);
|
||||
crouchAssoc->flags &= ~ASSOC_RUNNING;
|
||||
|
@ -1212,7 +1216,7 @@ CPed::FinishedAttackCB(CAnimBlendAssociation *attackAssoc, void *arg)
|
|||
if (ped->m_nPedState != PED_ATTACK) {
|
||||
if (ped->bIsDucking && ped->IsPedInControl()) {
|
||||
if (currentWeapon->m_bReload) {
|
||||
reloadAnimAssoc = RpAnimBlendClumpGetAssociation(ped->GetClump(), ANIM_WEAPON_CROUCHRELOAD);
|
||||
reloadAnimAssoc = RpAnimBlendClumpGetAssociation(ped->GetClump(), GetCrouchReloadAnim(currentWeapon));
|
||||
}
|
||||
if (currentWeapon->m_bCrouchFire && attackAssoc) {
|
||||
if (attackAssoc->animId == ANIM_WEAPON_CROUCHFIRE && !reloadAnimAssoc) {
|
||||
|
@ -1238,7 +1242,7 @@ CPed::FinishedAttackCB(CAnimBlendAssociation *attackAssoc, void *arg)
|
|||
|
||||
if (ped->bIsDucking && ped->bCrouchWhenShooting) {
|
||||
if (currentWeapon->m_bReload) {
|
||||
reloadAnimAssoc = RpAnimBlendClumpGetAssociation(ped->GetClump(), ANIM_WEAPON_CROUCHRELOAD);
|
||||
reloadAnimAssoc = RpAnimBlendClumpGetAssociation(ped->GetClump(), GetCrouchReloadAnim(currentWeapon));
|
||||
}
|
||||
if (currentWeapon->m_bCrouchFire && attackAssoc) {
|
||||
if (attackAssoc->animId == ANIM_WEAPON_CROUCHFIRE && !reloadAnimAssoc) {
|
||||
|
@ -1302,7 +1306,7 @@ CPed::FinishedAttackCB(CAnimBlendAssociation *attackAssoc, void *arg)
|
|||
}
|
||||
}
|
||||
|
||||
// --MIAMI: Done
|
||||
// --MIAMI: Done except melee weapons
|
||||
void
|
||||
CPed::Attack(void)
|
||||
{
|
||||
|
@ -1354,11 +1358,11 @@ CPed::Attack(void)
|
|||
}
|
||||
|
||||
if (ourWeapon->m_bReload) {
|
||||
reloadAnimAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_WEAPON_RELOAD);
|
||||
reloadAnimAssoc = RpAnimBlendClumpGetAssociation(GetClump(), GetReloadAnim(ourWeapon));
|
||||
}
|
||||
|
||||
if (!!ourWeapon->m_bReload && !reloadAnimAssoc) {
|
||||
reloadAnimAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_WEAPON_CROUCHRELOAD);
|
||||
reloadAnimAssoc = RpAnimBlendClumpGetAssociation(GetClump(), GetCrouchReloadAnim(ourWeapon));
|
||||
}
|
||||
|
||||
if ( reloadAnimAssoc && reloadAnimAssoc->IsRunning() ) {
|
||||
|
@ -1518,14 +1522,22 @@ CPed::Attack(void)
|
|||
case ASSOCGRP_UNARMED:
|
||||
if (weaponAnimAssoc->animId == ANIM_FIGHT_PPUNCH || // TODO(Miami): Remove after fighting done
|
||||
weaponAnimAssoc->animId == ANIM_MELEE_ATTACK || weaponAnimAssoc->animId == ANIM_MELEE_ATTACK_START) {
|
||||
#ifdef AUDIO_NOT_READY
|
||||
DMAudio.PlayOneShot(m_audioEntityId, SOUND_FIGHT_PUNCH_39, 0.0f);
|
||||
#else
|
||||
DMAudio.PlayOneShot(m_audioEntityId, SOUND_FIGHT_PUNCH_39, (damagerType | (ourWeaponType << 8)));
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case ASSOCGRP_KNIFE:
|
||||
case ASSOCGRP_BASEBALLBAT:
|
||||
case ASSOCGRP_GOLFCLUB:
|
||||
case ASSOCGRP_CHAINSAW:
|
||||
#ifdef AUDIO_NOT_READY
|
||||
DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_BAT_ATTACK, 1.0f);
|
||||
#else
|
||||
DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_BAT_ATTACK, (damagerType | (ourWeaponType << 8)));
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -1587,12 +1599,12 @@ CPed::Attack(void)
|
|||
if (bIsDucking) {
|
||||
newReloadAssoc = CAnimManager::BlendAnimation(
|
||||
GetClump(), ourWeapon->m_AnimToPlay,
|
||||
ANIM_WEAPON_CROUCHRELOAD,
|
||||
GetCrouchReloadAnim(ourWeapon),
|
||||
8.0f);
|
||||
} else {
|
||||
newReloadAssoc = CAnimManager::BlendAnimation(
|
||||
GetClump(), ourWeapon->m_AnimToPlay,
|
||||
ANIM_WEAPON_RELOAD,
|
||||
GetReloadAnim(ourWeapon),
|
||||
8.0f);
|
||||
}
|
||||
newReloadAssoc->SetFinishCallback(FinishedReloadCB, this);
|
||||
|
@ -1602,7 +1614,26 @@ CPed::Attack(void)
|
|||
bIsAttacking = false;
|
||||
bIsPointingGunAt = false;
|
||||
m_shootTimer = CTimer::GetTimeInMilliseconds();
|
||||
#ifdef AUDIO_NOT_READY
|
||||
switch (ourWeaponType) {
|
||||
case WEAPONTYPE_UZI:
|
||||
case WEAPONTYPE_TEC9:
|
||||
case WEAPONTYPE_SILENCED_INGRAM:
|
||||
case WEAPONTYPE_MP5:
|
||||
DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_UZI_BULLET_ECHO, 0.0f);
|
||||
break;
|
||||
case WEAPONTYPE_AK47:
|
||||
DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_AK47_BULLET_ECHO, 0.0f);
|
||||
break;
|
||||
case WEAPONTYPE_M16:
|
||||
DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_M16_BULLET_ECHO, 0.0f);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
#else
|
||||
DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_AK47_BULLET_ECHO, GetWeapon()->m_eWeaponType);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -1647,10 +1678,28 @@ CPed::Attack(void)
|
|||
ClearAimFlag();
|
||||
|
||||
// Echoes of bullets, at the end of the attack. (Bug: doesn't play while reloading)
|
||||
if (weaponAnimAssoc->currentTime - weaponAnimAssoc->timeStep < ourWeapon->m_fAnimLoopEnd) {
|
||||
if (weaponAnimAssoc->currentTime - weaponAnimAssoc->timeStep < animLoopEnd) {
|
||||
|
||||
// What?! Weapon id as volume??
|
||||
#ifdef AUDIO_NOT_READY
|
||||
switch (ourWeaponType) {
|
||||
case WEAPONTYPE_UZI:
|
||||
case WEAPONTYPE_TEC9:
|
||||
case WEAPONTYPE_SILENCED_INGRAM:
|
||||
case WEAPONTYPE_MP5:
|
||||
DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_UZI_BULLET_ECHO, 0.0f);
|
||||
break;
|
||||
case WEAPONTYPE_AK47:
|
||||
DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_AK47_BULLET_ECHO, 0.0f);
|
||||
break;
|
||||
case WEAPONTYPE_M16:
|
||||
DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_M16_BULLET_ECHO, 0.0f);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
#else
|
||||
DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_AK47_BULLET_ECHO, GetWeapon()->m_eWeaponType);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Fun fact: removing this part leds to reloading flamethrower
|
||||
|
@ -2133,7 +2182,7 @@ CPed::LineUpPedWithCar(PedLineUpPhase phase)
|
|||
case ANIM_VAN_GETIN:
|
||||
#ifdef VC_PED_PORTS
|
||||
multExtractedFromAnim = true;
|
||||
zBlend = Max(m_pVehicleAnim->currentTime / m_pVehicleAnim->hierarchy->totalLength - 0.3f, 0.0f) / (1.0f - 0.3f);
|
||||
zBlend = Max(m_pVehicleAnim->GetProgress() - 0.3f, 0.0f) / (1.0f - 0.3f);
|
||||
// fall through
|
||||
#endif
|
||||
case ANIM_CAR_QJACKED:
|
||||
|
@ -2144,7 +2193,7 @@ CPed::LineUpPedWithCar(PedLineUpPhase phase)
|
|||
#ifdef VC_PED_PORTS
|
||||
if (!multExtractedFromAnim) {
|
||||
multExtractedFromAnim = true;
|
||||
zBlend = Max(m_pVehicleAnim->currentTime / m_pVehicleAnim->hierarchy->totalLength - 0.5f, 0.0f) / (1.0f - 0.5f);
|
||||
zBlend = Max(m_pVehicleAnim->GetProgress() - 0.5f, 0.0f) / (1.0f - 0.5f);
|
||||
}
|
||||
// fall through
|
||||
#endif
|
||||
|
@ -2152,14 +2201,14 @@ CPed::LineUpPedWithCar(PedLineUpPhase phase)
|
|||
case ANIM_CAR_CRAWLOUT_RHS2:
|
||||
case ANIM_VAN_GETOUT_L:
|
||||
case ANIM_VAN_GETOUT:
|
||||
seatPosMult = m_pVehicleAnim->currentTime / m_pVehicleAnim->hierarchy->totalLength;
|
||||
seatPosMult = m_pVehicleAnim->GetProgress();
|
||||
break;
|
||||
case ANIM_CAR_GETIN_RHS:
|
||||
case ANIM_CAR_GETIN_LHS:
|
||||
#ifdef VC_PED_PORTS
|
||||
if (veh && veh->IsCar() && veh->bIsBus) {
|
||||
multExtractedFromAnimBus = true;
|
||||
zBlend = Min(m_pVehicleAnim->currentTime / m_pVehicleAnim->hierarchy->totalLength, 0.5f) / 0.5f;
|
||||
zBlend = Min(m_pVehicleAnim->GetProgress(), 0.5f) / 0.5f;
|
||||
}
|
||||
// fall through
|
||||
#endif
|
||||
|
@ -4520,6 +4569,9 @@ CPed::SetGetUp(void)
|
|||
}
|
||||
if (m_nPedState != PED_GETUP) {
|
||||
SetStoredState();
|
||||
if (m_nPedState == PED_FOLLOW_PATH)
|
||||
ClearFollowPath();
|
||||
|
||||
m_nPedState = PED_GETUP;
|
||||
}
|
||||
|
||||
|
@ -5119,7 +5171,7 @@ CPed::SetAttack(CEntity *victim)
|
|||
return;
|
||||
|
||||
if (curWeapon->m_bReload &&
|
||||
(RpAnimBlendClumpGetAssociation(GetClump(), ANIM_WEAPON_RELOAD) || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_WEAPON_CROUCHRELOAD))) {
|
||||
(RpAnimBlendClumpGetAssociation(GetClump(), GetReloadAnim(curWeapon)) || RpAnimBlendClumpGetAssociation(GetClump(), GetCrouchReloadAnim(curWeapon)))) {
|
||||
if (!IsPlayer() || m_nPedState != PED_ATTACK || ((CPlayerPed*)this)->m_bHaveTargetSelected)
|
||||
bIsAttacking = false;
|
||||
else
|
||||
|
@ -5511,13 +5563,13 @@ CPed::FightStrike(CVector &touchedNodePos)
|
|||
for (int j = 0; j < hisCol->numSpheres; j++) {
|
||||
attackDistance = hisCol->spheres[j].center;
|
||||
attackDistance -= touchedNodePos;
|
||||
CColSphere *ourPieces = hisCol->spheres;
|
||||
float maxDistanceToBeat = ourPieces[j].radius + tFightMoves[m_lastFightMove].strikeRadius;
|
||||
CColSphere *hisPieces = hisCol->spheres;
|
||||
float maxDistanceToBeat = hisPieces[j].radius + tFightMoves[m_lastFightMove].strikeRadius;
|
||||
|
||||
// We can beat him too
|
||||
if (sq(maxDistanceToBeat) > attackDistance.MagnitudeSqr()) {
|
||||
pedFound = true;
|
||||
closestPedPiece = (ePedPieceTypes) ourPieces[j].piece;
|
||||
closestPedPiece = (ePedPieceTypes) hisPieces[j].piece;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -6324,10 +6376,59 @@ CPed::CreateDeadPedMoney(void)
|
|||
}
|
||||
|
||||
void
|
||||
CPed::CreateDeadPedWeaponPickups(void)
|
||||
CPed::CreateDeadPedPickupCoors(float *x, float *y, float *z)
|
||||
{
|
||||
bool found = false;
|
||||
float angleToPed;
|
||||
CVector pickupPos;
|
||||
|
||||
#define NUMBER_OF_ATTEMPTS 32
|
||||
for (int i = 0; i < NUMBER_OF_ATTEMPTS; i++) {
|
||||
|
||||
pickupPos = GetPosition();
|
||||
pickupPos.x = 1.5f * Sin((CGeneral::GetRandomNumber() % 256) * PI / 128) + GetPosition().x;
|
||||
pickupPos.y = 1.5f * Cos((CGeneral::GetRandomNumber() % 256) * PI / 128) + GetPosition().y;
|
||||
pickupPos.z = CWorld::FindGroundZFor3DCoord(pickupPos.x, pickupPos.y, pickupPos.z, &found) + 0.5f;
|
||||
|
||||
if (!found)
|
||||
continue;
|
||||
|
||||
CVector pedPos = GetPosition();
|
||||
pedPos.z += 0.3f;
|
||||
|
||||
CVector pedToPickup = pickupPos - pedPos;
|
||||
float distance = pedToPickup.Magnitude();
|
||||
|
||||
// outer edge of pickup
|
||||
distance = (distance + 0.4f) / distance;
|
||||
CVector pickupPos2 = pedPos;
|
||||
pickupPos2 += distance * pedToPickup;
|
||||
|
||||
if ((pickupPos - FindPlayerCoors()).Magnitude2D() > 2.0f || i > NUMBER_OF_ATTEMPTS / 2) {
|
||||
|
||||
if (i > NUMBER_OF_ATTEMPTS / 2 || !CPickups::TestForPickupsInBubble(pickupPos, 1.3f)) {
|
||||
|
||||
if (CWorld::GetIsLineOfSightClear(pickupPos2, pedPos,
|
||||
true, i < NUMBER_OF_ATTEMPTS / 2, false, i < NUMBER_OF_ATTEMPTS / 2, false, false, false)) {
|
||||
|
||||
if (i > NUMBER_OF_ATTEMPTS / 2 || !CWorld::TestSphereAgainstWorld(pickupPos, 1.2f, nil, false, true, false, false, false, false)) {
|
||||
*x = pickupPos.x;
|
||||
*y = pickupPos.y;
|
||||
*z = pickupPos.z;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*x = GetPosition().x;
|
||||
*y = GetPosition().y;
|
||||
*z = GetPosition().z + 0.4f;
|
||||
#undef NUMBER_OF_ATTEMPTS
|
||||
}
|
||||
|
||||
void
|
||||
CPed::CreateDeadPedWeaponPickups(void)
|
||||
{
|
||||
CVector pickupPos;
|
||||
|
||||
if (bInVehicle)
|
||||
|
@ -6340,34 +6441,11 @@ CPed::CreateDeadPedWeaponPickups(void)
|
|||
if (weapon == WEAPONTYPE_UNARMED || weapon == WEAPONTYPE_DETONATOR || (weaponAmmo == 0 && !GetWeapon(i).IsTypeMelee()))
|
||||
continue;
|
||||
|
||||
angleToPed = i * 1.75f;
|
||||
pickupPos = GetPosition();
|
||||
pickupPos.x += 1.5f * Sin(angleToPed);
|
||||
pickupPos.y += 1.5f * Cos(angleToPed);
|
||||
pickupPos.z = CWorld::FindGroundZFor3DCoord(pickupPos.x, pickupPos.y, pickupPos.z, &found) + 0.5f;
|
||||
|
||||
CVector pedPos = GetPosition();
|
||||
pedPos.z += 0.3f;
|
||||
|
||||
CVector pedToPickup = pickupPos - pedPos;
|
||||
float distance = pedToPickup.Magnitude();
|
||||
|
||||
// outer edge of pickup
|
||||
distance = (distance + 0.3f) / distance;
|
||||
CVector pickupPos2 = pedPos;
|
||||
pickupPos2 += distance * pedToPickup;
|
||||
|
||||
// pickup must be on ground and line to its edge must be clear
|
||||
if (!found || CWorld::GetIsLineOfSightClear(pickupPos2, pedPos, true, false, false, false, false, false, false)) {
|
||||
// otherwise try another position (but disregard second check apparently)
|
||||
angleToPed += 3.14f;
|
||||
pickupPos = GetPosition();
|
||||
pickupPos.x += 1.5f * Sin(angleToPed);
|
||||
pickupPos.y += 1.5f * Cos(angleToPed);
|
||||
pickupPos.z = CWorld::FindGroundZFor3DCoord(pickupPos.x, pickupPos.y, pickupPos.z, &found) + 0.5f;
|
||||
int quantity = Min(weaponAmmo, AmmoForWeapon_OnStreet[weapon] / 2);
|
||||
CreateDeadPedPickupCoors(&pickupPos.x, &pickupPos.y, &pickupPos.z);
|
||||
if (!CPickups::TryToMerge_WeaponType(pickupPos, weapon, PICKUP_ONCE_TIMEOUT, quantity, false)) {
|
||||
CPickups::GenerateNewOne_WeaponType(pickupPos, weapon, PICKUP_ONCE_TIMEOUT, Min(weaponAmmo, quantity));
|
||||
}
|
||||
if (found)
|
||||
CPickups::GenerateNewOne_WeaponType(pickupPos, weapon, PICKUP_ONCE_TIMEOUT, Min(weaponAmmo, AmmoForWeapon_OnStreet[weapon]));
|
||||
}
|
||||
ClearWeapons();
|
||||
}
|
||||
|
@ -8945,7 +9023,11 @@ CPed::InvestigateEvent(void)
|
|||
bool
|
||||
CPed::IsPedDoingDriveByShooting(void)
|
||||
{
|
||||
#ifdef FIX_BUGS
|
||||
if (FindPlayerPed() == this && CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType)->m_nWeaponSlot == 5) {
|
||||
#else
|
||||
if (FindPlayerPed() == this && GetWeapon()->m_eWeaponType == WEAPONTYPE_UZI) {
|
||||
#endif
|
||||
if (TheCamera.Cams[TheCamera.ActiveCam].LookingLeft || TheCamera.Cams[TheCamera.ActiveCam].LookingRight)
|
||||
return true;
|
||||
}
|
||||
|
@ -9982,11 +10064,8 @@ CPed::ProcessControl(void)
|
|||
if (m_nPedState == PED_FOLLOW_PATH) {
|
||||
if (DotProduct(m_vecDamageNormal, GetForward()) < -0.866f && CanPedJumpThis(collidingEnt, &m_vecDamageNormal)) {
|
||||
SetJump();
|
||||
|
||||
// Moved break into here, for compatibility with III
|
||||
break;
|
||||
}
|
||||
// break;
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
if (m_pedInObjective &&
|
||||
|
@ -10957,15 +11036,13 @@ CPed::ProcessControl(void)
|
|||
return;
|
||||
}
|
||||
|
||||
if (m_pMyVehicle->pDriver != this || m_pMyVehicle->IsBoat()) {
|
||||
if (m_pMyVehicle->pDriver != this) {
|
||||
LookForSexyPeds();
|
||||
LookForSexyCars();
|
||||
break;
|
||||
}
|
||||
|
||||
if (m_pMyVehicle->m_vehType == VEHICLE_TYPE_BIKE || !m_pMyVehicle->pDriver->IsPlayer()) {
|
||||
break;
|
||||
}
|
||||
// TODO(Miami): Start KILL_CHAR_ON_BOAT objective
|
||||
|
||||
CPad* pad = CPad::GetPad(0);
|
||||
|
||||
|
@ -10995,12 +11072,24 @@ CPed::ProcessControl(void)
|
|||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// TODO(Miami): This part moved to DriveVehicle in VC
|
||||
float steerAngle = m_pMyVehicle->m_fSteerAngle;
|
||||
CAnimBlendAssociation *lDriveAssoc;
|
||||
CAnimBlendAssociation *rDriveAssoc;
|
||||
CAnimBlendAssociation *lbAssoc;
|
||||
CAnimBlendAssociation *sitAssoc;
|
||||
if (m_pMyVehicle->bLowVehicle) {
|
||||
if (m_pMyVehicle->IsBoat() && !(m_pMyVehicle->pHandling->Flags & HANDLING_SIT_IN_BOAT)) {
|
||||
sitAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_BOAT);
|
||||
|
||||
if (!sitAssoc || sitAssoc->blendAmount < 1.0f) {
|
||||
break;
|
||||
}
|
||||
|
||||
lDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_BOAT_L);
|
||||
rDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_BOAT_R);
|
||||
lbAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_BOAT_LB);
|
||||
} else if (m_pMyVehicle->bLowVehicle) {
|
||||
sitAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_LSIT);
|
||||
|
||||
if (!sitAssoc || sitAssoc->blendAmount < 1.0f) {
|
||||
|
@ -11020,18 +11109,21 @@ CPed::ProcessControl(void)
|
|||
lDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_L);
|
||||
rDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_R);
|
||||
lbAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_LB);
|
||||
}
|
||||
|
||||
if (lbAssoc &&
|
||||
TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_1STPERSON
|
||||
&& TheCamera.Cams[TheCamera.ActiveCam].DirectionWasLooking == LOOKING_LEFT) {
|
||||
lbAssoc->blendDelta = -1000.0f;
|
||||
}
|
||||
if (lbAssoc &&
|
||||
TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_1STPERSON
|
||||
&& TheCamera.Cams[TheCamera.ActiveCam].DirectionWasLooking == LOOKING_LEFT) {
|
||||
lbAssoc->blendDelta = -1000.0f;
|
||||
}
|
||||
|
||||
CAnimBlendAssociation *driveByAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVEBY_L);
|
||||
|
||||
if (!driveByAssoc)
|
||||
driveByAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVEBY_R);
|
||||
if (!driveByAssoc)
|
||||
driveByAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVEBY_LOW_L);
|
||||
if (!driveByAssoc)
|
||||
driveByAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVEBY_LOW_R);
|
||||
|
||||
if (m_pMyVehicle->bLowVehicle || m_pMyVehicle->m_fGasPedal >= 0.0f || driveByAssoc) {
|
||||
if (steerAngle == 0.0f || driveByAssoc) {
|
||||
|
@ -11046,6 +11138,8 @@ CPed::ProcessControl(void)
|
|||
|
||||
if (rDriveAssoc)
|
||||
rDriveAssoc->blendAmount = clamp(steerAngle * -100.0f / 61.0f, 0.0f, 1.0f);
|
||||
else if (m_pMyVehicle->IsBoat() && !(m_pMyVehicle->pHandling->Flags & HANDLING_SIT_IN_BOAT))
|
||||
CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_BOAT_R);
|
||||
else if (m_pMyVehicle->bLowVehicle)
|
||||
CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_LOW_R);
|
||||
else
|
||||
|
@ -11057,6 +11151,8 @@ CPed::ProcessControl(void)
|
|||
|
||||
if (lDriveAssoc)
|
||||
lDriveAssoc->blendAmount = clamp(steerAngle * 100.0f / 61.0f, 0.0f, 1.0f);
|
||||
else if (m_pMyVehicle->IsBoat() && !(m_pMyVehicle->pHandling->Flags & HANDLING_SIT_IN_BOAT))
|
||||
CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_BOAT_L);
|
||||
else if (m_pMyVehicle->bLowVehicle)
|
||||
CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_LOW_L);
|
||||
else
|
||||
|
@ -11069,10 +11165,18 @@ CPed::ProcessControl(void)
|
|||
|
||||
if ((TheCamera.Cams[TheCamera.ActiveCam].Mode != CCam::MODE_1STPERSON
|
||||
|| TheCamera.Cams[TheCamera.ActiveCam].DirectionWasLooking != LOOKING_LEFT)
|
||||
&& (!lbAssoc || lbAssoc->blendAmount < 1.0f)) {
|
||||
CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_LB, 4.0f);
|
||||
&& (!lbAssoc || lbAssoc->blendAmount < 1.0f && lbAssoc->blendDelta <= 0.0f)) {
|
||||
|
||||
if(m_pMyVehicle->IsBoat() && !(m_pMyVehicle->pHandling->Flags & HANDLING_SIT_IN_BOAT))
|
||||
CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_BOAT_LB, 4.0f);
|
||||
else
|
||||
CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_LB, 4.0f);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO(Miami): This part belongs to DriveVehicle
|
||||
if (!m_pMyVehicle)
|
||||
return;
|
||||
break;
|
||||
}
|
||||
case PED_DIE:
|
||||
|
@ -11124,7 +11228,8 @@ CPed::ProcessControl(void)
|
|||
}
|
||||
m_pCurrentPhysSurface = nil;
|
||||
}
|
||||
}
|
||||
} else
|
||||
ServiceTalking();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -11145,11 +11250,27 @@ CPed::SetInTheAir(void)
|
|||
|
||||
}
|
||||
|
||||
// --MIAMI: Done
|
||||
void
|
||||
CPed::RestoreHeadPosition(void)
|
||||
{
|
||||
bool canUseMyBody = false;
|
||||
if (m_nPedState != PED_DRIVING && m_nPedState != PED_DRAG_FROM_CAR && !bIsDucking) {
|
||||
if (m_animGroup != ASSOCGRP_SEXYWOMAN && m_animGroup != ASSOCGRP_WOMAN)
|
||||
canUseMyBody = true;
|
||||
}
|
||||
if (!canUseMyBody)
|
||||
m_pedIK.m_flags |= CPedIK::LOOKAROUND_HEAD_ONLY;
|
||||
|
||||
if (m_pedIK.RestoreLookAt()) {
|
||||
bIsRestoringLook = false;
|
||||
canUseMyBody = false;
|
||||
if (m_nPedState != PED_DRIVING && m_nPedState != PED_DRAG_FROM_CAR && !bIsDucking) {
|
||||
if (m_animGroup != ASSOCGRP_SEXYWOMAN && m_animGroup != ASSOCGRP_WOMAN)
|
||||
canUseMyBody = true;
|
||||
}
|
||||
if(canUseMyBody)
|
||||
m_pedIK.m_flags &= ~CPedIK::LOOKAROUND_HEAD_ONLY;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -12234,19 +12355,7 @@ CPed::PedSetInCarCB(CAnimBlendAssociation *animAssoc, void *arg)
|
|||
ped->SetObjective(OBJECTIVE_NONE);
|
||||
}
|
||||
|
||||
if (veh->pDriver == ped) {
|
||||
if (veh->bLowVehicle) {
|
||||
ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_LSIT, 100.0f);
|
||||
} else {
|
||||
ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_SIT, 100.0f);
|
||||
}
|
||||
} else if (veh->bLowVehicle) {
|
||||
ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_SITPLO, 100.0f);
|
||||
} else {
|
||||
ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_SITP, 100.0f);
|
||||
}
|
||||
|
||||
ped->StopNonPartialAnims();
|
||||
ped->AddInCarAnims(veh, veh->pDriver == ped);
|
||||
if (veh->bIsBus)
|
||||
ped->bRenderPedInCar = false;
|
||||
|
||||
|
@ -12651,11 +12760,11 @@ CPed::ReplaceWeaponWhenExitingVehicle(void)
|
|||
}
|
||||
}
|
||||
|
||||
// --MIAMI: Add driveby check, enumarate weapon slots
|
||||
// --MIAMI: Done
|
||||
inline void
|
||||
CPed::RemoveWeaponWhenEnteringVehicle(void)
|
||||
{
|
||||
if (IsPlayer() && GetWeapon(5).m_eWeaponType && GetWeapon(5).m_nAmmoTotal > 0) {
|
||||
if (IsPlayer() && HasWeaponSlot(5) && GetWeapon(5).m_nAmmoTotal > 0 && ((CPlayerPed*)this)->GetPlayerInfoForThisPlayerPed()->m_bDriveByAllowed) {
|
||||
if (m_storedWeapon == WEAPONTYPE_UNIDENTIFIED)
|
||||
m_storedWeapon = GetWeapon()->m_eWeaponType;
|
||||
SetCurrentWeapon(GetWeapon(5).m_eWeaponType);
|
||||
|
@ -14190,7 +14299,7 @@ CPed::ProcessObjective(void)
|
|||
|
||||
if (reloadAssoc || !m_pedInObjective->IsPedShootable()) {
|
||||
if (reloadAssoc &&
|
||||
(!reloadAssoc->IsRunning() || reloadAssoc->currentTime / reloadAssoc->hierarchy->totalLength > 0.8f)) {
|
||||
(!reloadAssoc->IsRunning() || reloadAssoc->GetProgress() > 0.8f)) {
|
||||
CAnimBlendAssociation *punchAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_FIGHT_PPUNCH, 8.0f);
|
||||
punchAssoc->flags |= ASSOC_DELETEFADEDOUT;
|
||||
punchAssoc->flags |= ASSOC_FADEOUTWHENDONE;
|
||||
|
@ -17529,33 +17638,11 @@ CPed::WarpPedIntoCar(CVehicle *car)
|
|||
DMAudio.PlayOneShot(car->m_audioEntityId, SOUND_CAR_ENGINE_START, 1.0f);
|
||||
}
|
||||
|
||||
#ifdef VC_PED_PORTS
|
||||
RpAnimBlendClumpSetBlendDeltas(GetClump(), ASSOC_PARTIAL, -1000.0f);
|
||||
|
||||
// VC uses AddInCarAnims but we don't have that
|
||||
m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, car->GetDriverAnim(), 100.0f);
|
||||
AddInCarAnims(car, car->pDriver == this);
|
||||
RemoveWeaponWhenEnteringVehicle();
|
||||
#else
|
||||
if (car->IsBoat()) {
|
||||
#ifndef FIX_BUGS
|
||||
m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_BOAT, 100.0f);
|
||||
#else
|
||||
m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, car->GetDriverAnim(), 100.0f);
|
||||
#endif
|
||||
CWeaponInfo *ourWeapon = CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType);
|
||||
RemoveWeaponModel(ourWeapon->m_nModelId);
|
||||
} else {
|
||||
// Because we can use Uzi for drive by
|
||||
RemoveWeaponWhenEnteringVehicle();
|
||||
|
||||
if (car->bLowVehicle)
|
||||
m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_LSIT, 100.0f);
|
||||
else
|
||||
m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_SIT, 100.0f);
|
||||
}
|
||||
#endif
|
||||
|
||||
StopNonPartialAnims();
|
||||
if (car->bIsBus)
|
||||
bRenderPedInCar = false;
|
||||
|
||||
|
@ -17837,25 +17924,13 @@ CPed::SetEnterCar_AllClear(CVehicle *car, uint32 doorNode, uint32 doorFlag)
|
|||
m_vecOffsetSeek = doorOpenPos - GetPosition();
|
||||
m_nPedStateTimer = CTimer::GetTimeInMilliseconds() + 600;
|
||||
if (car->IsBoat()) {
|
||||
#ifdef VC_PED_PORTS
|
||||
// VC checks for handling flag, but we can't do that
|
||||
if(car->GetModelIndex() == MI_SPEEDER)
|
||||
if(car->pHandling->Flags & HANDLING_SIT_IN_BOAT)
|
||||
m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_SIT, 100.0f);
|
||||
else
|
||||
m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_BOAT, 100.0f);
|
||||
|
||||
PedSetInCarCB(nil, this);
|
||||
bVehExitWillBeInstant = true;
|
||||
#else
|
||||
|
||||
#ifndef FIX_BUGS
|
||||
m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_BOAT, 100.0f);
|
||||
#else
|
||||
m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, car->GetDriverAnim(), 100.0f);
|
||||
#endif
|
||||
|
||||
m_pVehicleAnim->SetFinishCallback(PedSetInCarCB, this);
|
||||
#endif
|
||||
if (IsPlayer())
|
||||
CWaterLevel::AllocateBoatWakeArray();
|
||||
} else {
|
||||
|
@ -18418,14 +18493,15 @@ CPed::Load(uint8*& buf)
|
|||
#undef CopyToBuf
|
||||
#endif
|
||||
|
||||
// --MIAMI: Done
|
||||
void
|
||||
CPed::GiveDelayedWeapon(eWeaponType weapon, uint32 ammo)
|
||||
{
|
||||
m_storedWeapon = weapon;
|
||||
m_storedWeaponAmmo = ammo;
|
||||
if (m_storedWeapon != WEAPONTYPE_UNIDENTIFIED) {
|
||||
int modelId1 = CWeaponInfo::GetWeaponInfo(m_storedWeapon)->m_nModelId;
|
||||
int modelId2 = CWeaponInfo::GetWeaponInfo(m_storedWeapon)->m_nModel2Id;
|
||||
m_delayedWeapon = weapon;
|
||||
m_delayedWeaponAmmo = ammo;
|
||||
if (m_delayedWeapon != WEAPONTYPE_UNIDENTIFIED) {
|
||||
int modelId1 = CWeaponInfo::GetWeaponInfo(m_delayedWeapon)->m_nModelId;
|
||||
int modelId2 = CWeaponInfo::GetWeaponInfo(m_delayedWeapon)->m_nModel2Id;
|
||||
if (modelId1 != -1)
|
||||
CStreaming::RequestModel(modelId1, STREAMFLAGS_DEPENDENCY);
|
||||
if (modelId2 != -1)
|
||||
|
@ -18433,18 +18509,19 @@ CPed::GiveDelayedWeapon(eWeaponType weapon, uint32 ammo)
|
|||
|
||||
if ((modelId1 == -1 || CStreaming::HasModelLoaded(modelId1))
|
||||
&& (modelId2 == -1 || CStreaming::HasModelLoaded(modelId2))) {
|
||||
GiveWeapon(m_storedWeapon, m_storedWeaponAmmo, 1);
|
||||
m_storedWeapon = WEAPONTYPE_UNIDENTIFIED;
|
||||
GiveWeapon(m_delayedWeapon, m_delayedWeaponAmmo, true);
|
||||
m_delayedWeapon = WEAPONTYPE_UNIDENTIFIED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// --MIAMI: Done
|
||||
void
|
||||
CPed::RequestDelayedWeapon()
|
||||
{
|
||||
if (m_storedWeapon != WEAPONTYPE_UNIDENTIFIED) {
|
||||
int modelId1 = CWeaponInfo::GetWeaponInfo(m_storedWeapon)->m_nModelId;
|
||||
int modelId2 = CWeaponInfo::GetWeaponInfo(m_storedWeapon)->m_nModel2Id;
|
||||
if (m_delayedWeapon != WEAPONTYPE_UNIDENTIFIED) {
|
||||
int modelId1 = CWeaponInfo::GetWeaponInfo(m_delayedWeapon)->m_nModelId;
|
||||
int modelId2 = CWeaponInfo::GetWeaponInfo(m_delayedWeapon)->m_nModel2Id;
|
||||
if (modelId1 != -1)
|
||||
CStreaming::RequestModel(modelId1, STREAMFLAGS_DEPENDENCY);
|
||||
if (modelId2 != -1)
|
||||
|
@ -18452,12 +18529,13 @@ CPed::RequestDelayedWeapon()
|
|||
|
||||
if ((modelId1 == -1 || CStreaming::HasModelLoaded(modelId1))
|
||||
&& (modelId2 == -1 || CStreaming::HasModelLoaded(modelId2))) {
|
||||
GiveWeapon(m_storedWeapon, m_storedWeaponAmmo, 1);
|
||||
m_storedWeapon = WEAPONTYPE_UNIDENTIFIED;
|
||||
GiveWeapon(m_delayedWeapon, m_delayedWeaponAmmo, 1);
|
||||
m_delayedWeapon = WEAPONTYPE_UNIDENTIFIED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// --MIAMI: Done
|
||||
void
|
||||
CPed::ClearFollowPath()
|
||||
{
|
||||
|
@ -18466,4 +18544,44 @@ CPed::ClearFollowPath()
|
|||
}
|
||||
m_nPathNodes = 0;
|
||||
m_nCurPathNode = 0;
|
||||
}
|
||||
|
||||
// --MIAMI: Done
|
||||
void
|
||||
CPed::AddInCarAnims(CVehicle* car, bool isDriver)
|
||||
{
|
||||
AnimationId anim;
|
||||
AssocGroupId group;
|
||||
if (car->IsBoat()) {
|
||||
if (car->pHandling->Flags & HANDLING_SIT_IN_BOAT) {
|
||||
anim = ANIM_CAR_SIT;
|
||||
} else {
|
||||
anim = ANIM_DRIVE_BOAT;
|
||||
}
|
||||
group = ASSOCGRP_STD;
|
||||
} else if (car->IsBike()) {
|
||||
if (isDriver) {
|
||||
// TODO(Miami): Bikes
|
||||
} else {
|
||||
// TODO(Miami): Bikes
|
||||
}
|
||||
} else {
|
||||
if (isDriver) {
|
||||
if (car->bLowVehicle) {
|
||||
anim = ANIM_CAR_LSIT;
|
||||
} else {
|
||||
anim = ANIM_CAR_SIT;
|
||||
}
|
||||
} else {
|
||||
if (car->bLowVehicle) {
|
||||
anim = ANIM_CAR_SITPLO;
|
||||
} else {
|
||||
anim = ANIM_CAR_SITP;
|
||||
}
|
||||
}
|
||||
group = ASSOCGRP_STD;
|
||||
}
|
||||
m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), group, anim, 100.0f);
|
||||
|
||||
StopNonPartialAnims();
|
||||
}
|
|
@ -523,7 +523,8 @@ public:
|
|||
CVector2D *m_wanderRangeBounds; // array with 2 CVector2D (actually unused CRange2D class) - unused
|
||||
CWeapon m_weapons[TOTAL_WEAPON_SLOTS];
|
||||
eWeaponType m_storedWeapon;
|
||||
uint32 m_storedWeaponAmmo;
|
||||
eWeaponType m_delayedWeapon;
|
||||
uint32 m_delayedWeaponAmmo;
|
||||
uint8 m_currentWeapon; // eWeaponType
|
||||
uint8 m_maxWeaponTypeAllowed; // eWeaponType
|
||||
uint8 m_wepSkills;
|
||||
|
@ -704,7 +705,7 @@ public:
|
|||
void RemoveWeaponAnims(int, float);
|
||||
void CreateDeadPedMoney(void);
|
||||
void CreateDeadPedWeaponPickups(void);
|
||||
// void CreateDeadPedPickupCoors(float *x, float *y, float *z);
|
||||
void CreateDeadPedPickupCoors(float *x, float *y, float *z);
|
||||
void SetAttackTimer(uint32);
|
||||
void SetBeingDraggedFromCar(CVehicle*, uint32, bool);
|
||||
void SetRadioStation(void);
|
||||
|
@ -775,6 +776,7 @@ public:
|
|||
void ClearFollowPath();
|
||||
void GiveDelayedWeapon(eWeaponType weapon, uint32 ammo);
|
||||
void RequestDelayedWeapon();
|
||||
void AddInCarAnims(CVehicle* car, bool isDriver);
|
||||
|
||||
// Static methods
|
||||
static CVector GetLocalPositionToOpenCarDoor(CVehicle *veh, uint32 component, float offset);
|
||||
|
@ -875,7 +877,7 @@ public:
|
|||
bool Dead(void) { return m_nPedState == PED_DEAD; }
|
||||
bool Dying(void) { return m_nPedState == PED_DIE; }
|
||||
bool DyingOrDead(void) { return m_nPedState == PED_DIE || m_nPedState == PED_DEAD; }
|
||||
bool OnGround(void) { return m_nPedState == PED_FALL || m_nPedState == PED_DIE || m_nPedState == PED_DEAD; }
|
||||
bool OnGround(void) { return m_nPedState == PED_FALL || m_nPedState == PED_DIE || m_nPedState == PED_DEAD || m_nWaitState == WAITSTATE_SUN_BATHE_IDLE; }
|
||||
|
||||
bool Driving(void) { return m_nPedState == PED_DRIVING; }
|
||||
bool InVehicle(void) { return bInVehicle && m_pMyVehicle; } // True when ped is sitting/standing in vehicle, not in enter/exit state.
|
||||
|
@ -891,7 +893,7 @@ public:
|
|||
void RemoveWeaponWhenEnteringVehicle(void);
|
||||
bool IsNotInWreckedVehicle();
|
||||
|
||||
// My addons. Maybe inlined in VC?
|
||||
// My names. Inlined in VC
|
||||
AnimationId GetFireAnimNotDucking(CWeaponInfo* weapon) {
|
||||
// TODO(Miami): Revert that when weapons got ported
|
||||
if (weapon->m_AnimToPlay == ASSOCGRP_STD)
|
||||
|
@ -928,6 +930,20 @@ public:
|
|||
else
|
||||
return ANIM_WEAPON_FIRE;
|
||||
}
|
||||
|
||||
static AnimationId GetCrouchReloadAnim(CWeaponInfo* weapon) {
|
||||
if (!!weapon->m_bReload)
|
||||
return ANIM_WEAPON_CROUCHRELOAD;
|
||||
else
|
||||
return (AnimationId)0;
|
||||
}
|
||||
|
||||
static AnimationId GetReloadAnim(CWeaponInfo* weapon) {
|
||||
if (!!weapon->m_bReload)
|
||||
return ANIM_WEAPON_RELOAD;
|
||||
else
|
||||
return (AnimationId)0;
|
||||
}
|
||||
// --
|
||||
|
||||
// My additions, because there were many, many instances of that.
|
||||
|
|
|
@ -451,7 +451,7 @@ CPlayerPed::SetRealMoveAnim(void)
|
|||
} else if (curSprintAssoc->blendDelta >= 0.0f || curSprintAssoc->blendAmount >= 0.8f) {
|
||||
if (m_fMoveSpeed < 0.4f) {
|
||||
AnimationId runStopAnim;
|
||||
if (curSprintAssoc->currentTime / curSprintAssoc->hierarchy->totalLength < 0.5) // double
|
||||
if (curSprintAssoc->GetProgress() < 0.5) // double
|
||||
runStopAnim = ANIM_RUN_STOP;
|
||||
else
|
||||
runStopAnim = ANIM_RUN_STOP_R;
|
||||
|
@ -638,7 +638,7 @@ CPlayerPed::PlayerControlSniper(CPad *padUsed)
|
|||
firePos = GetMatrix() * firePos;
|
||||
GetWeapon()->Fire(this, &firePos);
|
||||
}
|
||||
GetWeapon()->Update(m_audioEntityId);
|
||||
GetWeapon()->Update(m_audioEntityId, nil);
|
||||
}
|
||||
|
||||
// --MIAMI: Made compatible with slots, but still TODO
|
||||
|
@ -742,7 +742,7 @@ CPlayerPed::PlayerControlM16(CPad *padUsed)
|
|||
firePos = GetMatrix() * firePos;
|
||||
GetWeapon()->Fire(this, &firePos);
|
||||
}
|
||||
GetWeapon()->Update(m_audioEntityId);
|
||||
GetWeapon()->Update(m_audioEntityId, nil);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1561,7 +1561,7 @@ CPlayerPed::ProcessControl(void)
|
|||
}
|
||||
if (padUsed && IsPedShootable()) {
|
||||
ProcessWeaponSwitch(padUsed);
|
||||
GetWeapon()->Update(m_audioEntityId);
|
||||
GetWeapon()->Update(m_audioEntityId, this);
|
||||
}
|
||||
ProcessAnimGroups();
|
||||
if (padUsed) {
|
||||
|
|
|
@ -722,7 +722,7 @@ CPopulation::AddToPopulation(float minDist, float maxDist, float minDistOffScree
|
|||
}
|
||||
|
||||
CPed*
|
||||
CPopulation::AddPedInCar(CVehicle* car, bool isPassenger)
|
||||
CPopulation::AddPedInCar(CVehicle* car, bool isDriver)
|
||||
{
|
||||
int defaultModel = MI_MALE01;
|
||||
int miamiViceIndex = 0;
|
||||
|
@ -765,7 +765,7 @@ CPopulation::AddPedInCar(CVehicle* car, bool isPassenger)
|
|||
case MI_VICECHEE: // TODO(MIAMI): figure out new structure of the function
|
||||
preferredModel = COP_MIAMIVICE;
|
||||
pedType = PEDTYPE_COP;
|
||||
miamiViceIndex = (isPassenger ? 2 * CCarCtrl::MiamiViceCycle : 2 * CCarCtrl::MiamiViceCycle + 1);
|
||||
miamiViceIndex = (isDriver ? 2 * CCarCtrl::MiamiViceCycle : 2 * CCarCtrl::MiamiViceCycle + 1);
|
||||
break;
|
||||
case MI_TAXI:
|
||||
case MI_CABBIE:
|
||||
|
@ -816,29 +816,11 @@ CPopulation::AddPedInCar(CVehicle* car, bool isPassenger)
|
|||
CPed *newPed = CPopulation::AddPed((ePedType)pedType, preferredModel, car->GetPosition(), miamiViceIndex);
|
||||
newPed->bUsesCollision = false;
|
||||
|
||||
// what??
|
||||
if (pedType != PEDTYPE_COP) {
|
||||
newPed->SetCurrentWeapon(WEAPONTYPE_COLT45);
|
||||
if (newPed->GetWeapon()->m_eWeaponType != WEAPONTYPE_UNARMED) {
|
||||
newPed->RemoveWeaponModel(CWeaponInfo::GetWeaponInfo(newPed->GetWeapon()->m_eWeaponType)->m_nModelId);
|
||||
}
|
||||
/*
|
||||
// Miami leftover
|
||||
if (car->m_vehType == VEHICLE_TYPE_BIKE) {
|
||||
newPed->m_pVehicleAnim = CAnimManager::BlendAnimation(newPed->GetClump(), ASSOCGRP_STD, *((CBike*)car + 308h), 100.0f);
|
||||
} else */
|
||||
|
||||
// FIX: Make peds comfortable while driving car/boat
|
||||
#ifdef FIX_BUGS
|
||||
{
|
||||
newPed->m_pVehicleAnim = CAnimManager::BlendAnimation(newPed->GetClump(), ASSOCGRP_STD, car->GetDriverAnim(), 100.0f);
|
||||
}
|
||||
#else
|
||||
{
|
||||
newPed->m_pVehicleAnim = CAnimManager::BlendAnimation(newPed->GetClump(), ASSOCGRP_STD, ANIM_CAR_SIT, 100.0f);
|
||||
}
|
||||
#endif
|
||||
|
||||
newPed->StopNonPartialAnims();
|
||||
newPed->AddInCarAnims(car, isDriver);
|
||||
return newPed;
|
||||
}
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ public:
|
|||
static void LoadPedGroups();
|
||||
static void UpdatePedCount(ePedType, bool);
|
||||
static void DealWithZoneChange(eLevelName oldLevel, eLevelName newLevel, bool);
|
||||
static CPed *AddPedInCar(CVehicle *car, bool isPassenger);
|
||||
static CPed *AddPedInCar(CVehicle *car, bool isDriver);
|
||||
static bool IsPointInSafeZone(CVector *coors);
|
||||
static void RemovePed(CPed *ent);
|
||||
static int32 ChooseCivilianOccupation(int32);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue