//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============
//
// Purpose: 
//
// $NoKeywords: $
//=============================================================================

// Author: Michael S. Booth (mike@turtlerockstudios.com), 2003
// Author: Matthew D. Campbell (matt@turtlerockstudios.com), 2003

#ifndef GAME_EVENT_H
#define GAME_EVENT_H

//
// NOTE: This enum is used by both the client and server, so only add events to the
// end of the list to remain maximally compatible with existing clients.
//

// Define some event types used in various places (CZ bot code, career mode, and tutor, initially)
enum GameEventType
{
	EVENT_INVALID = 0,

	EVENT_WEAPON_FIRED,
	EVENT_WEAPON_FIRED_ON_EMPTY,
	EVENT_WEAPON_RELOADED,
	EVENT_HE_GRENADE_EXPLODED,
	EVENT_FLASHBANG_GRENADE_EXPLODED,
	EVENT_SMOKE_GRENADE_EXPLODED,
	EVENT_GRENADE_BOUNCED,
	EVENT_BEING_SHOT_AT, ///< this will only trigger for the local player in single player games.
	EVENT_PLAYER_BLINDED_BY_FLASHBANG,

	EVENT_PLAYER_FOOTSTEP,
	EVENT_PLAYER_JUMPED,
	EVENT_PLAYER_DIED,
	EVENT_PLAYER_LANDED_FROM_HEIGHT,
	EVENT_PLAYER_TOOK_DAMAGE,

	EVENT_HOSTAGE_DAMAGED,
	EVENT_HOSTAGE_KILLED,

	EVENT_DOOR,
	EVENT_BREAK_GLASS,
	EVENT_BREAK_WOOD,
	EVENT_BREAK_METAL,
	EVENT_BREAK_FLESH,
	EVENT_BREAK_CONCRETE,

	EVENT_BOMB_PLANTED,
	EVENT_BOMB_DROPPED,
	EVENT_BOMB_PICKED_UP,
	EVENT_BOMB_BEEP,										///< timer beep when counting down to detonation
	EVENT_BOMB_DEFUSING,
	EVENT_BOMB_DEFUSE_ABORTED,
	EVENT_BOMB_DEFUSED,
	EVENT_BOMB_EXPLODED,

	EVENT_HOSTAGE_USED,
	EVENT_HOSTAGE_RESCUED,
	EVENT_ALL_HOSTAGES_RESCUED,

	EVENT_VIP_ESCAPED,
	EVENT_VIP_ASSASSINATED,

	EVENT_TERRORISTS_WIN,
	EVENT_CTS_WIN,
	EVENT_ROUND_DRAW,
	EVENT_ROUND_WIN,										///< win/loss relative to the client
	EVENT_ROUND_LOSS,										///< win/loss relative to the client
	EVENT_ROUND_START,
	EVENT_PLAYER_SPAWNED,
	EVENT_CLIENT_CORPSE_SPAWNED,
	EVENT_BUY_TIME_START,
	EVENT_PLAYER_LEFT_BUY_ZONE,					///< triggered by tutor system when the local player leaves the buy zone/buy time expires for the first time.
	EVENT_DEATH_CAMERA_START,
	EVENT_KILL_ALL,											///< everybody on one team has been killed
	EVENT_ROUND_TIME,

	// client-relative events for career mode: has the player killed with certain weapons, etc?

	EVENT_DIE,
	EVENT_KILL,												///< someone has been killed
	EVENT_HEADSHOT,											///< subset of EVENT_KILL
	EVENT_KILL_FLASHBANGED,

	// Tutor Buy menu events
	EVENT_TUTOR_BUY_MENU_OPENNED,
	EVENT_TUTOR_AUTOBUY,
	EVENT_PLAYER_BOUGHT_SOMETHING,
	EVENT_TUTOR_NOT_BUYING_ANYTHING,
	EVENT_TUTOR_NEED_TO_BUY_PRIMARY_WEAPON,
	EVENT_TUTOR_NEED_TO_BUY_PRIMARY_AMMO,
	EVENT_TUTOR_NEED_TO_BUY_SECONDARY_AMMO,
	EVENT_TUTOR_NEED_TO_BUY_ARMOR,
	EVENT_TUTOR_NEED_TO_BUY_DEFUSE_KIT,
	EVENT_TUTOR_NEED_TO_BUY_GRENADE,

