core/MenuManager.h
author Scott Ehlert <ds@alliedmods.net>
Fri Jun 22 15:37:12 2007 +0000 (2007-06-22)
changeset 1001 8de56a71f200
parent 997 2fc3152c3118
child 1163 0bb03cb6277b
permissions -rw-r--r--
Implemented amb423 - Added IsClientObserver() native
dvander@769
     1
/**
dvander@769
     2
 * vim: set ts=4 :
dvander@769
     3
 * ===============================================================
dvander@769
     4
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@769
     5
 * ===============================================================
dvander@769
     6
 *
dvander@769
     7
 * This file is not open source and may not be copied without explicit
dvander@769
     8
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@769
     9
 * in whole or significant part.
dvander@769
    10
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@769
    11
 *
dvander@769
    12
 * Version: $Id$
dvander@769
    13
 */
dvander@769
    14
dvander@769
    15
#ifndef _INCLUDE_SOURCEMOD_MENUMANAGER_H_
dvander@769
    16
#define _INCLUDE_SOURCEMOD_MENUMANAGER_H_
dvander@769
    17
dvander@769
    18
#include <IMenuManager.h>
dvander@769
    19
#include <sh_vector.h>
dvander@769
    20
#include <sh_stack.h>
dvander@769
    21
#include <sh_list.h>
dvander@769
    22
#include "sm_memtable.h"
dvander@769
    23
#include "sm_globals.h"
dvander@769
    24
dvander@769
    25
using namespace SourceMod;
dvander@769
    26
using namespace SourceHook;
dvander@769
    27
dvander@877
    28
class VoteMenuHandler : public IVoteMenuHandler
dvander@769
    29
{
dvander@769
    30
public: //IMenuHandler
dvander@877
    31
	unsigned int GetMenuAPIVersion2();
dvander@877
    32
	void OnMenuStart(IBaseMenu *menu);
dvander@787
    33
	void OnMenuDisplay(IBaseMenu *menu, int client, IMenuPanel *display);
dvander@769
    34
	void OnMenuSelect(IBaseMenu *menu, int client, unsigned int item);
dvander@877
    35
	void OnMenuCancel(IBaseMenu *menu, int client, MenuCancelReason reason);
dvander@997
    36
	void OnMenuEnd(IBaseMenu *menu, MenuEndReason reason);
dvander@877
    37
	void OnMenuDrawItem(IBaseMenu *menu, int client, unsigned int item, unsigned int &style);
dvander@877
    38
	void OnMenuDisplayItem(IBaseMenu *menu, int client, unsigned int item, const char **display);
dvander@877
    39
public: //IVoteMenuHandler
dvander@877
    40
	bool IsVoteInProgress();
dvander@877
    41
	void InitializeVoting(IBaseMenu *menu);
dvander@877
    42
	void StartVoting();
dvander@884
    43
	void CancelVoting();
dvander@769
    44
public:
dvander@877
    45
	void Reset(IMenuHandler *mh);
dvander@877
    46
private:
dvander@877
    47
	void DecrementPlayerCount();
dvander@877
    48
	void EndVoting();
dvander@877
    49
	void InternalReset();
dvander@877
    50
private:
dvander@769
    51
	IMenuHandler *m_pHandler;
dvander@877
    52
	unsigned int m_Clients;
dvander@877
    53
	unsigned int m_Items;
dvander@877
    54
	CVector<unsigned int> m_Votes;
dvander@877
    55
	IBaseMenu *m_pCurMenu;
dvander@877
    56
	bool m_bStarted;
dvander@884
    57
	bool m_bCancelled;
dvander@877
    58
	unsigned int m_NumVotes;
dvander@769
    59
};
dvander@769
    60
dvander@769
    61
class MenuManager : 
dvander@769
    62
	public IMenuManager,
dvander@790
    63
	public SMGlobalClass,
dvander@790
    64
	public IHandleTypeDispatch
dvander@769
    65
{
dvander@769
    66
	friend class BroadcastHandler;
dvander@769
    67
	friend class VoteHandler;
dvander@790
    68
	friend class CBaseMenu;
dvander@790
    69
	friend class BaseMenuStyle;
dvander@769
    70
public:
dvander@769
    71
	MenuManager();
dvander@769
    72
public: //SMGlobalClass
dvander@769
    73
	void OnSourceModAllInitialized();
dvander@769
    74
	void OnSourceModAllShutdown();
dvander@769
    75
public: //IMenuManager
dvander@769
    76
	virtual const char *GetInterfaceName()
dvander@769
    77
	{
dvander@769
    78
		return SMINTERFACE_MENUMANAGER_NAME;
dvander@769
    79
	}
dvander@769
    80
	virtual unsigned int GetInterfaceVersion()
dvander@769
    81
	{
dvander@769
    82
		return SMINTERFACE_MENUMANAGER_VERSION;
dvander@769
    83
	}
dvander@769
    84
public:
dvander@769
    85
	unsigned int GetStyleCount();
dvander@769
    86
	IMenuStyle *GetStyle(unsigned int index);
dvander@769
    87
	IMenuStyle *FindStyleByName(const char *name);
dvander@769
    88
	IMenuStyle *GetDefaultStyle();
dvander@780
    89
	void AddStyle(IMenuStyle *style);
dvander@769
    90
	bool SetDefaultStyle(IMenuStyle *style);
dvander@787
    91
	IMenuPanel *RenderMenu(int client, menu_states_t &states, ItemOrder order);
dvander@877
    92
	IVoteMenuHandler *CreateVoteWrapper(IMenuHandler *mh);
dvander@877
    93
	void ReleaseVoteWrapper(IVoteMenuHandler *mh);
dvander@790
    94
public: //IHandleTypeDispatch
dvander@790
    95
	void OnHandleDestroy(HandleType_t type, void *object);
dvander@790
    96
public:
dvander@790
    97
	HandleError ReadMenuHandle(Handle_t handle, IBaseMenu **menu);
dvander@790
    98
	HandleError ReadStyleHandle(Handle_t handle, IMenuStyle **style);
dvander@769
    99
protected:
dvander@790
   100
	Handle_t CreateMenuHandle(IBaseMenu *menu, IdentityToken_t *pOwner);
dvander@790
   101
	Handle_t CreateStyleHandle(IMenuStyle *style);
dvander@769
   102
private:
dvander@769
   103
	int m_ShowMenu;
dvander@769
   104
	IMenuStyle *m_pDefaultStyle;
dvander@877
   105
	CStack<VoteMenuHandler *> m_VoteHandlers;
dvander@769
   106
	CVector<IMenuStyle *> m_Styles;
dvander@790
   107
	HandleType_t m_StyleType;
dvander@790
   108
	HandleType_t m_MenuType;
dvander@769
   109
};
dvander@769
   110
dvander@769
   111
extern MenuManager g_Menus;
dvander@769
   112
dvander@769
   113
#endif //_INCLUDE_SOURCEMOD_MENUMANAGER_H_