plugins/include/topmenus.inc
author David Anderson <dvander@alliedmods.net>
Fri Oct 19 08:51:05 2007 +0000 (2007-10-19)
changeset 1611 1bd18b7530eb
parent 1572 adbc41dc9cd0
child 1634 241bf59d8f4d
permissions -rw-r--r--
- added GetClientAimTarget()
- fixed a bug where GetClientEyeAngles() was basically bogus
dvander@1495
     1
/**
dvander@1495
     2
 * vim: set ts=4 :
dvander@1495
     3
 * =============================================================================
dvander@1495
     4
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@1495
     5
 * =============================================================================
dvander@1495
     6
 *
dvander@1495
     7
 * This file is part of the SourceMod/SourcePawn SDK.
dvander@1495
     8
 *
dvander@1495
     9
 * This program is free software; you can redistribute it and/or modify it under
dvander@1495
    10
 * the terms of the GNU General Public License, version 3.0, as published by the
dvander@1495
    11
 * Free Software Foundation.
dvander@1495
    12
 * 
dvander@1495
    13
 * This program is distributed in the hope that it will be useful, but WITHOUT
dvander@1495
    14
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
dvander@1495
    15
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
dvander@1495
    16
 * details.
dvander@1495
    17
 *
dvander@1495
    18
 * You should have received a copy of the GNU General Public License along with
dvander@1495
    19
 * this program.  If not, see <http://www.gnu.org/licenses/>.
dvander@1495
    20
 *
dvander@1495
    21
 * As a special exception, AlliedModders LLC gives you permission to link the
dvander@1495
    22
 * code of this program (as well as its derivative works) to "Half-Life 2," the
dvander@1495
    23
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
dvander@1495
    24
 * by the Valve Corporation.  You must obey the GNU General Public License in
dvander@1495
    25
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
dvander@1495
    26
 * this exception to all derivative works.  AlliedModders LLC defines further
dvander@1495
    27
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
dvander@1495
    28
 * or <http://www.sourcemod.net/license.php>.
dvander@1495
    29
 *
dvander@1495
    30
 * Version: $Id$
dvander@1495
    31
 */
dvander@1495
    32
 
dvander@1495
    33
#if defined _topmenus_included
dvander@1495
    34
 #endinput
dvander@1495
    35
#endif
dvander@1495
    36
#define _topmenus_included
dvander@1495
    37
dvander@1495
    38
#include <menus>
dvander@1495
    39
dvander@1495
    40
/**
dvander@1495
    41
 * Actions a top menu will take on an object.
dvander@1495
    42
 */
dvander@1495
    43
enum TopMenuAction
dvander@1495
    44
{
dvander@1495
    45
	/**
dvander@1495
    46
	 * An option is being drawn for a menu (or for sorting purposes).
dvander@1495
    47
	 *
dvander@1526
    48
	 * INPUT : TopMenu Handle, object ID, client index.
dvander@1495
    49
	 * OUTPUT: Buffer for rendering, maxlength of buffer.
dvander@1495
    50
	 */
dvander@1525
    51
	TopMenuAction_DisplayOption = 0,
dvander@1495
    52
	
dvander@1495
    53
	/**
dvander@1495
    54
	 * The title of a menu is being drawn for a given object.
dvander@1495
    55
	 *
dvander@1496
    56
	 * Note: The Object ID will be INVALID_TOPMENUOBJECT if drawing the 
dvander@1496
    57
	 * root title.  Otherwise, the Object ID is a category.
dvander@1495
    58
	 *
dvander@1526
    59
	 * INPUT : TopMenu Handle, object ID, client index.
dvander@1495
    60
	 * OUTPUT: Buffer for rendering, maxlength of buffer.
dvander@1495
    61
	 */
dvander@1525
    62
	TopMenuAction_DisplayTitle = 1,
dvander@1495
    63
	
dvander@1495
    64
	/**
dvander@1495
    65
	 * A menu option has been selected.
dvander@1495
    66
	 *
dvander@1496
    67
	 * The Object ID will always be an item (not a category).
dvander@1496
    68
	 *
dvander@1526
    69
	 * INPUT : TopMenu Handle, object ID, client index.
dvander@1495
    70
	 */
dvander@1495
    71
	TopMenuAction_SelectOption = 2,
dvander@1526
    72
dvander@1526
    73
	/**
dvander@1526
    74
	 * A menu option is being drawn and its flags can be overridden.
dvander@1526
    75
	 *
dvander@1526
    76
	 * INPUT : TopMenu Handle, object ID, client index.
dvander@1526
    77
	 * OUTPUT: The first byte of the 'buffer' string should be set 
dvander@1526
    78
	 *		   to the desired flags.  By default, it will contain
dvander@1526
    79
	 *		   ITEMDRAW_DEFAULT.
dvander@1526
    80
	 */
dvander@1526
    81
	 TopMenuAction_DrawOption = 3,
dvander@1495
    82
};
dvander@1495
    83
