//////////////////////////////////////////////////////////////////////////////
//
// AVP_Platform_Font_System.h
//
// Copyright (c) 2007 Rebellion. All rights reserved.
//
//////////////////////////////////////////////////////////////////////////////

// I N C L U D E S ///////////////////////////////////////////////////////////

#include "Core/Asura.h"

#include "Actor/AVP_Actor_InputHandler.h"

//////////////////////////////////////////////////////////////////////////////
//
// 
//
//////////////////////////////////////////////////////////////////////////////

class AVP_Buttons 
{
public:
	enum AVP_FONTSYTEM_SPECIALCHARS
	{
		///////////////////////////////////////////////////////////////////////////

		AVP_FONTSYSTEM_START_OF_SPECIAL_CHARS = 0xE800,

		// CAH, NOTES:
		// buttons are not named with actions because mappings can change, 
		// buttons are not named with button names because the names are different for all platforms. 
		// there must be an entry for every possible button... so the number of mappable keys on the PC keyboard and mouse. 
		// refer to "enum ASURA_KEYID" in "Core/Asura_UserInput.h"
		AVP_FONTSYSTEM_SPECIALCHAR_NA = AVP_FONTSYSTEM_START_OF_SPECIAL_CHARS,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_1,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_2,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_3,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_4,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_5,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_6,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_7,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_8,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_9,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_10,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_11,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_12,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_13,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_14,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_15,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_16,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_17,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_18,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_19,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_20,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_21,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_22,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_23,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_24,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_25,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_26,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_27,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_28,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_29,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_30,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_31,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_32,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_33,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_34,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_35,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_36,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_37,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_38,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_39,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_40,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_41,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_42,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_43,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_44,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_45,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_46,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_47,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_48,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_49,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_50,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_51,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_52,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_53,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_54,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_55,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_56,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_57,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_58,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_59,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_60,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_61,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_62,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_63,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_64,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_65,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_66,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_67,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_68,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_69,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_70,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_71,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_72,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_73,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_74,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_75,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_76,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_77,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_78,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_79,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_80,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_81,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_82,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_83,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_84,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_85,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_86,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_87,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_88,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_89,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_90,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_91,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_92,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_93,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_94,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_95,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_96,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_97,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_98,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_99,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_100,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_101,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_102,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_103,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_104,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_105,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_106,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_107,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_108,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_109,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_110,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_111,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_112,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_113,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_114,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_115,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_116,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_117,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_118,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_119,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_120,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_121,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_122,
		AVP_FONTSYSTEM_SPECIALCHAR_BUTTON_123,

		// CAH, NOTES:
		// axis are not named with actions because mappings can change, 
		// refer to "enum ASURA_AXIS_ID" in "Core/Asura_UserInput.h"
		AVP_FONTSYSTEM_SPECIALCHAR_AXIS_LSTICK_H,
		AVP_FONTSYSTEM_SPECIALCHAR_AXIS_LSTICK_V,
		AVP_FONTSYSTEM_SPECIALCHAR_AXIS_RSTICK_H,
		AVP_FONTSYSTEM_SPECIALCHAR_AXIS_RSTICK_V,
		AVP_FONTSYSTEM_SPECIALCHAR_AXIS_Z,
		AVP_FONTSYSTEM_SPECIALCHAR_AXIS_ROTATE_X,
		AVP_FONTSYSTEM_SPECIALCHAR_AXIS_ROTATE_Y,
		AVP_FONTSYSTEM_SPECIALCHAR_AXIS_ROTATE_Z,
		AVP_FONTSYSTEM_SPECIALCHAR_AXIS_MOUSE_H,	
		AVP_FONTSYSTEM_SPECIALCHAR_AXIS_MOUSE_V,

		AVP_FONTSYSTEM_END_OF_SPECIAL_CHARS,

		///////////////////////////////////////////////////////////////////////////

		AVP_FONTSYSTEM_START_OF_SPECIAL_CHAR_MAPPINGS = 0xE900,

		// ACTOR mappings -------------------------------------------------------------------- 
		// CAH taken from "Actor/AVP_Actor_InputHandler.h" - enum ActorMappings
		// !!! Keep in same order and relative numerical value as entries in 'enum ActorMappings'
		// !!! The Enum values of these entires are used in the multi-langual string database for image lookups.
		AVP_FONTSYSTEM_START_OF_ACTOR_SPECIAL_CHAR_MAPPINGS = AVP_FONTSYSTEM_START_OF_SPECIAL_CHAR_MAPPINGS,

