mirror of
https://github.com/GTAmodding/re3.git
synced 2025-07-14 08:14:08 +00:00
Frontend (last-3)
This commit is contained in:
parent
f56909d8b7
commit
bd7a59e58e
6 changed files with 1211 additions and 85 deletions
|
@ -75,6 +75,18 @@ static_assert(RADAR_TILE_SIZE == (WORLD_SIZE_Y / RADAR_NUM_TILES), "CRadar: not
|
|||
#define RADAR_MIN_SPEED (0.3f)
|
||||
#define RADAR_MAX_SPEED (0.9f)
|
||||
|
||||
#ifdef MENU_MAP
|
||||
CRGBA CRadar::ArrowBlipColour1;
|
||||
CRGBA CRadar::ArrowBlipColour2;
|
||||
uint16 CRadar::MapLegendCounter;
|
||||
uint16 CRadar::MapLegendList[NUM_MAP_LEGENDS];
|
||||
bool CRadar::bMenuMapActive;
|
||||
#endif
|
||||
|
||||
// taken from VC
|
||||
float CRadar::cachedCos;
|
||||
float CRadar::cachedSin;
|
||||
|
||||
uint8 CRadar::CalculateBlipAlpha(float dist)
|
||||
{
|
||||
if (dist <= 1.0f)
|
||||
|
@ -544,6 +556,9 @@ void CRadar::DrawBlips()
|
|||
void CRadar::DrawMap()
|
||||
{
|
||||
if (!TheCamera.m_WideScreenOn && CHud::m_Wants_To_Draw_Hud) {
|
||||
#if 1 // from VC
|
||||
CalculateCachedSinCos();
|
||||
#endif
|
||||
if (FindPlayerVehicle()) {
|
||||
float speed = FindPlayerSpeed().Magnitude();
|
||||
if (speed < RADAR_MIN_SPEED)
|
||||
|
@ -685,6 +700,19 @@ void CRadar::DrawRadarSection(int32 x, int32 y)
|
|||
void CRadar::DrawRadarSprite(uint16 sprite, float x, float y, uint8 alpha)
|
||||
{
|
||||
RadarSprites[sprite]->Draw(CRect(x - SCREEN_SCALE_X(8.0f), y - SCREEN_SCALE_Y(8.0f), x + SCREEN_SCALE_X(8.0f), y + SCREEN_SCALE_Y(8.0f)), CRGBA(255, 255, 255, alpha));
|
||||
#ifdef MENU_MAP
|
||||
if (bMenuMapActive) {
|
||||
bool alreadyThere;
|
||||
for (int i = 0; i < NUM_MAP_LEGENDS; i++) {
|
||||
if (MapLegendList[i] == sprite)
|
||||
alreadyThere = true;
|
||||
}
|
||||
if (!alreadyThere) {
|
||||
MapLegendList[MapLegendCounter] = sprite;
|
||||
MapLegendCounter++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void CRadar::DrawRotatingRadarSprite(CSprite2d* sprite, float x, float y, float angle, int32 alpha)
|
||||
|
@ -1020,6 +1048,21 @@ void CRadar::ShowRadarTraceWithHeight(float x, float y, uint32 size, uint8 red,
|
|||
CSprite2d::DrawRect(CRect(x - SCREEN_SCALE_X(size), y - SCREEN_SCALE_Y(size), SCREEN_SCALE_X(size) + x, SCREEN_SCALE_Y(size) + y), CRGBA(red, green, blue, alpha));
|
||||
break;
|
||||
}
|
||||
#ifdef MENU_MAP
|
||||
// VC uses -1 for coords and -2 for entities but meh, I don't want to edit DrawBlips
|
||||
if (bMenuMapActive) {
|
||||
bool alreadyThere;
|
||||
for (int i = 0; i < NUM_MAP_LEGENDS; i++) {
|
||||
if (MapLegendList[i] == -1)
|
||||
alreadyThere = true;
|
||||
}
|
||||
if (!alreadyThere) {
|
||||
MapLegendList[MapLegendCounter] = -1;
|
||||
MapLegendCounter++;
|
||||
ArrowBlipColour1 = CRGBA(red, green, blue, alpha);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void CRadar::Shutdown()
|
||||
|
@ -1075,6 +1118,11 @@ void CRadar::TransformRealWorldToTexCoordSpace(CVector2D &out, const CVector2D &
|
|||
void CRadar::TransformRadarPointToRealWorldSpace(CVector2D &out, const CVector2D &in)
|
||||
{
|
||||
float s, c;
|
||||
#if 1
|
||||
s = -cachedSin;
|
||||
c = cachedCos;
|
||||
#else
|
||||
// Original code
|
||||
|
||||
s = -Sin(TheCamera.GetForward().Heading());
|
||||
c = Cos(TheCamera.GetForward().Heading());
|
||||
|
@ -1096,6 +1144,7 @@ void CRadar::TransformRadarPointToRealWorldSpace(CVector2D &out, const CVector2D
|
|||
s = -Sin(forward.Heading());
|
||||
c = Cos(forward.Heading());
|
||||
}
|
||||
#endif
|
||||
|
||||
out.x = s * in.y + c * in.x;
|
||||
out.y = c * in.y - s * in.x;
|
||||
|
@ -1105,18 +1154,33 @@ void CRadar::TransformRadarPointToRealWorldSpace(CVector2D &out, const CVector2D
|
|||
|
||||
// Radar space goes from -1.0 to 1.0 in x and y, top right is (1.0, 1.0)
|
||||
void CRadar::TransformRadarPointToScreenSpace(CVector2D &out, const CVector2D &in)
|
||||
{
|
||||
#ifdef FIX_BUGS
|
||||
out.x = (in.x + 1.0f)*0.5f*SCREEN_SCALE_X(RADAR_WIDTH) + SCREEN_SCALE_X(RADAR_LEFT);
|
||||
#else
|
||||
out.x = (in.x + 1.0f)*0.5f*SCREEN_SCALE_X(RADAR_WIDTH) + RADAR_LEFT;
|
||||
{
|
||||
#ifdef MENU_MAP
|
||||
if (bMenuMapActive) {
|
||||
out.x = MENU_X_LEFT_ALIGNED((0.66193402f * m_nMapNegativePadding * in.x) + (0.2348f * m_nMapNegativePadding) + m_nMapLeftPadding);
|
||||
out.y = MENU_Y(m_nMapTopPadding - (0.065807f * m_nMapNegativePadding) - (0.66563499f * m_nMapNegativePadding * in.y));
|
||||
} else
|
||||
#endif
|
||||
out.y = (1.0f - in.y)*0.5f*SCREEN_SCALE_Y(RADAR_HEIGHT) + SCREEN_SCALE_FROM_BOTTOM(RADAR_BOTTOM + RADAR_HEIGHT);
|
||||
{
|
||||
#ifdef FIX_BUGS
|
||||
out.x = (in.x + 1.0f) * 0.5f * SCREEN_SCALE_X(RADAR_WIDTH) + SCREEN_SCALE_X(RADAR_LEFT);
|
||||
#else
|
||||
out.x = (in.x + 1.0f) * 0.5f * SCREEN_SCALE_X(RADAR_WIDTH) + RADAR_LEFT;
|
||||
#endif
|
||||
out.y = (1.0f - in.y) * 0.5f * SCREEN_SCALE_Y(RADAR_HEIGHT) + SCREEN_SCALE_FROM_BOTTOM(RADAR_BOTTOM + RADAR_HEIGHT);
|
||||
}
|
||||
}
|
||||
|
||||
void CRadar::TransformRealWorldPointToRadarSpace(CVector2D &out, const CVector2D &in)
|
||||
{
|
||||
float s, c;
|
||||
#if 1
|
||||
s = cachedSin;
|
||||
c = cachedCos;
|
||||
#else
|
||||
// Original code
|
||||
|
||||
float s, c;
|
||||
if (TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_TOPDOWN || TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_TOP_DOWN_PED) {
|
||||
s = 0.0f;
|
||||
c = 1.0f;
|
||||
|
@ -1138,6 +1202,7 @@ void CRadar::TransformRealWorldPointToRadarSpace(CVector2D &out, const CVector2D
|
|||
s = Sin(forward.Heading());
|
||||
c = Cos(forward.Heading());
|
||||
}
|
||||
#endif
|
||||
|
||||
float x = (in.x - vec2DRadarOrigin.x) * (1.0f / m_radarRange);
|
||||
float y = (in.y - vec2DRadarOrigin.y) * (1.0f / m_radarRange);
|
||||
|
@ -1261,6 +1326,51 @@ int CRadar::LineRadarBoxCollision(CVector2D &out, const CVector2D &p1, const CVe
|
|||
return edge;
|
||||
}
|
||||
|
||||
void
|
||||
CRadar::CalculateCachedSinCos()
|
||||
{
|
||||
if (TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_TOPDOWN || TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_TOP_DOWN_PED
|
||||
#ifdef MENU_MAP
|
||||
|| bMenuMapActive
|
||||
#endif
|
||||
) {
|
||||
cachedSin = 0.0f;
|
||||
cachedCos = 1.0f;
|
||||
} else if (TheCamera.GetLookDirection() == LOOKING_FORWARD) {
|
||||
cachedSin = Sin(TheCamera.GetForward().Heading());
|
||||
cachedCos = Cos(TheCamera.GetForward().Heading());
|
||||
} else {
|
||||
CVector forward;
|
||||
|
||||
if (TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_1STPERSON) {
|
||||
forward = TheCamera.Cams[TheCamera.ActiveCam].CamTargetEntity->GetForward();
|
||||
forward.Normalise(); // a bit useless...
|
||||
}
|
||||
else
|
||||
forward = TheCamera.Cams[TheCamera.ActiveCam].CamTargetEntity->GetPosition() - TheCamera.Cams[TheCamera.ActiveCam].SourceBeforeLookBehind;
|
||||
|
||||
cachedSin = Sin(forward.Heading());
|
||||
cachedCos = Cos(forward.Heading());
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef MENU_MAP
|
||||
void
|
||||
CRadar::InitFrontEndMap()
|
||||
{
|
||||
CalculateCachedSinCos();
|
||||
vec2DRadarOrigin.x = 0.0f;
|
||||
vec2DRadarOrigin.y = 0.0f;
|
||||
m_radarRange = 1190.0f;
|
||||
for (int i = 0; i < NUM_MAP_LEGENDS; i++) {
|
||||
MapLegendList[i] = RADAR_SPRITE_NONE;
|
||||
}
|
||||
MapLegendCounter = 0;
|
||||
ArrowBlipColour1 = CRGBA(0, 0, 0, 0);
|
||||
ArrowBlipColour2 = CRGBA(0, 0, 0, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
STARTPATCHES
|
||||
InjectHook(0x4A3EF0, CRadar::Initialise, PATCH_JUMP);
|
||||
InjectHook(0x4A3F60, CRadar::Shutdown, PATCH_JUMP);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue