[saco] Implement rest of CGangZonePool member functions

This commit is contained in:
RD42
2024-02-18 23:26:49 +08:00
parent 6ea7682c3c
commit 66174a720f
3 changed files with 101 additions and 5 deletions

View File

@ -9,6 +9,7 @@
#define MAX_OBJECTS 1000
#define MAX_MENUS 128
#define MAX_TEXT_DRAWS 2304
#define MAX_GANG_ZONES 1024
#define MAX_LABELS 2048
#define PLAYER_PED_SLOTS 210

View File

@ -1,14 +1,96 @@
#include "../main.h"
extern CGame* pGame;
//----------------------------------------------------
CGangZonePool::CGangZonePool()
{
for (WORD i = 0; i < 1024; i++)
for (WORD wZone = 0; wZone < MAX_GANG_ZONES; wZone++)
{
field_0[i] = 0;
field_1000[i] = 0;
m_pGangZone[wZone] = NULL;
m_bSlotState[wZone] = FALSE;
}
}
CGangZonePool::~CGangZonePool()
{
for (WORD wZone = 0; wZone < MAX_GANG_ZONES; wZone++)
{
if (m_pGangZone[wZone])
{
delete m_pGangZone[wZone];
m_pGangZone[wZone] = NULL;
}
}
}
void CGangZonePool::New(WORD wZone, float fMinX, float fMinY, float fMaxX, float fMaxY, DWORD dwColor)
{
if (m_pGangZone[wZone])
{
delete m_pGangZone[wZone];
m_pGangZone[wZone] = NULL;
m_bSlotState[wZone] = FALSE;
}
GANG_ZONE* pGangZone = (GANG_ZONE*)malloc(sizeof (GANG_ZONE));
if (pGangZone)
{
// Odd order but it is right
pGangZone->fPos[0] = fMinX;
pGangZone->fPos[1] = fMaxY;
pGangZone->fPos[2] = fMaxX;
pGangZone->fPos[3] = fMinY;
pGangZone->dwColor = dwColor;
pGangZone->dwAltColor = dwColor;
m_pGangZone[wZone] = pGangZone;
m_bSlotState[wZone] = TRUE;
}
}
void CGangZonePool::Flash(WORD wZone, DWORD dwColor)
{
if (m_pGangZone[wZone])
{
m_pGangZone[wZone]->dwAltColor = dwColor;
}
}
void CGangZonePool::StopFlash(WORD wZone)
{
if (m_pGangZone[wZone])
{
m_pGangZone[wZone]->dwAltColor = m_pGangZone[wZone]->dwColor;
}
}
void CGangZonePool::Delete(WORD wZone)
{
if (m_pGangZone[wZone])
{
delete m_pGangZone[wZone];
m_pGangZone[wZone] = NULL;
m_bSlotState[wZone] = FALSE;
}
}
void CGangZonePool::Draw()
{
static int iLastTick = 0;
int iTick = GetTickCount();
static BYTE alt = 0;
if (iTick - iLastTick >= 500)
{
// All zones flash, it's easier to have non flashers flash the same color
alt = ~alt;
iLastTick = iTick;
}
for (WORD wZone = 0; wZone < MAX_GANG_ZONES; wZone++)
{
if (m_bSlotState[wZone])
{
pGame->DrawGangZone(m_pGangZone[wZone]->fPos, alt ? m_pGangZone[wZone]->dwAltColor : m_pGangZone[wZone]->dwColor);
}
}
}

View File

@ -1,13 +1,26 @@
#pragma once
typedef struct _GANG_ZONE
{
float fPos[4];
DWORD dwColor;
DWORD dwAltColor;
} GANG_ZONE;
class CGangZonePool
{
private:
int field_0[1024];
int field_1000[1024];
GANG_ZONE *m_pGangZone[MAX_GANG_ZONES];
BOOL m_bSlotState[MAX_GANG_ZONES];
public:
CGangZonePool();
~CGangZonePool();
void New(WORD wZone, float fMinX, float fMinY, float fMaxX, float fMaxY, DWORD dwColor);
void Flash(WORD wZone, DWORD dwColor);
void StopFlash(WORD wZone);
void Delete(WORD wZone);
void Draw();
};
//----------------------------------------------------