inspectmenunew.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631
  1. //--------------------------------------------------------------------------
  2. class InspectMenuNew extends UIScriptedMenu
  3. {
  4. private ItemPreviewWidget m_item_widget;
  5. private ItemPreviewWidget m_slot_widget;
  6. private int m_characterRotationX;
  7. private int m_characterRotationY;
  8. private int m_characterScaleDelta;
  9. private vector m_characterOrientation;
  10. void InspectMenuNew()
  11. {
  12. GetGame().GetMission().AddActiveInputExcludes({"inspect"});
  13. }
  14. //--------------------------------------------------------------------------
  15. void ~InspectMenuNew()
  16. {
  17. GetGame().GetDragQueue().RemoveCalls(this);
  18. Mission mis = GetGame().GetMission();
  19. if (mis)
  20. {
  21. mis.GetHud().ShowHudUI(true);
  22. mis.GetHud().ShowQuickbarUI(true);
  23. mis.RemoveActiveInputExcludes({"inspect"});
  24. }
  25. }
  26. //--------------------------------------------------------------------------
  27. override Widget Init()
  28. {
  29. layoutRoot = GetGame().GetWorkspace().CreateWidgets("gui/layouts/inventory_new/day_z_inventory_new_inspect.layout");
  30. return layoutRoot;
  31. }
  32. //--------------------------------------------------------------------------
  33. override bool OnClick(Widget w, int x, int y, int button)
  34. {
  35. super.OnClick(w, x, y, button);
  36. switch (w.GetUserID())
  37. {
  38. case IDC_CANCEL:
  39. Close();
  40. return true;
  41. }
  42. return false;
  43. }
  44. //--------------------------------------------------------------------------
  45. void SetItem(EntityAI item)
  46. {
  47. if (item)
  48. {
  49. InspectMenuNew.UpdateItemInfo(layoutRoot, item);
  50. if (!m_item_widget)
  51. {
  52. Widget preview_frame = layoutRoot.FindAnyWidget("ItemFrameWidget");
  53. if (preview_frame)
  54. {
  55. m_item_widget = ItemPreviewWidget.Cast( preview_frame );
  56. }
  57. }
  58. m_item_widget.SetItem(item);
  59. m_item_widget.SetView( item.GetViewIndex() );
  60. m_item_widget.SetModelPosition(Vector(0,0,1));
  61. PPERequesterBank.GetRequester(PPERequester_InventoryBlur).Start();
  62. }
  63. }
  64. //--------------------------------------------------------------------------
  65. override bool OnMouseButtonDown(Widget w, int x, int y, int button)
  66. {
  67. super.OnMouseButtonDown(w, x, y, button);
  68. if (w == m_item_widget)
  69. {
  70. GetGame().GetDragQueue().Call(this, "UpdateRotation");
  71. GetMousePos(m_characterRotationX, m_characterRotationY);
  72. return true;
  73. }
  74. return false;
  75. }
  76. //--------------------------------------------------------------------------
  77. void UpdateRotation(int mouse_x, int mouse_y, bool is_dragging)
  78. {
  79. vector o = m_characterOrientation;
  80. o[0] = o[0] + (m_characterRotationY - mouse_y);
  81. o[1] = o[1] - (m_characterRotationX - mouse_x);
  82. m_item_widget.SetModelOrientation( o );
  83. if (!is_dragging)
  84. {
  85. m_characterOrientation = o;
  86. }
  87. }
  88. //--------------------------------------------------------------------------
  89. override bool OnMouseWheel(Widget w, int x, int y, int wheel)
  90. {
  91. super.OnMouseWheel(w, x, y, wheel);
  92. if ( w == m_item_widget )
  93. {
  94. m_characterScaleDelta = wheel;
  95. UpdateScale();
  96. }
  97. return false;
  98. }
  99. //--------------------------------------------------------------------------
  100. void UpdateScale()
  101. {
  102. float w, h, x, y;
  103. m_item_widget.GetPos(x, y);
  104. m_item_widget.GetSize(w,h);
  105. w = w + ( m_characterScaleDelta / 4);
  106. h = h + ( m_characterScaleDelta / 4 );
  107. if ( w > 0.5 && w < 3 )
  108. {
  109. m_item_widget.SetSize( w, h );
  110. // align to center
  111. int screen_w, screen_h;
  112. GetScreenSize(screen_w, screen_h);
  113. float new_x = x - ( m_characterScaleDelta / 8 );
  114. float new_y = y - ( m_characterScaleDelta / 8 );
  115. m_item_widget.SetPos( new_x, new_y );
  116. }
  117. }
  118. //--------------------------------------------------------------------------
  119. static void UpdateItemInfo(Widget root_widget, EntityAI item)
  120. {
  121. if (!root_widget || !item) return;
  122. Widget panelInfo = root_widget.FindAnyWidget("InventoryInfoPanelWidget");
  123. if ( panelInfo )
  124. {
  125. if ( item.IsInherited( ZombieBase ) || item.IsInherited( Car ) )
  126. {
  127. panelInfo.Show( false );
  128. }
  129. else
  130. {
  131. panelInfo.Show( true );
  132. }
  133. }
  134. if ( !item.IsInherited( ZombieBase ) && !item.IsInherited( Car ) )
  135. {
  136. InventoryItem iItem = InventoryItem.Cast( item );
  137. string tooltip = iItem.GetTooltip();
  138. if (iItem.IsMeleeFinisher())
  139. tooltip = tooltip + "\n" + "#inv_inspect_stealth_tooltip";
  140. WidgetTrySetText(root_widget, "ItemDescWidget", tooltip);
  141. }
  142. WidgetTrySetText(root_widget, "ItemNameWidget", item.GetDisplayName());
  143. InspectMenuNew.UpdateItemInfoDamage(root_widget, item);
  144. InspectMenuNew.UpdateItemInfoLiquidType(root_widget, item);
  145. InspectMenuNew.UpdateItemInfoTemperature(root_widget, item);
  146. InspectMenuNew.UpdateItemInfoWetness(root_widget, item);
  147. InspectMenuNew.UpdateItemInfoQuantity(root_widget, item);
  148. InspectMenuNew.UpdateItemInfoWeight(root_widget, item);
  149. InspectMenuNew.UpdateItemInfoFoodStage(root_widget, item);
  150. InspectMenuNew.UpdateItemInfoCleanness(root_widget, item);
  151. Widget content = root_widget.FindAnyWidget("InventoryInfoPanelWidget");
  152. }
  153. //--------------------------------------------------------------------------
  154. static void UpdateSlotInfo(Widget root_widget, string name, string desc = "")
  155. {
  156. if (!root_widget ) return;
  157. WidgetTrySetText(root_widget, "ItemNameWidget", name);
  158. }
  159. //--------------------------------------------------------------------------
  160. static void UpdateItemInfoDamage(Widget root_widget, EntityAI item)
  161. {
  162. if ( item.IsInherited( ZombieBase ) || item.IsInherited( Car ) ) return;
  163. int damageLevel = item.GetHealthLevel();
  164. switch(damageLevel)
  165. {
  166. case GameConstants.STATE_RUINED:
  167. {
  168. WidgetTrySetText(root_widget, "ItemDamageWidget", "#inv_inspect_ruined", Colors.COLOR_RUINED);
  169. break;
  170. }
  171. case GameConstants.STATE_BADLY_DAMAGED:
  172. {
  173. WidgetTrySetText(root_widget, "ItemDamageWidget", "#inv_inspect_badly", Colors.COLOR_BADLY_DAMAGED);
  174. break;
  175. }
  176. case GameConstants.STATE_DAMAGED:
  177. {
  178. WidgetTrySetText(root_widget, "ItemDamageWidget", "#inv_inspect_damaged", Colors.COLOR_DAMAGED);
  179. break;
  180. }
  181. case GameConstants.STATE_WORN:
  182. {
  183. WidgetTrySetText(root_widget, "ItemDamageWidget", "#inv_inspect_worn", Colors.COLOR_WORN);
  184. break;
  185. }
  186. case GameConstants.STATE_PRISTINE:
  187. {
  188. WidgetTrySetText(root_widget, "ItemDamageWidget", "#inv_inspect_pristine", Colors.COLOR_PRISTINE);
  189. break;
  190. }
  191. default:
  192. {
  193. WidgetTrySetText(root_widget, "ItemDamageWidget", "ERROR", Colors.COLOR_PRISTINE);
  194. break;
  195. }
  196. }
  197. }
  198. //--------------------------------------------------------------------------
  199. static void UpdateItemInfoLiquidType(Widget root_widget, EntityAI item)
  200. {
  201. if ( item.IsInherited( ZombieBase ) || item.IsInherited( Car ) ) return;
  202. ItemBase item_base = ItemBase.Cast( item );
  203. if( item_base && item_base.GetQuantity() > 0 && item_base.IsBloodContainer() )
  204. {
  205. BloodContainerBase blood_container = BloodContainerBase.Cast( item_base );
  206. if( blood_container.GetBloodTypeVisible() )
  207. {
  208. string type;
  209. bool positive;
  210. string blood_type_name = BloodTypes.GetBloodTypeName(blood_container.GetLiquidType(), type, positive);
  211. WidgetTrySetText(root_widget, "ItemLiquidTypeWidget", "#inv_inspect_blood: " + blood_type_name, Colors.COLOR_LIQUID);
  212. }
  213. else
  214. {
  215. WidgetTrySetText(root_widget, "ItemLiquidTypeWidget", "#inv_inspect_blood", Colors.COLOR_LIQUID);
  216. }
  217. }
  218. else if( item_base && item_base.GetQuantity() > 0 && item_base.IsLiquidContainer() )
  219. {
  220. int liquid_type = item_base.GetLiquidType();
  221. switch(liquid_type)
  222. {
  223. case LIQUID_WATER:
  224. {
  225. WidgetTrySetText(root_widget, "ItemLiquidTypeWidget", "#inv_inspect_water", Colors.COLOR_LIQUID);
  226. break;
  227. }
  228. case LIQUID_FRESHWATER:
  229. {
  230. WidgetTrySetText(root_widget, "ItemLiquidTypeWidget", "#inv_inspect_river_water", Colors.COLOR_LIQUID);
  231. break;
  232. }
  233. case LIQUID_VODKA:
  234. {
  235. WidgetTrySetText(root_widget, "ItemLiquidTypeWidget", "#inv_inspect_vodka", Colors.COLOR_LIQUID);
  236. break;
  237. }
  238. case LIQUID_BEER:
  239. {
  240. WidgetTrySetText(root_widget, "ItemLiquidTypeWidget", "#inv_inspect_beer", Colors.COLOR_LIQUID);
  241. break;
  242. }
  243. case LIQUID_GASOLINE:
  244. {
  245. WidgetTrySetText(root_widget, "ItemLiquidTypeWidget", "#inv_inspect_gasoline", Colors.COLOR_LIQUID);
  246. break;
  247. }
  248. case LIQUID_DIESEL:
  249. {
  250. WidgetTrySetText(root_widget, "ItemLiquidTypeWidget", "#inv_inspect_diesel", Colors.COLOR_LIQUID);
  251. break;
  252. }
  253. case LIQUID_DISINFECTANT:
  254. {
  255. WidgetTrySetText(root_widget, "ItemLiquidTypeWidget", "#inv_inspect_disinfectant", Colors.COLOR_LIQUID);
  256. break;
  257. }
  258. case LIQUID_SALINE:
  259. {
  260. WidgetTrySetText(root_widget, "ItemLiquidTypeWidget", "#inv_inspect_saline", Colors.COLOR_LIQUID);
  261. break;
  262. }
  263. default:
  264. {
  265. WidgetTrySetText(root_widget, "ItemLiquidTypeWidget", "ERROR", Colors.COLOR_LIQUID);
  266. break;
  267. }
  268. }
  269. }
  270. else
  271. {
  272. WidgetTrySetText(root_widget, "ItemLiquidTypeWidget", "");
  273. }
  274. }
  275. //--------------------------------------------------------------------------
  276. static void UpdateItemInfoTemperature(Widget root_widget, EntityAI item)
  277. {
  278. if ( item.IsInherited( ZombieBase ) || item.IsInherited( Car ) ) return;
  279. float temperature;
  280. ObjectTemperatureState temperatureState;
  281. ItemBase item_base = ItemBase.Cast(item);
  282. if (item_base && item.CanHaveTemperature())
  283. {
  284. temperature = item_base.GetTemperature();
  285. temperatureState = ObjectTemperatureState.GetStateData(temperature);
  286. }
  287. if (!temperatureState || temperatureState.m_State == EObjectTemperatureState.NEUTRAL)
  288. WidgetTrySetText(root_widget, "ItemTemperatureWidget", "");
  289. else
  290. WidgetTrySetText(root_widget, "ItemTemperatureWidget", temperatureState.m_LocalizedName, temperatureState.m_Color);
  291. }
  292. //--------------------------------------------------------------------------
  293. static void UpdateItemInfoWetness(Widget root_widget, EntityAI item)
  294. {
  295. if ( item.IsInherited( ZombieBase ) || item.IsInherited( Car ) ) return;
  296. float wetness = 0;
  297. if ( item.IsInherited(ItemBase) )
  298. {
  299. ItemBase item_IB = ItemBase.Cast( item );
  300. wetness = item_IB.GetWet();
  301. }
  302. if (item.GetIsFrozen())
  303. {
  304. WidgetTrySetText(root_widget, "ItemWetnessWidget", "#inv_inspect_frozen", Colors.COLOR_FROZEN);
  305. }
  306. else if ( wetness < GameConstants.STATE_DAMP )
  307. {
  308. WidgetTrySetText(root_widget, "ItemWetnessWidget", "");
  309. }
  310. else if( wetness >= GameConstants.STATE_DAMP && wetness < GameConstants.STATE_WET )
  311. {
  312. WidgetTrySetText(root_widget, "ItemWetnessWidget", "#inv_inspcet_damp", Colors.COLOR_DAMP);
  313. }
  314. else if( wetness >= GameConstants.STATE_WET && wetness < GameConstants.STATE_SOAKING_WET )
  315. {
  316. WidgetTrySetText( root_widget, "ItemWetnessWidget", "#inv_inspect_wet", Colors.COLOR_WET );
  317. }
  318. else if( wetness >= GameConstants.STATE_SOAKING_WET && wetness < GameConstants.STATE_DRENCHED )
  319. {
  320. WidgetTrySetText( root_widget, "ItemWetnessWidget", "#inv_inspect_soaking_wet", Colors.COLOR_SOAKING_WET );
  321. }
  322. else
  323. {
  324. WidgetTrySetText( root_widget, "ItemWetnessWidget", "#inv_inspect_drenched", Colors.COLOR_DRENCHED );
  325. }
  326. }
  327. //--------------------------------------------------------------------------
  328. static void UpdateItemInfoQuantity(Widget root_widget, EntityAI item)
  329. {
  330. if ( item.IsInherited( ZombieBase ) || item.IsInherited( Car ) ) return;
  331. ItemBase item_base = ItemBase.Cast( item );
  332. if( item_base )
  333. {
  334. float item_quantity = item_base.GetQuantity();
  335. int max_quantity = item.GetQuantityMax();
  336. float quantity_ratio;
  337. if( max_quantity > 0 && !item.IsInherited( ClothingBase )) // Some items, like books, have max_quantity set to 0 => division by ZERO error in quantity_ratio
  338. {
  339. string quantity_str;
  340. if( item.ConfigGetString("stackedUnit") == "pc." )
  341. {
  342. if( item_quantity == 1 )
  343. {
  344. WidgetTrySetText( root_widget, "ItemQuantityWidget", item_quantity.ToString() + " " + "#inv_inspect_piece", Colors.COLOR_DEFAULT );
  345. }
  346. else
  347. {
  348. WidgetTrySetText( root_widget, "ItemQuantityWidget", item_quantity.ToString() + " " + "#inv_inspect_pieces", Colors.COLOR_DEFAULT );
  349. }
  350. }
  351. else if( item.ConfigGetString("stackedUnit") == "percentage" )
  352. {
  353. quantity_ratio = Math.Round( ( item_quantity / max_quantity ) * 100 );
  354. quantity_str = "#inv_inspect_remaining " + quantity_ratio.ToString() + "#inv_inspect_percent";
  355. WidgetTrySetText( root_widget, "ItemQuantityWidget", quantity_str, Colors.COLOR_DEFAULT );
  356. }
  357. else if( item.ConfigGetString("stackedUnit") == "g" )
  358. {
  359. quantity_ratio = Math.Round( ( item_quantity / max_quantity ) * 100 );
  360. quantity_str = "#inv_inspect_remaining " + quantity_ratio.ToString() + "#inv_inspect_percent";
  361. WidgetTrySetText( root_widget, "ItemQuantityWidget", quantity_str, Colors.COLOR_DEFAULT );
  362. }
  363. else if( item.ConfigGetString("stackedUnit") == "ml" )
  364. {
  365. quantity_ratio = Math.Round( ( item_quantity / max_quantity ) * 100 );
  366. quantity_str = "#inv_inspect_remaining " + quantity_ratio.ToString() + "#inv_inspect_percent";
  367. WidgetTrySetText( root_widget, "ItemQuantityWidget", quantity_str, Colors.COLOR_DEFAULT );
  368. }
  369. else if( item.IsInherited( Magazine ) )
  370. {
  371. Magazine magazine_item;
  372. Class.CastTo(magazine_item, item);
  373. if( magazine_item.GetAmmoCount() == 1 )
  374. {
  375. WidgetTrySetText( root_widget, "ItemQuantityWidget", magazine_item.GetAmmoCount().ToString() + " " + "#inv_inspect_piece", Colors.COLOR_DEFAULT );
  376. }
  377. else
  378. {
  379. WidgetTrySetText( root_widget, "ItemQuantityWidget", magazine_item.GetAmmoCount().ToString() + " " + "#inv_inspect_pieces", Colors.COLOR_DEFAULT );
  380. }
  381. }
  382. else
  383. {
  384. WidgetTrySetText( root_widget, "ItemQuantityWidget", "" );
  385. }
  386. }
  387. else
  388. {
  389. if ( item.IsInherited( ClothingBase ) )
  390. {
  391. float heatIsolation = MiscGameplayFunctions.GetCurrentItemHeatIsolation( item_base );
  392. if ( heatIsolation <= GameConstants.HEATISO_THRESHOLD_BAD )
  393. {
  394. WidgetTrySetText( root_widget, "ItemQuantityWidget", "#inv_inspect_iso_worst", GetTemperatureColor( 10 ) );
  395. }
  396. else if ( ( heatIsolation > GameConstants.HEATISO_THRESHOLD_BAD ) && ( heatIsolation <= GameConstants.HEATISO_THRESHOLD_LOW ) )
  397. {
  398. WidgetTrySetText( root_widget, "ItemQuantityWidget", "#inv_inspect_iso_low", GetTemperatureColor( 20 ) );
  399. }
  400. else if ( ( heatIsolation > GameConstants.HEATISO_THRESHOLD_LOW ) && ( heatIsolation <= GameConstants.HEATISO_THRESHOLD_MEDIUM ) )
  401. {
  402. WidgetTrySetText( root_widget, "ItemQuantityWidget", "#inv_inspect_iso_medium", GetTemperatureColor( 30 ) );
  403. }
  404. else if ( ( heatIsolation > GameConstants.HEATISO_THRESHOLD_MEDIUM ) && ( heatIsolation <= GameConstants.HEATISO_THRESHOLD_HIGH ) )
  405. {
  406. WidgetTrySetText( root_widget, "ItemQuantityWidget", "#inv_inspect_iso_high", GetTemperatureColor( 50 ) );
  407. }
  408. else
  409. {
  410. WidgetTrySetText( root_widget, "ItemQuantityWidget", "#inv_inspect_iso_excel", GetTemperatureColor( 70 ) );
  411. }
  412. }
  413. else
  414. {
  415. WidgetTrySetText( root_widget, "ItemQuantityWidget", "" );
  416. }
  417. }
  418. }
  419. }
  420. //--------------------------------------------------------------------------
  421. static void UpdateItemInfoWeight(Widget root_widget, EntityAI item)
  422. {
  423. if (!item.CanDisplayWeight())
  424. {
  425. WidgetTrySetText(root_widget, "ItemWeightWidget", "", Colors.COLOR_DEFAULT);
  426. return;
  427. }
  428. ItemBase item_IB = ItemBase.Cast( item );
  429. if( item_IB )
  430. {
  431. int weight = item_IB.GetWeightEx();
  432. if (root_widget.GetName() != "BackPanelWidget")
  433. {
  434. weight = item_IB.GetSingleInventoryItemWeightEx();
  435. }
  436. if (weight >= 1000)
  437. {
  438. int kilos = Math.Round(weight / 1000.0);
  439. WidgetTrySetText(root_widget, "ItemWeightWidget", "#inv_inspect_about" + " " + kilos.ToString() + " " + "#inv_inspect_kg", Colors.COLOR_DEFAULT);
  440. }
  441. else if (weight >= 500)
  442. {
  443. WidgetTrySetText(root_widget, "ItemWeightWidget", "#inv_inspect_under_1", Colors.COLOR_DEFAULT);
  444. }
  445. else if (weight >= 250)
  446. {
  447. WidgetTrySetText(root_widget, "ItemWeightWidget", "#inv_inspect_under_05", Colors.COLOR_DEFAULT);
  448. }
  449. else
  450. {
  451. WidgetTrySetText(root_widget, "ItemWeightWidget", "#inv_inspect_under_025", Colors.COLOR_DEFAULT);
  452. }
  453. }
  454. }
  455. //--------------------------------------------------------------------------
  456. static void UpdateItemInfoFoodStage(Widget root_widget, EntityAI item)
  457. {
  458. Edible_Base food_item = Edible_Base.Cast( item );
  459. if ( food_item && food_item.GetFoodStage() )
  460. {
  461. FoodStage food_stage = food_item.GetFoodStage();
  462. FoodStageType food_stage_type = food_stage.GetFoodStageType();
  463. switch( food_stage_type )
  464. {
  465. case FoodStageType.RAW:
  466. {
  467. WidgetTrySetText( root_widget, "ItemFoodStageWidget", "#inv_inspect_raw", Colors.COLOR_RAW );
  468. break;
  469. }
  470. case FoodStageType.BAKED:
  471. {
  472. WidgetTrySetText( root_widget, "ItemFoodStageWidget", "#inv_inspect_baked", Colors.COLOR_BAKED );
  473. break;
  474. }
  475. case FoodStageType.BOILED:
  476. {
  477. WidgetTrySetText( root_widget, "ItemFoodStageWidget", "#inv_inspect_boiled", Colors.COLOR_BOILED );
  478. break;
  479. }
  480. case FoodStageType.DRIED:
  481. {
  482. WidgetTrySetText( root_widget, "ItemFoodStageWidget", "#inv_inspect_dried", Colors.COLOR_DRIED );
  483. break;
  484. }
  485. case FoodStageType.BURNED:
  486. {
  487. WidgetTrySetText( root_widget, "ItemFoodStageWidget", "#inv_inspect_burned", Colors.COLOR_BURNED );
  488. break;
  489. }
  490. case FoodStageType.ROTTEN:
  491. {
  492. WidgetTrySetText( root_widget, "ItemFoodStageWidget", "#inv_inspect_rotten", Colors.COLOR_ROTTEN );
  493. break;
  494. }
  495. }
  496. }
  497. else
  498. {
  499. WidgetTrySetText( root_widget, "ItemFoodStageWidget", "" );
  500. }
  501. }
  502. //--------------------------------------------------------------------------
  503. static void UpdateItemInfoCleanness(Widget root_widget, EntityAI item)
  504. {
  505. ItemBase ib = ItemBase.Cast(item);
  506. if(ib && ib.m_Cleanness==1)
  507. {
  508. WidgetTrySetText( root_widget, "ItemCleannessWidget", "#inv_inspect_cleaned", Colors.WHITEGRAY );
  509. }
  510. else
  511. {
  512. WidgetTrySetText( root_widget, "ItemCleannessWidget", "" );
  513. }
  514. }
  515. //--------------------------------------------------------------------------
  516. static void WidgetTrySetText(Widget root_widget, string widget_name, string text, int color = 0)
  517. {
  518. TextWidget widget = TextWidget.Cast( root_widget.FindAnyWidget(widget_name) );
  519. RichTextWidget rt_widget = RichTextWidget.Cast( root_widget.FindAnyWidget(widget_name) );
  520. if (widget)
  521. {
  522. widget.SetText(text);
  523. Widget widget_background = root_widget.FindAnyWidget(widget_name+"Background");
  524. if (widget_background)
  525. {
  526. if (color != 0)
  527. {
  528. widget_background.Show( true );
  529. widget_background.SetColor(color | 0x7F000000);
  530. }
  531. else
  532. {
  533. widget_background.Show( false );
  534. }
  535. }
  536. }
  537. if( rt_widget )
  538. {
  539. rt_widget.Update();
  540. }
  541. }
  542. override void OnPlayerDeath()
  543. {
  544. super.OnPlayerDeath();
  545. // Close inventory menu when this menu got closed by the character death event as player could be inspecting a item from the inventory
  546. // in the moment he dies and the inventory menu is opened too.
  547. MissionGameplay missionGameplay = MissionGameplay.Cast(g_Game.GetMission());
  548. if (missionGameplay && missionGameplay.GetInventory())
  549. {
  550. missionGameplay.HideInventory();
  551. }
  552. }
  553. };