	EVENT_CAREER_TASK_DONE,

	// radio messages (these must be kept in sync with actual radio) -------------------------------------

	EVENT_START_RADIO_1,							///< radio messages between this and RADIO_2 and part of Radio1()

	EVENT_RADIO_COVER_ME,
	EVENT_RADIO_YOU_TAKE_THE_POINT,
	EVENT_RADIO_HOLD_THIS_POSITION,
	EVENT_RADIO_REGROUP_TEAM,
	EVENT_RADIO_FOLLOW_ME,
	EVENT_RADIO_TAKING_FIRE,

	EVENT_START_RADIO_2,							///< radio messages between this and RADIO_3 are part of Radio2()

	EVENT_RADIO_GO_GO_GO,
	EVENT_RADIO_TEAM_FALL_BACK,
	EVENT_RADIO_STICK_TOGETHER_TEAM,
	EVENT_RADIO_GET_IN_POSITION_AND_WAIT,
	EVENT_RADIO_STORM_THE_FRONT,
	EVENT_RADIO_REPORT_IN_TEAM,

	EVENT_START_RADIO_3,							///< radio messages above this are part of Radio3()

	EVENT_RADIO_AFFIRMATIVE,
	EVENT_RADIO_ENEMY_SPOTTED,
	EVENT_RADIO_NEED_BACKUP,
	EVENT_RADIO_SECTOR_CLEAR,
	EVENT_RADIO_IN_POSITION,
	EVENT_RADIO_REPORTING_IN,
	EVENT_RADIO_GET_OUT_OF_THERE,
	EVENT_RADIO_NEGATIVE,
	EVENT_RADIO_ENEMY_DOWN,

	EVENT_END_RADIO,

	EVENT_NEW_MATCH,								///< sent at the start of a new map/match.
	EVENT_PLAYER_CHANGED_TEAM,						///< sent when a player changes teams.
	EVENT_BULLET_IMPACT,
	EVENT_GAME_COMMENCE,
	EVENT_WEAPON_ZOOMED,

	EVENT_HOSTAGE_CALLED_FOR_HELP,					///< hostage yelled to a CT

	NUM_GAME_EVENTS
};

