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

@ -2198,26 +2198,24 @@ CCamera::ProcessWideScreenOn(void)
void void
CCamera::DrawBordersForWideScreen(void) CCamera::DrawBordersForWideScreen(void)
{ {
float bottomBorderTopY, topBorderBottomY;
if (m_WideScreenOn) {
float centerY = (SCREEN_HEIGHT / 2) * (m_ScreenReductionPercentage / 100.f);
topBorderBottomY = centerY - SCREEN_SCALE_Y(22.f);
bottomBorderTopY = SCREEN_HEIGHT - centerY - SCREEN_SCALE_Y(14.f);
} else {
topBorderBottomY = 0.f;
bottomBorderTopY = SCREEN_HEIGHT;
}
if(m_BlurType == MBLUR_NONE || m_BlurType == MBLUR_NORMAL) if(m_BlurType == MBLUR_NONE || m_BlurType == MBLUR_NORMAL)
SetMotionBlurAlpha(80); SetMotionBlurAlpha(80);
CSprite2d::DrawRect( // top border
#ifdef FIX_BUGS CSprite2d::DrawRect(CRect(0.0f, 0.0f, SCREEN_WIDTH, topBorderBottomY), CRGBA(0, 0, 0, 255));
CRect(0.0f, (SCREEN_HEIGHT/2) * m_ScreenReductionPercentage/100.0f - SCREEN_SCALE_Y(8.0f),
#else
CRect(0.0f, (SCREEN_HEIGHT/2) * m_ScreenReductionPercentage/100.0f - 8.0f,
#endif
SCREEN_WIDTH, 0.0f),
CRGBA(0, 0, 0, 255));
CSprite2d::DrawRect( // bottom border
CRect(0.0f, SCREEN_HEIGHT, CSprite2d::DrawRect(CRect(0.0f, bottomBorderTopY, SCREEN_WIDTH, SCREEN_HEIGHT), CRGBA(0, 0, 0, 255));
#ifdef FIX_BUGS
SCREEN_WIDTH, SCREEN_HEIGHT - (SCREEN_HEIGHT/2) * m_ScreenReductionPercentage/100.0f - SCREEN_SCALE_Y(8.0f)),
#else
SCREEN_WIDTH, SCREEN_HEIGHT - (SCREEN_HEIGHT/2) * m_ScreenReductionPercentage/100.0f - 8.0f),
#endif
CRGBA(0, 0, 0, 255));
} }

View File

@ -3272,7 +3272,7 @@ CMenuManager::MessageScreen(const char *text, bool blackBg)
DoRWStuffEndOfFrame(); DoRWStuffEndOfFrame();
} }
// TODO(Miami) // --MIAMI: Done
void void
CMenuManager::SmallMessageScreen(const char* text) CMenuManager::SmallMessageScreen(const char* text)
{ {
@ -3284,9 +3284,19 @@ CMenuManager::SmallMessageScreen(const char* text)
CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
CFont::SetCentreSize(SCREEN_SCALE_X(430.0f)); CFont::SetCentreSize(SCREEN_SCALE_X(430.0f));
CFont::SetCentreOn(); CFont::SetCentreOn();
CFont::SetColor(CRGBA(255, 217, 106, FadeIn(255))); CFont::SetColor(CRGBA(LABEL_COLOR.r, LABEL_COLOR.g, LABEL_COLOR.b, FadeIn(255)));
CFont::SetDropShadowPosition(2);
CFont::SetDropColor(CRGBA(0, 0, 0, 255));
CFont::SetScale(SCREEN_SCALE_X(SMALLTEXT_X_SCALE), SCREEN_SCALE_Y(SMALLTEXT_Y_SCALE)); CFont::SetScale(SCREEN_SCALE_X(SMALLTEXT_X_SCALE), SCREEN_SCALE_Y(SMALLTEXT_Y_SCALE));
CFont::PrintString(SCREEN_SCALE_X(320.0f), SCREEN_SCALE_Y(170.0f), TheText.Get(text));
int numOfLines = CFont::GetNumberLines(SCREEN_WIDTH / 2.f, SCREEN_SCALE_Y(135.f), TheText.Get(text));
float y;
if (numOfLines > 1)
y = SCREEN_SCALE_Y(192.f) - numOfLines * SCREEN_SCALE_Y(8.f);
else
y = SCREEN_SCALE_Y(182.f);
CFont::PrintString(SCREEN_WIDTH / 2.f, y, TheText.Get(text));
} }
void void

