Message box, letterbox and ped attaching

This commit is contained in:
eray orçunus
2020-06-07 21:44:43 +03:00
parent 23f20ceaf8
commit e07b6fdce7
7 changed files with 88 additions and 32 deletions

View File

@ -18809,7 +18809,7 @@ CPed::AttachPedToEntity(CEntity *ent, CVector offset, uint16 type, float rot, eW
m_attachedTo->RegisterReference(&m_attachedTo);
m_vecAttachOffset = offset;
m_attachType = type;
m_attachRot = rot;
m_attachRotStep = rot;
if (IsPlayer()) {
bUsesCollision = false;
} else if (ent->IsVehicle()) {
@ -18843,8 +18843,7 @@ CPed::AttachPedToEntity(CEntity *ent, CVector offset, uint16 type, float rot, eW
SetCurrentWeapon(weapon);
}
// TODO(Miami)
// PositionAttachedPed();
PositionAttachedPed();
}
// --MIAMI: Done
@ -19198,6 +19197,55 @@ CPed::DriveVehicle(void)
}
}
// --MIAMI: Done
void
CPed::PositionAttachedPed()
{
CMatrix rotMatrix, targetMat;
targetMat = m_attachedTo->GetMatrix();
targetMat.GetPosition() += Multiply3x3(m_attachedTo->GetMatrix(), m_vecAttachOffset);
float objAngle = m_attachedTo->GetForward().Heading();
if (!IsPlayer()) {
float targetAngle = objAngle;
switch (m_attachType) {
case 1:
targetAngle += HALFPI;
break;
case 2:
targetAngle += PI;
break;
case 3:
targetAngle -= HALFPI;
break;
default:
break;
}
targetAngle = CGeneral::LimitRadianAngle(targetAngle);
m_fRotationCur = CGeneral::LimitRadianAngle(m_fRotationCur);
float neededTurn = m_fRotationCur - targetAngle;
if (neededTurn > PI)
neededTurn -= TWOPI;
else if (neededTurn < -PI)
neededTurn += TWOPI;
if (neededTurn > m_attachRotStep)
m_fRotationCur = CGeneral::LimitRadianAngle(targetAngle + m_attachRotStep);
else if (-m_attachRotStep > neededTurn)
m_fRotationCur = CGeneral::LimitRadianAngle(targetAngle - m_attachRotStep);
else
m_fRotationCur = CGeneral::LimitRadianAngle(m_fRotationCur);
}
rotMatrix.SetRotateZ(m_fRotationCur - objAngle);
targetMat = targetMat * rotMatrix;
GetMatrix() = targetMat;
if (m_attachedTo->IsVehicle() || m_attachedTo->IsObject()) {
m_vecMoveSpeed = ((CPhysical*)m_attachedTo)->m_vecMoveSpeed;
m_vecTurnSpeed = ((CPhysical*)m_attachedTo)->m_vecTurnSpeed;
}
}
void
PlayRandomAnimationsFromAnimBlock(CPed* ped, AssocGroupId animGroup, uint32 first, uint32 amount)
{

View File

@ -616,7 +616,7 @@ public:
CEntity *m_attachedTo;
CVector m_vecAttachOffset;
uint16 m_attachType;
float m_attachRot;
float m_attachRotStep;
uint32 m_attachWepAmmo;
uint32 m_threatFlags;
uint32 m_threatCheck;
@ -841,6 +841,7 @@ public:
void DettachPedFromEntity();
void PedShuffle();
void DriveVehicle();
void PositionAttachedPed();
// Static methods
static CVector GetLocalPositionToOpenCarDoor(CVehicle *veh, uint32 component, float offset);