gesturesmenu.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711
  1. enum GestureCategories
  2. {
  3. CATEGORIES, //special category selection
  4. CATEGORY_1,
  5. CATEGORY_2,
  6. CATEGORY_3,
  7. CATEGORY_4,
  8. CATEGORY_5,
  9. CONSOLE_GESTURES
  10. }
  11. class GestureMenuItem
  12. {
  13. protected int m_ID;
  14. protected string m_Name;
  15. protected GestureCategories m_Category;
  16. protected EmoteBase m_EmoteClass;
  17. protected bool m_CanPerformEmote;
  18. //radial menu
  19. protected Widget m_RadialMenuSelector;
  20. protected Widget m_RadialMenuItemCard;
  21. void GestureMenuItem(int id, string name, GestureCategories category)
  22. {
  23. m_ID = id;
  24. m_Name = name;
  25. m_Category = category;
  26. m_CanPerformEmote = true;
  27. PlayerBase player;
  28. if (Class.CastTo(player,GetGame().GetPlayer()) && category != GestureCategories.CATEGORIES)
  29. {
  30. m_EmoteClass = player.GetEmoteManager().GetNameEmoteMap().Get(id);
  31. }
  32. }
  33. string GetName()
  34. {
  35. return m_Name;
  36. }
  37. string GetBoundButtonText()
  38. {
  39. string ret = "";
  40. if (GetGame().GetInput().IsEnabledMouseAndKeyboardEvenOnServer() && m_EmoteClass && m_EmoteClass.GetInputActionName() != "")
  41. {
  42. map<int,ref TStringArray> button_map = InputUtils.GetComboButtonNamesFromInput(m_EmoteClass.GetInputActionName(), EInputDeviceType.MOUSE_AND_KEYBOARD);
  43. if (button_map && button_map.Count() > 0)
  44. {
  45. TStringArray buttons;
  46. for (int j = 0; j < button_map.Count(); j++)
  47. {
  48. if (j > 0)
  49. {
  50. ret += "; ";
  51. }
  52. buttons = button_map.GetElement(j);
  53. for (int i = 0; i < buttons.Count(); i++)
  54. {
  55. if (i > 0)
  56. {
  57. ret += " + ";
  58. }
  59. ret += buttons[i];
  60. }
  61. }
  62. }
  63. }
  64. return ret;
  65. }
  66. int GetID()
  67. {
  68. return m_ID;
  69. }
  70. GestureCategories GetCategory()
  71. {
  72. return m_Category;
  73. }
  74. Widget GetRadialItemCard()
  75. {
  76. return m_RadialMenuItemCard;
  77. }
  78. void SetRadialItemCard( Widget widget )
  79. {
  80. m_RadialMenuItemCard = widget;
  81. }
  82. void SetCanPerformEmote(bool state)
  83. {
  84. m_CanPerformEmote = state;
  85. }
  86. bool GetCanPerformEmote()
  87. {
  88. return m_CanPerformEmote;
  89. }
  90. }
  91. class GesturesMenu extends UIScriptedMenu
  92. {
  93. protected Widget m_GestureItemCardPanel;
  94. protected ref array<ref GestureMenuItem> m_GestureItems;
  95. protected Widget m_ToolbarPanel;
  96. protected TextWidget m_CategoryNameText;
  97. //
  98. const string RADIAL_TEXT = "RadialText";
  99. const string GESTURE_TEXT = "GestureNameText";
  100. const string INPUT_TEXT = "InputActionText";
  101. const string CATEGORY_NAME = "CategoryName";
  102. //selections
  103. protected Widget m_SelectedItem;
  104. protected bool m_IsCategorySelected;
  105. protected bool m_IsMenuClosing;
  106. protected int m_CurrentCategory;
  107. //instance
  108. static GesturesMenu instance;
  109. //============================================
  110. // GesturesMenu
  111. //============================================
  112. void GesturesMenu()
  113. {
  114. m_GestureItems = new ref array<ref GestureMenuItem>;
  115. if ( !instance )
  116. {
  117. instance = this;
  118. }
  119. GetGame().GetMission().GetOnInputPresetChanged().Insert(OnInputPresetChanged);
  120. }
  121. void ~GesturesMenu()
  122. {
  123. if (GetGame() && GetGame().GetMission())
  124. {
  125. GetGame().GetMission().RemoveActiveInputExcludes({"radialmenu"},false);
  126. }
  127. }
  128. //============================================
  129. // Menu Controls
  130. //============================================
  131. static void OpenMenu()
  132. {
  133. GetGame().GetUIManager().EnterScriptedMenu( MENU_GESTURES, NULL );
  134. }
  135. static void CloseMenu()
  136. {
  137. //execute on menu release
  138. instance.OnMenuRelease();
  139. GetGame().GetUIManager().Back();
  140. //GetGame().GetMission().RemoveActiveInputExcludes({"radialmenu"},false);
  141. }
  142. static bool CanOpenMenu()
  143. {
  144. if (!instance)
  145. {
  146. PlayerBase player;
  147. HumanInputController hic;
  148. if (Class.CastTo(player,GetGame().GetPlayer()) && Class.CastTo(hic,player.GetInputController()) && hic.WeaponADS())
  149. return false;
  150. else
  151. return true;
  152. }
  153. return false;
  154. }
  155. protected void OnInputPresetChanged()
  156. {
  157. #ifdef PLATFORM_CONSOLE
  158. UpdateControlsElements();
  159. #endif
  160. }
  161. //============================================
  162. // Init & Widget Events
  163. //============================================
  164. override Widget Init()
  165. {
  166. m_CurrentCategory = -1;
  167. layoutRoot = GetGame().GetWorkspace().CreateWidgets( "gui/layouts/radial_menu/radial_gestures/day_z_gestures.layout" );
  168. m_GestureItemCardPanel = layoutRoot.FindAnyWidget( RadialMenu.RADIAL_ITEM_CARD_CONTAINER );
  169. //register gestures menu
  170. RadialMenu.GetInstance().RegisterClass( this );
  171. //delay updates until fully initialized
  172. RadialMenu.GetInstance().SetWidgetInitialized(false);
  173. //set radial menu properties
  174. RadialMenu.GetInstance().SetWidgetProperties( "gui/layouts/radial_menu/radial_gestures/day_z_gesture_delimiter.layout" );
  175. //create content (widgets) for items
  176. RefreshGestures();
  177. m_ToolbarPanel = layoutRoot.FindAnyWidget( "toolbar_bg" );
  178. m_ToolbarPanel.Show( true );
  179. //clear category name text
  180. UpdateCategoryName( "" );
  181. return layoutRoot;
  182. }
  183. override void OnShow()
  184. {
  185. super.OnShow();
  186. Mission mission = GetGame().GetMission();
  187. if (mission)
  188. {
  189. IngameHud hud = IngameHud.Cast(mission.GetHud());
  190. if (hud)
  191. {
  192. hud.ShowQuickbarUI(false);
  193. }
  194. }
  195. SetFocus(layoutRoot);
  196. m_IsMenuClosing = false;
  197. }
  198. override void OnHide()
  199. {
  200. super.OnHide();
  201. Mission mission = GetGame().GetMission();
  202. if (mission)
  203. {
  204. IngameHud hud = IngameHud.Cast(mission.GetHud());
  205. if (hud)
  206. {
  207. hud.ShowQuickbarUI(true);
  208. }
  209. }
  210. m_IsMenuClosing = true;
  211. }
  212. override bool OnController( Widget w, int control, int value )
  213. {
  214. super.OnController( w, control, value );
  215. RadialMenu.GetInstance().SetControlType( RadialMenuControlType.CONTROLLER );
  216. return false;
  217. }
  218. override bool OnMouseEnter( Widget w, int x, int y )
  219. {
  220. super.OnMouseEnter( w, x, y );
  221. RadialMenu.GetInstance().SetControlType( RadialMenuControlType.MOUSE );
  222. return false;
  223. }
  224. override bool UseMouse()
  225. {
  226. return true;
  227. }
  228. override bool UseGamepad()
  229. {
  230. return true;
  231. }
  232. override void Update(float timeslice)
  233. {
  234. super.Update(timeslice);
  235. //RefreshGestures(m_CurrentCategory);
  236. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  237. if (m_CurrentCategory != GestureCategories.CATEGORIES && m_CurrentCategory != -1 && player)
  238. {
  239. for (int i = 0; i < m_GestureItems.Count(); i++)
  240. {
  241. UpdateQuickbarItemCard(m_GestureItems[i]);
  242. }
  243. }
  244. }
  245. void ProcessEmoteConditionRequest(GestureMenuItem gesture_item)
  246. {
  247. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  248. if (player && m_CurrentCategory != -1)
  249. {
  250. bool can = player.GetEmoteManager().CanPlayEmote(gesture_item.GetID()) && !player.GetEmoteManager().IsEmotePlaying();
  251. gesture_item.SetCanPerformEmote(can);
  252. }
  253. }
  254. //============================================
  255. // Gestures
  256. //============================================
  257. protected void RefreshGestures( GestureCategories category_id = -1 )
  258. {
  259. //create gestures content (widgets) based on categories
  260. if ( category_id > -1 )
  261. {
  262. GetGestureItems( m_GestureItems, category_id);
  263. m_CurrentCategory = category_id;
  264. }
  265. else
  266. {
  267. GetGestureItems( m_GestureItems, GestureCategories.CATEGORIES );
  268. m_CurrentCategory = -1;
  269. instance.m_IsCategorySelected = false;
  270. }
  271. CreateGestureContent();
  272. UpdateControlsElements();
  273. }
  274. protected void GetGestureItems( out array<ref GestureMenuItem> gesture_items, GestureCategories category )
  275. {
  276. gesture_items.Clear();
  277. //PC PLATFORM
  278. //All categories
  279. if ( category == GestureCategories.CATEGORIES )
  280. {
  281. gesture_items.Insert( new GestureMenuItem( GestureCategories.CATEGORY_1, "#STR_USRACT_EMOTE_CATEGORY_COMMS", category ) );
  282. gesture_items.Insert( new GestureMenuItem( GestureCategories.CATEGORY_2, "#STR_USRACT_EMOTE_CATEGORY_INTERACTIONS", category ) );
  283. gesture_items.Insert( new GestureMenuItem( GestureCategories.CATEGORY_3, "#STR_USRACT_EMOTE_CATEGORY_POSES", category ) );
  284. gesture_items.Insert( new GestureMenuItem( GestureCategories.CATEGORY_4, "#STR_USRACT_EMOTE_CATEGORY_MISC", category ) );
  285. }
  286. //Category 1 - commands
  287. else if ( category == GestureCategories.CATEGORY_1 )
  288. {
  289. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_POINT, "#STR_USRACT_ID_EMOTE_POINT", category ) );
  290. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_MOVE, "#STR_USRACT_ID_EMOTE_MOVE", category ) );
  291. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_HOLD, "#STR_USRACT_ID_EMOTE_HOLD", category ) );
  292. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_LISTENING, "#STR_USRACT_ID_EMOTE_LISTENING", category ) );
  293. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_DOWN, "#STR_USRACT_ID_EMOTE_DOWN", category ) );
  294. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_SILENT, "#STR_USRACT_ID_EMOTE_SILENT", category ) );
  295. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_WATCHING, "#STR_USRACT_ID_EMOTE_WATCHING", category ) );
  296. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_POINTSELF, "#STR_USRACT_ID_EMOTE_POINTSELF", category ) );
  297. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_COME, "#STR_USRACT_ID_EMOTE_COME", category ) );
  298. }
  299. //Category 2 - interaction
  300. else if ( category == GestureCategories.CATEGORY_2 )
  301. {
  302. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_GREETING, "#STR_USRACT_ID_EMOTE_GREETING", category ) );
  303. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_TAUNT, "#STR_USRACT_ID_EMOTE_TAUNT", category ) );
  304. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_SHAKE, "#STR_USRACT_ID_EMOTE_SHAKE", category ) );
  305. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_NOD, "#STR_USRACT_ID_EMOTE_NOD", category ) );
  306. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_LOOKATME, "#STR_USRACT_ID_EMOTE_LOOKATME", category ) );
  307. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_TAUNTELBOW, "#STR_USRACT_ID_EMOTE_TAUNTELBOW", category ) );
  308. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_THUMB, "#STR_USRACT_ID_EMOTE_THUMB", category ) );
  309. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_THUMBDOWN, "#STR_USRACT_ID_EMOTE_THUMBDOWN", category ) );
  310. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_CLAP, "#STR_USRACT_ID_EMOTE_CLAP", category ) );
  311. }
  312. //Category 3 - poses
  313. else if ( category == GestureCategories.CATEGORY_3 )
  314. {
  315. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_SUICIDE, "#STR_USRACT_ID_EMOTE_SUICIDE", category ) );
  316. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_SURRENDER, "#STR_USRACT_ID_EMOTE_SURRENDER", category ) );
  317. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_SALUTE, "#STR_USRACT_ID_EMOTE_SALUTE", category ) );
  318. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_SITB, "#STR_USRACT_ID_EMOTE_SITB", category ) );
  319. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_LYINGDOWN, "#STR_USRACT_ID_EMOTE_LYINGDOWN", category ) );
  320. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_SITA, "#STR_USRACT_ID_EMOTE_SITA", category ) );
  321. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_CAMPFIRE, "#STR_USRACT_ID_EMOTE_CAMPFIRE", category ) );
  322. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_SHRUG, "#STR_USRACT_ID_EMOTE_SHRUG", category ) );
  323. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_SOS, "#STR_USRACT_ID_EMOTE_SOS", category ) );
  324. }
  325. //Category 4 - special
  326. else if ( category == GestureCategories.CATEGORY_4 )
  327. {
  328. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_DANCE, "#STR_USRACT_ID_EMOTE_DANCE", category ) );
  329. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_HEART, "#STR_USRACT_ID_EMOTE_HEART", category ) );
  330. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_FACEPALM, "#STR_USRACT_ID_EMOTE_FACEPALM", category ) );
  331. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_TIMEOUT, "#STR_USRACT_ID_EMOTE_TIMEOUT", category ) );
  332. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_THROAT, "#STR_USRACT_ID_EMOTE_THROAT", category ) );
  333. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_VOMIT, "#STR_USRACT_ID_EMOTE_VOMIT", category ) );
  334. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_RPS, "#STR_USRACT_ID_EMOTE_RPS", category ) );
  335. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_TAUNTTHINK, "#STR_USRACT_ID_EMOTE_TAUNTTHINK", category ) );
  336. gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_TAUNTKISS, "#STR_USRACT_ID_EMOTE_TAUNTKISS", category ) );
  337. //gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_RPS_R, "#STR_USRACT_ID_EMOTE_RPS_R", category ) );
  338. //gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_RPS_P, "#STR_USRACT_ID_EMOTE_RPS_P", category ) );
  339. //gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_RPS_S, "#STR_USRACT_ID_EMOTE_RPS_S", category ) );
  340. //gesture_items.Insert( new GestureMenuItem( EmoteConstants.ID_EMOTE_DEBUG, "ID_EMOTE_DEBUG", category ) );
  341. }
  342. }
  343. protected void CreateGestureContent()
  344. {
  345. //delete existing gesture widgets
  346. DeleteGestureItems();
  347. for ( int i = 0; i < m_GestureItems.Count(); ++i )
  348. {
  349. GestureMenuItem gesture_item = m_GestureItems.Get( i );
  350. //create item card
  351. Widget gesture_item_card_widget = Widget.Cast( GetGame().GetWorkspace().CreateWidgets( "gui/layouts/radial_menu/radial_gestures/day_z_gesture_item_card.layout", m_GestureItemCardPanel ) );
  352. gesture_item.SetRadialItemCard( gesture_item_card_widget );
  353. //update item card widget
  354. UpdateQuickbarItemCard( gesture_item );
  355. //set data
  356. gesture_item_card_widget.SetUserData( gesture_item );
  357. }
  358. //set radial parameters for content
  359. if ( m_GestureItems.Count() > 0 )
  360. {
  361. RadialMenu radial_menu = RadialMenu.GetInstance();
  362. radial_menu.SetRadiusOffset( 0 );
  363. radial_menu.SetExecuteDistOffset( 0.5 );
  364. radial_menu.SetOffsetFromTop( 0 );
  365. radial_menu.SetItemCardRadiusOffset( 0.25 );
  366. radial_menu.ActivateControllerTimeout( false );
  367. }
  368. //refresh radial menu
  369. RadialMenu.GetInstance().Refresh();
  370. }
  371. protected void UpdateQuickbarItemCard( GestureMenuItem gesture_item )
  372. {
  373. Widget gesture_item_card_widget = gesture_item.GetRadialItemCard();
  374. //texts
  375. RichTextWidget gesture_text = RichTextWidget.Cast( gesture_item_card_widget.FindAnyWidget( GESTURE_TEXT ) );
  376. RichTextWidget input_text = RichTextWidget.Cast( gesture_item_card_widget.FindAnyWidget( INPUT_TEXT ) );
  377. gesture_text.SetText( gesture_item.GetName() );
  378. bool input_name_available = gesture_item.GetBoundButtonText() != "";
  379. input_text.Show(input_name_available);
  380. if (input_name_available)
  381. {
  382. input_text.SetText(gesture_item.GetBoundButtonText());
  383. }
  384. //coloring
  385. ProcessEmoteConditionRequest(gesture_item);
  386. if (gesture_item.GetCanPerformEmote())
  387. {
  388. gesture_item_card_widget.SetFlags(WidgetFlags.DISABLED); //flag just seems to be...'there', useful for showing radial selector. Still...
  389. gesture_text.SetColor(ARGB(255,255,255,255));
  390. input_text.SetColor(ARGB(255,255,255,255));
  391. }
  392. else
  393. {
  394. gesture_item_card_widget.ClearFlags(WidgetFlags.DISABLED);
  395. gesture_text.SetColor(ARGB(255,150,150,150));
  396. input_text.SetColor(ARGB(255,150,150,150));
  397. }
  398. }
  399. protected void DeleteGestureItems()
  400. {
  401. Widget child;
  402. Widget child_to_destroy;
  403. child = m_GestureItemCardPanel.GetChildren();
  404. while ( child )
  405. {
  406. child_to_destroy = child;
  407. child = child.GetSibling();
  408. delete child_to_destroy;
  409. }
  410. }
  411. //! DEPRECATED
  412. protected void UpdateToolbar() {}
  413. protected void UpdateCategoryName( string name )
  414. {
  415. if ( !m_CategoryNameText )
  416. {
  417. m_CategoryNameText = TextWidget.Cast( layoutRoot.FindAnyWidget( CATEGORY_NAME ) );
  418. }
  419. m_CategoryNameText.SetText( name );
  420. }
  421. //============================================
  422. // Radial Menu Events
  423. //============================================
  424. //Common
  425. void OnControlsChanged( RadialMenuControlType type )
  426. {
  427. }
  428. //Mouse
  429. void OnMouseSelect( Widget w )
  430. {
  431. MarkSelected( w );
  432. }
  433. void OnMouseDeselect( Widget w )
  434. {
  435. UnmarkSelected( w );
  436. }
  437. void OnMouseExecute( Widget w )
  438. {
  439. }
  440. //! LMB
  441. void OnMousePressLeft( Widget w )
  442. {
  443. if (instance.m_IsCategorySelected)
  444. {
  445. ExecuteSelectedItem();
  446. }
  447. else
  448. {
  449. ExecuteSelectedCategory( w );
  450. }
  451. }
  452. //! RMB
  453. void OnMousePressRight( Widget w )
  454. {
  455. BackOneLevel();
  456. }
  457. //Controller
  458. void OnControllerSelect( Widget w )
  459. {
  460. MarkSelected( w );
  461. }
  462. void OnControllerDeselect( Widget w )
  463. {
  464. UnmarkSelected( w );
  465. }
  466. void OnControllerExecute( Widget w )
  467. {
  468. }
  469. void OnControllerPressSelect( Widget w )
  470. {
  471. if (instance.m_IsCategorySelected)
  472. {
  473. ExecuteSelectedItem();
  474. }
  475. else
  476. {
  477. ExecuteSelectedCategory( w );
  478. }
  479. }
  480. void OnControllerPressBack( Widget w )
  481. {
  482. BackOneLevel();
  483. }
  484. //Actions
  485. protected void MarkSelected( Widget w )
  486. {
  487. instance.m_SelectedItem = w;
  488. if ( w )
  489. {
  490. GestureMenuItem gesture_item;
  491. w.GetUserData( gesture_item );
  492. //is not category
  493. /*
  494. if ( gesture_item && gesture_item.GetCategory() != GestureCategories.CATEGORIES )
  495. {
  496. //alter item visual
  497. //TextWidget text_widget = TextWidget.Cast( gesture_item.GetRadialItemCard().FindAnyWidget( RADIAL_TEXT ) );
  498. //text_widget.SetColor( ARGB( 255, 66, 175, 95 ) );
  499. }
  500. */
  501. }
  502. }
  503. protected void UnmarkSelected( Widget w )
  504. {
  505. instance.m_SelectedItem = NULL;
  506. if ( w )
  507. {
  508. GestureMenuItem gesture_item;
  509. w.GetUserData( gesture_item );
  510. //is not category
  511. /*
  512. if ( gesture_item && gesture_item.GetCategory() != GestureCategories.CATEGORIES )
  513. {
  514. //alter item visual
  515. //TextWidget text_widget = TextWidget.Cast( gesture_item.GetRadialItemCard().FindAnyWidget( RADIAL_TEXT ) );
  516. //text_widget.SetColor( ARGB( 255, 255, 255, 255 ) );
  517. }
  518. */
  519. }
  520. }
  521. protected void ExecuteSelectedCategory( Widget w )
  522. {
  523. //only when category is not picked yet
  524. if ( w )
  525. {
  526. GestureMenuItem gesture_item;
  527. w.GetUserData( gesture_item );
  528. //is category
  529. if ( !instance.m_IsCategorySelected && gesture_item.GetCategory() == GestureCategories.CATEGORIES )
  530. {
  531. //set category selected
  532. instance.m_IsCategorySelected = true;
  533. //show selected category gestures
  534. GetGestureItems( m_GestureItems, gesture_item.GetID() );
  535. CreateGestureContent();
  536. RefreshGestures( gesture_item.GetID() );
  537. //update category name text
  538. UpdateCategoryName( gesture_item.GetName() );
  539. }
  540. /*else
  541. {
  542. ExecuteSelectedItem();
  543. }*/
  544. }
  545. }
  546. protected void ExecuteSelectedItem()
  547. {
  548. if ( instance.m_IsCategorySelected && instance.m_SelectedItem )
  549. {
  550. if ( !GetGame().IsDedicatedServer() )
  551. {
  552. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  553. GestureMenuItem gesture_item;
  554. instance.m_SelectedItem.GetUserData( gesture_item );
  555. if ( gesture_item )
  556. {
  557. if( player.GetEmoteManager() )
  558. {
  559. player.GetEmoteManager().CreateEmoteCBFromMenu( gesture_item.GetID() );
  560. }
  561. }
  562. }
  563. }
  564. }
  565. //only moves to the GestureCategories.CATEGORIES for now
  566. protected void BackOneLevel()
  567. {
  568. RefreshGestures();
  569. UpdateCategoryName( "" );
  570. }
  571. bool IsMenuClosing()
  572. {
  573. return m_IsMenuClosing;
  574. }
  575. void SetMenuClosing(bool state)
  576. {
  577. m_IsMenuClosing = state;
  578. }
  579. protected void UpdateControlsElements()
  580. {
  581. Widget toolbarBackSpacer = layoutRoot.FindAnyWidget("BackSpacer");
  582. RichTextWidget toolbarSelectIcon = RichTextWidget.Cast(layoutRoot.FindAnyWidget("SelectIcon"));
  583. RichTextWidget toolbarBackIcon = RichTextWidget.Cast(layoutRoot.FindAnyWidget("BackIcon"));
  584. string selectAction;
  585. string backAction;
  586. int controllerID;
  587. if (GetGame().GetInput().IsEnabledMouseAndKeyboardEvenOnServer() && GetGame().GetInput().GetCurrentInputDevice() == EInputDeviceType.MOUSE_AND_KEYBOARD)
  588. {
  589. selectAction = "UAMenuSelect";
  590. backAction = "UAMenuBack";
  591. controllerID = EUAINPUT_DEVICE_KEYBOARDMOUSE;
  592. }
  593. else
  594. {
  595. selectAction = "UAUISelect";
  596. backAction = "UAUIBack";
  597. controllerID = EUAINPUT_DEVICE_CONTROLLER;
  598. }
  599. toolbarSelectIcon.SetText(InputUtils.GetRichtextButtonIconFromInputAction(selectAction, "", controllerID, InputUtils.ICON_SCALE_TOOLBAR));
  600. toolbarBackIcon.SetText(InputUtils.GetRichtextButtonIconFromInputAction(backAction, "", controllerID, InputUtils.ICON_SCALE_TOOLBAR));
  601. toolbarBackSpacer.Show(instance.m_IsCategorySelected);
  602. }
  603. //-----------------------------------------------------------------
  604. //!DEPRECATED
  605. protected void OnMenuRelease();
  606. }