dvander@1495
    84
/**
dvander@1495
    85
 * Top menu object types.
dvander@1495
    86
 */
dvander@1495
    87
enum TopMenuObjectType
dvander@1495
    88
{
dvander@1495
    89
	TopMenuObject_Category = 0,			/**< Category (sub-menu branching from root) */
dvander@1495
    90
	TopMenuObject_Item = 1				/**< Item on a sub-menu */
dvander@1495
    91
};
dvander@1495
    92
dvander@1495
    93
/**
dvander@1496
    94
 * Top menu starting positions for display.
dvander@1496
    95
 */
dvander@1496
    96
enum TopMenuPosition
dvander@1496
    97
{
dvander@1496
    98
	TopMenuPosition_Start = 0,			/**< Start/root of the menu */
dvander@1496
    99
	TopMenuPosition_LastRoot = 1,		/**< Last position in the root menu */
dvander@1496
   100
	TopMenuPosition_LastCategory = 3,	/**< Last position in their last category */
dvander@1496
   101
};
dvander@1496
   102
dvander@1496
   103
/**
dvander@1495
   104
 * Top menu object tag for type checking.
dvander@1495
   105
 */
dvander@1495
   106
enum TopMenuObject
dvander@1495
   107
{
dvander@1495
   108
	INVALID_TOPMENUOBJECT = 0,
dvander@1495
   109
}
dvander@1495
   110
dvander@1495
   111
/**
dvander@1495
   112
 * TopMenu callback prototype.
dvander@1495
   113
 *
dvander@1495
   114
 * @param topmenu			Handle to the TopMenu.
dvander@1495
   115
 * @param action			TopMenuAction being performed.
dvander@1496
   116
 * @param object_id			The object ID (if used).
dvander@1496
   117
 * @param param				Extra parameter (if used).
dvander@1496
   118
 * @param buffer			Output buffer (if used).
dvander@1496
   119
 * @param maxlength			Output buffer (if used).
dvander@1495
   120
 * @noreturn
dvander@1495
   121
 */
dvander@1495
   122
functag TopMenuHandler public(Handle:topmenu, 
dvander@1495
   123
							  TopMenuAction:action,
dvander@1496
   124
							  TopMenuObject:object_id,
dvander@1496
   125
							  param,
dvander@1495
   126
							  String:buffer[],
dvander@1495
   127
							  maxlength);
dvander@1495
   128
dvander@1495
   129
/**
dvander@1495
   130
 * Creates a TopMenu.
dvander@1495
   131
 *
dvander@1495
   132
 * @param handler			Handler to use for drawing the root title.
dvander@1495
   133
 * @return					A new TopMenu Handle, or INVALID_HANDLE on failure.
dvander@1495
   134
 */						  
dvander@1495
   135
native Handle:CreateTopMenu(TopMenuHandler:handler);
dvander@1495
   136
dvander@1495
   137
/**
dvander@1495
   138
 * Re-sorts the items in a TopMenu via a configuration file.
dvander@1495
   139
 *
dvander@1495
   140
 * The format of the configuration file should be a Valve Key-Values 
dvander@1495
   141
 * formatted file that SourceMod can parse.  There should be one root 
dvander@1495
   142
 * section, and one sub-section for each category.  Each sub-section's 
dvander@1495
   143
 * name should match the category name.
dvander@1495
   144
 *
dvander@1495
   145
 * Each sub-section may only contain key/value pairs in the form of:
dvander@1495
   146
 * key: "item"
dvander@1495
   147
 * value: Name of the item as passed to AddToTopMenu().
dvander@1495
   148
 *
dvander@1495
   149
 * The TopMenu will draw items in the order declared in the configuration 
dvander@1495
   150
 * file.  If items do not appear in the configuration file, they are sorted 
dvander@1495
   151
 * per-player based on how the handler function renders for that player.  
dvander@1495
   152
 * These items appear after the configuration sorted items.
dvander@1495
   153
 *
dvander@1495
   154
 * @param topmenu			TopMenu Handle.
dvander@1495
   155
 * @param file				File path.
dvander@1495
   156
 * @param error				Error buffer.
dvander@1495
   157
 * @param maxlength			Maximum size of the error buffer.
dvander@1495
   158
 *							Error buffer will be filled with a 
dvander@1495
   159
 *							zero-terminated string if false is 
dvander@1495
   160
 *							returned.
dvander@1495
   161
 * @return					True on success, false on failure.
dvander@1495
   162
 * @error					Invalid TopMenu Handle.
dvander@1495
   163
 */
dvander@1495
   164
native bool:LoadTopMenuConfig(Handle:topmenu, const String:file[], String:error[], maxlength);
dvander@1495
   165
dvander@1495
   166
