extensions/topmenus/TopMenuManager.cpp
author Nicholas Hastings <skamonkey@gmail.com>
Mon Feb 08 19:57:20 2010 -0800 (2010-02-08)
changeset 2914 bf5f9aa53abe
parent 2323 efa6bfdd7571
permissions -rw-r--r--
Fixed FindEntityByClassname crash in Synergy (bug 4235, r=dvander).
dvander@1488
     1
/**
dvander@1488
     2
 * vim: set ts=4 :
dvander@1488
     3
 * =============================================================================
ds@1990
     4
 * SourceMod TopMenus Extension
ds@1947
     5
 * Copyright (C) 2004-2008 AlliedModders LLC.  All rights reserved.
dvander@1488
     6
 * =============================================================================
dvander@1488
     7
 *
dvander@1488
     8
 * This program is free software; you can redistribute it and/or modify it under
dvander@1488
     9
 * the terms of the GNU General Public License, version 3.0, as published by the
dvander@1488
    10
 * Free Software Foundation.
dvander@1488
    11
 * 
dvander@1488
    12
 * This program is distributed in the hope that it will be useful, but WITHOUT
dvander@1488
    13
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
dvander@1488
    14
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
dvander@1488
    15
 * details.
dvander@1488
    16
 *
dvander@1488
    17
 * You should have received a copy of the GNU General Public License along with
dvander@1488
    18
 * this program.  If not, see <http://www.gnu.org/licenses/>.
dvander@1488
    19
 *
dvander@1488
    20
 * As a special exception, AlliedModders LLC gives you permission to link the
dvander@1488
    21
 * code of this program (as well as its derivative works) to "Half-Life 2," the
dvander@1488
    22
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
dvander@1488
    23
 * by the Valve Corporation.  You must obey the GNU General Public License in
dvander@1488
    24
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
dvander@1488
    25
 * this exception to all derivative works.  AlliedModders LLC defines further
dvander@1488
    26
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
dvander@1488
    27
 * or <http://www.sourcemod.net/license.php>.
dvander@1488
    28
 *
dvander@1491
    29
 * Version: $Id$
dvander@1488
    30
 */
dvander@1488
    31
dvander@1488
    32
#include "TopMenuManager.h"
dvander@1488
    33
#include "TopMenu.h"
dvander@1488
    34
dvander@1488
    35
TopMenuManager g_TopMenus;
dvander@1488
    36
bool is_server_activated = false;
dvander@1488
    37
dvander@1488
    38
const char *TopMenuManager::GetInterfaceName()
dvander@1488
    39
{
dvander@1488
    40
	return SMINTERFACE_TOPMENUS_NAME;
dvander@1488
    41
}
dvander@1488
    42
dvander@1488
    43
unsigned int TopMenuManager::GetInterfaceVersion()
dvander@1488
    44
{
dvander@1488
    45
	return SMINTERFACE_TOPMENUS_VERSION;
dvander@1488
    46
}
dvander@1488
    47
dvander@1488
    48
ITopMenu *TopMenuManager::CreateTopMenu(ITopMenuObjectCallbacks *callbacks)
dvander@1488
    49
{
dvander@1488
    50
	TopMenu *pMenu = new TopMenu(callbacks);
dvander@1488
    51
dvander@1488
    52
	m_TopMenus.push_back(pMenu);
dvander@1488
    53
dvander@1488
    54
	return pMenu;
dvander@1488
    55
}
dvander@1488
    56
dvander@1488
    57
void TopMenuManager::OnClientConnected(int client)
dvander@1488
    58
{
dvander@1488
    59
	List<TopMenu *>::iterator iter;
dvander@1488
    60
dvander@1488
    61
	for (iter = m_TopMenus.begin(); iter != m_TopMenus.end(); iter++)
dvander@1488
    62
	{
dvander@1488
    63
		(*iter)->OnClientConnected(client);
dvander@1488
    64
	}
dvander@1488
    65
}
dvander@1488
    66
dvander@1488
    67
void TopMenuManager::OnClientDisconnected(int client)
dvander@1488
    68
{
dvander@1488
    69
	List<TopMenu *>::iterator iter;
dvander@1488
    70
dvander@1488
    71
	for (iter = m_TopMenus.begin(); iter != m_TopMenus.end(); iter++)
dvander@1488
    72
	{
dvander@1488
    73
		(*iter)->OnClientDisconnected(client);
dvander@1488
    74
	}
dvander@1488
    75
}
dvander@1488
    76
dvander@1488
    77
void TopMenuManager::OnServerActivated(int max_clients)
dvander@1488
    78
{
dvander@1488
    79
	if (is_server_activated)
dvander@1488
    80
	{
dvander@1488
    81
		return;
dvander@1488
    82
	}
dvander@1488
    83
dvander@1488
    84
	List<TopMenu *>::iterator iter;
dvander@1488
    85
dvander@1488
    86
	for (iter = m_TopMenus.begin(); iter != m_TopMenus.end(); iter++)
dvander@1488
    87
	{
dvander@1488
    88
		(*iter)->OnServerActivated(max_clients);
dvander@1488
    89
	}
dvander@1488
    90
dvander@1488
    91
	is_server_activated = true;
dvander@1488
    92
}
dvander@1488
    93
dvander@1495
    94
void TopMenuManager::OnPluginUnloaded(IPlugin *plugin)
dvander@1495
    95
{
dvander@1495
    96
	List<TopMenu *>::iterator iter = m_TopMenus.begin();
dvander@1495
    97
dvander@1495
    98
	while (iter != m_TopMenus.end())
dvander@1495
    99
	{
dvander@1495
   100
		if ((*iter)->OnIdentityRemoval(plugin->GetIdentity()))
dvander@1495
   101
		{
dvander@1495
   102
			iter++;
dvander@1495
   103
		}
dvander@1495
   104
		else
dvander@1495
   105
		{
dvander@1495
   106
			delete (*iter);
dvander@1495
   107
			iter = m_TopMenus.erase(iter);
dvander@1495
   108
		}
dvander@1495
   109
	}
dvander@1495
   110
}
dvander@1495
   111
dvander@1488
   112
void TopMenuManager::DestroyTopMenu(ITopMenu *topmenu)
dvander@1488
   113
{
dvander@1488
   114
	TopMenu *pMenu = (TopMenu *)topmenu;
dvander@1488
   115
dvander@1488
   116
	m_TopMenus.remove(pMenu);
dvander@1488
   117
dvander@1488
   118
	delete pMenu;
dvander@1488
   119
}
pred@2323
   120
pred@2323
   121
void TopMenuManager::OnMaxPlayersChanged( int newvalue )
pred@2323
   122
{
pred@2323
   123
	List<TopMenu *>::iterator iter;
pred@2323
   124
pred@2323
   125
	for (iter = m_TopMenus.begin(); iter != m_TopMenus.end(); iter++)
pred@2323
   126
	{
pred@2323
   127
		(*iter)->OnMaxPlayersChanged(newvalue);
pred@2323
   128
	}
pred@2323
   129
}