creditsmenu.c 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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. void LoadDataAsync()
  44. {
  45. m_CreditsData = CreditsLoader.GetData();
  46. for( int i = 1; i <= m_CreditsData.Departments.Count(); i++ )
  47. {
  48. ref CreditsDepartmentElement e = new CreditsDepartmentElement( i, m_Content, m_CreditsData.Departments.Get( i - 1 ) );
  49. m_CreditsEntries.Insert( e );
  50. }
  51. m_Content.Update();
  52. }
  53. override void Update( float timeslice )
  54. {
  55. float new_menu_val;
  56. if( m_LogoFadeInLevel != 1 )
  57. {
  58. new_menu_val = m_MenuFadeInLevel + m_MenuFadeInIncrement * timeslice;
  59. if( new_menu_val < 1 )
  60. m_MenuFadeInLevel = new_menu_val;
  61. else
  62. m_MenuFadeInLevel = 1;
  63. if( m_MenuFadeInLevel > 0.5 )
  64. {
  65. float new_logo_val = m_LogoFadeInLevel + m_LogoFadeInIncrement * timeslice;
  66. if( new_menu_val < 1 )
  67. m_LogoFadeInLevel = new_logo_val;
  68. else
  69. m_LogoFadeInLevel = 1;
  70. }
  71. layoutRoot.SetAlpha( m_MenuFadeInLevel );
  72. m_Logo.SetAlpha( m_LogoFadeInLevel );
  73. m_InfoPanelText.SetAlpha( m_MenuFadeInLevel );
  74. }
  75. else if( m_ScrollLevel + m_ScrollSize <= m_Scroller.GetContentHeight() )
  76. {
  77. float new_scroll_val = m_ScrollLevel + m_ScrollIncrement * timeslice;
  78. m_ScrollLevel = new_scroll_val;
  79. m_Scroller.VScrollToPos( m_ScrollLevel );
  80. }
  81. else
  82. {
  83. new_menu_val = m_MenuFadeInLevel2 - m_MenuFadeInIncrement * timeslice;
  84. if( new_menu_val > 0 )
  85. m_MenuFadeInLevel2 = new_menu_val;
  86. else
  87. Close();
  88. layoutRoot.SetAlpha( m_MenuFadeInLevel2 );
  89. m_InfoPanelText.SetAlpha( m_MenuFadeInLevel2 );
  90. }
  91. m_CurrentTime += timeslice;
  92. if( GetGame().GetInput().LocalRelease("UAUIBack") )
  93. {
  94. Close();
  95. }
  96. }
  97. void UpdateInfoPanelText(int input_device_type)
  98. {
  99. if (GetGame().GetInput().IsEnabledMouseAndKeyboard() && input_device_type == EInputDeviceType.MOUSE_AND_KEYBOARD)
  100. {
  101. m_InfoPanelText.SetText("ESC " + "#menu_back");
  102. }
  103. else
  104. {
  105. m_InfoPanelText.SetText(InputUtils.GetRichtextButtonIconFromInputAction("UAUIBack", "#menu_back", EUAINPUT_DEVICE_CONTROLLER, InputUtils.ICON_SCALE_TOOLBAR));
  106. }
  107. }
  108. }