mirror of
https://github.com/dashr9230/SA-MP.git
synced 2025-07-18 17:38:12 +08:00
[saco] Implement rest of CGangZonePool member functions
This commit is contained in:
@ -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
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
};
|
||||
|
||||
//----------------------------------------------------
|
||||
|
Reference in New Issue
Block a user