core/MenuStyle_Valve.h
author David Anderson <dvander@alliedmods.net>
Sun May 13 00:42:39 2007 +0000 (2007-05-13)
changeset 774 67b8b99bad61
parent 769 d7dc79f1f93e
child 775 9c537df13ec8
permissions -rw-r--r--
fixed some re-entrancy bugs
removed debug commands
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_MENUSTYLE_VALVE_H
dvander@769
    16
#define _INCLUDE_MENUSTYLE_VALVE_H
dvander@769
    17
dvander@769
    18
#include "sm_globals.h"
dvander@769
    19
#include "MenuManager.h"
dvander@769
    20
#include "MenuStyle_Base.h"
dvander@769
    21
#include "sourcemm_api.h"
dvander@769
    22
#include "KeyValues.h"
dvander@769
    23
#include <IPlayerHelpers.h>
dvander@769
    24
#include "sm_fastlink.h"
dvander@769
    25
dvander@769
    26
using namespace SourceMod;
dvander@769
    27
dvander@769
    28
class CValveMenuPlayer
dvander@769
    29
{
dvander@769
    30
public:
dvander@769
    31
	CValveMenuPlayer() : bInMenu(false), bAutoIgnore(false), curPrioLevel(1)
dvander@769
    32
	{
dvander@769
    33
	}
dvander@769
    34
	menu_states_t states;
dvander@769
    35
	bool bInMenu;
dvander@769
    36
	bool bAutoIgnore;
dvander@769
    37
	int curPrioLevel;
dvander@769
    38
	float menuStartTime;
dvander@769
    39
	unsigned int menuHoldTime;
dvander@769
    40
};
dvander@769
    41
dvander@769
    42
class CValveMenu;
dvander@769
    43
class CValveMenuDisplay;
dvander@769
    44
dvander@769
    45
class ValveMenuStyle : 
dvander@769
    46
	public SMGlobalClass,
dvander@769
    47
	public IMenuStyle,
dvander@769
    48
	public IClientListener
dvander@769
    49
{
dvander@769
    50
public:
dvander@769
    51
	ValveMenuStyle();
dvander@769
    52
	bool DoClientMenu(int client, CValveMenu *menu, IMenuHandler *mh, unsigned int time);
dvander@769
    53
	bool DoClientMenu(int client, CValveMenuDisplay *menu, IMenuHandler *mh, unsigned int time);
dvander@769
    54
	void ClientPressedKey(int client, unsigned int key_press);
dvander@769
    55
	bool OnClientCommand(int client);
dvander@769
    56
	void CancelMenu(CValveMenu *menu);
dvander@769
    57
	void ProcessWatchList();
dvander@769
    58
public: //SMGlobalClass
dvander@769
    59
	void OnSourceModAllInitialized();
dvander@769
    60
	void OnSourceModShutdown();
dvander@769
    61
	void OnSourceModVSPReceived(IServerPluginCallbacks *iface);
dvander@769
    62
public: //IClientListener
dvander@769
    63
	void OnClientDisconnected(int client);
dvander@769
    64
public: //IMenuStyle
dvander@769
    65
	const char *GetStyleName();
dvander@769
    66
	IMenuDisplay *CreateDisplay();
dvander@769
    67
	IBaseMenu *CreateMenu();
dvander@769
    68
	unsigned int GetMaxPageItems();
dvander@769
    69
	MenuSource GetClientMenu(int client, void **object);
dvander@769
    70
	bool CancelClientMenu(int client, bool autoIgnore=false);
dvander@769
    71
private:
dvander@769
    72
	bool RedoClientMenu(int client, ItemOrder order);
dvander@769
    73
	void HookCreateMessage(edict_t *pEdict, DIALOG_TYPE type, KeyValues *kv, IServerPluginCallbacks *plugin);
dvander@774
    74
	void _CancelMenu(int client, bool bAutoIgnore=false, MenuCancelReason reason=MenuCancel_Interrupt);
dvander@769
    75
private:
dvander@769
    76
	CValveMenuPlayer *m_players;
dvander@769
    77
	FastLink<int> m_WatchList;
dvander@769
    78
};
dvander@769
    79
dvander@769
    80
class CValveMenu;
dvander@769
    81
dvander@769
    82
class CValveMenuDisplay : public IMenuDisplay
dvander@769
    83
{
dvander@769
    84
public:
dvander@769
    85
	CValveMenuDisplay();
dvander@769
    86
	CValveMenuDisplay(CValveMenu *pMenu);
dvander@769
    87
	~CValveMenuDisplay();
dvander@769
    88
public:
dvander@769
    89
	IMenuStyle *GetParentStyle();
dvander@769
    90
	void Reset();
dvander@769
    91
	void DrawTitle(const char *text, bool onlyIfEmpty=false);
dvander@769
    92
	unsigned int DrawItem(const ItemDrawInfo &item);
dvander@769
    93
	bool DrawRawLine(const char *rawline);
dvander@769
    94
	bool SendDisplay(int client, IMenuHandler *handler, unsigned int time);
dvander@769
    95
	bool SetExtOption(MenuOption option, const void *valuePtr);
dvander@769
    96
	bool CanDrawItem(unsigned int drawFlags);
dvander@769
    97
	void SendRawDisplay(int client, int priority, unsigned int time);
dvander@769
    98
private:
dvander@769
    99
	KeyValues *m_pKv;
dvander@769
   100
	unsigned int m_NextPos;
dvander@769
   101
	bool m_TitleDrawn;
dvander@769
   102
};
dvander@769
   103
dvander@769
   104
class CValveMenu : public CBaseMenu
dvander@769
   105
{
dvander@769
   106
	friend class CValveMenuDisplay;
dvander@769
   107
public:
dvander@769
   108
	CValveMenu();
dvander@769
   109
public:
dvander@769
   110
	bool SetExtOption(MenuOption option, const void *valuePtr);
dvander@769
   111
	IMenuDisplay *CreateDisplay();
dvander@769
   112
	bool GetExitButton();
dvander@769
   113
	bool SetExitButton(bool set);
dvander@769
   114
	bool SetPagination(unsigned int itemsPerPage);
dvander@769
   115
	bool Display(int client, IMenuHandler *handler, unsigned int time);
dvander@769
   116
	void Cancel();
dvander@769
   117
	void Destroy();
dvander@769
   118
private:
dvander@769
   119
	Color m_IntroColor;
dvander@769
   120
	char m_IntroMsg[128];
dvander@769
   121
	bool m_bCancelling;
dvander@769
   122
	bool m_bShouldDelete;
dvander@769
   123
};
dvander@769
   124
dvander@769
   125
extern ValveMenuStyle g_ValveMenuStyle;
dvander@769
   126
dvander@769
   127
#endif //_INCLUDE_MENUSTYLE_VALVE_H