mainmenustats.c 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. class MainMenuStats extends ScriptedWidgetEventHandler
  2. {
  3. protected Widget m_Root;
  4. protected Widget m_TimeSurvived;
  5. protected TextWidget m_TimeSurvivedValue;
  6. protected Widget m_PlayersKilled;
  7. protected TextWidget m_PlayersKilledValue;
  8. protected Widget m_InfectedKilled;
  9. protected TextWidget m_InfectedKilledValue;
  10. protected Widget m_DistanceTraveled;
  11. protected TextWidget m_DistanceTraveledValue;
  12. protected Widget m_LongRangeShot;
  13. protected TextWidget m_LongRangeShotValue;
  14. private ref FullTimeData m_TimeSurvivedFull;
  15. void MainMenuStats(Widget root)
  16. {
  17. m_Root = root;
  18. m_TimeSurvivedFull = new FullTimeData();
  19. m_TimeSurvived = m_Root.FindAnyWidget("TimeSurvived");
  20. m_TimeSurvivedValue = TextWidget.Cast(m_Root.FindAnyWidget("TimeSurvivedValue"));
  21. m_PlayersKilled = m_Root.FindAnyWidget("PlayersKilled");
  22. m_PlayersKilledValue = TextWidget.Cast(m_Root.FindAnyWidget("PlayersKilledValue"));
  23. m_InfectedKilled = m_Root.FindAnyWidget("InfectedKilled");
  24. m_InfectedKilledValue = TextWidget.Cast(m_Root.FindAnyWidget("InfectedKilledValue"));
  25. m_DistanceTraveled = m_Root.FindAnyWidget("DistanceTraveled");
  26. m_DistanceTraveledValue = TextWidget.Cast(m_Root.FindAnyWidget("DistanceTraveledValue"));
  27. m_LongRangeShot = m_Root.FindAnyWidget("LongRangeShot");
  28. m_LongRangeShotValue = TextWidget.Cast(m_Root.FindAnyWidget("LongRangeShotValue"));
  29. }
  30. void ShowStats()
  31. {
  32. m_Root.Show(true);
  33. UpdateStats();
  34. }
  35. void HideStats()
  36. {
  37. m_Root.Show(false);
  38. }
  39. void UpdateStats()
  40. {
  41. PlayerBase player;
  42. MissionMainMenu missionMainMenu = MissionMainMenu.Cast(GetGame().GetMission());
  43. if (missionMainMenu && missionMainMenu.GetIntroScenePC())
  44. {
  45. #ifdef PLATFORM_WINDOWS
  46. player = missionMainMenu.GetIntroScenePC().GetIntroCharacter().GetCharacterObj();
  47. #endif
  48. #ifdef PLATFORM_CONSOLE
  49. player = missionMainMenu.GetIntroScenePC().GetIntroCharacter().GetCharacterObj();
  50. #endif
  51. if (player)
  52. {
  53. TimeConversions.ConvertSecondsToFullTime(player.StatGet(AnalyticsManagerServer.STAT_PLAYTIME), m_TimeSurvivedFull);
  54. m_TimeSurvivedValue.SetText(m_TimeSurvivedFull.FormatedNonZero());
  55. m_PlayersKilledValue.SetText(GetValueString(player.StatGet(AnalyticsManagerServer.STAT_PLAYERS_KILLED)));
  56. m_InfectedKilledValue.SetText(GetValueString(player.StatGet(AnalyticsManagerServer.STAT_INFECTED_KILLED)));
  57. m_DistanceTraveledValue.SetText(GetDistanceString(player.StatGet(AnalyticsManagerServer.STAT_DISTANCE)));
  58. m_LongRangeShotValue.SetText(GetDistanceString(player.StatGet(AnalyticsManagerServer.STAT_LONGEST_SURVIVOR_HIT), true));
  59. }
  60. }
  61. }
  62. protected string GetDistanceString( float total_distance, bool meters_only = false )
  63. {
  64. if (total_distance > 0)
  65. {
  66. string distanceString;
  67. float kilometers = total_distance * 0.001;
  68. kilometers = Math.Round(kilometers);
  69. if ( kilometers >= 10 && !meters_only )
  70. {
  71. distanceString = GetValueString(kilometers, true) + " #STR_distance_unit_abbrev_kilometer_0";
  72. }
  73. else
  74. {
  75. distanceString = GetValueString(total_distance) + " #STR_distance_unit_abbrev_meter_0";
  76. }
  77. return distanceString;
  78. }
  79. return "0" + " #STR_distance_unit_abbrev_meter_0";
  80. }
  81. protected string GetValueString(float total_value, bool show_decimals = false)
  82. {
  83. if (total_value > 0)
  84. {
  85. string out_string;
  86. int total_value_int = total_value;
  87. string number_str = total_value_int.ToString();
  88. //number
  89. if ( total_value >= 1000 )
  90. {
  91. int count;
  92. int first_length = number_str.Length() % 3; //calculate position of the first separator
  93. if ( first_length > 0 )
  94. {
  95. count = 3 - first_length;
  96. }
  97. for ( int i = 0; i < number_str.Length(); ++i )
  98. {
  99. out_string += number_str.Get( i );
  100. count ++;
  101. if ( count >= 3 )
  102. {
  103. out_string += " "; //separator
  104. count = 0;
  105. }
  106. }
  107. }
  108. else
  109. {
  110. out_string = number_str;
  111. }
  112. //decimals
  113. if ( show_decimals )
  114. {
  115. string total_value_str = total_value.ToString();
  116. int decimal_idx = total_value_str.IndexOf( "." );
  117. if ( decimal_idx > -1 )
  118. {
  119. out_string.TrimInPlace();
  120. out_string += total_value_str.Substring( decimal_idx, total_value_str.Length() - decimal_idx );
  121. }
  122. }
  123. return out_string;
  124. }
  125. return "0";
  126. }
  127. //!
  128. //! DEPRECATED
  129. //!
  130. protected string GetTimeString(float total_time);
  131. }