View File

@ -2064,6 +2064,10 @@ CWorld::Process(void)
movingPed->bInVehicle = false; movingPed->bInVehicle = false;
movingPed->QuitEnteringCar(); movingPed->QuitEnteringCar();
} }
} else if (movingPed->m_attachedTo) {
movingPed->PositionAttachedPed();
movingPed->GetMatrix().UpdateRW();
movingPed->UpdateRwFrame();
} }
} }
} }

View File

@ -234,18 +234,13 @@ DoFade(void)
fadeColor.a = alpha; fadeColor.a = alpha;
} }
// This is CCamera::GetScreenRect in VC
if(TheCamera.m_WideScreenOn){ if(TheCamera.m_WideScreenOn){
// what's this?
float y = SCREEN_HEIGHT/2 * TheCamera.m_ScreenReductionPercentage/100.0f; float y = SCREEN_HEIGHT/2 * TheCamera.m_ScreenReductionPercentage/100.0f;
rect.left = 0.0f; rect.left = 0.0f;
rect.right = SCREEN_WIDTH; rect.right = SCREEN_WIDTH;
#ifdef FIX_BUGS rect.top = y - SCREEN_SCALE_Y(22.0f);
rect.top = y - SCREEN_SCALE_Y(8.0f); rect.bottom = SCREEN_HEIGHT - y - SCREEN_SCALE_Y(14.0f);
rect.bottom = SCREEN_HEIGHT - y - SCREEN_SCALE_Y(8.0f);
#else
rect.top = y - 8.0f;
rect.bottom = SCREEN_HEIGHT - y - 8.0f;
#endif // FIX_BUGS
}else{ }else{
rect.left = 0.0f; rect.left = 0.0f;
rect.right = SCREEN_WIDTH; rect.right = SCREEN_WIDTH;

View File

@ -18809,7 +18809,7 @@ CPed::AttachPedToEntity(CEntity *ent, CVector offset, uint16 type, float rot, eW
m_attachedTo->RegisterReference(&m_attachedTo); m_attachedTo->RegisterReference(&m_attachedTo);
m_vecAttachOffset = offset; m_vecAttachOffset = offset;
m_attachType = type; m_attachType = type;
m_attachRot = rot; m_attachRotStep = rot;
if (IsPlayer()) { if (IsPlayer()) {
bUsesCollision = false; bUsesCollision = false;
} else if (ent->IsVehicle()) { } else if (ent->IsVehicle()) {
@ -18843,8 +18843,7 @@ CPed::AttachPedToEntity(CEntity *ent, CVector offset, uint16 type, float rot, eW
SetCurrentWeapon(weapon); SetCurrentWeapon(weapon);
} }
// TODO(Miami) PositionAttachedPed();
// PositionAttachedPed();
} }
// --MIAMI: Done // --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 void
PlayRandomAnimationsFromAnimBlock(CPed* ped, AssocGroupId animGroup, uint32 first, uint32 amount) PlayRandomAnimationsFromAnimBlock(CPed* ped, AssocGroupId animGroup, uint32 first, uint32 amount)
{ {

View File

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

View File

@ -20,7 +20,7 @@
#include "TxdStore.h" #include "TxdStore.h"
#include "User.h" #include "User.h"
#include "World.h" #include "World.h"
#include <animation\CutsceneMgr.h> #include "CutsceneMgr.h"
// Game has colors inlined in code. // Game has colors inlined in code.
// For easier modification we collect them here: // For easier modification we collect them here: