actionmenu.c 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. class ActionMenu
  2. {
  3. private const float FADE_IN_TIME = 0.3;
  4. private const float FADE_OUT_TIME = 0.3;
  5. private const float HIDE_MENU_TIME = 5;
  6. private ref WidgetFadeTimer m_FadeTimer;
  7. private ref array<TextWidget> m_actionItems;
  8. private TextWidget m_defaultActionWidget;
  9. private Widget m_actionsPanelWidget;
  10. private ref Timer m_hide_timer;
  11. private bool m_visible;
  12. void ActionMenu()
  13. {
  14. m_actionItems = new array<TextWidget>;
  15. m_FadeTimer = new WidgetFadeTimer;
  16. m_hide_timer = new Timer(CALL_CATEGORY_GUI);
  17. m_visible = false;
  18. }
  19. void Init(Widget actions_panel_widget, TextWidget default_action_widget)
  20. {
  21. m_defaultActionWidget = default_action_widget;
  22. m_actionsPanelWidget = actions_panel_widget;
  23. m_actionItems.Clear();
  24. int i = 0;
  25. TextWidget w = TextWidget.Cast( m_actionsPanelWidget.FindAnyWidget("ActionListItem" + i.ToString()) );
  26. while (w)
  27. {
  28. m_actionItems.Insert(w);
  29. w.Show(false);
  30. i++;
  31. w = TextWidget.Cast( m_actionsPanelWidget.FindAnyWidget("ActionListItem" + i.ToString()) );
  32. }
  33. m_defaultActionWidget.Show(false);
  34. m_actionsPanelWidget.Show(true);
  35. m_actionsPanelWidget.SetAlpha(0);
  36. }
  37. void UpdateWidgets()
  38. {
  39. #ifdef DIAG_DEVELOPER
  40. // tmp
  41. bool newATSelection = DiagMenu.GetBool( DiagMenuIDs.MISC_ACTION_TARGETS_NEW, true );
  42. // read the action manager
  43. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  44. TSelectableActionInfoArray actions = player.GetActionManager().GetSelectableActions();
  45. int selectedActionIndex = player.GetActionManager().GetSelectedActionIndex();
  46. // clear state
  47. m_defaultActionWidget.Show(false);
  48. if ( actions.Count() <= 1 )
  49. m_FadeTimer.FadeOut(m_actionsPanelWidget, FADE_OUT_TIME, true);
  50. else
  51. m_FadeTimer.FadeIn(m_actionsPanelWidget, FADE_IN_TIME, true);
  52. // update state
  53. for (int i = 0; i < m_actionItems.Count(); i++)
  54. {
  55. TextWidget w = m_actionItems.Get(i);
  56. if (i < actions.Count())
  57. {
  58. TSelectableActionInfo actionInfo = actions.Get(i);
  59. w.SetText(actionInfo.param3);
  60. if (i == selectedActionIndex)
  61. {
  62. w.SetColor(0xFFFFEC44);
  63. m_defaultActionWidget.SetText(actionInfo.param3);
  64. if ( !newATSelection )
  65. {
  66. m_defaultActionWidget.Show(true);
  67. }
  68. }
  69. else
  70. {
  71. w.SetColor(0xFFFFFFFF);
  72. }
  73. w.Show(true);
  74. }
  75. else
  76. {
  77. w.Show(false);
  78. }
  79. }
  80. float sx;
  81. float sy;
  82. m_actionsPanelWidget.GetSize(sx, sy);
  83. m_actionsPanelWidget.SetSize(sx, 8 + (actions.Count() * 32));
  84. #endif
  85. }
  86. void NextAction()
  87. {
  88. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  89. player.GetActionManager().SelectNextAction();
  90. UpdateWidgets();
  91. m_hide_timer.Run(HIDE_MENU_TIME, this, "HideWithFadeout");
  92. }
  93. void PrevAction()
  94. {
  95. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  96. player.GetActionManager().SelectPrevAction();
  97. UpdateWidgets();
  98. m_hide_timer.Run(HIDE_MENU_TIME, this, "HideWithFadeout");
  99. }
  100. void NextActionCategory()
  101. {
  102. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  103. player.GetActionManager().SelectNextActionCategory();
  104. UpdateWidgets();
  105. m_hide_timer.Run(HIDE_MENU_TIME, this, "HideWithFadeout");
  106. }
  107. void PrevActionCategory()
  108. {
  109. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  110. player.GetActionManager().SelectPrevActionCategory();
  111. UpdateWidgets();
  112. m_hide_timer.Run(HIDE_MENU_TIME, this, "HideWithFadeout");
  113. }
  114. void Show()
  115. {
  116. if( m_visible )
  117. return;
  118. m_visible = true;
  119. m_hide_timer.Run(HIDE_MENU_TIME, this, "HideWithFadeout");
  120. }
  121. void Refresh()
  122. {
  123. if( !m_visible )
  124. Show();
  125. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  126. if( player.GetActionManager().IsSelectableActionsChanged() )
  127. UpdateWidgets();
  128. }
  129. void Hide()
  130. {
  131. if( !m_visible )
  132. return;
  133. m_visible = false;
  134. m_hide_timer.Stop();
  135. m_FadeTimer.Stop();
  136. //m_defaultActionWidget.Show(false);
  137. m_actionsPanelWidget.Show(false);
  138. }
  139. void HideWithFadeout()
  140. {
  141. //m_defaultActionWidget.Show(false);
  142. if (m_actionsPanelWidget.IsVisible())
  143. m_FadeTimer.FadeOut(m_actionsPanelWidget, FADE_OUT_TIME, true);
  144. }
  145. }