Files
SA-MP/saco/net/menupool.cpp
T
RD42 6fb501be50 [saco] Implement/match CMenuPool::ShowMenu(...)
* Implement/match `CMenu::Show()`
* Implement/match `CMenu::MS(...)`
2024-07-16 23:24:53 +08:00

95 lines
2.2 KiB
C++

#include "../main.h"
CHAR g_szMenuItems[MAX_MENU_ITEMS][MAX_COLUMNS][MAX_MENU_LINE+1] =
{
{"SAMP000", "SAMP100"},
{"SAMP001", "SAMP101"},
{"SAMP002", "SAMP102"},
{"SAMP003", "SAMP103"},
{"SAMP004", "SAMP104"},
{"SAMP005", "SAMP105"},
{"SAMP006", "SAMP106"},
{"SAMP007", "SAMP107"},
{"SAMP008", "SAMP108"},
{"SAMP009", "SAMP109"},
{"SAMP010", "SAMP110"},
{"SAMP011", "SAMP111"},
};
//----------------------------------------------------
CMenuPool::CMenuPool()
{
// loop through and initialize all net players to null and slot states to false
for (BYTE byteMenuID = 0; byteMenuID < MAX_MENUS; byteMenuID++)
{
m_bMenuSlotState[byteMenuID] = FALSE;
m_pMenus[byteMenuID] = NULL;
}
m_byteCurrentMenu = MAX_MENUS;
}
//----------------------------------------------------
CMenuPool::~CMenuPool()
{
if (m_byteCurrentMenu != MAX_MENUS) m_pMenus[m_byteCurrentMenu]->Hide();
for (BYTE byteMenuID = 0; byteMenuID < MAX_MENUS; byteMenuID++)
{
if (m_pMenus[byteMenuID])
{
delete m_pMenus[byteMenuID];
m_pMenus[byteMenuID] = NULL;
}
}
}
//----------------------------------------------------
CMenu* CMenuPool::New(BYTE byteMenuID, float fX, float fY, BYTE byteColumns, float fCol1Width, float fCol2Width, MENU_INT *MenuInteraction)
{
SAFE_DELETE(m_pMenus[byteMenuID]);
m_bMenuSlotState[byteMenuID] = FALSE;
CMenu* pMenu = new CMenu(fX, fY, byteColumns, fCol1Width, fCol2Width, MenuInteraction);
if (pMenu)
{
m_bMenuSlotState[byteMenuID] = TRUE;
m_pMenus[byteMenuID] = pMenu;
return pMenu;
}
return NULL;
}
//----------------------------------------------------
BOOL CMenuPool::Delete(BYTE byteMenuID)
{
if (m_bMenuSlotState[byteMenuID] == FALSE || !m_pMenus[byteMenuID])
{
return FALSE;
}
m_bMenuSlotState[byteMenuID] = FALSE;
delete m_pMenus[byteMenuID];
m_pMenus[byteMenuID] = NULL;
return TRUE;
}
//----------------------------------------------------
void CMenuPool::ShowMenu(BYTE byteMenuID)
{
if (byteMenuID >= MAX_MENUS) return;
if (m_bMenuSlotState[byteMenuID] == FALSE || !m_pMenus[byteMenuID]) return;
if (m_byteCurrentMenu != MAX_MENUS) m_pMenus[m_byteCurrentMenu]->Hide();
m_pMenus[byteMenuID]->Show();
m_byteCurrentMenu = byteMenuID;
m_byteExited = 0;
}