slotsicon.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886
  1. class SlotsIcon: LayoutHolder
  2. {
  3. protected static int m_NormalWidth;
  4. protected static int m_NormalHeight;
  5. protected bool m_IsWeapon = false;
  6. protected bool m_IsMagazine = false;
  7. protected bool m_HasTemperature = false;
  8. protected bool m_HasQuantity = false;
  9. protected bool m_HasItemSize = false;
  10. protected float m_CurrQuantity = -1;
  11. protected EntityAI m_Obj;
  12. protected ItemBase m_Item;
  13. protected EntityAI m_SlotParent;
  14. protected Container m_Container;
  15. protected int m_SlotID;
  16. protected bool m_IsDragged = false;
  17. protected Widget m_PanelWidget;
  18. protected Widget m_CursorWidget;
  19. protected Widget m_ColWidget;
  20. protected Widget m_MountedWidget;
  21. protected Widget m_OutOfReachWidget;
  22. protected Widget m_ReservedWidget;
  23. protected ItemPreviewWidget m_ItemPreview;
  24. protected ImageWidget m_GhostSlot;
  25. protected Widget m_ColorWidget;
  26. protected Widget m_SelectedPanel;
  27. protected Widget m_EmptySelectedPanel;
  28. protected Widget m_MicromanagedPanel;
  29. protected Widget m_QuantityPanel;
  30. protected TextWidget m_QuantityItem;
  31. protected ProgressBarWidget m_QuantityProgress;
  32. protected Widget m_QuantityStack;
  33. protected string m_SlotDisplayName;
  34. protected string m_SlotDesc;
  35. protected Widget m_ItemSizePanel;
  36. protected TextWidget m_ItemSizeWidget;
  37. protected Widget m_RadialIconPanel;
  38. protected Widget m_RadialIconClosed;
  39. protected Widget m_RadialIcon;
  40. protected bool m_Reserved;
  41. protected ImageWidget m_AmmoIcon;
  42. protected ref array<ImageWidget> m_AmmoIcons;
  43. void SlotsIcon( LayoutHolder parent, Widget root, int index, EntityAI slot_parent )
  44. {
  45. m_MainWidget = root;
  46. m_PanelWidget = m_MainWidget.FindAnyWidget( "PanelWidget" + index );
  47. m_CursorWidget = m_MainWidget.FindAnyWidget( "Cursor" + index );
  48. m_ColWidget = m_MainWidget.FindAnyWidget( "Col" + index );
  49. m_MountedWidget = m_MainWidget.FindAnyWidget( "Mounted" + index );
  50. m_OutOfReachWidget = m_MainWidget.FindAnyWidget( "OutOfReach" + index );
  51. m_ItemPreview = ItemPreviewWidget.Cast( m_MainWidget.FindAnyWidget( "Render" + index ) );
  52. m_ItemPreview.SetForceFlipEnable(true);
  53. m_ItemPreview.SetForceFlip(false);
  54. m_GhostSlot = ImageWidget.Cast( m_MainWidget.FindAnyWidget( "GhostSlot" + index ) );
  55. m_ColorWidget = m_MainWidget.FindAnyWidget( "Color" + index );
  56. m_SelectedPanel = m_MainWidget.FindAnyWidget( "Selected" + index );
  57. m_EmptySelectedPanel = m_MainWidget.FindAnyWidget( "EmptySelected" + index );
  58. m_MicromanagedPanel = m_MainWidget.FindAnyWidget( "Micromanaged" + index );
  59. m_QuantityPanel = m_MainWidget.FindAnyWidget( "QuantityPanel" + index );
  60. m_QuantityItem = TextWidget.Cast( m_MainWidget.FindAnyWidget( "Quantity" + index ) );
  61. m_QuantityProgress = ProgressBarWidget.Cast( m_MainWidget.FindAnyWidget( "QuantityBar" + index ) );
  62. m_QuantityStack = m_MainWidget.FindAnyWidget( "QuantityStackPanel" + index );
  63. m_ItemSizePanel = m_MainWidget.FindAnyWidget( "ItemSizePanel" + index );
  64. m_ItemSizeWidget = TextWidget.Cast( m_MainWidget.FindAnyWidget( "ItemSize" + index ) );
  65. m_AmmoIcon = ImageWidget.Cast(m_MainWidget.FindAnyWidget( "AmmoIcon" + index ));
  66. m_RadialIconPanel = m_MainWidget.FindAnyWidget( "RadialIconPanel" + index );
  67. m_RadialIconClosed = m_MainWidget.FindAnyWidget( "RadialIconClosed" + index );
  68. m_RadialIcon = m_MainWidget.FindAnyWidget( "RadialIcon" + index );
  69. m_ReservedWidget = Widget.Cast( GetGame().GetWorkspace().CreateWidgets( "gui/layouts/inventory_new/reserved_icon.layout", m_MainWidget ) );
  70. m_ReservedWidget.Show(false);
  71. WidgetEventHandler.GetInstance().RegisterOnMouseEnter( m_PanelWidget, this, "MouseEnter" );
  72. WidgetEventHandler.GetInstance().RegisterOnMouseLeave( m_PanelWidget, this, "MouseLeave" );
  73. WidgetEventHandler.GetInstance().RegisterOnMouseEnter( m_GhostSlot, this, "MouseEnterGhostSlot" );
  74. WidgetEventHandler.GetInstance().RegisterOnMouseLeave( m_GhostSlot, this, "MouseLeaveGhostSlot" );
  75. WidgetEventHandler.GetInstance().RegisterOnMouseEnter( m_RadialIconPanel, this, "MouseEnterCategory" );
  76. WidgetEventHandler.GetInstance().RegisterOnMouseLeave( m_RadialIconPanel, this, "MouseLeaveCategory" );
  77. WidgetEventHandler.GetInstance().RegisterOnDrag( m_PanelWidget, this, "OnIconDrag" );
  78. WidgetEventHandler.GetInstance().RegisterOnDrop( m_PanelWidget, this, "OnIconDrop" );
  79. m_Reserved = false;
  80. m_SlotID = -1;
  81. m_Item = null;
  82. m_Obj = null;
  83. m_Container = null;
  84. m_SlotParent = slot_parent;
  85. m_PanelWidget.SetUserData(this);
  86. m_ItemPreview.SetUserData(this);
  87. m_GhostSlot.SetUserData(this);
  88. m_MainWidget.SetUserData(this);
  89. float w,h;
  90. root.GetSize(w,h);
  91. m_NormalWidth = w;
  92. m_NormalHeight = h;
  93. SetActive( false );
  94. }
  95. override bool IsVisible()
  96. {
  97. return m_MainWidget.IsVisible();
  98. }
  99. void SetSlotParent( EntityAI parent)
  100. {
  101. m_SlotParent = parent;
  102. }
  103. void SetContainer( Container container )
  104. {
  105. m_Container = container;
  106. }
  107. void SetSlotDisplayName( string text )
  108. {
  109. m_SlotDisplayName = text;
  110. }
  111. Container GetContainer()
  112. {
  113. return m_Container;
  114. }
  115. string GetSlotDisplayName( )
  116. {
  117. return m_SlotDisplayName;
  118. }
  119. void SetSlotDesc( string text )
  120. {
  121. m_SlotDesc = text;
  122. }
  123. string GetSlotDesc()
  124. {
  125. return m_SlotDesc;
  126. }
  127. void ~SlotsIcon()
  128. {
  129. if (m_IsDragged)
  130. {
  131. m_IsDragged = false;
  132. ItemManager.GetInstance().HideDropzones();
  133. ItemManager.GetInstance().SetIsDragging( false );
  134. }
  135. if (m_Obj)
  136. {
  137. m_Obj.GetOnItemFlipped().Remove( UpdateFlip );
  138. m_Obj.GetOnViewIndexChanged().Remove( SetItemPreview );
  139. }
  140. }
  141. EntityAI GetSlotParent()
  142. {
  143. return m_SlotParent;
  144. }
  145. int GetSlotID()
  146. {
  147. return m_SlotID;
  148. }
  149. void SetSlotID(int slot_ID)
  150. {
  151. m_SlotID = slot_ID;
  152. }
  153. bool IsReserved()
  154. {
  155. return m_Reserved;
  156. }
  157. Widget GetPanelWidget()
  158. {
  159. return m_PanelWidget;
  160. }
  161. Widget GetCursorWidget()
  162. {
  163. return m_CursorWidget;
  164. }
  165. Widget GetColWidget()
  166. {
  167. return m_ColWidget;
  168. }
  169. Widget GetReservedWidget()
  170. {
  171. return m_ReservedWidget;
  172. }
  173. Widget GetMountedWidget()
  174. {
  175. return m_MountedWidget;
  176. }
  177. ItemPreviewWidget GetRender()
  178. {
  179. return m_ItemPreview;
  180. }
  181. ImageWidget GetGhostSlot()
  182. {
  183. return m_GhostSlot;
  184. }
  185. Widget GetColorWidget()
  186. {
  187. return m_ColorWidget;
  188. }
  189. Widget GetSelectedPanel()
  190. {
  191. return m_SelectedPanel;
  192. }
  193. Widget GetEmptySelectedPanel()
  194. {
  195. return m_EmptySelectedPanel;
  196. }
  197. Widget GetMicromanagedPanel()
  198. {
  199. return m_MicromanagedPanel;
  200. }
  201. Widget GetQuantityPanel()
  202. {
  203. return m_QuantityPanel;
  204. }
  205. Widget GetOutOfReachWidget()
  206. {
  207. return m_OutOfReachWidget;
  208. }
  209. TextWidget GetQuantityItem()
  210. {
  211. return m_QuantityItem;
  212. }
  213. ProgressBarWidget GetQuantityProgress()
  214. {
  215. return m_QuantityProgress;
  216. }
  217. Widget GetQuantityStack()
  218. {
  219. return m_QuantityStack;
  220. }
  221. Widget GetItemSizePanel()
  222. {
  223. return m_ItemSizePanel;
  224. }
  225. TextWidget GetItemSizeWidget()
  226. {
  227. return m_ItemSizeWidget;
  228. }
  229. ImageWidget GetAmmoIcon()
  230. {
  231. return m_AmmoIcon;
  232. }
  233. Widget GetRadialIconPanel()
  234. {
  235. return m_RadialIconPanel;
  236. }
  237. Widget GetRadialIconClosed()
  238. {
  239. return m_RadialIconClosed;
  240. }
  241. Widget GetRadialIcon()
  242. {
  243. return m_RadialIcon;
  244. }
  245. bool IsFocused()
  246. {
  247. return GetCursorWidget().IsVisible();
  248. }
  249. override void SetActive( bool active )
  250. {
  251. #ifdef PLATFORM_CONSOLE
  252. super.SetActive( active );
  253. float x, y;
  254. if( active && GetObject() )
  255. {
  256. GetMainWidget().GetScreenPos( x, y );
  257. PrepareOwnedTooltip( EntityAI.Cast( GetObject() ), x, y );
  258. }
  259. else if (active)
  260. {
  261. GetMainWidget().GetScreenPos( x, y );
  262. PrepareOwnedSlotsTooltip( GetMainWidget(), m_SlotDisplayName, m_SlotDesc, x, y );
  263. }
  264. m_SelectedPanel.Show( active );
  265. #endif
  266. }
  267. override void SetLayoutName()
  268. {
  269. m_LayoutName = "";
  270. }
  271. override void Refresh()
  272. {
  273. //if (m_HasTemperature)
  274. SetTemperature();
  275. if (m_IsWeapon)
  276. RefreshMuzzleIcon();
  277. if (m_HasQuantity)
  278. SetQuantity();
  279. }
  280. void SetTemperature()
  281. {
  282. ItemManager.GetInstance().SetTemperature(EntityAI.Cast( m_Obj ), m_ItemPreview);
  283. }
  284. Object GetObject()
  285. {
  286. return m_Obj;
  287. }
  288. EntityAI GetEntity()
  289. {
  290. return EntityAI.Cast( m_Obj );
  291. }
  292. ItemBase GetItem()
  293. {
  294. return m_Item;
  295. }
  296. void RefreshMuzzleIcon()
  297. {
  298. Weapon_Base wpn = Weapon_Base.Cast(GetObject());
  299. if (wpn)
  300. {
  301. int i;
  302. if (!wpn.IsShowingChamberedBullet())
  303. {
  304. for (i = 0; i < m_AmmoIcons.Count(); i++)
  305. m_AmmoIcon = m_AmmoIcons.Get(i);
  306. }
  307. else
  308. {
  309. for (i = 0; i < wpn.GetMuzzleCount(); i++)
  310. {
  311. if (i > m_AmmoIcons.Count())
  312. break;
  313. m_AmmoIcon = m_AmmoIcons.Get(i);
  314. if (wpn.IsChamberFull(i))
  315. {
  316. m_AmmoIcon.Show(true);
  317. if (wpn.IsJammed())
  318. {
  319. m_AmmoIcon.Show(true);
  320. m_AmmoIcon.SetImage(2);
  321. }
  322. else if (wpn.IsChamberFiredOut(i))
  323. {
  324. m_AmmoIcon.Show(true);
  325. m_AmmoIcon.SetImage(1);
  326. }
  327. else
  328. {
  329. m_AmmoIcon.Show(true);
  330. m_AmmoIcon.SetImage(0);
  331. }
  332. }
  333. else
  334. {
  335. m_AmmoIcon.Show(false);
  336. }
  337. }
  338. }
  339. }
  340. }
  341. void SetQuantity()
  342. {
  343. if (m_Item)
  344. {
  345. int quantityType = QuantityConversions.HasItemQuantity(m_Item);
  346. if (quantityType != QUANTITY_HIDDEN && m_CurrQuantity != QuantityConversions.GetItemQuantity(m_Item))
  347. {
  348. m_CurrQuantity = QuantityConversions.GetItemQuantity(m_Item);
  349. if (quantityType == QUANTITY_COUNT)
  350. {
  351. string q_text = QuantityConversions.GetItemQuantityText(m_Item, true);
  352. if (QuantityConversions.GetItemQuantityMax(m_Item) == 1 || q_text == "")
  353. {
  354. m_QuantityStack.Show(false);
  355. }
  356. else
  357. {
  358. m_QuantityItem.SetText(q_text);
  359. m_QuantityStack.Show(true);
  360. }
  361. m_QuantityProgress.Show(false);
  362. }
  363. else if (quantityType == QUANTITY_PROGRESS)
  364. {
  365. float progress_max = m_QuantityProgress.GetMax();
  366. int max = m_Item.GetQuantityMax();
  367. int count = m_Item.ConfigGetInt("count");
  368. float quantity = m_CurrQuantity;
  369. if (count > 0)
  370. {
  371. max = count;
  372. }
  373. if (max > 0)
  374. {
  375. float value = Math.Round((quantity / max) * 100);
  376. m_QuantityProgress.SetCurrent(value);
  377. }
  378. m_QuantityStack.Show(false);
  379. m_QuantityProgress.Show(true);
  380. }
  381. }
  382. }
  383. }
  384. void SetItemPreview()
  385. {
  386. m_ItemPreview.Show( true );
  387. m_ItemPreview.SetItem( EntityAI.Cast( m_Obj ) );
  388. m_ItemPreview.SetModelOrientation( "0 0 0" );
  389. m_ItemPreview.SetView( m_Obj.GetViewIndex() );
  390. }
  391. void SetItemSize()
  392. {
  393. if( m_HasItemSize )
  394. {
  395. int size_x, size_y;
  396. GetGame().GetInventoryItemSize( InventoryItem.Cast( m_Obj ), size_x, size_y );
  397. m_ItemSizePanel.Show( true );
  398. m_ItemSizeWidget.SetText( ( size_x * size_y ).ToString() );
  399. }
  400. }
  401. void UpdateFlip( bool flipped )
  402. {
  403. if( !m_Reserved )
  404. {
  405. float x_content, y_content;
  406. GetPanelWidget().GetScreenSize( x_content, y_content );
  407. GetPanelWidget().SetSize( y_content, x_content );
  408. }
  409. }
  410. void Init( EntityAI obj, bool reservation = false )
  411. {
  412. if( m_Obj != obj )
  413. {
  414. ClearRemainSelected();
  415. m_Obj = obj;
  416. m_Item = ItemBase.Cast( m_Obj );
  417. m_Obj.GetOnItemFlipped().Insert( UpdateFlip );
  418. m_Obj.GetOnViewIndexChanged().Insert( SetItemPreview );
  419. m_Reserved = reservation;
  420. m_Container = null;
  421. if(reservation)
  422. {
  423. ItemManager.GetInstance().SetWidgetDraggable( m_PanelWidget, false );
  424. m_IsWeapon = false;
  425. m_IsMagazine = false;
  426. m_HasTemperature = false;
  427. m_HasQuantity = false;
  428. m_HasItemSize = false;
  429. }
  430. else
  431. {
  432. CheckIsWeapon();
  433. CheckIsMagazine();
  434. CheckHasTemperature();
  435. CheckHasQuantity();
  436. CheckHasItemSize();
  437. }
  438. m_ReservedWidget.Show(reservation);
  439. SetItemPreview();
  440. m_GhostSlot.Show( false );
  441. m_PanelWidget.Show( true );
  442. Refresh();
  443. #ifdef PLATFORM_CONSOLE
  444. if ( IsFocused() )
  445. {
  446. Inventory.GetInstance().UpdateConsoleToolbar();
  447. }
  448. #endif
  449. }
  450. }
  451. void ClearRemainSelected()
  452. {
  453. if (m_IsDragged)
  454. {
  455. OnIconDrop(m_PanelWidget);
  456. Widget a = CancelWidgetDragging();
  457. ItemManager.GetInstance().SetWidgetDraggable( a, false );
  458. }
  459. if (m_Obj)
  460. {
  461. m_Obj.GetOnItemFlipped().Remove( UpdateFlip );
  462. m_Obj.GetOnViewIndexChanged().Remove( SetItemPreview );
  463. HideOwnedTooltip();
  464. }
  465. m_Obj = null;
  466. m_Item = null;
  467. m_Container = null;
  468. m_ItemPreview.Show( false );
  469. m_ItemPreview.SetItem( null );
  470. m_CurrQuantity = -1;
  471. m_IsWeapon = false;
  472. m_IsMagazine = false;
  473. m_HasTemperature = false;
  474. m_HasQuantity = false;
  475. m_HasItemSize = false;
  476. m_GhostSlot.Show( true );
  477. m_AmmoIcon.Show( false );
  478. m_PanelWidget.Show( false );
  479. m_RadialIconPanel.Show( false );
  480. m_QuantityPanel.Show( false );
  481. if(GetSlotID() != -1)
  482. {
  483. int stack_max = InventorySlots.GetStackMaxForSlotId( GetSlotID() );
  484. if(stack_max > 1)
  485. {
  486. m_QuantityPanel.Show( true );
  487. m_QuantityItem.SetText( string.Format("0/%1", stack_max.ToString()) );
  488. m_QuantityStack.Show( true );
  489. m_QuantityProgress.Show( false );
  490. m_PanelWidget.Show( true );
  491. m_ItemPreview.Show( true );
  492. }
  493. }
  494. m_ColWidget.Show( false );
  495. m_MountedWidget.Show( false );
  496. m_OutOfReachWidget.Show( false );
  497. m_ReservedWidget.Show( false );
  498. if( m_ItemSizePanel )
  499. m_ItemSizePanel.Show( false );
  500. if( m_ColorWidget )
  501. m_ColorWidget.Show( false );
  502. Refresh();
  503. }
  504. void Clear()
  505. {
  506. #ifdef PLATFORM_CONSOLE
  507. m_SelectedPanel.Show(false);
  508. #endif
  509. m_CursorWidget.Show(false);
  510. m_EmptySelectedPanel.Show(false);
  511. ClearRemainSelected();
  512. }
  513. void CheckIsWeapon()
  514. {
  515. Weapon_Base wpn = Weapon_Base.Cast(m_Obj);
  516. if (wpn)
  517. {
  518. m_AmmoIcons = new array<ImageWidget>();
  519. m_IsWeapon = true;
  520. float posX = 0.0;
  521. float width = 0.0, height = 0.0;
  522. for (int i = 0; i < wpn.GetMuzzleCount(); i++)
  523. {
  524. if (i == 1)
  525. {
  526. m_AmmoIcons[0].GetSize(width,height);
  527. }
  528. posX += width;
  529. m_AmmoIcon.SetPos(posX, 0.0, false);
  530. AmmoData data = Magazine.GetAmmoData(wpn.GetChamberAmmoTypeName(i));
  531. if (data)
  532. {
  533. CartridgeType cartridgeType = data.m_CartridgeType;
  534. switch (cartridgeType)
  535. {
  536. case CartridgeType.Pistol:
  537. {
  538. m_AmmoIcon.LoadImageFile(0, "set:dayz_gui image:cartridge_pistol");
  539. m_AmmoIcon.LoadImageFile(1, "set:dayz_gui image:shell_pistol");
  540. m_AmmoIcon.LoadImageFile(2, "set:dayz_gui image:jam_pistol");
  541. break;
  542. }
  543. case CartridgeType.Intermediate:
  544. {
  545. m_AmmoIcon.LoadImageFile(0, "set:dayz_gui image:cartridge_int");
  546. m_AmmoIcon.LoadImageFile(1, "set:dayz_gui image:shell_int");
  547. m_AmmoIcon.LoadImageFile(2, "set:dayz_gui image:jam_int");
  548. break;
  549. }
  550. case CartridgeType.FullPower:
  551. {
  552. m_AmmoIcon.LoadImageFile(0, "set:dayz_gui image:cartridge_fp");
  553. m_AmmoIcon.LoadImageFile(1, "set:dayz_gui image:shell_fp");
  554. m_AmmoIcon.LoadImageFile(2, "set:dayz_gui image:jam_fp");
  555. break;
  556. }
  557. case CartridgeType.Shell:
  558. {
  559. m_AmmoIcon.LoadImageFile(0, "set:dayz_gui image:cartridge_shell");
  560. m_AmmoIcon.LoadImageFile(1, "set:dayz_gui image:shell_shell");
  561. m_AmmoIcon.LoadImageFile(2, "set:dayz_gui image:jam_shell");
  562. break;
  563. }
  564. }
  565. }
  566. m_AmmoIcons.Insert(m_AmmoIcon);
  567. }
  568. }
  569. else
  570. {
  571. m_IsWeapon = false;
  572. }
  573. }
  574. void CheckIsMagazine()
  575. {
  576. m_IsMagazine = ( Magazine.Cast( m_Obj ) != null );
  577. }
  578. void CheckHasTemperature()
  579. {
  580. if (m_Item)
  581. {
  582. m_HasTemperature = m_Item.CanHaveTemperature();
  583. }
  584. }
  585. void CheckHasQuantity()
  586. {
  587. if( m_Item )
  588. {
  589. m_HasQuantity = ( QuantityConversions.HasItemQuantity( m_Item ) != QUANTITY_HIDDEN );
  590. if( m_HasQuantity )
  591. {
  592. m_QuantityPanel.Show( true );
  593. }
  594. }
  595. }
  596. void CheckHasItemSize()
  597. {
  598. #ifdef PLATFORM_CONSOLE
  599. string config = "CfgVehicles " + m_Obj.GetType() + " GUIInventoryAttachmentsProps";
  600. m_HasItemSize = ( InventoryItem.Cast( m_Obj ) && !GetGame().ConfigIsExisting( config ) );
  601. #else
  602. m_HasItemSize = false;
  603. #endif
  604. }
  605. bool IsOutOfReach()
  606. {
  607. bool oot = ( m_OutOfReachWidget.IsVisible() || m_MountedWidget.IsVisible() );
  608. return oot;
  609. }
  610. bool MouseEnter(Widget w, int x, int y)
  611. {
  612. if( m_Reserved )
  613. return MouseEnterGhostSlot(w, x, y);
  614. PrepareOwnedTooltip( m_Item, x, y );
  615. if( GetDragWidget() != m_PanelWidget && !IsOutOfReach() )
  616. {
  617. m_CursorWidget.Show( true );
  618. }
  619. return true;
  620. }
  621. bool MouseEnterGhostSlot(Widget w, int x, int y)
  622. {
  623. float pos_x, pos_y;
  624. m_MainWidget.GetScreenPos(pos_x, pos_y);
  625. x = pos_x;
  626. y = pos_y;
  627. PrepareOwnedSlotsTooltip( m_MainWidget, m_SlotDisplayName, m_SlotDesc, x, y );
  628. if( GetDragWidget() != m_PanelWidget )
  629. {
  630. m_EmptySelectedPanel.Show( true );
  631. }
  632. return true;
  633. }
  634. bool MouseLeave( Widget w, Widget s, int x, int y )
  635. {
  636. if( m_Reserved )
  637. return MouseLeaveGhostSlot(w, s, x, y);
  638. HideOwnedTooltip();
  639. if( GetDragWidget() != m_PanelWidget )
  640. {
  641. m_CursorWidget.Show( false );
  642. }
  643. return true;
  644. }
  645. bool MouseLeaveGhostSlot( Widget w, Widget s, int x, int y )
  646. {
  647. HideOwnedSlotsTooltip();
  648. if( GetDragWidget() != m_PanelWidget )
  649. {
  650. m_EmptySelectedPanel.Show( false );
  651. }
  652. return true;
  653. }
  654. override void UpdateInterval()
  655. {
  656. if (m_Item)
  657. {
  658. if (m_HasTemperature)
  659. SetTemperature();
  660. if (m_IsWeapon)
  661. RefreshMuzzleIcon();
  662. if (m_HasQuantity)
  663. SetQuantity();
  664. if (m_HasItemSize)
  665. SetItemSize();
  666. }
  667. }
  668. void OnIconDrag( Widget w )
  669. {
  670. if(!m_Obj || !w)
  671. {
  672. return;
  673. }
  674. ItemManager.GetInstance().HideDropzones();
  675. if( m_Obj.GetHierarchyRootPlayer() == GetGame().GetPlayer() )
  676. {
  677. ItemManager.GetInstance().GetRightDropzone().SetAlpha( 1 );
  678. }
  679. else
  680. {
  681. ItemManager.GetInstance().GetLeftDropzone().SetAlpha( 1 );
  682. }
  683. ItemManager.GetInstance().SetIsDragging( true );
  684. int icon_x, icon_y;
  685. float icon_size, y;
  686. int m_sizeX, m_sizeY;
  687. if( m_Item )
  688. {
  689. GetGame().GetInventoryItemSize( m_Item, icon_x, icon_y );
  690. CargoContainer c_parent = CargoContainer.Cast( m_Parent );
  691. HandsPreview h_parent = HandsPreview.Cast( m_Parent );
  692. if( GetRoot().m_MainWidget.FindAnyWidget( "HandsPanel" ) )
  693. {
  694. GetRoot().m_MainWidget.FindAnyWidget( "HandsPanel" ).GetScreenSize( icon_size, y );
  695. }
  696. icon_size = icon_size / 10;
  697. w.SetFlags( WidgetFlags.EXACTSIZE );
  698. m_ItemPreview.SetForceFlipEnable(false);
  699. if( !m_Item.GetInventory().GetFlipCargo() )
  700. {
  701. w.SetSize( icon_x * icon_size , icon_y * icon_size );
  702. }
  703. else
  704. {
  705. w.SetSize( icon_y * icon_size , icon_x * icon_size );
  706. }
  707. m_ColWidget.Show( true );
  708. m_CursorWidget.Show( true );
  709. ItemManager.GetInstance().SetDraggedItem( m_Item );
  710. }
  711. m_IsDragged = true;
  712. }
  713. void OnIconDrop( Widget w )
  714. {
  715. m_IsDragged = false;
  716. ItemManager.GetInstance().HideDropzones();
  717. ItemManager.GetInstance().SetIsDragging( false );
  718. w.ClearFlags( WidgetFlags.EXACTSIZE );
  719. w.SetSize( 1, 1 );
  720. m_ColWidget.Show( false );
  721. m_CursorWidget.Show( false );
  722. m_EmptySelectedPanel.Show( false );
  723. m_CursorWidget.SetColor( ARGBF( 1, 1, 1, 1 ) );
  724. m_ItemPreview.SetForceFlipEnable(true);
  725. }
  726. static int GetNormalWidth()
  727. {
  728. return m_NormalWidth;
  729. }
  730. static int GetNormalHeight()
  731. {
  732. return m_NormalHeight;
  733. }
  734. /*override void HideOwnedSlotsTooltip()
  735. {
  736. if (m_TooltipOwner)
  737. {
  738. ItemManager.GetInstance().HideTooltipSlot();
  739. m_TooltipOwner = false;
  740. }
  741. }*/
  742. }