CRadar::Initialise() + fixes

This commit is contained in:
Sergeanur 2019-10-30 01:18:01 +02:00
parent 74ca8bb608
commit c075b863d2
2 changed files with 92 additions and 15 deletions

View File

@ -15,7 +15,7 @@
#include "World.h" #include "World.h"
#include "Streaming.h" #include "Streaming.h"
float &CRadar::m_RadarRange = *(float*)0x8E281C; float &CRadar::m_radarRange = *(float*)0x8E281C;
CBlip (&CRadar::ms_RadarTrace)[NUMRADARBLIPS] = *(CBlip(*)[NUMRADARBLIPS]) * (uintptr*)0x6ED5E0; CBlip (&CRadar::ms_RadarTrace)[NUMRADARBLIPS] = *(CBlip(*)[NUMRADARBLIPS]) * (uintptr*)0x6ED5E0;
CVector2D &vec2DRadarOrigin = *(CVector2D*)0x6299B8; CVector2D &vec2DRadarOrigin = *(CVector2D*)0x6299B8;
int *gRadarTxdIds = (int*)0x6299C0; int *gRadarTxdIds = (int*)0x6299C0;
@ -288,7 +288,7 @@ void CRadar::DrawBlips()
CVector2D vec2d; CVector2D vec2d;
vec2d.x = vec2DRadarOrigin.x; vec2d.x = vec2DRadarOrigin.x;
vec2d.y = M_SQRT2 * m_RadarRange + vec2DRadarOrigin.y; vec2d.y = M_SQRT2 * m_radarRange + vec2DRadarOrigin.y;
TransformRealWorldPointToRadarSpace(in, vec2d); TransformRealWorldPointToRadarSpace(in, vec2d);
LimitRadarPoint(in); LimitRadarPoint(in);
TransformRadarPointToScreenSpace(out, in); TransformRadarPointToScreenSpace(out, in);
@ -527,14 +527,14 @@ void CRadar::DrawMap()
if (FindPlayerVehicle()) { if (FindPlayerVehicle()) {
float speed = FindPlayerSpeed().Magnitude(); float speed = FindPlayerSpeed().Magnitude();
if (speed < RADAR_MIN_SPEED) if (speed < RADAR_MIN_SPEED)
m_RadarRange = RADAR_MIN_RANGE; m_radarRange = RADAR_MIN_RANGE;
else if (speed < RADAR_MAX_SPEED) else if (speed < RADAR_MAX_SPEED)
m_RadarRange = (speed - RADAR_MIN_SPEED)/(RADAR_MAX_SPEED-RADAR_MIN_SPEED) * (RADAR_MAX_RANGE-RADAR_MIN_RANGE) + RADAR_MIN_RANGE; m_radarRange = (speed - RADAR_MIN_SPEED)/(RADAR_MAX_SPEED-RADAR_MIN_SPEED) * (RADAR_MAX_RANGE-RADAR_MIN_RANGE) + RADAR_MIN_RANGE;
else else
m_RadarRange = RADAR_MAX_RANGE; m_radarRange = RADAR_MAX_RANGE;
} }
else else
m_RadarRange = RADAR_MIN_RANGE; m_radarRange = RADAR_MIN_RANGE;
vec2DRadarOrigin = CVector2D(FindPlayerCentreOfWorld_NoSniperShift()); vec2DRadarOrigin = CVector2D(FindPlayerCentreOfWorld_NoSniperShift());
DrawRadarMap(); DrawRadarMap();
@ -795,12 +795,89 @@ uint32 CRadar::GetRadarTraceColour(uint32 color, bool bright)
} }
#endif #endif
#if 1 const char* gRadarTexNames[] = {
"radar00",
"radar01",
"radar02",
"radar03",
"radar04",
"radar05",
"radar06",
"radar07",
"radar08",
"radar09",
"radar10",
"radar11",
"radar12",
"radar13",
"radar14",
"radar15",
"radar16",
"radar17",
"radar18",
"radar19",
"radar20",
"radar21",
"radar22",
"radar23",
"radar24",
"radar25",
"radar26",
"radar27",
"radar28",
"radar29",
"radar30",
"radar31",
"radar32",
"radar33",
"radar34",
"radar35",
"radar36",
"radar37",
"radar38",
"radar39",
"radar40",
"radar41",
"radar42",
"radar43",
"radar44",
"radar45",
"radar46",
"radar47",
"radar48",
"radar49",
"radar50",
"radar51",
"radar52",
"radar53",
"radar54",
"radar55",
"radar56",
"radar57",
"radar58",
"radar59",
"radar60",
"radar61",
};
#if 0
WRAPPER void CRadar::Initialise() { EAXJMP(0x4A3EF0); } WRAPPER void CRadar::Initialise() { EAXJMP(0x4A3EF0); }
#else #else
void CRadar::Initialise() void
CRadar::Initialise()
{ {
for (int i = 0; i < NUMRADARBLIPS; i++) {
ms_RadarTrace[i].m_BlipIndex = 1;
SetRadarMarkerState(i, false);
ms_RadarTrace[i].m_bInUse = false;
ms_RadarTrace[i].m_eBlipType = BLIP_NONE;
ms_RadarTrace[i].m_eBlipDisplay = BLIP_DISPLAY_NEITHER;
ms_RadarTrace[i].m_IconID = RADAR_SPRITE_NONE;
}
m_radarRange = 350.0f;
for (int i = 0; i < 64; i++)
gRadarTxdIds[i] = CTxdStore::FindTxdSlot(gRadarTexNames[i]);
} }
#endif #endif
@ -1102,7 +1179,7 @@ void CRadar::TransformRadarPointToRealWorldSpace(CVector2D &out, const CVector2D
out.x = s * in.y + c * in.x; out.x = s * in.y + c * in.x;
out.y = c * in.y - s * in.x; out.y = c * in.y - s * in.x;
out = out * m_RadarRange + vec2DRadarOrigin; out = out * m_radarRange + vec2DRadarOrigin;
} }
#endif #endif
@ -1142,8 +1219,8 @@ void CRadar::TransformRealWorldPointToRadarSpace(CVector2D &out, const CVector2D
c = Cos(forward.Heading()); c = Cos(forward.Heading());
} }
float x = (in.x - vec2DRadarOrigin.x) * (1.0f / m_RadarRange); float x = (in.x - vec2DRadarOrigin.x) * (1.0f / m_radarRange);
float y = (in.y - vec2DRadarOrigin.y) * (1.0f / m_RadarRange); float y = (in.y - vec2DRadarOrigin.y) * (1.0f / m_radarRange);
out.x = s * y + c * x; out.x = s * y + c * x;
out.y = c * y - s * x; out.y = c * y - s * x;

View File

@ -55,7 +55,7 @@ enum
struct CBlip struct CBlip
{ {
uint32 m_nColor; uint32 m_nColor;
uint16 m_eBlipType; // eBlipType uint32 m_eBlipType; // eBlipType
int32 m_nEntityHandle; int32 m_nEntityHandle;
CVector2D m_vec2DPos; CVector2D m_vec2DPos;
CVector m_vecPos; CVector m_vecPos;
@ -78,7 +78,7 @@ static_assert(sizeof(CBlip) == 0x30, "CBlip: error");
class CRadar class CRadar
{ {
public: public:
static float &m_RadarRange; static float &m_radarRange;
static CBlip (&ms_RadarTrace)[NUMRADARBLIPS]; static CBlip (&ms_RadarTrace)[NUMRADARBLIPS];
static CSprite2d *AsukaSprite; static CSprite2d *AsukaSprite;
static CSprite2d *BombSprite; static CSprite2d *BombSprite;