Triangular radar blips
This commit is contained in:
parent
a47f78758c
commit
365f9e9caf
@ -335,7 +335,18 @@ void CRadar::DrawBlips()
|
|||||||
if (ms_RadarTrace[blipId].m_IconID != RADAR_SPRITE_NONE) {
|
if (ms_RadarTrace[blipId].m_IconID != RADAR_SPRITE_NONE) {
|
||||||
DrawRadarSprite(ms_RadarTrace[blipId].m_IconID, out.x, out.y, CalculateBlipAlpha(dist));
|
DrawRadarSprite(ms_RadarTrace[blipId].m_IconID, out.x, out.y, CalculateBlipAlpha(dist));
|
||||||
} else {
|
} else {
|
||||||
|
#ifdef TRIANGULAR_BLIPS
|
||||||
|
CVector &pos = FindPlayerCentreOfWorld_NoSniperShift();
|
||||||
|
CVector &blipPos = blipEntity->GetPosition();
|
||||||
|
uint8 mode = BLIP_MODE_TRIANGULAR_UP;
|
||||||
|
if (blipPos.z - pos.z <= 2.0f) {
|
||||||
|
if (blipPos.z - pos.z < -4.0f) mode = BLIP_MODE_TRIANGULAR_DOWN;
|
||||||
|
else mode = BLIP_MODE_SQUARE;
|
||||||
|
}
|
||||||
|
ShowRadarTraceWithHeight(out.x, out.y, ms_RadarTrace[blipId].m_wScale, (uint8)(color >> 24), (uint8)(color >> 16), (uint8)(color >> 8), 255, mode);
|
||||||
|
#else
|
||||||
ShowRadarTrace(out.x, out.y, ms_RadarTrace[blipId].m_wScale, (uint8)(color >> 24), (uint8)(color >> 16), (uint8)(color >> 8), 255);
|
ShowRadarTrace(out.x, out.y, ms_RadarTrace[blipId].m_wScale, (uint8)(color >> 24), (uint8)(color >> 16), (uint8)(color >> 8), 255);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -363,7 +374,18 @@ void CRadar::DrawBlips()
|
|||||||
if (ms_RadarTrace[blipId].m_IconID != RADAR_SPRITE_NONE) {
|
if (ms_RadarTrace[blipId].m_IconID != RADAR_SPRITE_NONE) {
|
||||||
DrawRadarSprite(ms_RadarTrace[blipId].m_IconID, out.x, out.y, CalculateBlipAlpha(dist));
|
DrawRadarSprite(ms_RadarTrace[blipId].m_IconID, out.x, out.y, CalculateBlipAlpha(dist));
|
||||||
} else {
|
} else {
|
||||||
|
#ifdef TRIANGULAR_BLIPS
|
||||||
|
CVector &pos = FindPlayerCentreOfWorld_NoSniperShift();
|
||||||
|
CVector &blipPos = ms_RadarTrace[blipId].m_vecPos;
|
||||||
|
uint8 mode = BLIP_MODE_TRIANGULAR_UP;
|
||||||
|
if (blipPos.z - pos.z <= 2.0f) {
|
||||||
|
if (blipPos.z - pos.z < -4.0f) mode = BLIP_MODE_TRIANGULAR_DOWN;
|
||||||
|
else mode = BLIP_MODE_SQUARE;
|
||||||
|
}
|
||||||
|
ShowRadarTraceWithHeight(out.x, out.y, ms_RadarTrace[blipId].m_wScale, (uint8)(color >> 24), (uint8)(color >> 16), (uint8)(color >> 8), 255, mode);
|
||||||
|
#else
|
||||||
ShowRadarTrace(out.x, out.y, ms_RadarTrace[blipId].m_wScale, (uint8)(color >> 24), (uint8)(color >> 16), (uint8)(color >> 8), 255);
|
ShowRadarTrace(out.x, out.y, ms_RadarTrace[blipId].m_wScale, (uint8)(color >> 24), (uint8)(color >> 16), (uint8)(color >> 8), 255);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -417,7 +439,20 @@ void CRadar::DrawBlips()
|
|||||||
if (ms_RadarTrace[blipId].m_IconID != RADAR_SPRITE_NONE)
|
if (ms_RadarTrace[blipId].m_IconID != RADAR_SPRITE_NONE)
|
||||||
DrawRadarSprite(ms_RadarTrace[blipId].m_IconID, out.x, out.y, CalculateBlipAlpha(dist));
|
DrawRadarSprite(ms_RadarTrace[blipId].m_IconID, out.x, out.y, CalculateBlipAlpha(dist));
|
||||||
else
|
else
|
||||||
|
#ifdef TRIANGULAR_BLIPS
|
||||||
|
{
|
||||||
|
CVector &pos = FindPlayerCentreOfWorld_NoSniperShift();
|
||||||
|
CVector &blipPos = blipEntity->GetPosition();
|
||||||
|
uint8 mode = BLIP_MODE_TRIANGULAR_UP;
|
||||||
|
if (blipPos.z - pos.z <= 2.0f) {
|
||||||
|
if (blipPos.z - pos.z < -4.0f) mode = BLIP_MODE_TRIANGULAR_DOWN;
|
||||||
|
else mode = BLIP_MODE_SQUARE;
|
||||||
|
}
|
||||||
|
ShowRadarTraceWithHeight(out.x, out.y, ms_RadarTrace[blipId].m_wScale, (uint8)(color >> 24), (uint8)(color >> 16), (uint8)(color >> 8), 255, mode);
|
||||||
|
}
|
||||||
|
#else
|
||||||
ShowRadarTrace(out.x, out.y, ms_RadarTrace[blipId].m_wScale, (uint8)(color >> 24), (uint8)(color >> 16), (uint8)(color >> 8), 255);
|
ShowRadarTrace(out.x, out.y, ms_RadarTrace[blipId].m_wScale, (uint8)(color >> 24), (uint8)(color >> 16), (uint8)(color >> 8), 255);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -453,7 +488,20 @@ void CRadar::DrawBlips()
|
|||||||
if (ms_RadarTrace[blipId].m_IconID != RADAR_SPRITE_NONE)
|
if (ms_RadarTrace[blipId].m_IconID != RADAR_SPRITE_NONE)
|
||||||
DrawRadarSprite(ms_RadarTrace[blipId].m_IconID, out.x, out.y, CalculateBlipAlpha(dist));
|
DrawRadarSprite(ms_RadarTrace[blipId].m_IconID, out.x, out.y, CalculateBlipAlpha(dist));
|
||||||
else
|
else
|
||||||
|
#ifdef TRIANGULAR_BLIPS
|
||||||
|
{
|
||||||
|
CVector &pos = FindPlayerCentreOfWorld_NoSniperShift();
|
||||||
|
CVector &blipPos = ms_RadarTrace[blipId].m_vecPos;
|
||||||
|
uint8 mode = BLIP_MODE_TRIANGULAR_UP;
|
||||||
|
if (blipPos.z - pos.z <= 2.0f) {
|
||||||
|
if (blipPos.z - pos.z < -4.0f) mode = BLIP_MODE_TRIANGULAR_DOWN;
|
||||||
|
else mode = BLIP_MODE_SQUARE;
|
||||||
|
}
|
||||||
|
ShowRadarTraceWithHeight(out.x, out.y, ms_RadarTrace[blipId].m_wScale, (uint8)(color >> 24), (uint8)(color >> 16), (uint8)(color >> 8), 255, mode);
|
||||||
|
}
|
||||||
|
#else
|
||||||
ShowRadarTrace(out.x, out.y, ms_RadarTrace[blipId].m_wScale, (uint8)(color >> 24), (uint8)(color >> 16), (uint8)(color >> 8), 255);
|
ShowRadarTrace(out.x, out.y, ms_RadarTrace[blipId].m_wScale, (uint8)(color >> 24), (uint8)(color >> 16), (uint8)(color >> 8), 255);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -949,6 +997,30 @@ void CRadar::ShowRadarTrace(float x, float y, uint32 size, uint8 red, uint8 gree
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void CRadar::ShowRadarTraceWithHeight(float x, float y, uint32 size, uint8 red, uint8 green, uint8 blue, uint8 alpha, uint8 mode)
|
||||||
|
{
|
||||||
|
if (!CHud::m_Wants_To_Draw_Hud || TheCamera.m_WideScreenOn)
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (mode)
|
||||||
|
{
|
||||||
|
case BLIP_MODE_TRIANGULAR_UP:
|
||||||
|
// size++; // VC does size + 1 for triangles
|
||||||
|
CSprite2d::Draw2DPolygon(x + SCREEN_SCALE_X(size + 3.0f), y + SCREEN_SCALE_Y(size + 2.0f), x - (SCREEN_SCALE_X(size + 3.0f)), y + SCREEN_SCALE_Y(size + 2.0f), x, y - (SCREEN_SCALE_Y(size + 3.0f)), x, y - (SCREEN_SCALE_Y(size + 3.0f)), CRGBA(0, 0, 0, alpha));
|
||||||
|
CSprite2d::Draw2DPolygon(x + SCREEN_SCALE_X(size + 1.0f), y + SCREEN_SCALE_Y(size + 1.0f), x - (SCREEN_SCALE_X(size + 1.0f)), y + SCREEN_SCALE_Y(size + 1.0f), x, y - (SCREEN_SCALE_Y(size + 1.0f)), x, y - (SCREEN_SCALE_Y(size + 1.0f)), CRGBA(red, green, blue, alpha));
|
||||||
|
break;
|
||||||
|
case BLIP_MODE_TRIANGULAR_DOWN:
|
||||||
|
// size++; // VC does size + 1 for triangles
|
||||||
|
CSprite2d::Draw2DPolygon(x, y + SCREEN_SCALE_Y(size + 2.0f), x, y + SCREEN_SCALE_Y(size + 3.0f), x + SCREEN_SCALE_X(size + 3.0f), y - (SCREEN_SCALE_Y(size + 2.0f)), x - (SCREEN_SCALE_X(size + 3.0f)), y - (SCREEN_SCALE_Y(size + 2.0f)), CRGBA(0, 0, 0, alpha));
|
||||||
|
CSprite2d::Draw2DPolygon(x, y + SCREEN_SCALE_Y(size + 1.0f), x, y + SCREEN_SCALE_Y(size + 1.0f), x + SCREEN_SCALE_X(size + 1.0f), y - (SCREEN_SCALE_Y(size + 1.0f)), x - (SCREEN_SCALE_X(size + 1.0f)), y - (SCREEN_SCALE_Y(size + 1.0f)), CRGBA(red, green, blue, alpha));
|
||||||
|
break;
|
||||||
|
case BLIP_MODE_SQUARE:
|
||||||
|
CSprite2d::DrawRect(CRect(x - SCREEN_SCALE_X(size + 1.0f), y - SCREEN_SCALE_Y(size + 1.0f), SCREEN_SCALE_X(size + 1.0f) + x, SCREEN_SCALE_Y(size + 1.0f) + y), CRGBA(0, 0, 0, alpha));
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
WRAPPER void CRadar::Shutdown() { EAXJMP(0x4A3F60); }
|
WRAPPER void CRadar::Shutdown() { EAXJMP(0x4A3F60); }
|
||||||
#else
|
#else
|
||||||
|
@ -45,6 +45,13 @@ enum eRadarSprite
|
|||||||
RADAR_SPRITE_COUNT = 21,
|
RADAR_SPRITE_COUNT = 21,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
BLIP_MODE_TRIANGULAR_UP = 0,
|
||||||
|
BLIP_MODE_TRIANGULAR_DOWN,
|
||||||
|
BLIP_MODE_SQUARE,
|
||||||
|
};
|
||||||
|
|
||||||
struct CBlip
|
struct CBlip
|
||||||
{
|
{
|
||||||
uint32 m_nColor;
|
uint32 m_nColor;
|
||||||
@ -130,6 +137,7 @@ public:
|
|||||||
static void SetRadarMarkerState(int32 i, bool flag);
|
static void SetRadarMarkerState(int32 i, bool flag);
|
||||||
static void ShowRadarMarker(CVector pos, uint32 color, float radius);
|
static void ShowRadarMarker(CVector pos, uint32 color, float radius);
|
||||||
static void ShowRadarTrace(float x, float y, uint32 size, uint8 red, uint8 green, uint8 blue, uint8 alpha);
|
static void ShowRadarTrace(float x, float y, uint32 size, uint8 red, uint8 green, uint8 blue, uint8 alpha);
|
||||||
|
static void ShowRadarTraceWithHeight(float x, float y, uint32 size, uint8 red, uint8 green, uint8 blue, uint8 alpha, uint8 mode);
|
||||||
static void Shutdown();
|
static void Shutdown();
|
||||||
static void StreamRadarSections(const CVector &posn);
|
static void StreamRadarSections(const CVector &posn);
|
||||||
static void StreamRadarSections(int32 x, int32 y);
|
static void StreamRadarSections(int32 x, int32 y);
|
||||||
|
@ -161,3 +161,6 @@ enum Config {
|
|||||||
#define VC_PED_PORTS
|
#define VC_PED_PORTS
|
||||||
#define NEW_WALK_AROUND_ALGORITHM
|
#define NEW_WALK_AROUND_ALGORITHM
|
||||||
#define CANCELLABLE_CAR_ENTER
|
#define CANCELLABLE_CAR_ENTER
|
||||||
|
|
||||||
|
// Blips
|
||||||
|
#define TRIANGULAR_BLIPS
|
@ -457,6 +457,20 @@ CSprite2d::DrawRectXLU(const CRect &r, const CRGBA &c0, const CRGBA &c1, const C
|
|||||||
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE);
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSprite2d::Draw2DPolygon(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, const CRGBA &color)
|
||||||
|
{
|
||||||
|
SetVertices(x1, y1, x2, y2, x3, y3, x4, y4, color, color, color, color);
|
||||||
|
RwRenderStateSet(rwRENDERSTATETEXTURERASTER, 0);
|
||||||
|
RwRenderStateSet(rwRENDERSTATESHADEMODE, (void*)rwSHADEMODEFLAT);
|
||||||
|
RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)FALSE);
|
||||||
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE);
|
||||||
|
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)(color.a != 255));
|
||||||
|
RwIm2DRenderPrimitive(rwPRIMTYPETRIFAN, CSprite2d::maVertices, 4);
|
||||||
|
RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)TRUE);
|
||||||
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE);
|
||||||
|
RwRenderStateSet(rwRENDERSTATESHADEMODE, (void*)rwSHADEMODEGOURAUD);
|
||||||
|
}
|
||||||
|
|
||||||
STARTPATCHES
|
STARTPATCHES
|
||||||
#define C4 const CRGBA&, const CRGBA&, const CRGBA&, const CRGBA&
|
#define C4 const CRGBA&, const CRGBA&, const CRGBA&, const CRGBA&
|
||||||
#define F8 float, float, float, float, float, float, float, float
|
#define F8 float, float, float, float, float, float, float, float
|
||||||
|
@ -47,5 +47,7 @@ public:
|
|||||||
static void DrawRect(const CRect &r, const CRGBA &col);
|
static void DrawRect(const CRect &r, const CRGBA &col);
|
||||||
static void DrawRectXLU(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3);
|
static void DrawRectXLU(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3);
|
||||||
|
|
||||||
|
static void Draw2DPolygon(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, const CRGBA &color);
|
||||||
|
|
||||||
static RwIm2DVertex* GetVertices() { return maVertices; };
|
static RwIm2DVertex* GetVertices() { return maVertices; };
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user