creditsmenu.c 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. class CreditsMenu extends UIScriptedMenu
  2. {
  3. protected static float MENU_FADEIN_TIME = 2.0; //fade starts as soon as menu opens
  4. protected static float LOGO_FADEIN_TIME = 1.0; //fade starts halfway through menu fade in
  5. protected static float CREDIT_SCROLL_SPEED = 200.0; //pixels per second (relative to 1080p res)
  6. protected float m_MenuFadeInIncrement;
  7. protected float m_MenuFadeInLevel;
  8. protected float m_MenuFadeInLevel2 = 1;
  9. protected float m_LogoFadeInIncrement;
  10. protected float m_LogoFadeInLevel;
  11. protected float m_ScrollIncrement;
  12. protected float m_ScrollLevel;
  13. protected float m_ScrollMax;
  14. protected float m_ScrollSize;
  15. protected ref JsonDataCredits m_CreditsData;
  16. protected float m_CurrentTime = 0.0;
  17. protected ref array<ref CreditsElement> m_CreditsEntries = new array<ref CreditsElement>;
  18. protected ImageWidget m_Logo;
  19. protected ScrollWidget m_Scroller;
  20. protected WrapSpacerWidget m_Content;
  21. protected RichTextWidget m_InfoPanelText;
  22. protected Widget m_InfoPanel;
  23. override Widget Init()
  24. {
  25. float x_f;
  26. int x, y;
  27. layoutRoot = GetGame().GetWorkspace().CreateWidgets( "gui/layouts/new_ui/credits/credits_menu.layout", null );
  28. m_Logo = ImageWidget.Cast( layoutRoot.FindAnyWidget( "Logo" ) );
  29. m_Scroller = ScrollWidget.Cast( layoutRoot.FindAnyWidget( "CreditsPanel" ) );
  30. m_Content = WrapSpacerWidget.Cast( layoutRoot.FindAnyWidget( "CreditsContent" ) );
  31. m_InfoPanelText = RichTextWidget.Cast( layoutRoot.FindAnyWidget( "InfoPanelText" ) );
  32. m_InfoPanel = layoutRoot.FindAnyWidget( "InfoPanel" );
  33. GetScreenSize( x, y );
  34. m_MenuFadeInIncrement = 1 / MENU_FADEIN_TIME;
  35. m_LogoFadeInIncrement = 1 / LOGO_FADEIN_TIME;
  36. m_ScrollIncrement = CREDIT_SCROLL_SPEED * ( y / 1080 );
  37. m_Scroller.VScrollToPos01( 0 );
  38. m_Scroller.GetScreenSize( x_f, m_ScrollSize );
  39. GetGame().GameScript.Call( this, "LoadDataAsync", null );
  40. UpdateInfoPanelText(GetGame().GetInput().GetCurrentInputDevice());
  41. return layoutRoot;
  42. }
  43. override void OnShow()
  44. {
  45. super.OnShow();
  46. MissionMainMenu mainMenu = MissionMainMenu.Cast(g_Game.GetMission());
  47. DynamicMusicPlayerCategoryPlaybackData playbackData = new DynamicMusicPlayerCategoryPlaybackData();
  48. playbackData.m_Category = EDynamicMusicPlayerCategory.CREDITS;
  49. playbackData.m_Forced = true;
  50. playbackData.m_FadeOut = true;
  51. mainMenu.GetDynamicMusicPlayer().SetCategory(playbackData);
  52. }
  53. override void OnHide()
  54. {
  55. super.OnHide();
  56. MissionMainMenu mainMenu = MissionMainMenu.Cast(g_Game.GetMission());
  57. DynamicMusicPlayerCategoryPlaybackData playbackData = new DynamicMusicPlayerCategoryPlaybackData();
  58. playbackData.m_Category = EDynamicMusicPlayerCategory.MENU;
  59. playbackData.m_Forced = true;
  60. playbackData.m_FadeOut = true;
  61. mainMenu.GetDynamicMusicPlayer().SetCategory(playbackData);
  62. }
  63. void LoadDataAsync()
  64. {
  65. m_CreditsData = CreditsLoader.GetData();
  66. for(int i = 1; i <= m_CreditsData.Departments.Count(); ++i)
  67. {
  68. CreditsDepartmentElement e = new CreditsDepartmentElement( i, m_Content, m_CreditsData.Departments.Get( i - 1 ) );
  69. m_CreditsEntries.Insert(e);
  70. }
  71. m_Content.Update();
  72. }
  73. override void Update( float timeslice )
  74. {
  75. float new_menu_val;
  76. if( m_LogoFadeInLevel != 1 )
  77. {
  78. new_menu_val = m_MenuFadeInLevel + m_MenuFadeInIncrement * timeslice;
  79. if( new_menu_val < 1 )
  80. m_MenuFadeInLevel = new_menu_val;
  81. else
  82. m_MenuFadeInLevel = 1;
  83. if( m_MenuFadeInLevel > 0.5 )
  84. {
  85. float new_logo_val = m_LogoFadeInLevel + m_LogoFadeInIncrement * timeslice;
  86. if( new_menu_val < 1 )
  87. m_LogoFadeInLevel = new_logo_val;
  88. else
  89. m_LogoFadeInLevel = 1;
  90. }
  91. layoutRoot.SetAlpha( m_MenuFadeInLevel );
  92. m_Logo.SetAlpha( m_LogoFadeInLevel );
  93. m_InfoPanelText.SetAlpha( m_MenuFadeInLevel );
  94. }
  95. else if( m_ScrollLevel + m_ScrollSize <= m_Scroller.GetContentHeight() )
  96. {
  97. float new_scroll_val = m_ScrollLevel + m_ScrollIncrement * timeslice;
  98. m_ScrollLevel = new_scroll_val;
  99. m_Scroller.VScrollToPos( m_ScrollLevel );
  100. }
  101. else
  102. {
  103. new_menu_val = m_MenuFadeInLevel2 - m_MenuFadeInIncrement * timeslice;
  104. if( new_menu_val > 0 )
  105. m_MenuFadeInLevel2 = new_menu_val;
  106. else
  107. Close();
  108. layoutRoot.SetAlpha( m_MenuFadeInLevel2 );
  109. m_InfoPanelText.SetAlpha( m_MenuFadeInLevel2 );
  110. }
  111. m_CurrentTime += timeslice;
  112. if( GetGame().GetInput().LocalRelease("UAUIBack") )
  113. {
  114. Close();
  115. }
  116. }
  117. void UpdateInfoPanelText(int input_device_type)
  118. {
  119. if (GetGame().GetInput().IsEnabledMouseAndKeyboard() && input_device_type == EInputDeviceType.MOUSE_AND_KEYBOARD)
  120. {
  121. m_InfoPanelText.SetText("ESC " + "#menu_back");
  122. }
  123. else
  124. {
  125. m_InfoPanelText.SetText(InputUtils.GetRichtextButtonIconFromInputAction("UAUIBack", "#menu_back", EUAINPUT_DEVICE_CONTROLLER, InputUtils.ICON_SCALE_TOOLBAR));
  126. }
  127. }
  128. }