inspectmenunew.c 19 KB

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