carhud.c 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. // Car HUD
  2. class CarHud : VehicleHudBase
  3. {
  4. protected ImageWidget m_VehicleRPMPointer;
  5. protected ImageWidget m_VehicleRPMDial;
  6. protected ImageWidget m_VehicleRPMRedline;
  7. protected ImageWidget m_VehicleSpeedPointer;
  8. protected Widget m_VehicleTemperatureIndicator;
  9. protected ImageWidget m_VehicleTemperaturePointer;
  10. protected ImageWidget m_VehicleTemperatureLight;
  11. protected ImageWidget m_VehicleFuelPointer;
  12. protected ImageWidget m_VehicleFuelLight;
  13. protected TextWidget m_VehicleSpeedValue;
  14. protected ImageWidget m_VehicleBatteryLight;
  15. protected ImageWidget m_VehicleEngineLight;
  16. protected ImageWidget m_VehicleOilLight;
  17. protected ImageWidget m_VehicleHandBrakeLight;
  18. protected ImageWidget m_VehicleWheelLight;
  19. protected bool m_VehicleDamageZoneHitEngineState;
  20. protected float m_VehicleDamageZonesHitTimer;
  21. protected CarScript m_CurrentVehicle;
  22. protected int m_VehicleGearCount = -1;
  23. protected float m_TimeSinceLastEngineLightChange;
  24. protected bool m_VehicleHasCoolant;
  25. override void Init(Widget vehicleHudPanels)
  26. {
  27. super.Init(vehicleHudPanels);
  28. m_VehiclePanel = GetGame().GetWorkspace().CreateWidgets("gui/layouts/day_z_hud_cars.layout", vehicleHudPanels);
  29. m_VehicleRPMPointer = ImageWidget.Cast( m_VehiclePanel.FindAnyWidget("RPMPointer") );
  30. m_VehicleRPMDial = ImageWidget.Cast( m_VehiclePanel.FindAnyWidget("RPMDial") );
  31. m_VehicleRPMRedline = ImageWidget.Cast( m_VehiclePanel.FindAnyWidget("RPMDialRedline") );
  32. m_VehicleSpeedPointer = ImageWidget.Cast( m_VehiclePanel.FindAnyWidget("SpeedPointer") );
  33. m_VehicleSpeedValue = TextWidget.Cast( m_VehiclePanel.FindAnyWidget("SpeedValue") );
  34. m_VehicleCurrentGearValue = TextWidget.Cast( m_VehiclePanel.FindAnyWidget("Current") );
  35. m_VehicleNextGearValue = TextWidget.Cast( m_VehiclePanel.FindAnyWidget("Next") );
  36. m_VehiclePrevGearValue = TextWidget.Cast( m_VehiclePanel.FindAnyWidget("Prev") );
  37. m_VehicleBatteryLight = ImageWidget.Cast( m_VehiclePanel.FindAnyWidget("BatteryLight"));
  38. m_VehicleEngineLight = ImageWidget.Cast( m_VehiclePanel.FindAnyWidget("EngineLight"));
  39. m_VehicleOilLight = ImageWidget.Cast( m_VehiclePanel.FindAnyWidget("OilLight"));
  40. m_VehicleHandBrakeLight = ImageWidget.Cast( m_VehiclePanel.FindAnyWidget("HandBrakeLight"));
  41. m_VehicleWheelLight = ImageWidget.Cast( m_VehiclePanel.FindAnyWidget("WheelLight"));
  42. m_VehicleTemperatureIndicator = m_VehiclePanel.FindAnyWidget("TemperatureIndicator");
  43. m_VehicleTemperaturePointer = ImageWidget.Cast(m_VehiclePanel.FindAnyWidget("TemperaturePointer"));
  44. m_VehicleTemperatureLight = ImageWidget.Cast(m_VehiclePanel.FindAnyWidget("TemperatureLight"));
  45. m_VehicleFuelPointer = ImageWidget.Cast(m_VehiclePanel.FindAnyWidget("FuelPointer"));
  46. m_VehicleFuelLight = ImageWidget.Cast(m_VehiclePanel.FindAnyWidget("FuelLight"));
  47. m_VehicleGearTable.Set(-1, "");
  48. m_VehicleGearTable.Set(CarGear.REVERSE, "R");
  49. m_VehicleGearTable.Set(CarGear.NEUTRAL, "N");
  50. m_VehicleGearTable.Set(CarGear.FIRST, "1");
  51. m_VehicleGearTable.Set(CarGear.SECOND, "2");
  52. m_VehicleGearTable.Set(CarGear.THIRD, "3");
  53. m_VehicleGearTable.Set(CarGear.FOURTH, "4");
  54. m_VehicleGearTable.Set(CarGear.FIFTH, "5");
  55. m_VehicleGearTable.Set(CarGear.SIXTH, "6");
  56. m_VehicleGearTable.Set(CarGear.SEVENTH, "7");
  57. m_VehicleGearTable.Set(CarGear.EIGTH, "8");
  58. m_VehicleGearTableAuto.Set(-1, "");
  59. m_VehicleGearTableAuto.Set(CarAutomaticGearboxMode.R, "R");
  60. m_VehicleGearTableAuto.Set(CarAutomaticGearboxMode.N, "N");
  61. m_VehicleGearTableAuto.Set(CarAutomaticGearboxMode.D, "D");
  62. }
  63. override void ShowVehicleInfo(PlayerBase player)
  64. {
  65. HumanCommandVehicle hcv = player.GetCommand_Vehicle();
  66. if (!hcv)
  67. return;
  68. m_CurrentVehicle = CarScript.Cast(hcv.GetTransport());
  69. if (!m_CurrentVehicle)
  70. return;
  71. m_VehicleGearCount = m_CurrentVehicle.GetGearsCount();
  72. float rpm_value_red = m_CurrentVehicle.EngineGetRPMRedline() / m_CurrentVehicle.EngineGetRPMMax();
  73. m_VehicleRPMDial.SetMaskProgress(rpm_value_red);
  74. m_VehicleRPMRedline.SetMaskProgress(1 - rpm_value_red);
  75. m_VehiclePanel.Show(true);
  76. }
  77. override void HideVehicleInfo()
  78. {
  79. m_CurrentVehicle = null;
  80. m_VehicleGearCount = -1;
  81. }
  82. override void RefreshVehicleHud(float timeslice)
  83. {
  84. float rpm_value = m_CurrentVehicle.EngineGetRPM() / m_CurrentVehicle.EngineGetRPMMax();
  85. float rpm_value_red = m_CurrentVehicle.EngineGetRPMRedline() / m_CurrentVehicle.EngineGetRPMMax();
  86. float speed_value = m_CurrentVehicle.GetSpeedometerAbsolute() / 200;
  87. m_VehicleRPMPointer.SetRotation(0, 0, rpm_value * 270 - 130, true);
  88. m_VehicleSpeedPointer.SetRotation(0, 0, speed_value * 260 - 130, true);
  89. m_VehicleSpeedValue.SetText(Math.AbsInt(m_CurrentVehicle.GetSpeedometer()).ToString());
  90. int engineHealthLevel = m_CurrentVehicle.GetHealthLevel("Engine");
  91. int fuelTankHealthLevel = m_CurrentVehicle.GetHealthLevel("FuelTank");
  92. bool newHealth = false;
  93. //! engine
  94. if (m_CurrentVehicle.HasEngineZoneReceivedHit())
  95. {
  96. if (m_TimeSinceLastEngineLightChange > 0.35)
  97. {
  98. m_VehicleEngineLight.Show(!m_VehicleEngineLight.IsVisible());
  99. if (engineHealthLevel <= GameConstants.STATE_WORN)
  100. {
  101. m_VehicleEngineLight.SetColor(Colors.WHITE);
  102. }
  103. else
  104. {
  105. m_VehicleEngineLight.SetColor(ItemManager.GetItemHealthColor(engineHealthLevel));
  106. }
  107. m_VehicleEngineLight.SetAlpha(1);
  108. m_TimeSinceLastEngineLightChange = 0;
  109. }
  110. m_TimeSinceLastEngineLightChange += timeslice;
  111. newHealth = true;
  112. }
  113. else if (engineHealthLevel > GameConstants.STATE_WORN)
  114. {
  115. m_VehicleEngineLight.SetColor(ItemManager.GetItemHealthColor(engineHealthLevel));
  116. m_VehicleEngineLight.SetAlpha(1);
  117. m_VehicleEngineLight.Show(true);
  118. }
  119. else
  120. {
  121. m_VehicleEngineLight.Show(false);
  122. }
  123. //! fuel tank
  124. if (fuelTankHealthLevel <= GameConstants.STATE_WORN)
  125. {
  126. m_VehicleFuelLight.SetColor(Colors.WHITE);
  127. m_VehicleFuelLight.SetAlpha(1);
  128. m_VehicleFuelLight.Show(true);
  129. }
  130. else if (fuelTankHealthLevel > GameConstants.STATE_WORN)
  131. {
  132. m_VehicleFuelLight.SetColor(ItemManager.GetItemHealthColor(fuelTankHealthLevel));
  133. m_VehicleFuelLight.SetAlpha(1);
  134. m_VehicleFuelLight.Show(true);
  135. }
  136. //! temperature
  137. if (m_CurrentVehicle.IsVitalRadiator())
  138. {
  139. m_VehicleTemperatureIndicator.Show(true);
  140. if (m_CurrentVehicle.HasRadiator())
  141. {
  142. int radiatorHealthLevel = m_CurrentVehicle.GetRadiator().GetHealthLevel("");
  143. if (radiatorHealthLevel <= GameConstants.STATE_WORN)
  144. {
  145. m_VehicleTemperatureLight.SetColor(Colors.WHITE);
  146. m_VehicleTemperatureLight.SetAlpha(1);
  147. m_VehicleTemperatureLight.Show(true);
  148. }
  149. else if (radiatorHealthLevel > GameConstants.STATE_WORN)
  150. {
  151. m_VehicleTemperatureLight.SetColor(ItemManager.GetItemHealthColor(radiatorHealthLevel));
  152. m_VehicleTemperatureLight.SetAlpha(1);
  153. m_VehicleTemperatureLight.Show(true);
  154. }
  155. }
  156. else
  157. {
  158. m_VehicleTemperatureLight.SetColor(Colors.COLOR_RUINED);
  159. m_VehicleTemperatureLight.SetAlpha(1);
  160. m_VehicleTemperatureLight.Show(true);
  161. }
  162. }
  163. else
  164. {
  165. m_VehicleTemperatureIndicator.Show(false);
  166. }
  167. m_VehicleHandBrakeLight.Show(m_CurrentVehicle.IsHandbrakeActive());
  168. m_VehicleWheelLight.Show(m_CurrentVehicle.WheelIsAnyLocked());
  169. int engagedGear = -1;
  170. int prevGear = -1;
  171. int nextGear = -1;
  172. if (m_CurrentVehicle.GearboxGetType() == CarGearboxType.MANUAL)
  173. {
  174. engagedGear = m_CurrentVehicle.GetGear();
  175. prevGear = engagedGear - 1;
  176. nextGear = engagedGear + 1;
  177. if (engagedGear == CarGear.NEUTRAL)
  178. {
  179. prevGear = CarGear.REVERSE;
  180. }
  181. else if (engagedGear == CarGear.REVERSE)
  182. {
  183. prevGear = -1;
  184. nextGear = CarGear.NEUTRAL;
  185. }
  186. m_VehicleCurrentGearValue.SetText(m_VehicleGearTable.Get(engagedGear));
  187. m_VehicleNextGearValue.Show(nextGear < m_VehicleGearCount);
  188. m_VehicleNextGearValue.SetText(m_VehicleGearTable.Get(nextGear));
  189. m_VehiclePrevGearValue.SetText(m_VehicleGearTable.Get(prevGear));
  190. }
  191. else
  192. {
  193. engagedGear = m_CurrentVehicle.GearboxGetMode();
  194. prevGear = engagedGear - 1;
  195. nextGear = engagedGear + 1;
  196. m_VehicleCurrentGearValue.SetText(m_VehicleGearTableAuto.Get(engagedGear));
  197. m_VehicleNextGearValue.Show(nextGear < EnumTools.GetEnumSize(CarAutomaticGearboxMode));
  198. m_VehicleNextGearValue.SetText(m_VehicleGearTableAuto.Get(nextGear));
  199. m_VehiclePrevGearValue.SetText(m_VehicleGearTableAuto.Get(prevGear));
  200. }
  201. // refresh backlit
  202. GetDayZGame().GetBacklit().RefreshVehicleLayout(engagedGear, newHealth);
  203. m_VehicleFuelPointer.SetRotation( 0, 0, m_CurrentVehicle.GetFluidFraction( CarFluid.FUEL ) * 260 - 130, true );
  204. m_VehicleTemperaturePointer.SetRotation( 0, 0, -1 * m_CurrentVehicle.GetFluidFraction( CarFluid.COOLANT ) * 260 + 130, true );
  205. //! general hit timer reset
  206. if (m_VehicleDamageZonesHitTimer > 1)
  207. {
  208. m_VehicleDamageZoneHitEngineState = false;
  209. m_VehicleDamageZonesHitTimer = 0;
  210. }
  211. m_VehicleDamageZonesHitTimer += timeslice;
  212. }
  213. }