added vote functionality

--HG--
extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40884
This commit is contained in:
David Anderson
2007-06-05 16:44:19 +00:00
parent aea69f5fe8
commit 2ee18824e9
3 changed files with 74 additions and 92 deletions
+10 -10
View File
@@ -757,16 +757,6 @@
</File>
</Filter>
</Filter>
<Filter
Name="Resources"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{2A750240-7C10-455f-A900-B9A9D362356C}"
>
<File
RelativePath="..\version.rc"
>
</File>
</Filter>
<Filter
Name="HL2SDK"
UniqueIdentifier="{80B56842-7A9F-4d5d-8149-767C285D0EB4}"
@@ -877,6 +867,16 @@
>
</File>
</Filter>
<Filter
Name="Resources"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{2A750240-7C10-455f-A900-B9A9D362356C}"
>
<File
RelativePath="..\version.rc"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
+47 -25
View File
@@ -38,6 +38,7 @@ enum MenuAction
MenuAction_Cancel = (1<<3), /**< The menu was cancelled (param1=client, param2=item) */
MenuAction_End = (1<<4), /**< A menu's display/selection cycle is complete (nothing passed). */
MenuAction_VoteEnd = (1<<5), /**< (VOTE ONLY): A vote sequence has ended (param1=chosen item) */
MenuAction_VoteStart = (1<<6), /**< (VOTE ONLY): A vote sequence has started */
};
class CPanelHandler : public IMenuHandler
@@ -66,10 +67,14 @@ public:
void OnMenuCancel(IBaseMenu *menu, int client, MenuCancelReason reason);
void OnMenuEnd(IBaseMenu *menu);
void OnMenuDestroy(IBaseMenu *menu);
void OnMenuVoteStart(IBaseMenu *menu);
void OnMenuVoteEnd(IBaseMenu *menu, unsigned int item);
#if 0
void OnMenuDrawItem(IBaseMenu *menu, int client, unsigned int item, unsigned int &style);
void OnMenuDisplayItem(IBaseMenu *menu, int client, unsigned int item, const char **display);
#endif
private:
void DoAction(IBaseMenu *menu, MenuAction action, cell_t param1, cell_t param2);
private:
IPluginFunction *m_pBasic;
int m_Flags;
@@ -232,11 +237,7 @@ void CMenuHandler::OnMenuStart(IBaseMenu *menu)
{
if ((m_Flags & (int)MenuAction_Start) == (int)MenuAction_Start)
{
m_pBasic->PushCell(menu->GetHandle());
m_pBasic->PushCell(MenuAction_Start);
m_pBasic->PushCell(0);
m_pBasic->PushCell(0);
m_pBasic->Execute(NULL);
DoAction(menu, MenuAction_Start, 0, 0);
}
}
@@ -254,11 +255,7 @@ void CMenuHandler::OnMenuDisplay(IBaseMenu *menu, int client, IMenuPanel *panel)
Handle_t hndl = g_HandleSys.CreateHandleEx(g_MenuHelpers.GetPanelType(), panel, &sec, &access, NULL);
m_pBasic->PushCell(menu->GetHandle());
m_pBasic->PushCell(MenuAction_Display);
m_pBasic->PushCell(client);
m_pBasic->PushCell(hndl);
m_pBasic->Execute(NULL);
DoAction(menu, MenuAction_Display, client, hndl);
g_HandleSys.FreeHandle(hndl, &sec);
}
@@ -266,29 +263,17 @@ void CMenuHandler::OnMenuDisplay(IBaseMenu *menu, int client, IMenuPanel *panel)
void CMenuHandler::OnMenuSelect(IBaseMenu *menu, int client, unsigned int item)
{
m_pBasic->PushCell(menu->GetHandle());
m_pBasic->PushCell(MenuAction_Select);
m_pBasic->PushCell(client);
m_pBasic->PushCell(item);
m_pBasic->Execute(NULL);
DoAction(menu, MenuAction_Select, client, item);
}
void CMenuHandler::OnMenuCancel(IBaseMenu *menu, int client, MenuCancelReason reason)
{
m_pBasic->PushCell(menu->GetHandle());
m_pBasic->PushCell(MenuAction_Cancel);
m_pBasic->PushCell(client);
m_pBasic->PushCell(reason);
m_pBasic->Execute(NULL);
DoAction(menu, MenuAction_Cancel, client, (cell_t)reason);
}
void CMenuHandler::OnMenuEnd(IBaseMenu *menu)
{
m_pBasic->PushCell(menu->GetHandle());
m_pBasic->PushCell(MenuAction_End);
m_pBasic->PushCell(0);
m_pBasic->PushCell(0);
m_pBasic->Execute(NULL);
DoAction(menu, MenuAction_End, 0, 0);
}
void CMenuHandler::OnMenuDestroy(IBaseMenu *menu)
@@ -296,6 +281,25 @@ void CMenuHandler::OnMenuDestroy(IBaseMenu *menu)
g_MenuHelpers.FreeMenuHandler(this);
}
void CMenuHandler::OnMenuVoteStart(IBaseMenu *menu)
{
DoAction(menu, MenuAction_VoteStart, 0, 0);
}
void CMenuHandler::OnMenuVoteEnd(IBaseMenu *menu, unsigned int item)
{
DoAction(menu, MenuAction_VoteEnd, item, 0);
}
void CMenuHandler::DoAction(IBaseMenu *menu, MenuAction action, cell_t param1, cell_t param2)
{
m_pBasic->PushCell(menu->GetHandle());
m_pBasic->PushCell((cell_t)action);
m_pBasic->PushCell(param1);
m_pBasic->PushCell(param2);
m_pBasic->Execute(NULL);
}
/**
* INLINE FUNCTIONS FOR NATIVES
*/
@@ -375,6 +379,23 @@ static cell_t DisplayMenu(IPluginContext *pContext, const cell_t *params)
return menu->Display(params[2], params[3]) ? 1 : 0;
}
static cell_t VoteMenu(IPluginContext *pContext, const cell_t *params)
{
Handle_t hndl = (Handle_t)params[1];
HandleError err;
IBaseMenu *menu;
if ((err=g_Menus.ReadMenuHandle(params[1], &menu)) != HandleError_None)
{
return pContext->ThrowNativeError("Menu handle %x is invalid (error %d)", hndl, err);
}
cell_t *addr;
pContext->LocalToPhysAddr(params[2], &addr);
return menu->BroadcastVote(addr, params[3], params[4]);
}
static cell_t AddMenuItem(IPluginContext *pContext, const cell_t *params)
{
Handle_t hndl = (Handle_t)params[1];
@@ -930,5 +951,6 @@ REGISTER_NATIVES(menuNatives)
{"SetPanelCurrentKey", SetPanelCurrentKey},
{"SetPanelTitle", SetPanelTitle},
{"SetPanelKeys", SetPanelKeys},
{"VoteMenu", VoteMenu},
{NULL, NULL},
};