mainMenu.tscript 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. $BaseUI::scrollSpeedTimeMs = 250;
  2. $BaseUI::scrollSchedule = 0;
  3. function MainMenuGui::onAdd(%this)
  4. {
  5. }
  6. function MainMenuGui::onWake(%this)
  7. {
  8. $MenuList = MainMenuButtonList;
  9. $MenuList.listPosition = 0;
  10. $MenuList.syncGui();
  11. }
  12. function MainMenuGui::onSleep(%this)
  13. {
  14. }
  15. if(!isObject( BaseUIActionMap ) )
  16. {
  17. new ActionMap(BaseUIActionMap){};
  18. BaseUIActionMap.bind( keyboard, w, BaseUINavigatePrev );
  19. BaseUIActionMap.bind( keyboard, s, BaseUINavigateNext );
  20. BaseUIActionMap.bind( gamepad, yaxis, "D", "-0.23 0.23", BaseUIStickNavigate );
  21. BaseUIActionMap.bind( gamepad, upov, BaseUINavigatePrev );
  22. BaseUIActionMap.bind( gamepad, dpov, BaseUINavigateNext );
  23. BaseUIActionMap.bind( keyboard, Space, BaseUIActivateSelected );
  24. BaseUIActionMap.bind( gamepad, btn_a, BaseUIActivateSelected );
  25. BaseUIActionMap.bind( keyboard, Escape, BaseUIBackOut );
  26. BaseUIActionMap.bind( gamepad, btn_b, BaseUIBackOut );
  27. }
  28. function BaseUINavigatePrev(%val)
  29. {
  30. if(%val)
  31. {
  32. $MenuList.listPosition -= 1;
  33. if($MenuList.listPosition < 0)
  34. $MenuList.listPosition = 0;
  35. $MenuList.syncGUI();
  36. $BaseUI::scrollSchedule = schedule($BaseUI::scrollSpeedTimeMs, 0, "BaseUINavigatePrev", 1);
  37. }
  38. else
  39. {
  40. cancel($BaseUI::scrollSchedule);
  41. }
  42. }
  43. function BaseUINavigateNext(%val)
  44. {
  45. if(%val)
  46. {
  47. $MenuList.listPosition += 1;
  48. if($MenuList.listPosition >= $MenuList.getCount())
  49. $MenuList.listPosition = $MenuList.getCount()-1;
  50. $MenuList.syncGUI();
  51. $BaseUI::scrollSchedule = schedule($BaseUI::scrollSpeedTimeMs, 0, "BaseUINavigateNext", 1);
  52. }
  53. else
  54. {
  55. cancel($BaseUI::scrollSchedule);
  56. }
  57. }
  58. function BaseUIStickNavigate(%val)
  59. {
  60. if(%val == 1)
  61. BaseUINavigateNext(1);
  62. else if(%val == -1)
  63. BaseUINavigatePrev(1);
  64. else
  65. cancel($BaseUI::scrollSchedule);
  66. }
  67. function BaseUIBackOut(%val)
  68. {
  69. //we can't navigate further back than the MainMenuGui
  70. if(%val && Canvas.getObject(Canvas.getCount()-1).getId() != MainMenuGui.getId())
  71. {
  72. Canvas.popDialog();
  73. %topMenu = Canvas.getObject(Canvas.getCount()-1);
  74. if(isObject(%topMenu))
  75. {
  76. //re-kick the on-wake so we can be fully up to date and relevently
  77. //contexted
  78. %topMenu.onWake();
  79. }
  80. }
  81. }
  82. function MainMenuButtonList::syncGUI(%this)
  83. {
  84. //%this.callOnChildren("setHighlighted", false);
  85. %btn = %this.getObject(%this.listPosition);
  86. %btn.setHighlighted(true);
  87. //
  88. //Update the button imagery to comply to the last input device we'd used
  89. %device = Canvas.getLastInputDevice();
  90. if(%device $= "mouse")
  91. %device = "keyboard";
  92. MainMenuGoButton.setBitmap(BaseUIActionMap.getCommandButtonBitmap(%device, "BaseUIActivateSelected"));
  93. }
  94. function MainMenuButton::onHighlighted(%this, %highlighted)
  95. {
  96. if(%highlighted)
  97. $MenuList.listPosition = MainMenuButtonList.getObjectIndex(%this);
  98. }
  99. function BaseUIActivateSelected()
  100. {
  101. if($MenuList.getCount() == 0 || $MenuList.listPosition >= $MenuList.getCount() || $MenuList.listPosition < 0)
  102. return;
  103. %btn = $MenuList.getObject($MenuList.listPosition);
  104. if(%btn.isMethod("performClick"))
  105. %btn.performClick();
  106. }