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)
{