		AVP_FONTSYSTEM_MAPPING_FOR_LOOK_LEFT_RIGHT = AVP_FONTSYSTEM_START_OF_ACTOR_SPECIAL_CHAR_MAPPINGS,
		AVP_FONTSYSTEM_MAPPING_FOR_LOOK_UP_DOWN,
		AVP_FONTSYSTEM_MAPPING_FOR_LOOK_MOUSE_LEFT_RIGHT,
		AVP_FONTSYSTEM_MAPPING_FOR_LOOK_MOUSE_UP_DOWN,
		AVP_FONTSYSTEM_MAPPING_FOR_FORWARDS_BACKWARDS,
		AVP_FONTSYSTEM_MAPPING_FOR_STRAFE_LEFT_RIGHT,
		AVP_FONTSYSTEM_MAPPING_FOR_ZOOM_IN,
		AVP_FONTSYSTEM_MAPPING_FOR_ZOOM_OUT,
		AVP_FONTSYSTEM_MAPPING_FOR_ZOOM_HOLD,
		AVP_FONTSYSTEM_MAPPING_FOR_INTERACT,
		AVP_FONTSYSTEM_MAPPING_FOR_MENU_TOGGLE,
		AVP_FONTSYSTEM_MAPPING_FOR_OBJECTIVES_TOGGLE,
		AVP_FONTSYSTEM_MAPPING_FOR_FREEZE_TIME_TOGGLE,

#if defined(ASURA_DEBUG_VARIABLE_SYSTEM)
		AVP_FONTSYSTEM_MAPPING_FOR_DVS_TOGGLE,
#else
		AVP_FONTSYSTEM_MAPPING_FOR_SCOREBOARD,
#endif	// defined(ASURA_DEBUG_VARIABLE_SYSTEM)

		AVP_FONTSYSTEM_MAPPING_FOR_MENU_UP,
		AVP_FONTSYSTEM_MAPPING_FOR_MENU_DOWN,
		AVP_FONTSYSTEM_MAPPING_FOR_MENU_SELECT,
		AVP_FONTSYSTEM_MAPPING_FOR_SKIP_CUTSCENE,
		AVP_FONTSYSTEM_MAPPING_FOR_SELECT_LAST_WEAPON,
		AVP_FONTSYSTEM_MAPPING_FOR_SELECT_NEXT_WEAPON,
		AVP_FONTSYSTEM_MAPPING_FOR_SELECT_PREVIOUS_WEAPON,
		AVP_FONTSYSTEM_MAPPING_FOR_VISION_SELECTOR_HOLD,
		AVP_FONTSYSTEM_MAPPING_FOR_VISION_SELECTOR_NEXT,
		AVP_FONTSYSTEM_MAPPING_FOR_VISION_SELECTOR_PREV,
		AVP_FONTSYSTEM_MAPPING_FOR_VISION_SELECTOR_SLOT_UP,
		AVP_FONTSYSTEM_MAPPING_FOR_VISION_SELECTOR_SLOT_DOWN,
		AVP_FONTSYSTEM_MAPPING_FOR_VISION_SELECTOR_SLOT_LEFT,
		AVP_FONTSYSTEM_MAPPING_FOR_VISION_SELECTOR_SLOT_RIGHT,
		AVP_FONTSYSTEM_MAPPING_FOR_WEAPON_SELECTOR_BEGIN,
		AVP_FONTSYSTEM_MAPPING_FOR_WEAPON_SELECTOR_END,
		AVP_FONTSYSTEM_MAPPING_FOR_WEAPON_SELECTOR_PREV,
		AVP_FONTSYSTEM_MAPPING_FOR_WEAPON_SELECTOR_NEXT,
		AVP_FONTSYSTEM_MAPPING_FOR_WEAPON_SELECTOR_HOLD,
		AVP_FONTSYSTEM_MAPPING_FOR_WEAPON_SELECTOR_SLOT_UP,
		AVP_FONTSYSTEM_MAPPING_FOR_WEAPON_SELECTOR_SLOT_UP_RIGHT,
		AVP_FONTSYSTEM_MAPPING_FOR_WEAPON_SELECTOR_SLOT_RIGHT,
		AVP_FONTSYSTEM_MAPPING_FOR_WEAPON_SELECTOR_SLOT_DOWN_RIGHT,
		AVP_FONTSYSTEM_MAPPING_FOR_WEAPON_SELECTOR_SLOT_DOWN,
		AVP_FONTSYSTEM_MAPPING_FOR_WEAPON_SELECTOR_SLOT_DOWN_LEFT,
		AVP_FONTSYSTEM_MAPPING_FOR_WEAPON_SELECTOR_SLOT_LEFT,
		AVP_FONTSYSTEM_MAPPING_FOR_WEAPON_SELECTOR_SLOT_UP_LEFT,

		AVP_FONTSYSTEM_END_OF_ACTOR_SPECIAL_CHAR_MAPPINGS,

		// VERTEBRATE mappings --------------------------------------------------------------- 
		// CAH Taken from "Actor/Vertebrates/AVP_Vertebrate_InputHandler.h" - enum VertebrateMappings
		// !!! Keep in same order and relative numerical value as entries in 'enum ActorMappings'
		// !!! The Enum values of these entires are used in the multi-langual string database for image lookups.
		AVP_FONTSYSTEM_START_OF_VERTEBRATE_SPECIAL_CHAR_MAPPINGS = 0xE960,