/**
dvander@1495
   167
 * Adds an object to a TopMenu.
dvander@1495
   168
 *
dvander@1495
   169
 * @param topmenu			TopMenu Handle.
dvander@1495
   170
 * @param name				Object name (MUST be unique).
dvander@1495
   171
 * @param type				Object type.
dvander@1495
   172
 * @param handler			Handler for object.
dvander@1495
   173
 * @param cmdname			Command name (for access overrides).
dvander@1495
   174
 * @param flags				Default access flags.
dvander@1495
   175
 * @param parent			Parent object ID, or INVALID_TOPMENUOBJECT for none.
dvander@1495
   176
 *							Items must have a category parent.
dvander@1495
   177
 *							Categories must not have a parent.
dvander@1495
   178
 * @return					A new TopMenuObject ID, or INVALID_TOPMENUOBJECT on
dvander@1495
   179
 *							failure.
dvander@1495
   180
 * @error					Invalid TopMenu Handle.
dvander@1495
   181
 */
dvander@1495
   182
native TopMenuObject:AddToTopMenu(Handle:topmenu,
dvander@1495
   183
								  const String:name[],
dvander@1495
   184
								  TopMenuObjectType:type,
dvander@1495
   185
								  TopMenuHandler:handler,
dvander@1496
   186
								  TopMenuObject:parent,
dvander@1496
   187
								  const String:cmdname[]="",
dvander@1496
   188
								  flags=0);
dvander@1495
   189
dvander@1495
   190
/**
dvander@1495
   191
 * Removes an object from a TopMenu.
dvander@1495
   192
 *
dvander@1495
   193
 * Plugins' objects are automatically removed all TopMenus when the given 
dvander@1495
   194
 * plugin unloads or pauses.  In the case of unpausing, all items are restored.
dvander@1495
   195
 *
dvander@1495
   196
 * @param topmenu			TopMenu Handle.
dvander@1495
   197
 * @param object			TopMenuObject ID.
dvander@1495
   198
 * @noreturn
dvander@1495
   199
 * @error					Invalid TopMenu Handle.
dvander@1495
   200
 */
dvander@1495
   201
native RemoveFromTopMenu(Handle:topmenu, TopMenuObject:object);
dvander@1495
   202
dvander@1495
   203
/**
dvander@1496
   204
 * Displays a TopMenu to a client.
dvander@1496
   205
 *
dvander@1496
   206
 * @param topmenu			TopMenu Handle.
dvander@1496
   207
 * @param client			Client index.
dvander@1496
   208
 * @param position			Position to display from.
dvander@1496
   209
 * @return					True on success, false on failure.
dvander@1496
   210
 * @error					Invalid TopMenu Handle or client not in game.
dvander@1496
   211
 */
dvander@1514
   212
native bool:DisplayTopMenu(Handle:topmenu, client, TopMenuPosition:position);
dvander@1496
   213
dvander@1496
   214
/**
dvander@1495
   215
 * Finds a category's object ID in a TopMenu.
dvander@1495
   216
 *
dvander@1495
   217
 * @param topmenu			TopMenu Handle.
dvander@1495
   218
 * @param name				Object's unique name.
dvander@1495
   219
 * @return					TopMenuObject ID on success, or 
dvander@1495
   220
 *							INVALID_TOPMENUOBJECT on failure.
dvander@1495
   221
 * @error					Invalid TopMenu Handle.
dvander@1495
   222
 */
dvander@1495
   223
native TopMenuObject:FindTopMenuCategory(Handle:topmenu, const String:name[]);
dvander@1496
   224
dvander@1496
   225
/**
dvander@1496
   226
 * Do not edit below this line!
dvander@1496
   227
 */
dvander@1572
   228
public Extension:__ext_topmenus = 
dvander@1496
   229
{
dvander@1496
   230
	name = "TopMenus",
dvander@1496
   231
	file = "topmenus.ext",
dvander@1496
   232
#if defined AUTOLOAD_EXTENSIONS
dvander@1496
   233
	autoload = 1,
dvander@1496
   234
#else
dvander@1496
   235
	autoload = 0,
dvander@1496
   236
#endif
dvander@1496
   237
#if defined REQUIRE_EXTENSIONS
dvander@1496
   238
	required = 1,
dvander@1496
   239
#else
dvander@1496
   240
	required = 0,
dvander@1496
   241
#endif
dvander@1496
   242
};
dvander@1496
   243
dvander@1572
   244
#if !defined REQUIRE_EXTENSIONS
dvander@1572
   245
public __ext_topmenus_SetNTVOptional()
dvander@1572
   246
{
dvander@1572
   247
	MarkNativeAsOptional("CreateTopMenu");
dvander@1572
   248
	MarkNativeAsOptional("LoadTopMenuConfig");
dvander@1572
   249
	MarkNativeAsOptional("AddToTopMenu");
dvander@1572
   250
	MarkNativeAsOptional("RemoveFromTopMenu");
dvander@1572
   251
	MarkNativeAsOptional("DisplayTopMenu");
dvander@1572
   252
	MarkNativeAsOptional("FindTopMenuCategory");
dvander@1572
   253
}
dvander@1572
   254
#endif