Fix and cancellable car enter
This commit is contained in:
parent
e232b664be
commit
0f028edae9
@ -131,3 +131,4 @@ enum Config {
|
|||||||
#define USE_DEBUG_SCRIPT_LOADER
|
#define USE_DEBUG_SCRIPT_LOADER
|
||||||
#define EXPLODING_AIRTRAIN // can blow up jumbo jet with rocket launcher
|
#define EXPLODING_AIRTRAIN // can blow up jumbo jet with rocket launcher
|
||||||
#define ANIMATE_PED_COL_MODEL
|
#define ANIMATE_PED_COL_MODEL
|
||||||
|
#define CANCELLABLE_CAR_ENTER
|
||||||
|
@ -134,8 +134,8 @@ static char ObjectiveText[34][28] = {
|
|||||||
"Mug Char",
|
"Mug Char",
|
||||||
};
|
};
|
||||||
|
|
||||||
static char StateText[56][18] = {
|
static char StateText[57][18] = {
|
||||||
"None", // 1
|
"None",
|
||||||
"Idle",
|
"Idle",
|
||||||
"Look Entity",
|
"Look Entity",
|
||||||
"Look Heading",
|
"Look Heading",
|
||||||
@ -167,8 +167,9 @@ static char StateText[56][18] = {
|
|||||||
"Buy IceCream",
|
"Buy IceCream",
|
||||||
"Investigate",
|
"Investigate",
|
||||||
"Step away",
|
"Step away",
|
||||||
"STATES_NO_AI",
|
|
||||||
"On Fire",
|
"On Fire",
|
||||||
|
"Unknown",
|
||||||
|
"STATES_NO_AI",
|
||||||
"Jump",
|
"Jump",
|
||||||
"Fall",
|
"Fall",
|
||||||
"GetUp",
|
"GetUp",
|
||||||
@ -312,10 +313,8 @@ CPed::~CPed(void)
|
|||||||
if (m_pMyVehicle->pDriver == this)
|
if (m_pMyVehicle->pDriver == this)
|
||||||
m_pMyVehicle->pDriver = nil;
|
m_pMyVehicle->pDriver = nil;
|
||||||
else {
|
else {
|
||||||
for (int i = 0; i < m_pMyVehicle->m_nNumMaxPassengers; i++) {
|
// FIX: Passenger counter now decreasing after removing ourself from vehicle.
|
||||||
if (m_pMyVehicle->pPassengers[i] == this)
|
m_pMyVehicle->RemovePassenger(this);
|
||||||
m_pMyVehicle->pPassengers[i] = nil;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (m_nPedState == PED_EXIT_CAR || m_nPedState == PED_DRAG_FROM_CAR)
|
if (m_nPedState == PED_EXIT_CAR || m_nPedState == PED_DRAG_FROM_CAR)
|
||||||
m_pMyVehicle->m_nGettingOutFlags &= ~door_flag;
|
m_pMyVehicle->m_nGettingOutFlags &= ~door_flag;
|
||||||
@ -495,7 +494,7 @@ CPed::CPed(uint32 pedType) : m_pedIK(this)
|
|||||||
m_ped_flagF4 = false;
|
m_ped_flagF4 = false;
|
||||||
m_ped_flagF8 = false;
|
m_ped_flagF8 = false;
|
||||||
bWillBeQuickJacked = false;
|
bWillBeQuickJacked = false;
|
||||||
m_ped_flagF20 = false;
|
bCancelEnteringCar = false;
|
||||||
m_ped_flagF40 = false;
|
m_ped_flagF40 = false;
|
||||||
bDuckAndCover = false;
|
bDuckAndCover = false;
|
||||||
|
|
||||||
@ -1498,12 +1497,7 @@ CPed::PedSetDraggedOutCarCB(CAnimBlendAssociation *dragAssoc, void *arg)
|
|||||||
if (ped->m_nPedType == PEDTYPE_COP && vehicle->IsLawEnforcementVehicle())
|
if (ped->m_nPedType == PEDTYPE_COP && vehicle->IsLawEnforcementVehicle())
|
||||||
vehicle->ChangeLawEnforcerState(false);
|
vehicle->ChangeLawEnforcerState(false);
|
||||||
} else {
|
} else {
|
||||||
for (int i = 0; i < vehicle->m_nNumMaxPassengers; i++) {
|
vehicle->RemovePassenger(ped);
|
||||||
if (vehicle->pPassengers[i] == ped) {
|
|
||||||
vehicle->pPassengers[i] = nil;
|
|
||||||
vehicle->m_nNumPassengers--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ped->bInVehicle = false;
|
ped->bInVehicle = false;
|
||||||
@ -1861,7 +1855,6 @@ CPed::LineUpPedWithCar(PedLineUpPhase phase)
|
|||||||
GetPosition() = neededPos;
|
GetPosition() = neededPos;
|
||||||
} else {
|
} else {
|
||||||
CMatrix vehDoorMat(veh->GetMatrix());
|
CMatrix vehDoorMat(veh->GetMatrix());
|
||||||
|
|
||||||
vehDoorMat.GetPosition() += Multiply3x3(vehDoorMat, GetLocalPositionToOpenCarDoor(veh, m_vehEnterType, 0.0f));
|
vehDoorMat.GetPosition() += Multiply3x3(vehDoorMat, GetLocalPositionToOpenCarDoor(veh, m_vehEnterType, 0.0f));
|
||||||
GetMatrix() = vehDoorMat;
|
GetMatrix() = vehDoorMat;
|
||||||
}
|
}
|
||||||
@ -8765,7 +8758,7 @@ CPed::PedAnimAlignCB(CAnimBlendAssociation *animAssoc, void *arg)
|
|||||||
animToPlay = ANIM_CAR_DOORLOCKED_LHS;
|
animToPlay = ANIM_CAR_DOORLOCKED_LHS;
|
||||||
|
|
||||||
ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, animToPlay);
|
ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, animToPlay);
|
||||||
ped->m_ped_flagF20 = true;
|
ped->bCancelEnteringCar = true;
|
||||||
ped->m_pVehicleAnim->SetFinishCallback(PedAnimDoorOpenCB, ped);
|
ped->m_pVehicleAnim->SetFinishCallback(PedAnimDoorOpenCB, ped);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -9533,12 +9526,31 @@ CPed::ProcessControl(void)
|
|||||||
case PED_TAXI_PASSENGER:
|
case PED_TAXI_PASSENGER:
|
||||||
case PED_OPEN_DOOR:
|
case PED_OPEN_DOOR:
|
||||||
case PED_DEAD:
|
case PED_DEAD:
|
||||||
case PED_CARJACK:
|
|
||||||
case PED_DRAG_FROM_CAR:
|
case PED_DRAG_FROM_CAR:
|
||||||
case PED_ENTER_CAR:
|
|
||||||
case PED_STEAL_CAR:
|
|
||||||
case PED_EXIT_CAR:
|
case PED_EXIT_CAR:
|
||||||
|
case PED_STEAL_CAR:
|
||||||
break;
|
break;
|
||||||
|
case PED_ENTER_CAR:
|
||||||
|
case PED_CARJACK:
|
||||||
|
{
|
||||||
|
#ifdef CANCELLABLE_CAR_ENTER
|
||||||
|
if (!IsPlayer() || !m_pVehicleAnim)
|
||||||
|
break;
|
||||||
|
|
||||||
|
int vehAnim = m_pVehicleAnim->animId;
|
||||||
|
|
||||||
|
int16 padWalkX = CPad::GetPad(0)->GetPedWalkLeftRight();
|
||||||
|
int16 padWalkY = CPad::GetPad(0)->GetPedWalkUpDown();
|
||||||
|
if (Abs(padWalkX) > 0.0f || Abs(padWalkY) > 0.0f) {
|
||||||
|
if (vehAnim == ANIM_CAR_OPEN_LHS || vehAnim == ANIM_CAR_OPEN_RHS || vehAnim == ANIM_COACH_OPEN_L || vehAnim == ANIM_COACH_OPEN_R ||
|
||||||
|
vehAnim == ANIM_VAN_OPEN_L || vehAnim == ANIM_VAN_OPEN) {
|
||||||
|
bCancelEnteringCar = true;
|
||||||
|
} else if (vehAnim == ANIM_CAR_ALIGN_LHS || vehAnim == ANIM_CAR_ALIGN_RHS || vehAnim == ANIM_CAR_ALIGNHI_LHS || vehAnim == ANIM_CAR_ALIGNHI_RHS)
|
||||||
|
SetIdle();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
case PED_FLEE_POS:
|
case PED_FLEE_POS:
|
||||||
ms_vec2DFleePosition.x = m_fleeFromPosX;
|
ms_vec2DFleePosition.x = m_fleeFromPosX;
|
||||||
ms_vec2DFleePosition.y = m_fleeFromPosY;
|
ms_vec2DFleePosition.y = m_fleeFromPosY;
|
||||||
@ -9641,7 +9653,7 @@ CPed::ProcessControl(void)
|
|||||||
if (m_pMyVehicle->bLowVehicle) {
|
if (m_pMyVehicle->bLowVehicle) {
|
||||||
sitAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_LSIT);
|
sitAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_LSIT);
|
||||||
|
|
||||||
if (!sitAssoc || sitAssoc->blendAmount >= 1.0f) {
|
if (!sitAssoc || sitAssoc->blendAmount < 1.0f) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -9651,14 +9663,14 @@ CPed::ProcessControl(void)
|
|||||||
} else {
|
} else {
|
||||||
sitAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_SIT);
|
sitAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_SIT);
|
||||||
|
|
||||||
if (!sitAssoc || sitAssoc->blendAmount >= 1.0f) {
|
if (!sitAssoc || sitAssoc->blendAmount < 1.0f) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
lDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_L);
|
lDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_L);
|
||||||
rDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_R);
|
rDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_R);
|
||||||
lbAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_LB);
|
lbAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_LB);
|
||||||
}
|
|
||||||
if (lbAssoc) {
|
|
||||||
if (TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_FIRSTPERSON
|
if (TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_FIRSTPERSON
|
||||||
&& TheCamera.Cams[TheCamera.ActiveCam].DirectionWasLooking == LOOKING_LEFT) {
|
&& TheCamera.Cams[TheCamera.ActiveCam].DirectionWasLooking == LOOKING_LEFT) {
|
||||||
lbAssoc->blendDelta = -1000.0f;
|
lbAssoc->blendDelta = -1000.0f;
|
||||||
@ -9676,8 +9688,7 @@ CPed::ProcessControl(void)
|
|||||||
lDriveAssoc->blendAmount = 0.0f;
|
lDriveAssoc->blendAmount = 0.0f;
|
||||||
if (rDriveAssoc)
|
if (rDriveAssoc)
|
||||||
rDriveAssoc->blendAmount = 0.0f;
|
rDriveAssoc->blendAmount = 0.0f;
|
||||||
if (lbAssoc)
|
|
||||||
lbAssoc->blendDelta = -4.0f;
|
|
||||||
} else if (steerAngle <= 0.0f) {
|
} else if (steerAngle <= 0.0f) {
|
||||||
if (lDriveAssoc)
|
if (lDriveAssoc)
|
||||||
lDriveAssoc->blendAmount = 0.0f;
|
lDriveAssoc->blendAmount = 0.0f;
|
||||||
@ -9689,8 +9700,6 @@ CPed::ProcessControl(void)
|
|||||||
else
|
else
|
||||||
CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_R);
|
CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_R);
|
||||||
|
|
||||||
if (lbAssoc)
|
|
||||||
lbAssoc->blendDelta = -4.0f;
|
|
||||||
} else {
|
} else {
|
||||||
if (rDriveAssoc)
|
if (rDriveAssoc)
|
||||||
rDriveAssoc->blendAmount = 0.0f;
|
rDriveAssoc->blendAmount = 0.0f;
|
||||||
@ -9701,10 +9710,10 @@ CPed::ProcessControl(void)
|
|||||||
CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_LOW_L);
|
CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_LOW_L);
|
||||||
else
|
else
|
||||||
CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_L);
|
CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_L);
|
||||||
|
}
|
||||||
|
|
||||||
if (lbAssoc)
|
if (lbAssoc)
|
||||||
lbAssoc->blendDelta = -4.0f;
|
lbAssoc->blendDelta = -4.0f;
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if ((TheCamera.Cams[TheCamera.ActiveCam].Mode != CCam::MODE_FIRSTPERSON
|
if ((TheCamera.Cams[TheCamera.ActiveCam].Mode != CCam::MODE_FIRSTPERSON
|
||||||
|
@ -311,7 +311,7 @@ public:
|
|||||||
uint8 m_ped_flagF4 : 1;
|
uint8 m_ped_flagF4 : 1;
|
||||||
uint8 m_ped_flagF8 : 1;
|
uint8 m_ped_flagF8 : 1;
|
||||||
uint8 bWillBeQuickJacked : 1;
|
uint8 bWillBeQuickJacked : 1;
|
||||||
uint8 m_ped_flagF20 : 1; // set when couldn't open locked car door
|
uint8 bCancelEnteringCar : 1; // after door is opened or couldn't be opened due to it's locked
|
||||||
uint8 m_ped_flagF40 : 1;
|
uint8 m_ped_flagF40 : 1;
|
||||||
uint8 bDuckAndCover : 1;
|
uint8 bDuckAndCover : 1;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user