ingamehud.c 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682
  1. class IngameHud extends Hud
  2. {
  3. protected const float FADE_IN_TIME = 0.3;
  4. protected const float FADE_OUT_TIME = 0.3;
  5. protected const float HIDE_MENU_TIME = 5;
  6. protected ref map<int,string> m_StatesWidgetNames;
  7. protected ref map<int,ImageWidget> m_StatesWidgets; // [key] ImageWidget
  8. protected ref map<ImageWidget, int> m_TendencyStatusCritical; //array of icons that are blinking due to critical tendency status
  9. protected const float TENDENCY_BLINK_TIME = 0.25;
  10. protected float m_BlinkTime;
  11. protected ref map<int,string> m_BadgesWidgetNames;
  12. protected ref map<int,int> m_BadgesSupportedLevels;
  13. protected ref map<int,int> m_BadgesWidgetDisplay;
  14. protected ref map<int,ImageWidget> m_BadgesWidgets; // [key] ImageWidget
  15. protected bool m_AnyBadgeVisible;
  16. protected bool m_IsTemperatureVisible;
  17. protected float m_TemperatureTimer;
  18. protected float m_TemperatureShowTime = 30;
  19. protected ImageWidget m_HeatBufferPlus;
  20. protected bool m_IsStaminaVisible;
  21. protected float m_StaminaTimer;
  22. protected float m_StaminaShowTime = 0.15;
  23. #ifndef VEH_UI_REFACTOR
  24. protected ref map<int,string> m_VehicleGearTable;
  25. protected ref map<int,string> m_VehicleGearTableAuto;
  26. #endif
  27. protected Widget m_HudPanelWidget;
  28. protected Widget m_LeftHudPanelWidget;
  29. protected Widget m_PlayerPanelWidget;
  30. protected Widget m_QuickbarWidget;
  31. protected ref InventoryQuickbar m_Quickbar;
  32. protected Widget m_VehiclePanel;
  33. protected Widget m_VehicleHudPanels;
  34. #ifndef VEH_UI_REFACTOR
  35. protected ImageWidget m_VehicleRPMPointer;
  36. protected ImageWidget m_VehicleRPMDial;
  37. protected ImageWidget m_VehicleRPMRedline;
  38. protected ImageWidget m_VehicleSpeedPointer;
  39. protected Widget m_VehicleTemperatureIndicator;
  40. protected ImageWidget m_VehicleTemperaturePointer;
  41. protected ImageWidget m_VehicleTemperatureLight;
  42. protected ImageWidget m_VehicleFuelPointer;
  43. protected ImageWidget m_VehicleFuelLight;
  44. protected TextWidget m_VehicleSpeedValue;
  45. protected TextWidget m_VehicleCurrentGearValue;
  46. protected TextWidget m_VehicleNextGearValue;
  47. protected TextWidget m_VehiclePrevGearValue;
  48. protected ImageWidget m_VehicleBatteryLight;
  49. protected ImageWidget m_VehicleEngineLight;
  50. protected ImageWidget m_VehicleOilLight;
  51. protected ImageWidget m_VehicleHandBrakeLight;
  52. protected ImageWidget m_VehicleWheelLight;
  53. protected bool m_VehicleDamageZoneHitEngineState;
  54. protected float m_VehicleDamageZonesHitTimer;
  55. protected bool m_InVehicleAsDriver;
  56. protected CarScript m_CurrentVehicle;
  57. #endif
  58. protected VehicleHudBase m_ActiveVehicleHUD;
  59. protected ref array<VehicleHudBase> m_VehicleHudArray; // for iterating frame update
  60. protected ref map<string, ref VehicleHudBase> m_VehicleHudMap;
  61. protected Widget m_GameStatusIconsPanel;
  62. protected ImageWidget m_HighPingA;
  63. protected ImageWidget m_HighPingB;
  64. protected ImageWidget m_LowServerPerfA;
  65. protected ImageWidget m_LowServerPerfB;
  66. protected ImageWidget m_ConnectionLost;
  67. protected Widget m_Notifiers;
  68. protected TextWidget m_BloodType;
  69. protected TextWidget m_BloodPosType;
  70. protected Widget m_BadgeNotifierDivider;
  71. protected Widget m_Badges;
  72. protected ref Timer m_HideTimer;
  73. protected ref WidgetFadeTimer m_FadeTimerCrosshair;
  74. protected ref WidgetFadeTimer m_FadeTimerActionCursor;
  75. // protected ref WidgetFadeTimer m_FadeTimerWeaponMode;
  76. // protected ref WidgetFadeTimer m_FadeTimerZeroing;
  77. protected ref WidgetFadeTimer m_FadeTimerZeroingOld;
  78. protected ref WidgetFadeTimer m_FadeTimerMagazineName;
  79. protected ref WidgetFadeTimer m_FadeTimerWeaponName;
  80. protected ref WidgetFadeTimer m_FadeTimerWeaponStats;
  81. protected ref WidgetFadeTimer m_FadeTimerQuickbar;
  82. protected ref WidgetFadeTimer m_FadeTimerWalkieTalkie;
  83. protected ref WidgetFadeTimer m_FadeTimerWalkieTalkieText;
  84. protected ProgressBarWidget m_Stamina;
  85. protected Widget m_StaminaBackground;
  86. protected Widget m_Presence;
  87. protected Widget m_StanceProne;
  88. protected Widget m_StanceStand;
  89. protected Widget m_StanceStandWalk;
  90. protected Widget m_StanceCrouch;
  91. protected Widget m_StanceCar;
  92. protected Widget m_StancePanel;
  93. protected Widget m_PresenceLevel0;
  94. protected Widget m_PresenceLevel1;
  95. protected Widget m_PresenceLevel2;
  96. protected Widget m_PresenceLevel3;
  97. protected Widget m_PresenceLevel4;
  98. protected ref Timer myTimer; //TEMP
  99. protected ref array<ref WidgetFadeTimer> m_FadeTimers = new array<ref WidgetFadeTimer>;
  100. protected Widget m_MouseSingleAction;
  101. protected Widget m_MouseContinuousAction;
  102. protected Widget m_RadialProgressBar1;
  103. protected Widget m_RadialProgressBarCrossHair;
  104. protected Widget m_RadialProgressBar;
  105. protected Widget m_CursorWidget;
  106. protected ImageWidget m_CursorIcon;
  107. protected Widget m_WalkieTalkie;
  108. protected Widget m_ActionWidget;
  109. protected TextWidget m_ActionDesc;
  110. protected TextWidget m_ActionItemDesc;
  111. protected Widget m_ActionItemQuantityWrapper
  112. protected ImageWidget m_ActionHealthMark;
  113. protected ProgressBarWidget m_ActionQuantityBar;
  114. protected Widget m_ActionQuantityBox;
  115. protected TextWidget m_ActionQuantityBoxText;
  116. protected ImageWidget m_ActionIcon;
  117. protected TextWidget m_ActionButtonText;
  118. protected Widget m_ActionIconFrame;
  119. protected Widget m_ActionMultipleItemsFrame;
  120. protected Widget m_ActionTarget;
  121. protected ActionTargetsCursor m_ActionTargetsCursor;
  122. // CrossHairs
  123. protected ImageWidget m_PermanentCrossHair;
  124. protected bool m_HudHideUI;
  125. protected bool m_HudHidePlayer;
  126. protected bool m_HudInventory;
  127. protected bool m_HudState; //options-driven global setting
  128. protected bool m_VehicleHudState;
  129. protected bool m_VehicleHudDisabled;
  130. protected bool m_IsVehicleHudVisible;
  131. protected bool m_QuickbarHideUI;
  132. protected bool m_QuickbarHidePlayer;
  133. protected bool m_QuickbarState; //options-driven global setting
  134. protected bool m_IsQuickbarVisible;
  135. protected bool m_IsHudVisible;
  136. protected bool m_Faded;
  137. protected bool m_ZeroingKeyPressed;
  138. protected Widget m_HitIndicatorUp;
  139. protected Widget m_HitIndicatorDown;
  140. protected Widget m_HitIndicatorLeft;
  141. protected Widget m_HitIndicatorRight;
  142. protected Widget m_HitIndicatorSingle;
  143. protected Widget m_SpecializatonPanel;
  144. protected Widget m_SpecializationIcon;
  145. ref array<ref HitDirectionEffectBase> m_HitDirEffectArray;
  146. protected ref IngameHudHeatBuffer m_HeatBufferUI;
  147. void IngameHud()
  148. {
  149. m_FadeTimerCrosshair = new WidgetFadeTimer;
  150. m_FadeTimerActionCursor = new WidgetFadeTimer;
  151. m_FadeTimerQuickbar = new WidgetFadeTimer;
  152. m_FadeTimerWalkieTalkie = new WidgetFadeTimer;
  153. m_FadeTimerWalkieTalkieText = new WidgetFadeTimer;
  154. m_StatesWidgets = new map<int, ImageWidget>; // [key] widgetName
  155. m_StatesWidgetNames = new map<int, string>;
  156. m_TendencyStatusCritical = new map<ImageWidget, int>;
  157. m_BadgesWidgets = new map<int, ImageWidget>; // [key] widgetName
  158. m_BadgesWidgetNames = new map<int, string>;
  159. m_BadgesSupportedLevels = new map<int, int>;
  160. m_BadgesWidgetDisplay = new map<int, int>;
  161. m_VehicleHudMap = new map<string, ref VehicleHudBase>;
  162. m_VehicleHudArray = new array<VehicleHudBase>;
  163. #ifndef VEH_UI_REFACTOR
  164. m_VehicleDamageZonesHitTimer = 0;
  165. m_VehicleGearTable = new map<int, string>;
  166. m_VehicleGearTable.Set(-1, "");
  167. m_VehicleGearTable.Set(CarGear.REVERSE, "R");
  168. m_VehicleGearTable.Set(CarGear.NEUTRAL, "N");
  169. m_VehicleGearTable.Set(CarGear.FIRST, "1");
  170. m_VehicleGearTable.Set(CarGear.SECOND, "2");
  171. m_VehicleGearTable.Set(CarGear.THIRD, "3");
  172. m_VehicleGearTable.Set(CarGear.FOURTH, "4");
  173. m_VehicleGearTable.Set(CarGear.FIFTH, "5");
  174. m_VehicleGearTable.Set(CarGear.SIXTH, "6");
  175. m_VehicleGearTable.Set(CarGear.SEVENTH, "7");
  176. m_VehicleGearTable.Set(CarGear.EIGTH, "8");
  177. m_VehicleGearTableAuto = new map<int, string>;
  178. m_VehicleGearTableAuto.Set(-1, "");
  179. m_VehicleGearTableAuto.Set(CarAutomaticGearboxMode.R, "R");
  180. m_VehicleGearTableAuto.Set(CarAutomaticGearboxMode.N, "N");
  181. m_VehicleGearTableAuto.Set(CarAutomaticGearboxMode.D, "D");
  182. #endif
  183. }
  184. override void Init( Widget hud_panel_widget )
  185. {
  186. m_HudPanelWidget = hud_panel_widget;
  187. m_HudPanelWidget.Show( true );
  188. //Quickbar
  189. m_QuickbarWidget = m_HudPanelWidget.FindAnyWidget("QuickbarGrid");
  190. m_QuickbarWidget.Show( false );
  191. //Left HUD Panel
  192. m_LeftHudPanelWidget = m_HudPanelWidget.FindAnyWidget("LeftHUDPanel");
  193. m_PlayerPanelWidget = m_LeftHudPanelWidget.FindAnyWidget("PlayerPanel");
  194. //TEMPORARY HACK!!! player is not present when Hud is being initialized
  195. myTimer = new Timer( CALL_CATEGORY_GAMEPLAY );
  196. myTimer.Run( 1, this, "InitQuickbar" );
  197. m_CursorWidget = m_HudPanelWidget.FindAnyWidget("CursorIcons");
  198. m_CursorWidget.Show(true);
  199. Class.CastTo(m_CursorIcon, m_HudPanelWidget.FindAnyWidget("Cursor"));
  200. //Permanent Crosshair
  201. Class.CastTo(m_PermanentCrossHair, m_HudPanelWidget.FindAnyWidget("PermanentCrossHair"));
  202. m_WalkieTalkie = m_HudPanelWidget.FindAnyWidget("WalkieTalkie");
  203. //Panels
  204. Class.CastTo(m_Stamina, m_HudPanelWidget.FindAnyWidget("StaminaBar"));
  205. m_Presence = m_HudPanelWidget.FindAnyWidget("PresencePanel");
  206. m_Badges = hud_panel_widget.FindAnyWidget("BadgesPanel");
  207. m_Notifiers = m_HudPanelWidget.FindAnyWidget("NotifiersPanel");
  208. m_SpecializatonPanel = m_HudPanelWidget.FindAnyWidget("SpecializationPanel");
  209. m_SpecializationIcon = m_HudPanelWidget.FindAnyWidget("SpecializationIcon");
  210. m_BadgeNotifierDivider = m_HudPanelWidget.FindAnyWidget("BadgeNotifierDivider");
  211. m_BloodType = TextWidget.Cast( m_HudPanelWidget.FindAnyWidget("BloodType") );
  212. m_BloodPosType = TextWidget.Cast( m_HudPanelWidget.FindAnyWidget("BloodPosType") );
  213. m_VehiclePanel = m_HudPanelWidget.FindAnyWidget("VehiclePanel");
  214. m_VehiclePanel.Show(false);
  215. // Init vehicle HUDs
  216. m_VehicleHudPanels = m_HudPanelWidget.FindAnyWidget("VehicleHUDPanels");
  217. #ifdef VEH_UI_REFACTOR
  218. CarHud carHud = new CarHud();
  219. m_VehicleHudMap.Insert("VehicleTypeCar", carHud);
  220. #endif
  221. BoatHud boatHud = new BoatHud();
  222. m_VehicleHudMap.Insert("VehicleTypeBoat", boatHud);
  223. foreach (VehicleHudBase vehHud : m_VehicleHudMap)
  224. {
  225. vehHud.Init(m_VehicleHudPanels);
  226. m_VehicleHudArray.Insert(vehHud);
  227. }
  228. #ifndef VEH_UI_REFACTOR
  229. m_VehicleRPMPointer = ImageWidget.Cast( m_VehiclePanel.FindAnyWidget("RPMPointer") );
  230. m_VehicleRPMDial = ImageWidget.Cast( m_VehiclePanel.FindAnyWidget("RPMDial") );
  231. m_VehicleRPMRedline = ImageWidget.Cast( m_VehiclePanel.FindAnyWidget("RPMDialRedline") );
  232. m_VehicleSpeedPointer = ImageWidget.Cast( m_VehiclePanel.FindAnyWidget("SpeedPointer") );
  233. m_VehicleSpeedValue = TextWidget.Cast( m_VehiclePanel.FindAnyWidget("SpeedValue") );
  234. m_VehicleCurrentGearValue = TextWidget.Cast( m_VehiclePanel.FindAnyWidget("Current") );
  235. m_VehicleNextGearValue = TextWidget.Cast( m_VehiclePanel.FindAnyWidget("Next") );
  236. m_VehiclePrevGearValue = TextWidget.Cast( m_VehiclePanel.FindAnyWidget("Prev") );
  237. m_VehicleBatteryLight = ImageWidget.Cast( m_VehiclePanel.FindAnyWidget("BatteryLight"));
  238. m_VehicleEngineLight = ImageWidget.Cast( m_VehiclePanel.FindAnyWidget("EngineLight"));
  239. m_VehicleOilLight = ImageWidget.Cast( m_VehiclePanel.FindAnyWidget("OilLight"));
  240. m_VehicleHandBrakeLight = ImageWidget.Cast( m_VehiclePanel.FindAnyWidget("HandBrakeLight"));
  241. m_VehicleWheelLight = ImageWidget.Cast( m_VehiclePanel.FindAnyWidget("WheelLight"));
  242. m_VehicleTemperatureIndicator = m_VehiclePanel.FindAnyWidget("TemperatureIndicator");
  243. m_VehicleTemperaturePointer = ImageWidget.Cast(m_VehiclePanel.FindAnyWidget("TemperaturePointer"));
  244. m_VehicleTemperatureLight = ImageWidget.Cast(m_VehiclePanel.FindAnyWidget("TemperatureLight"));
  245. m_VehicleFuelPointer = ImageWidget.Cast(m_VehiclePanel.FindAnyWidget("FuelPointer"));
  246. m_VehicleFuelLight = ImageWidget.Cast(m_VehiclePanel.FindAnyWidget("FuelLight"));
  247. #endif
  248. m_StaminaBackground = m_HudPanelWidget.FindAnyWidget("StaminaBackground");
  249. m_StaminaBackground.Show(true);
  250. m_StanceProne = m_HudPanelWidget.FindAnyWidget("StanceProne");
  251. m_StanceCrouch = m_HudPanelWidget.FindAnyWidget("StanceCrouch");
  252. m_StanceStand = m_HudPanelWidget.FindAnyWidget("StanceStand");
  253. m_StanceStandWalk = m_HudPanelWidget.FindAnyWidget("StanceStandWalk");
  254. m_StanceCar = m_HudPanelWidget.FindAnyWidget("StanceCar");
  255. m_StancePanel = m_HudPanelWidget.FindAnyWidget("StancePanel");
  256. m_ActionTarget = m_HudPanelWidget.FindAnyWidget("ActionTargetsCursorWidget");
  257. //! gets scripted handler from widget
  258. m_ActionTarget.GetScript(m_ActionTargetsCursor);
  259. // heat buffer plus sign
  260. m_HeatBufferPlus = ImageWidget.Cast( m_HudPanelWidget.FindAnyWidget( "HeatBuffer1" ) );
  261. //Game State Icons
  262. m_GameStatusIconsPanel = m_HudPanelWidget.FindAnyWidget("GameStatusIcons");
  263. m_HighPingA = ImageWidget.Cast(m_HudPanelWidget.FindAnyWidget("HighPingA"));
  264. m_HighPingB = ImageWidget.Cast(m_HudPanelWidget.FindAnyWidget("HighPingB"));
  265. m_LowServerPerfA = ImageWidget.Cast(m_HudPanelWidget.FindAnyWidget("LowServerPerfA"));
  266. m_LowServerPerfB = ImageWidget.Cast(m_HudPanelWidget.FindAnyWidget("LowServerPerfB"));
  267. m_ConnectionLost = ImageWidget.Cast(m_HudPanelWidget.FindAnyWidget("ConnectionLost"));
  268. if ( m_HeatBufferPlus )
  269. m_HeatBufferPlus.Show( false );
  270. #ifndef NO_GUI
  271. m_Timer = new Timer( CALL_CATEGORY_GAMEPLAY );
  272. m_Timer.Run(0.333, this, "RefreshQuickbar", NULL, true );
  273. #endif
  274. InitBadgesAndNotifiers();
  275. m_PresenceLevel0 = hud_panel_widget.FindAnyWidget("Presence0");
  276. m_PresenceLevel1 = hud_panel_widget.FindAnyWidget("Presence1");
  277. m_PresenceLevel2 = hud_panel_widget.FindAnyWidget("Presence2");
  278. m_PresenceLevel3 = hud_panel_widget.FindAnyWidget("Presence3");
  279. m_PresenceLevel4 = hud_panel_widget.FindAnyWidget("Presence4");
  280. m_PresenceLevel0.Show( false );
  281. m_PresenceLevel1.Show( false );
  282. m_PresenceLevel2.Show( false );
  283. m_PresenceLevel3.Show( false );
  284. m_PresenceLevel4.Show( false );
  285. SetLeftStatsVisibility( true );
  286. m_HudState = g_Game.GetProfileOption( EDayZProfilesOptions.HUD );
  287. m_VehicleHudDisabled = !g_Game.GetProfileOption( EDayZProfilesOptions.HUD_VEHICLE );
  288. MissionGameplay.Cast(GetGame().GetMission()).GetConnectivityInvoker().Insert(OnConnectionIconsSettingsChanged);
  289. m_GameStatusIconsPanel.Show(g_Game.GetProfileOption(EDayZProfilesOptions.CONNECTIVITY_INFO));
  290. //ShowQuickBar(GetGame().GetInput().IsEnabledMouseAndKeyboardEvenOnServer() && g_Game.GetProfileOption(EDayZProfilesOptions.QUICKBAR)); //unreliable
  291. }
  292. void InitBadgesAndNotifiers()
  293. {
  294. // state notifiers
  295. m_StatesWidgetNames.Clear();
  296. m_StatesWidgets.Clear();
  297. m_StatesWidgetNames.Set( NTFKEY_THIRSTY, "Thirsty" );
  298. m_StatesWidgetNames.Set( NTFKEY_HUNGRY, "Hungry" );
  299. m_StatesWidgetNames.Set( NTFKEY_SICK, "Health" );
  300. m_StatesWidgetNames.Set( NTFKEY_BLEEDISH, "Blood" );
  301. m_StatesWidgetNames.Set( NTFKEY_FEVERISH, "Temperature" );
  302. m_Notifiers.Show( true );
  303. m_Badges.Show( true );
  304. int i = 0;
  305. int key = 0;
  306. for ( i = 0; i < m_StatesWidgetNames.Count(); i++ )
  307. {
  308. string widget_name = m_StatesWidgetNames.GetElement(i);
  309. key = m_StatesWidgetNames.GetKey(i);
  310. ImageWidget w;
  311. Class.CastTo(w, m_Notifiers.FindAnyWidget( String( "Icon" + widget_name ) ) );
  312. m_StatesWidgets.Set( key, w );
  313. w.Show( true );
  314. for ( int y = 0; y < 5; y++ )
  315. {
  316. w.LoadImageFile( y, "set:dayz_gui image:icon" + widget_name + y );
  317. }
  318. w.SetImage( 0 );
  319. float alpha = w.GetAlpha();
  320. w.SetColor( ARGB( alpha * 255, 220, 220, 220 ) ); //white
  321. m_TendencyStatusCritical.Remove( w );
  322. // clear all arrows
  323. for ( int x = 1; x < 4; x++ )
  324. {
  325. Class.CastTo(w, m_Notifiers.FindAnyWidget( String( widget_name + "ArrowUp" + x.ToString() ) ) );
  326. w.Show( false );
  327. Class.CastTo(w, m_Notifiers.FindAnyWidget( String( widget_name + "ArrowDown" + x.ToString() ) ) );
  328. w.Show( false );
  329. }
  330. }
  331. // badges
  332. m_BadgesWidgetNames.Clear();
  333. m_BadgesWidgets.Clear();
  334. m_BadgesWidgetDisplay.Clear();
  335. m_BadgesSupportedLevels.Clear();
  336. m_BadgesWidgetNames.Set( NTFKEY_FRACTURE, "Fracture" );
  337. m_BadgesWidgetNames.Set( NTFKEY_STUFFED, "Stomach" );
  338. m_BadgesWidgetNames.Set( NTFKEY_SICK, "Sick" );
  339. m_BadgesWidgetNames.Set( NTFKEY_WETNESS, "Wetness" );
  340. m_BadgesWidgetNames.Set( NTFKEY_POISONED, "Poisoned" );
  341. m_BadgesWidgetNames.Set( NTFKEY_BLEEDISH, "Bleeding" );
  342. m_BadgesWidgetNames.Set( NTFKEY_LIVES, "Shock" );
  343. m_BadgesWidgetNames.Set( NTFKEY_PILLS, "Pills" );
  344. m_BadgesWidgetNames.Set( NTFKEY_LEGS, "InjuredLegs" );
  345. // any badges not included bellow are just ON/OFF
  346. m_BadgesSupportedLevels.Insert(NTFKEY_LEGS,3);
  347. for ( i = 0; i < m_BadgesWidgetNames.Count(); i++ )
  348. {
  349. string badge_name = m_BadgesWidgetNames.GetElement( i);
  350. key = m_BadgesWidgetNames.GetKey( i );
  351. ImageWidget badge_widget;
  352. Class.CastTo(badge_widget, m_Badges.FindAnyWidget( badge_name ) );
  353. if (m_BadgesSupportedLevels.Contains(key))
  354. {
  355. int badgeCountMax = m_BadgesSupportedLevels.Get(key);
  356. for ( int q = 0; q < badgeCountMax; q++ )
  357. {
  358. badge_widget.LoadImageFile( q, "set:dayz_gui image:icon" + badge_name + q );
  359. }
  360. }
  361. m_BadgesWidgets.Set( key, badge_widget );
  362. badge_widget.Show( false );
  363. m_BadgesWidgetDisplay.Set( key, false );
  364. }
  365. m_AnyBadgeVisible = false;
  366. m_BadgeNotifierDivider.Show(false);
  367. }
  368. void OnConnectionIconsSettingsChanged(bool enabled)
  369. {
  370. m_GameStatusIconsPanel.Show(enabled);
  371. }
  372. override void OnResizeScreen()
  373. {
  374. float x, y;
  375. m_HudPanelWidget.GetScreenSize( x, y );
  376. m_HudPanelWidget.Update();
  377. m_Badges.Update();
  378. m_Notifiers.SetPos( 0, 0 );
  379. }
  380. override void Show( bool show )
  381. {
  382. m_HudPanelWidget.Show( show );
  383. }
  384. override void ShowWalkieTalkie( bool show )
  385. {
  386. m_FadeTimerWalkieTalkie.Stop();
  387. m_FadeTimerWalkieTalkieText.Stop();
  388. m_WalkieTalkie.Show( show );
  389. }
  390. override void ShowWalkieTalkie( int fadeOutSeconds )
  391. {
  392. m_WalkieTalkie.Show(true);
  393. m_FadeTimerWalkieTalkie.Stop();
  394. m_FadeTimerWalkieTalkieText.Stop();
  395. m_FadeTimerWalkieTalkie.FadeOut( m_WalkieTalkie.FindAnyWidget("Icon") , fadeOutSeconds );
  396. m_FadeTimerWalkieTalkieText.FadeOut( m_WalkieTalkie.FindAnyWidget("Text") , fadeOutSeconds );
  397. }
  398. override void SetWalkieTalkieText( string text )
  399. {
  400. TextWidget txt;
  401. Class.CastTo(txt, m_WalkieTalkie.FindAnyWidget("Text"));
  402. txt.SetText(text);
  403. }
  404. override void SetCursorIcon( string icon )
  405. {
  406. if ( icon.Length() == 0 || icon == CursorIcons.None )
  407. m_CursorIcon.Show(false);
  408. else
  409. {
  410. m_CursorIcon.LoadImageFile( 0, icon );
  411. m_CursorIcon.Show(true);
  412. }
  413. }
  414. override void ShowCursor()
  415. {
  416. m_CursorWidget.Show( true );
  417. }
  418. override void HideCursor()
  419. {
  420. m_CursorWidget.Show( false );
  421. }
  422. override void SetCursorIconScale( string type, float percentage )
  423. {
  424. float x, y;
  425. m_CursorIcon.FindAnyWidget( type ).GetParent().GetSize( x, y );
  426. m_CursorIcon.FindAnyWidget( type ).GetParent().SetSize( x * percentage, y * percentage );
  427. }
  428. override void SetCursorIconOffset( string type, float x, float y )
  429. {
  430. m_CursorIcon.FindAnyWidget( type ).GetParent().SetPos( x, y );
  431. }
  432. override void SetCursorIconSize( string type, float x, float y )
  433. {
  434. m_CursorIcon.FindAnyWidget( type ).GetParent().SetSize( x, y );
  435. }
  436. #ifdef DIAG_DEVELOPER
  437. // Debug Crosshair
  438. override void SetPermanentCrossHair( bool show )
  439. {
  440. m_PermanentCrossHair.Show(show);
  441. }
  442. #endif
  443. override void DisplayNotifier( int key, int tendency, int status )
  444. {
  445. ImageWidget w;
  446. if ( key == NTFKEY_FEVERISH )
  447. {
  448. DisplayTendencyTemp( key, tendency, status );
  449. }
  450. else
  451. {
  452. DisplayTendencyNormal( key, tendency, status );
  453. }
  454. // tendency arrows
  455. string arrow_name = "ArrowUp";
  456. if ( tendency < 0 )
  457. {
  458. arrow_name = "ArrowDown";
  459. }
  460. tendency = Math.AbsInt( tendency );
  461. for ( int x = 1; x < 4; x++ )
  462. {
  463. Class.CastTo(w, m_Notifiers.FindAnyWidget( String( m_StatesWidgetNames.Get( key ) + "ArrowUp" + x.ToString() ) ) );
  464. if( w )
  465. w.Show( false );
  466. Class.CastTo(w, m_Notifiers.FindAnyWidget( String( m_StatesWidgetNames.Get( key ) + "ArrowDown" + x.ToString() ) ) );
  467. if( w )
  468. w.Show( false );
  469. }
  470. if( tendency > 0 )
  471. {
  472. string widget_name = m_StatesWidgetNames.Get( key ) + arrow_name + Math.Clamp( tendency, 1, 3 );
  473. Class.CastTo(w, m_Notifiers.FindAnyWidget( widget_name ) );
  474. if( w )
  475. w.Show( true );
  476. }
  477. }
  478. void DisplayTendencyNormal( int key, int tendency, int status )
  479. {
  480. ImageWidget w;
  481. Class.CastTo(w, m_Notifiers.FindAnyWidget( String( "Icon" + m_StatesWidgetNames.Get( key ) ) ) );
  482. if( w )
  483. {
  484. w.SetImage( Math.Clamp( status - 1, 0, 4 ) );
  485. float alpha = w.GetAlpha();
  486. switch( status )
  487. {
  488. case 3:
  489. w.SetColor( ARGB( alpha * 255, 220, 220, 0 ) ); //yellow
  490. m_TendencyStatusCritical.Remove( w ); //remove from blinking group
  491. break;
  492. case 4:
  493. w.SetColor( ARGB( alpha * 255, 220, 0, 0 ) ); //red
  494. m_TendencyStatusCritical.Remove( w ); //remove from blinking group
  495. break;
  496. case 5:
  497. if ( !m_TendencyStatusCritical.Contains( w ) )
  498. {
  499. m_TendencyStatusCritical.Insert( w, ARGB( alpha * 255, 220, 0, 0 ) ); //add to blinking group
  500. }
  501. break;
  502. default:
  503. w.SetColor( ARGB( alpha * 255, 220, 220, 220 ) ); //white
  504. m_TendencyStatusCritical.Remove( w ); //remove from blinking group
  505. break;
  506. }
  507. }
  508. }
  509. void DisplayTendencyTemp( int key, int tendency, int status )
  510. {
  511. ImageWidget w = ImageWidget.Cast( m_Notifiers.FindAnyWidget( String( "Icon" + m_StatesWidgetNames.Get( key ) ) ) );
  512. TextWidget temp_top = TextWidget.Cast( m_Notifiers.FindAnyWidget( "TemperatureValueTop" ) );
  513. TextWidget temp_bot = TextWidget.Cast( m_Notifiers.FindAnyWidget( "TemperatureValueBottom" ) );
  514. //string temp = player..ToString() + "°C";
  515. float alpha = w.GetAlpha();
  516. if ( tendency < 0 )
  517. {
  518. temp_top.Show( true );
  519. temp_bot.Show( false );
  520. }
  521. else
  522. {
  523. temp_top.Show( false );
  524. temp_bot.Show( true );
  525. }
  526. switch( status )
  527. {
  528. case 2:
  529. w.SetColor( ARGB( alpha * 255, 220, 220, 0 ) ); //WARNING_PLUS
  530. m_TendencyStatusCritical.Remove( w );
  531. w.SetImage( 1 );
  532. break;
  533. case 3:
  534. w.SetColor( ARGB( alpha * 255, 220, 0, 0 ) ); //CRITICAL_PLUS
  535. m_TendencyStatusCritical.Remove( w );
  536. w.SetImage( 0 );
  537. break;
  538. case 4:
  539. if ( !m_TendencyStatusCritical.Contains( w ) ) //BLINKING_PLUS
  540. {
  541. m_TendencyStatusCritical.Insert( w, ARGB( alpha * 255, 220, 0, 0 ) );
  542. }
  543. w.SetImage( 0 );
  544. break;
  545. case 5:
  546. w.SetColor( ARGB( alpha * 255, 0, 206, 209 ) ); //WARNING_MINUS
  547. m_TendencyStatusCritical.Remove( w );
  548. w.SetImage( 3 );
  549. break;
  550. case 6:
  551. w.SetColor( ARGB( alpha * 255, 30, 144, 220 ) ); //CRITICAL_MINUS
  552. m_TendencyStatusCritical.Remove( w );
  553. w.SetImage( 4 );
  554. break;
  555. case 7: //BLINKING_MINUS
  556. if ( !m_TendencyStatusCritical.Contains( w ) )
  557. {
  558. m_TendencyStatusCritical.Insert( w, ARGB( alpha * 255, 30, 144, 220 ) );
  559. }
  560. w.SetImage( 4 );
  561. break;
  562. default:
  563. w.SetColor( ARGB( alpha * 255, 220, 220, 220 ) ); //DEFAULT
  564. m_TendencyStatusCritical.Remove( w );
  565. w.SetImage( 2 );
  566. break;
  567. }
  568. }
  569. override void DisplayBadge( int key, int value )
  570. {
  571. TextWidget bleed_count = TextWidget.Cast( m_Badges.FindAnyWidget( "BleedingCount" ) );
  572. m_BadgesWidgetDisplay.Set( key, value );
  573. m_AnyBadgeVisible = false;
  574. for ( int i = 0; i < m_BadgesWidgetDisplay.Count(); i++ )
  575. {
  576. int badge_key = m_BadgesWidgetDisplay.GetKey( i );
  577. int badge_value = m_BadgesWidgetDisplay.Get( badge_key );
  578. string badge_name = m_BadgesWidgetNames.Get( badge_key );
  579. ImageWidget badge_widget
  580. Class.CastTo(badge_widget, m_Badges.FindAnyWidget( badge_name ) );
  581. if ( badge_widget )
  582. {
  583. if ( badge_value > 0 )
  584. {
  585. if (m_BadgesSupportedLevels.Contains(badge_key))
  586. {
  587. int levelIndex = badge_value - 1;
  588. int maxSupportedIndex = m_BadgesSupportedLevels.Get(badge_key) - 1;
  589. if (maxSupportedIndex >= levelIndex)
  590. badge_widget.SetImage(levelIndex);
  591. }
  592. badge_widget.Show( true );
  593. m_AnyBadgeVisible = true;
  594. if( badge_key == NTFKEY_BLEEDISH )
  595. {
  596. bleed_count.Show( true );
  597. bleed_count.SetText( m_BadgesWidgetDisplay.Get( badge_key ).ToString() );
  598. }
  599. }
  600. else
  601. {
  602. if( badge_key == NTFKEY_BLEEDISH )
  603. {
  604. bleed_count.Show( false );
  605. }
  606. badge_widget.Show( false );
  607. }
  608. }
  609. }
  610. RefreshHudVisibility();
  611. }
  612. override void SetTemperature( string temp )
  613. {
  614. m_IsTemperatureVisible = true;
  615. TextWidget temp_top = TextWidget.Cast( m_Notifiers.FindAnyWidget( "TemperatureValueTop" ) );
  616. TextWidget temp_bot = TextWidget.Cast( m_Notifiers.FindAnyWidget( "TemperatureValueBottom" ) );
  617. temp_top.SetText( temp );
  618. temp_bot.SetText( temp );
  619. m_TemperatureTimer = 0;
  620. }
  621. void HideTemperature()
  622. {
  623. m_IsTemperatureVisible = false;
  624. TextWidget temp_top = TextWidget.Cast( m_Notifiers.FindAnyWidget( "TemperatureValueTop" ) );
  625. TextWidget temp_bot = TextWidget.Cast( m_Notifiers.FindAnyWidget( "TemperatureValueBottom" ) );
  626. temp_top.SetText( "" );
  627. temp_bot.SetText( "" );
  628. m_TemperatureTimer = 0;
  629. }
  630. override void SetStaminaBarVisibility( bool show )
  631. {
  632. //m_StaminaBackground.Show( show );
  633. //m_Stamina.Show( show );
  634. if ( show )
  635. {
  636. m_Stamina.SetAlpha(1);
  637. //m_Stamina.SetTextColor( ColorManager.COLOR_NORMAL_TEXT );
  638. }
  639. else
  640. {
  641. m_Stamina.SetAlpha(0.3);
  642. //m_Stamina.SetTextColor( ColorManager.RED_COLOR );
  643. }
  644. m_IsStaminaVisible = show;
  645. m_StaminaTimer = 0;
  646. }
  647. // state 0 = empty
  648. // state 1 = digesting
  649. // state 2 = full
  650. void SetStomachState( int state )
  651. {
  652. ImageWidget stomach = ImageWidget.Cast( m_Badges.FindAnyWidget( "Stomach" ) );
  653. stomach.LoadImageFile( 0, "set:dayz_gui image:iconStomach" + state );
  654. }
  655. override void SetStamina( int value , int range )
  656. {
  657. float sx, sy;
  658. float max = CfgGameplayHandler.GetStaminaMax();
  659. float percentage = 1;
  660. if (max != 0)
  661. {
  662. percentage = range / max;
  663. }
  664. if (range != 0)
  665. {
  666. m_Stamina.SetCurrent(( value / range ) * 100);
  667. }
  668. else
  669. {
  670. m_Stamina.SetCurrent(0);
  671. }
  672. m_Stamina.GetSize(sx, sy);
  673. m_Stamina.SetSize(percentage, sy);
  674. m_StaminaBackground.SetSize(1 - percentage, sy);
  675. // set health & blood values
  676. if (!GetGame().IsMultiplayer())
  677. {
  678. if (GetGame().GetPlayer())
  679. {
  680. PlayerBase player;
  681. Class.CastTo(player, GetGame().GetPlayer());
  682. if (player)
  683. {
  684. float h1 = player.GetHealth("","");
  685. float b1 = player.GetHealth("","Blood");
  686. GetDayZGame().GetBacklit().SetHealth(h1);
  687. GetDayZGame().GetBacklit().SetBlood(b1);
  688. }
  689. }
  690. }
  691. // update backlit
  692. GetDayZGame().GetBacklit().UpdatePlayer(false);
  693. }
  694. bool KeyPress(int key)
  695. {
  696. return false;
  697. }
  698. void ZeroingKeyPress()
  699. {
  700. m_ZeroingKeyPressed = true;
  701. }
  702. override void DisplayStance( int stance )
  703. {
  704. PlayerBase player;
  705. Class.CastTo(player, GetGame().GetPlayer() );
  706. Car car;
  707. if ( !Class.CastTo(car, player.GetDrivingVehicle()) )
  708. {
  709. if( stance == 1 )
  710. {
  711. bool is_walking;
  712. m_StanceStand.Show(!is_walking);
  713. m_StanceStandWalk.Show(is_walking);
  714. m_StanceCrouch.Show(false);
  715. m_StanceProne.Show(false);
  716. m_StanceCar.Show( false );
  717. }
  718. if( stance == 2 )
  719. {
  720. m_StanceStand.Show(false);
  721. m_StanceStandWalk.Show(false);
  722. m_StanceCrouch.Show(true);
  723. m_StanceProne.Show(false);
  724. m_StanceCar.Show( false );
  725. }
  726. if( stance == 3 )
  727. {
  728. m_StanceStand.Show(false);
  729. m_StanceStandWalk.Show(false);
  730. m_StanceCrouch.Show(false);
  731. m_StanceProne.Show(true);
  732. m_StanceCar.Show( false );
  733. }
  734. }
  735. else
  736. {
  737. m_StanceStand.Show(false);
  738. m_StanceCrouch.Show(false);
  739. m_StanceProne.Show(false);
  740. m_StanceCar.Show( true );
  741. }
  742. }
  743. override void DisplayPresence()
  744. {
  745. PlayerBase player;
  746. if ( Class.CastTo(player, GetGame().GetPlayer()) )
  747. {
  748. int presence_level = player.GetNoisePresenceInAI();
  749. m_PresenceLevel0.Show( false );
  750. m_PresenceLevel1.Show( false );
  751. m_PresenceLevel2.Show( false );
  752. m_PresenceLevel3.Show( false );
  753. m_PresenceLevel4.Show( false );
  754. if ( presence_level > 0 )
  755. {
  756. m_PresenceLevel0.Show( true );
  757. }
  758. if ( presence_level > 1 )
  759. {
  760. m_PresenceLevel1.Show( true );
  761. }
  762. if ( presence_level > 2 )
  763. {
  764. m_PresenceLevel2.Show( true );
  765. }
  766. if ( presence_level > 3 )
  767. {
  768. m_PresenceLevel3.Show( true );
  769. }
  770. if ( presence_level > 4 )
  771. {
  772. m_PresenceLevel4.Show( true );
  773. }
  774. }
  775. }
  776. int m_VehicleGearCount = -1;
  777. float m_TimeSinceLastEngineLightChange;
  778. bool m_VehicleHasOil;
  779. bool m_VehicleHasCoolant;
  780. override void ShowVehicleInfo()
  781. {
  782. PlayerBase currentPlayer = PlayerBase.Cast(GetGame().GetPlayer());
  783. if (!currentPlayer)
  784. return;
  785. Transport vehicle = Transport.Cast(currentPlayer.GetDrivingVehicle());
  786. if (!vehicle)
  787. return;
  788. VehicleHudBase vehHud = m_VehicleHudMap.Get(vehicle.GetVehicleType());
  789. if (vehHud)
  790. {
  791. vehHud.ShowVehicleInfo(currentPlayer);
  792. m_ActiveVehicleHUD = vehHud;
  793. }
  794. #ifndef VEH_UI_REFACTOR
  795. PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
  796. if (player)
  797. {
  798. HumanCommandVehicle hcv = player.GetCommand_Vehicle();
  799. if (hcv)
  800. {
  801. m_CurrentVehicle = CarScript.Cast(hcv.GetTransport());
  802. if (m_CurrentVehicle)
  803. {
  804. m_VehicleGearCount = m_CurrentVehicle.GetGearsCount();
  805. m_VehicleOilLight.Show(m_VehicleHasOil);
  806. float rpm_value_red = m_CurrentVehicle.EngineGetRPMRedline() / m_CurrentVehicle.EngineGetRPMMax();
  807. m_VehicleRPMDial.SetMaskProgress(rpm_value_red);
  808. m_VehicleRPMRedline.SetMaskProgress(1 - rpm_value_red);
  809. }
  810. }
  811. }
  812. #endif
  813. ShowVehicleHud(true);
  814. }
  815. override void HideVehicleInfo()
  816. {
  817. ShowVehicleHud(false);
  818. if (m_ActiveVehicleHUD)
  819. {
  820. m_ActiveVehicleHUD.HideVehicleInfo();
  821. m_ActiveVehicleHUD = null;
  822. if (m_IsHudVisible)
  823. {
  824. m_PlayerPanelWidget.Show(true);
  825. m_Presence.Show(true);
  826. m_StancePanel.Show(true);
  827. }
  828. return;
  829. }
  830. #ifndef VEH_UI_REFACTOR
  831. if (m_IsHudVisible)
  832. {
  833. m_PlayerPanelWidget.Show(true);
  834. m_Presence.Show(true);
  835. m_StancePanel.Show(true);
  836. }
  837. m_CurrentVehicle = null;
  838. m_VehicleGearCount = -1;
  839. #endif
  840. }
  841. void RefreshVehicleHud(float timeslice)
  842. {
  843. RefreshVehicleHudVisibility(); // these run in frame because they are overriden by close menu logic which forces everything in left HUD panel visible atm
  844. if (m_ActiveVehicleHUD)
  845. m_ActiveVehicleHUD.RefreshVehicleHud(timeslice);
  846. #ifndef VEH_UI_REFACTOR
  847. if (m_CurrentVehicle)
  848. {
  849. m_PlayerPanelWidget.Show(false);
  850. m_StancePanel.Show(false);
  851. m_Presence.Show(false);
  852. float rpm_value = m_CurrentVehicle.EngineGetRPM() / m_CurrentVehicle.EngineGetRPMMax();
  853. float rpm_value_red = m_CurrentVehicle.EngineGetRPMRedline() / m_CurrentVehicle.EngineGetRPMMax();
  854. float speed_value = m_CurrentVehicle.GetSpeedometerAbsolute() / 200;
  855. m_VehicleRPMPointer.SetRotation(0, 0, rpm_value * 270 - 130, true);
  856. m_VehicleSpeedPointer.SetRotation(0, 0, speed_value * 260 - 130, true);
  857. m_VehicleSpeedValue.SetText(Math.AbsInt(m_CurrentVehicle.GetSpeedometer()).ToString());
  858. int engineHealthLevel = m_CurrentVehicle.GetHealthLevel("Engine");
  859. int fuelTankHealthLevel = m_CurrentVehicle.GetHealthLevel("FuelTank");
  860. bool newHealth = false;
  861. //! engine
  862. if (m_CurrentVehicle.HasEngineZoneReceivedHit())
  863. {
  864. if (m_TimeSinceLastEngineLightChange > 0.35)
  865. {
  866. m_VehicleEngineLight.Show(!m_VehicleEngineLight.IsVisible());
  867. if (engineHealthLevel <= GameConstants.STATE_WORN)
  868. {
  869. m_VehicleEngineLight.SetColor(Colors.WHITE);
  870. }
  871. else
  872. {
  873. m_VehicleEngineLight.SetColor(ItemManager.GetItemHealthColor(engineHealthLevel));
  874. }
  875. m_VehicleEngineLight.SetAlpha(1);
  876. m_TimeSinceLastEngineLightChange = 0;
  877. }
  878. m_TimeSinceLastEngineLightChange += timeslice;
  879. newHealth = true;
  880. }
  881. else if (engineHealthLevel > GameConstants.STATE_WORN)
  882. {
  883. m_VehicleEngineLight.SetColor(ItemManager.GetItemHealthColor(engineHealthLevel));
  884. m_VehicleEngineLight.SetAlpha(1);
  885. m_VehicleEngineLight.Show(true);
  886. }
  887. else
  888. {
  889. m_VehicleEngineLight.Show(false);
  890. }
  891. //! fuel tank
  892. if (fuelTankHealthLevel <= GameConstants.STATE_WORN)
  893. {
  894. m_VehicleFuelLight.SetColor(Colors.WHITE);
  895. m_VehicleFuelLight.SetAlpha(1);
  896. m_VehicleFuelLight.Show(true);
  897. }
  898. else if (fuelTankHealthLevel > GameConstants.STATE_WORN)
  899. {
  900. m_VehicleFuelLight.SetColor(ItemManager.GetItemHealthColor(fuelTankHealthLevel));
  901. m_VehicleFuelLight.SetAlpha(1);
  902. m_VehicleFuelLight.Show(true);
  903. }
  904. //! temperature
  905. if (m_CurrentVehicle.IsVitalRadiator())
  906. {
  907. m_VehicleTemperatureIndicator.Show(true);
  908. if (m_CurrentVehicle.HasRadiator())
  909. {
  910. int radiatorHealthLevel = m_CurrentVehicle.GetRadiator().GetHealthLevel("");
  911. if (radiatorHealthLevel <= GameConstants.STATE_WORN)
  912. {
  913. m_VehicleTemperatureLight.SetColor(Colors.WHITE);
  914. m_VehicleTemperatureLight.SetAlpha(1);
  915. m_VehicleTemperatureLight.Show(true);
  916. }
  917. else if (radiatorHealthLevel > GameConstants.STATE_WORN)
  918. {
  919. m_VehicleTemperatureLight.SetColor(ItemManager.GetItemHealthColor(radiatorHealthLevel));
  920. m_VehicleTemperatureLight.SetAlpha(1);
  921. m_VehicleTemperatureLight.Show(true);
  922. }
  923. }
  924. else
  925. {
  926. m_VehicleTemperatureLight.SetColor(Colors.COLOR_RUINED);
  927. m_VehicleTemperatureLight.SetAlpha(1);
  928. m_VehicleTemperatureLight.Show(true);
  929. }
  930. }
  931. else
  932. {
  933. m_VehicleTemperatureIndicator.Show(false);
  934. }
  935. m_VehicleHandBrakeLight.Show(m_CurrentVehicle.IsHandbrakeActive());
  936. m_VehicleWheelLight.Show(m_CurrentVehicle.WheelIsAnyLocked());
  937. int engagedGear = -1;
  938. int prevGear = -1;
  939. int nextGear = -1;
  940. if (m_CurrentVehicle.GearboxGetType() == CarGearboxType.MANUAL)
  941. {
  942. engagedGear = m_CurrentVehicle.GetGear();
  943. prevGear = engagedGear - 1;
  944. nextGear = engagedGear + 1;
  945. if (engagedGear == CarGear.NEUTRAL)
  946. {
  947. prevGear = CarGear.REVERSE;
  948. }
  949. else if (engagedGear == CarGear.REVERSE)
  950. {
  951. prevGear = -1;
  952. nextGear = CarGear.NEUTRAL;
  953. }
  954. m_VehicleCurrentGearValue.SetText(m_VehicleGearTable.Get(engagedGear));
  955. m_VehicleNextGearValue.Show(nextGear < m_VehicleGearCount);
  956. m_VehicleNextGearValue.SetText(m_VehicleGearTable.Get(nextGear));
  957. m_VehiclePrevGearValue.SetText(m_VehicleGearTable.Get(prevGear));
  958. }
  959. else
  960. {
  961. engagedGear = m_CurrentVehicle.GearboxGetMode();
  962. prevGear = engagedGear - 1;
  963. nextGear = engagedGear + 1;
  964. m_VehicleCurrentGearValue.SetText(m_VehicleGearTableAuto.Get(engagedGear));
  965. m_VehicleNextGearValue.Show(nextGear < EnumTools.GetEnumSize(CarAutomaticGearboxMode));
  966. m_VehicleNextGearValue.SetText(m_VehicleGearTableAuto.Get(nextGear));
  967. m_VehiclePrevGearValue.SetText(m_VehicleGearTableAuto.Get(prevGear));
  968. }
  969. // refresh backlit
  970. GetDayZGame().GetBacklit().RefreshVehicleLayout(engagedGear, newHealth);
  971. m_VehicleFuelPointer.SetRotation( 0, 0, m_CurrentVehicle.GetFluidFraction( CarFluid.FUEL ) * 260 - 130, true );
  972. m_VehicleTemperaturePointer.SetRotation( 0, 0, -1 * m_CurrentVehicle.GetFluidFraction( CarFluid.COOLANT ) * 260 + 130, true );
  973. //! general hit timer reset
  974. if (m_VehicleDamageZonesHitTimer > 1)
  975. {
  976. m_VehicleDamageZoneHitEngineState = false;
  977. m_VehicleDamageZonesHitTimer = 0;
  978. }
  979. m_VehicleDamageZonesHitTimer += timeslice;
  980. }
  981. #endif
  982. }
  983. void InitQuickbar()
  984. {
  985. if (m_Quickbar == NULL)
  986. {
  987. m_Quickbar = new InventoryQuickbar( m_QuickbarWidget );
  988. }
  989. }
  990. InventoryQuickbar GetQuickbar()
  991. {
  992. return m_Quickbar;
  993. }
  994. bool IsQuickbarVisible()
  995. {
  996. return m_IsQuickbarVisible;
  997. }
  998. bool IsHudVisible()
  999. {
  1000. return m_IsHudVisible;
  1001. }
  1002. override void UpdateQuickbarGlobalVisibility()
  1003. {
  1004. #ifdef PLATFORM_CONSOLE
  1005. ShowQuickBar(GetGame().GetInput().IsEnabledMouseAndKeyboardEvenOnServer());
  1006. #else
  1007. ShowQuickBar(g_Game.GetProfileOption(EDayZProfilesOptions.QUICKBAR));
  1008. #endif
  1009. }
  1010. void RefreshQuickbarVisibility()
  1011. {
  1012. m_IsQuickbarVisible = !m_QuickbarHideUI && !m_QuickbarHidePlayer && m_QuickbarState;
  1013. m_QuickbarWidget.Show( m_IsQuickbarVisible );
  1014. }
  1015. void RefreshVehicleHudVisibility()
  1016. {
  1017. m_IsVehicleHudVisible = !m_VehicleHudDisabled && m_VehicleHudState && !GetGame().GetUIManager().GetMenu();
  1018. if (m_VehicleHudState) // being in vehicle should hide stamina and others
  1019. {
  1020. m_PlayerPanelWidget.Show(false);
  1021. m_StancePanel.Show(false);
  1022. m_Presence.Show(false);
  1023. }
  1024. if (m_ActiveVehicleHUD && m_IsVehicleHudVisible)
  1025. {
  1026. m_VehicleHudPanels.Show(true);
  1027. foreach (VehicleHudBase hudBase : m_VehicleHudArray) // hide inactive vehicle huds
  1028. {
  1029. if (hudBase != m_ActiveVehicleHUD)
  1030. hudBase.HidePanel();
  1031. }
  1032. }
  1033. else
  1034. m_VehicleHudPanels.Show(false);
  1035. #ifdef VEH_UI_REFACTOR
  1036. m_VehiclePanel.Show(false); // Temp
  1037. #endif
  1038. #ifndef VEH_UI_REFACTOR
  1039. if (!m_ActiveVehicleHUD && m_IsVehicleHudVisible)
  1040. m_VehiclePanel.Show(true);
  1041. else
  1042. m_VehiclePanel.Show(false);
  1043. #endif
  1044. }
  1045. void RefreshHudVisibility()
  1046. {
  1047. m_IsHudVisible = ( !m_HudHidePlayer && !m_HudHideUI && m_HudState ) || m_HudInventory;
  1048. SetLeftStatsVisibility( m_IsHudVisible );
  1049. m_Badges.Show( m_IsHudVisible );
  1050. m_Notifiers.Show( m_IsHudVisible );
  1051. m_BadgeNotifierDivider.Show( m_IsHudVisible && m_AnyBadgeVisible );
  1052. #ifdef PLATFORM_CONSOLE
  1053. m_SpecializatonPanel.Show(m_HudInventory);
  1054. #else
  1055. m_SpecializatonPanel.Show(false);
  1056. #endif
  1057. }
  1058. void UpdateSpecialtyMeter(float x, float y)
  1059. {
  1060. #ifdef PLATFORM_CONSOLE
  1061. m_SpecializationIcon.SetPos(x, y, true);
  1062. #endif
  1063. }
  1064. bool IsHideQuickbarPlayer()
  1065. {
  1066. return m_QuickbarHidePlayer;
  1067. }
  1068. bool IsHideHudPlayer()
  1069. {
  1070. return m_HudHidePlayer;
  1071. }
  1072. override void ShowQuickbarUI( bool show )
  1073. {
  1074. m_QuickbarHideUI = !show;
  1075. RefreshQuickbarVisibility();
  1076. }
  1077. override void ShowQuickbarPlayer( bool show )
  1078. {
  1079. m_QuickbarHidePlayer = !show;
  1080. RefreshQuickbarVisibility();
  1081. }
  1082. override void ShowHudPlayer( bool show )
  1083. {
  1084. m_HudHidePlayer = !show;
  1085. if (m_HudState)
  1086. {
  1087. RefreshHudVisibility();
  1088. }
  1089. }
  1090. override void ShowHudUI( bool show )
  1091. {
  1092. m_HudHideUI = !show;
  1093. if (m_HudState)
  1094. {
  1095. RefreshHudVisibility();
  1096. }
  1097. }
  1098. override void ShowHudInventory( bool show )
  1099. {
  1100. m_HudInventory = show;
  1101. RefreshHudVisibility();
  1102. }
  1103. //! global setting; is quickbar visibility allowed?
  1104. override void ShowQuickBar( bool show )
  1105. {
  1106. m_QuickbarState = show;
  1107. //shown by default
  1108. m_QuickbarHidePlayer = false;
  1109. RefreshQuickbarVisibility();
  1110. }
  1111. override void ShowHud( bool show )
  1112. {
  1113. m_HudState = show;
  1114. m_HudHidePlayer = false;
  1115. RefreshHudVisibility();
  1116. }
  1117. //! enter/exit driver seat
  1118. void ShowVehicleHud(bool state)
  1119. {
  1120. m_VehicleHudState = state;
  1121. RefreshVehicleHudVisibility();
  1122. }
  1123. //! game settings option
  1124. void SetVehicleHudDisabled(bool state)
  1125. {
  1126. m_VehicleHudDisabled = state;
  1127. RefreshVehicleHudVisibility();
  1128. }
  1129. bool GetQuickBarState()
  1130. {
  1131. return m_QuickbarState;
  1132. }
  1133. bool GetHudState()
  1134. {
  1135. return m_HudState;
  1136. }
  1137. override void SetConnectivityStatIcon(EConnectivityStatType type, EConnectivityStatLevel level)
  1138. {
  1139. if (type == EConnectivityStatType.PING)
  1140. {
  1141. switch (level)
  1142. {
  1143. case EConnectivityStatLevel.OFF:
  1144. m_HighPingA.Show(false);
  1145. m_HighPingB.Show(false);
  1146. break;
  1147. case EConnectivityStatLevel.LEVEL1:
  1148. m_HighPingA.Show(true);
  1149. m_HighPingB.Show(false);
  1150. break;
  1151. case EConnectivityStatLevel.LEVEL2:
  1152. m_HighPingA.Show(false);
  1153. m_HighPingB.Show(true);
  1154. break;
  1155. }
  1156. }
  1157. else if (type == EConnectivityStatType.SERVER_PERF)
  1158. {
  1159. switch (level)
  1160. {
  1161. case EConnectivityStatLevel.OFF:
  1162. m_LowServerPerfA.Show(false);
  1163. m_LowServerPerfB.Show(false);
  1164. break;
  1165. case EConnectivityStatLevel.LEVEL1:
  1166. m_LowServerPerfA.Show(true);
  1167. m_LowServerPerfB.Show(false);
  1168. break;
  1169. case EConnectivityStatLevel.LEVEL2:
  1170. m_LowServerPerfA.Show(false);
  1171. m_LowServerPerfB.Show(true);
  1172. break;
  1173. }
  1174. }
  1175. else if (type == EConnectivityStatType.CONN_LOST)
  1176. {
  1177. switch (level)
  1178. {
  1179. case EConnectivityStatLevel.OFF:
  1180. m_ConnectionLost.Show(false);
  1181. break;
  1182. case EConnectivityStatLevel.LEVEL1:
  1183. m_ConnectionLost.Show(true);
  1184. break
  1185. }
  1186. }
  1187. }
  1188. //! eg. stamina bar...
  1189. void SetLeftStatsVisibility(bool visible)
  1190. {
  1191. if (!m_IsHudVisible)
  1192. visible = false;
  1193. Widget child = m_LeftHudPanelWidget.GetChildren();
  1194. while (child)
  1195. {
  1196. if (child.GetName() == "ChatFrameWidget")
  1197. {
  1198. child = child.GetSibling();
  1199. continue
  1200. }
  1201. child.Show(visible);
  1202. child = child.GetSibling();
  1203. }
  1204. }
  1205. override void RefreshQuickbar( bool itemChanged = false )
  1206. {
  1207. if ((!m_QuickbarState || m_QuickbarHidePlayer || m_QuickbarHideUI) && !itemChanged) // Don't update when it is hidden or disabled
  1208. return;
  1209. if ( itemChanged )
  1210. {
  1211. UIManager manager = GetGame().GetUIManager();
  1212. InventoryMenu inventory = InventoryMenu.Cast(manager.FindMenu( MENU_INVENTORY ));
  1213. MissionGameplay mission = MissionGameplay.Cast(GetGame().GetMission());
  1214. if ( mission )
  1215. {
  1216. inventory = mission.GetInventory();
  1217. }
  1218. if ( inventory )
  1219. {
  1220. inventory.RefreshQuickbar();
  1221. }
  1222. }
  1223. if ( m_Quickbar )
  1224. {
  1225. m_Quickbar.UpdateItems( m_QuickbarWidget );
  1226. }
  1227. }
  1228. Widget GetHudPanelWidget()
  1229. {
  1230. return m_HudPanelWidget;
  1231. }
  1232. override void UpdateBloodName()
  1233. {
  1234. PlayerBase player;
  1235. Class.CastTo(player, GetGame().GetPlayer() );
  1236. if( player )
  1237. {
  1238. string blood_name;
  1239. bool positive;
  1240. BloodTypes.GetBloodTypeName( player.GetBloodType(), blood_name, positive );
  1241. bool blood_type_visible = player.HasBloodTypeVisible();
  1242. if( blood_type_visible )
  1243. {
  1244. m_BloodType.SetText( blood_name );
  1245. if( positive )
  1246. m_BloodPosType.SetText( "+" );
  1247. else
  1248. m_BloodPosType.SetText( "-" );
  1249. }
  1250. else
  1251. {
  1252. m_BloodType.SetText( "" );
  1253. m_BloodPosType.SetText( "" );
  1254. }
  1255. }
  1256. }
  1257. void RefreshPlayerTags()
  1258. {
  1259. if( GetGame().GetPlayer() )
  1260. {
  1261. bool found = false;
  1262. vector head_pos = GetGame().GetCurrentCameraPosition();
  1263. float distance;
  1264. foreach( Man player : ClientData.m_PlayerBaseList )
  1265. {
  1266. vector target_player = player.GetPosition();
  1267. distance = vector.Distance( head_pos, target_player );
  1268. target_player[1] = target_player[1] + 1.2;
  1269. if( distance <= 15 && player != GetGame().GetPlayer() )
  1270. {
  1271. vector screen_pos = GetGame().GetScreenPosRelative( target_player );
  1272. vector end_pos = head_pos + GetGame().GetCurrentCameraDirection() * 25;
  1273. RaycastRVParams params = new RaycastRVParams( head_pos, end_pos, GetGame().GetPlayer(), 0 );
  1274. params.sorted = true;
  1275. array<ref RaycastRVResult> results = new array<ref RaycastRVResult>;
  1276. DayZPhysics.RaycastRVProxy( params, results );
  1277. if( results.Count() > 0 )
  1278. {
  1279. if( results.Get( 0 ).obj == player )
  1280. {
  1281. m_CurrentTaggedPlayer = PlayerBase.Cast( player );
  1282. found = true;
  1283. }
  1284. }
  1285. }
  1286. }
  1287. if( !found )
  1288. {
  1289. m_CurrentTaggedPlayer = null;
  1290. }
  1291. }
  1292. }
  1293. int m_PlayerSpineIndex;
  1294. PlayerBase m_CurrentTaggedPlayer;
  1295. Widget m_PlayerTag;
  1296. TextWidget m_PlayerTagText;
  1297. void ShowPlayerTag( float timeslice )
  1298. {
  1299. if ( m_CurrentTaggedPlayer && m_CurrentTaggedPlayer.GetIdentity() )
  1300. {
  1301. if ( !m_PlayerTag )
  1302. {
  1303. m_PlayerTag = GetGame().GetWorkspace().CreateWidgets("gui/layouts/new_ui/hud/hud_player_tag.layout");
  1304. m_PlayerTagText = TextWidget.Cast( m_PlayerTag.FindAnyWidget( "TagText" ) );
  1305. }
  1306. m_PlayerSpineIndex = m_CurrentTaggedPlayer.GetBoneIndex( "Spine2" );
  1307. vector player_pos = m_CurrentTaggedPlayer.GetBonePositionWS( m_PlayerSpineIndex );
  1308. vector screen_pos = GetGame().GetScreenPosRelative( player_pos );
  1309. if ( screen_pos[2] > 0 )
  1310. {
  1311. if ( screen_pos[0] > 0 && screen_pos[0] < 1 )
  1312. {
  1313. if ( screen_pos[1] > 0 && screen_pos[1] < 1 )
  1314. {
  1315. m_PlayerTagText.SetAlpha( Math.Clamp( m_PlayerTagText.GetAlpha() + timeslice * 10, 0, 1 ) );
  1316. m_PlayerTag.SetPos( 0.55, 0.55 );
  1317. m_PlayerTagText.SetText( m_CurrentTaggedPlayer.GetIdentity().GetPlainName() );
  1318. //m_PlayerTagText.SetSize( 1, 1 - screen_pos[2] / 25 );
  1319. return;
  1320. }
  1321. }
  1322. }
  1323. }
  1324. if ( m_PlayerTag )
  1325. {
  1326. float new_alpha = Math.Clamp( m_PlayerTagText.GetAlpha() - timeslice * 10, 0, 1 );
  1327. m_PlayerTagText.SetAlpha( Math.Clamp( m_PlayerTagText.GetAlpha() - timeslice * 10, 0, 1 ) );
  1328. if ( new_alpha == 0 )
  1329. {
  1330. m_PlayerTagText.SetText( "" );
  1331. m_CurrentTaggedPlayer = null;
  1332. }
  1333. }
  1334. }
  1335. override void Update( float timeslice )
  1336. {
  1337. super.Update( timeslice );
  1338. m_ActionTargetsCursor.Update();
  1339. DisplayPresence();
  1340. //
  1341. //modifiers - tendency status (critical)
  1342. if ( m_BlinkTime > TENDENCY_BLINK_TIME )
  1343. {
  1344. //get color & alpha
  1345. if ( m_TendencyStatusCritical.Count() > 0 )
  1346. {
  1347. for ( int i = 0; i < m_TendencyStatusCritical.Count(); ++i )
  1348. {
  1349. ImageWidget widget = m_TendencyStatusCritical.GetKey( i );
  1350. int alpha = widget.GetAlpha() * 255;
  1351. int color;
  1352. int colorA = ARGB( alpha, 255, 255, 255 );
  1353. int colorB = m_TendencyStatusCritical.Get( widget );
  1354. //set new color to different color
  1355. if ( widget.GetColor() == colorA )
  1356. {
  1357. color = colorB;
  1358. }
  1359. else
  1360. {
  1361. color = colorA;
  1362. }
  1363. widget.SetColor( color );
  1364. }
  1365. }
  1366. m_BlinkTime = 0; //reset
  1367. }
  1368. else
  1369. {
  1370. m_BlinkTime += timeslice;
  1371. }
  1372. if( m_IsTemperatureVisible )
  1373. {
  1374. m_TemperatureTimer += timeslice;
  1375. if( m_TemperatureTimer > m_TemperatureShowTime )
  1376. {
  1377. HideTemperature();
  1378. }
  1379. }
  1380. if ( !m_IsStaminaVisible )
  1381. {
  1382. m_StaminaTimer += timeslice;
  1383. if ( m_StaminaTimer > m_StaminaShowTime )
  1384. {
  1385. SetStaminaBarVisibility( true );
  1386. }
  1387. }
  1388. if ( m_HitDirEffectArray && m_HitDirEffectArray.Count() > 0 )
  1389. {
  1390. UpdateHitDirEffects(timeslice);
  1391. CleanupHitDirEffects();
  1392. }
  1393. RefreshVehicleHud(timeslice);
  1394. if (m_IsHudVisible && m_HeatBufferUI && m_HeatBufferUI.CanUpdate())
  1395. m_HeatBufferUI.Update(timeslice);
  1396. #ifdef PLATFORM_PS4
  1397. RefreshPlayerTags();
  1398. ShowPlayerTag(timeslice);
  1399. #endif
  1400. }
  1401. override void SpawnHitDirEffect(DayZPlayer player, float hit_direction,float intensity_max)
  1402. {
  1403. if (HitDirectionEffectBase.m_Mode == HitDirectionModes.DISABLED)
  1404. {
  1405. return;
  1406. }
  1407. if (m_HitDirEffectArray == null)
  1408. {
  1409. m_HitDirEffectArray = new array<ref HitDirectionEffectBase>;
  1410. }
  1411. HitDirectionEffectBase hiteff = HitDirectionEffectBase.Cast(HitDirectionEffectBase.GetCurrentType().Spawn());
  1412. hiteff.Init(player,hit_direction,intensity_max);
  1413. m_HitDirEffectArray.Insert(hiteff);
  1414. }
  1415. void UpdateHitDirEffects( float timeslice )
  1416. {
  1417. for (int i = 0; i < m_HitDirEffectArray.Count(); i++)
  1418. {
  1419. m_HitDirEffectArray[i].Update(timeslice);
  1420. }
  1421. }
  1422. void CleanupHitDirEffects()
  1423. {
  1424. for (int i = m_HitDirEffectArray.Count() - 1; i > -1; i--)
  1425. {
  1426. if ( m_HitDirEffectArray[i].DurationCheck() )
  1427. {
  1428. m_HitDirEffectArray.Remove(i);
  1429. }
  1430. }
  1431. }
  1432. override void InitHeatBufferUI(Man player)
  1433. {
  1434. m_HeatBufferUI = new IngameHudHeatBuffer(m_HudPanelWidget, PlayerBase.Cast(player));
  1435. }
  1436. void Debug()
  1437. {
  1438. foreach (int val:m_BadgesWidgetDisplay)
  1439. {
  1440. int key = m_BadgesWidgetDisplay.GetKeyByValue(val);
  1441. Print(EnumTools.EnumToString(eDisplayElements, key));
  1442. Print(val);
  1443. Print("---------------------");
  1444. }
  1445. }
  1446. //------------------------------------------
  1447. //ye olde unused methods
  1448. //DEPRECATED
  1449. void HideQuickbarTimer()
  1450. {
  1451. }
  1452. }