		AVP_FONTSYSTEM_MAPPING_FOR_ATTACK_LEFT = AVP_FONTSYSTEM_START_OF_VERTEBRATE_SPECIAL_CHAR_MAPPINGS,
		AVP_FONTSYSTEM_MAPPING_FOR_ATTACK_RIGHT,
		AVP_FONTSYSTEM_MAPPING_FOR_PRIMARY_ATTACK_TAP,
		AVP_FONTSYSTEM_MAPPING_FOR_SECONDARY_ATTACK_TAP,
		AVP_FONTSYSTEM_MAPPING_FOR_PRIMARY_ATTACK_HELD,
		AVP_FONTSYSTEM_MAPPING_FOR_SECONDARY_ATTACK_HELD,
		AVP_FONTSYSTEM_MAPPING_FOR_PRIMARY_ATTACK_RELEASE,
		AVP_FONTSYSTEM_MAPPING_FOR_SECONDARY_ATTACK_RELEASE,
		AVP_FONTSYSTEM_MAPPING_FOR_SLOW,
		AVP_FONTSYSTEM_MAPPING_FOR_FAST,
		AVP_FONTSYSTEM_MAPPING_FOR_STANCE_TOGGLE,
		AVP_FONTSYSTEM_MAPPING_FOR_GRAPPLE_DODGE,
		AVP_FONTSYSTEM_MAPPING_FOR_GRAPPLE_INPUT,
		AVP_FONTSYSTEM_MAPPING_FOR_FOCUS_HELD,
		AVP_FONTSYSTEM_MAPPING_FOR_FOCUS_TOGGLE,
		AVP_FONTSYSTEM_MAPPING_FOR_MELEE,
		AVP_FONTSYSTEM_MAPPING_FOR_COUNTER,
		AVP_FONTSYSTEM_MAPPING_FOR_BLOCK,
		AVP_FONTSYSTEM_MAPPING_FOR_JUMP,
		AVP_FONTSYSTEM_MAPPING_FOR_HEALTH_REGAIN,
		AVP_FONTSYSTEM_MAPPING_FOR_RELOAD,

		AVP_FONTSYSTEM_END_OF_VERTEBRATE_SPECIAL_CHAR_MAPPINGS,

		// ALIEN SPECIFIC MAPPINGS -----------------------------------------------------------
		AVP_FONTSYSTEM_START_OF_ALIEN_SPECIAL_CHAR_MAPPINGS = 0xE9A0,

		AVP_FONTSYSTEM_MAPPING_FOR_TAIL_ATTACK = AVP_FONTSYSTEM_START_OF_ALIEN_SPECIAL_CHAR_MAPPINGS,
		AVP_FONTSYSTEM_MAPPING_FOR_PET_FACEHUGGER_CONTROL,
		AVP_FONTSYSTEM_MAPPING_FOR_CREATE_DISTRACTION,

		AVP_FONTSYSTEM_END_OF_ALIEN_SPECIAL_CHAR_MAPPINGS,

		// HUMAN SPECIFIC MAPPINGS -----------------------------------------------------------
		AVP_FONTSYSTEM_START_OF_HUMAN_SPECIAL_CHAR_MAPPINGS = 0xE9B0,

		AVP_FONTSYSTEM_MAPPING_FOR_TORCH_TOGGLE = AVP_FONTSYSTEM_START_OF_HUMAN_SPECIAL_CHAR_MAPPINGS,
		AVP_FONTSYSTEM_MAPPING_FOR_FLARE,
		AVP_FONTSYSTEM_MAPPING_FOR_AIM_DOWN_SIGHTS,

		AVP_FONTSYSTEM_END_OF_HUMAN_SPECIAL_CHAR_MAPPINGS,

		// PREDATOR SPECIFIC MAPPINGS --------------------------------------------------------
		AVP_FONTSYSTEM_START_OF_PREDATOR_SPECIAL_CHAR_MAPPINGS = 0xE9C0,

		AVP_FONTSYSTEM_MAPPING_FOR_CLOAK = AVP_FONTSYSTEM_START_OF_PREDATOR_SPECIAL_CHAR_MAPPINGS,
		AVP_FONTSYSTEM_MAPPING_FOR_RECON_TOGGLE,

		AVP_FONTSYSTEM_END_OF_PREDATOR_SPECIAL_CHAR_MAPPINGS,

		AVP_FONTSYSTEM_END_OF_SPECIAL_CHAR_MAPPINGS = AVP_FONTSYSTEM_END_OF_PREDATOR_SPECIAL_CHAR_MAPPINGS,

		///////////////////////////////////////////////////////////////////////////

		AVP_FONTSYSTEM_SPECIALCHAR_HARDSPACE = 0xE9FF,	// special case for the hard space (not included in standard tiles)

		///////////////////////////////////////////////////////////////////////////

		AVP_FONTSYSTEM_NUM_SPECIAL_CHARS = AVP_FONTSYSTEM_END_OF_SPECIAL_CHARS - AVP_FONTSYSTEM_START_OF_SPECIAL_CHARS,

		///////////////////////////////////////////////////////////////////////////
	};

	static Asura_Hash_ID s_auSpecialCharTiles[AVP_FONTSYSTEM_NUM_SPECIAL_CHARS];

	static void Platform_Initialise(void);
};

//////////////////////////////////////////////////////////////////////////////
//
// 
//
//////////////////////////////////////////////////////////////////////////////