#ifdef DEFINE_EVENT_NAMES
// NOTE: These must be kept in sync with the GameEventType enum
const char *GameEventName[ NUM_GAME_EVENTS+1 ] =
{
	"EVENT_INVALID",

	"EVENT_WEAPON_FIRED",
	"EVENT_WEAPON_FIRED_ON_EMPTY",
	"EVENT_WEAPON_RELOADED",
	"EVENT_HE_GRENADE_EXPLODED",
	"EVENT_FLASHBANG_GRENADE_EXPLODED",
	"EVENT_SMOKE_GRENADE_EXPLODED",
	"EVENT_GRENADE_BOUNCED",
	"EVENT_BEING_SHOT_AT",
	"EVENT_PLAYER_BLINDED_BY_FLASHBANG",

	"EVENT_PLAYER_FOOTSTEP",
	"EVENT_PLAYER_JUMPED",
	"EVENT_PLAYER_DIED",
	"EVENT_PLAYER_LANDED_FROM_HEIGHT",
	"EVENT_PLAYER_TOOK_DAMAGE",

	"EVENT_HOSTAGE_DAMAGED",
	"EVENT_HOSTAGE_KILLED",

	"EVENT_DOOR",
	"EVENT_BREAK_GLASS",
	"EVENT_BREAK_WOOD",
	"EVENT_BREAK_METAL",
	"EVENT_BREAK_FLESH",
	"EVENT_BREAK_CONCRETE",

	"EVENT_BOMB_PLANTED",
	"EVENT_BOMB_DROPPED",
	"EVENT_BOMB_PICKED_UP",
	"EVENT_BOMB_BEEP",
	"EVENT_BOMB_DEFUSING",
	"EVENT_BOMB_DEFUSE_ABORTED",
	"EVENT_BOMB_DEFUSED",
	"EVENT_BOMB_EXPLODED",

	"EVENT_HOSTAGE_USED",
	"EVENT_HOSTAGE_RESCUED",

	"EVENT_ALL_HOSTAGES_RESCUED",

	"EVENT_VIP_ESCAPED",
	"EVENT_VIP_ASSASSINATED",

	"EVENT_TERRORISTS_WIN",
	"EVENT_CTS_WIN",
	"EVENT_ROUND_DRAW",

	"EVENT_ROUND_WIN",
	"EVENT_ROUND_LOSS",
	"EVENT_ROUND_START",
	"EVENT_PLAYER_SPAWNED",
	"EVENT_CLIENT_CORPSE_SPAWNED",
	"EVENT_BUY_TIME_START",
	"EVENT_PLAYER_LEFT_BUY_ZONE",
	"EVENT_DEATH_CAMERA_START",
	"EVENT_KILL_ALL",
	"EVENT_ROUND_TIME",

	// client-relative events for career mode: has the player killed with certain weapons, etc?

	"EVENT_DIE",
	"EVENT_KILL",
	"EVENT_HEADSHOT",
	"EVENT_KILL_FLASHBANGED",

	// Tutor Buy menu events
	"EVENT_TUTOR_BUY_MENU_OPENNED",
	"EVENT_TUTOR_AUTOBUY",
	"EVENT_PLAYER_BOUGHT_SOMETHING",
	"EVENT_TUTOR_NOT_BUYING_ANYTHING",
	"EVENT_TUTOR_NEED_TO_BUY_PRIMARY_WEAPON",
	"EVENT_TUTOR_NEED_TO_BUY_PRIMARY_AMMO",
	"EVENT_TUTOR_NEED_TO_BUY_SECONDARY_AMMO",
	"EVENT_TUTOR_NEED_TO_BUY_ARMOR",
	"EVENT_TUTOR_NEED_TO_BUY_DEFUSE_KIT",
	"EVENT_TUTOR_NEED_TO_BUY_GRENADE",

	"EVENT_CAREER_TASK_DONE",

	// radio messages (these must be kept in sync with actual radio) -------------------------------------

	"EVENT_START_RADIO_1",

	"EVENT_RADIO_COVER_ME",
	"EVENT_RADIO_YOU_TAKE_THE_POINT",
	"EVENT_RADIO_HOLD_THIS_POSITION",
	"EVENT_RADIO_REGROUP_TEAM",
	"EVENT_RADIO_FOLLOW_ME",
	"EVENT_RADIO_TAKING_FIRE",

	"EVENT_START_RADIO_2",

	"EVENT_RADIO_GO_GO_GO",
	"EVENT_RADIO_TEAM_FALL_BACK",
	"EVENT_RADIO_STICK_TOGETHER_TEAM",
	"EVENT_RADIO_GET_IN_POSITION_AND_WAIT",
	"EVENT_RADIO_STORM_THE_FRONT",
	"EVENT_RADIO_REPORT_IN_TEAM",

	"EVENT_START_RADIO_3",

	"EVENT_RADIO_AFFIRMATIVE",
	"EVENT_RADIO_ENEMY_SPOTTED",
	"EVENT_RADIO_NEED_BACKUP",
	"EVENT_RADIO_SECTOR_CLEAR",
	"EVENT_RADIO_IN_POSITION",
	"EVENT_RADIO_REPORTING_IN",
	"EVENT_RADIO_GET_OUT_OF_THERE",
	"EVENT_RADIO_NEGATIVE",
	"EVENT_RADIO_ENEMY_DOWN",

	"EVENT_END_RADIO",

	"EVENT_NEW_MATCH",
	"EVENT_PLAYER_CHANGED_TEAM",
	"EVENT_BULLET_IMPACT",
	"EVENT_GAME_COMMENCE",
	"EVENT_WEAPON_ZOOMED",

	"EVENT_HOSTAGE_CALLED_FOR_HELP",

	NULL		// must be NULL-terminated
};
#else
extern const char *GameEventName[ NUM_GAME_EVENTS ];
#endif

/// convert name to GameEventType
extern GameEventType NameToGameEvent( const char *name );

#endif // GAME_EVENT_H