handspreview.c 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. class HandsPreview: Container
  2. {
  3. protected ref Icon m_Icon;
  4. protected EntityAI m_AttachmentsInitialized;
  5. protected float m_IconSize;
  6. protected ItemBase m_Item
  7. void HandsPreview( LayoutHolder parent )
  8. {
  9. GetGame().GetPlayer().GetOnItemAddedToHands().Insert( CreateNewIcon );
  10. GetGame().GetPlayer().GetOnItemRemovedFromHands().Insert( DeleteIcon );
  11. }
  12. void ~HandsPreview()
  13. {
  14. GetGame().GetPlayer().GetOnItemAddedToHands().Remove( CreateNewIcon );
  15. GetGame().GetPlayer().GetOnItemRemovedFromHands().Remove( DeleteIcon );
  16. }
  17. void RefreshQuantity( EntityAI m_Item_to_refresh )
  18. {
  19. if ( m_Icon )
  20. {
  21. m_Icon.SetQuantity();
  22. }
  23. }
  24. override EntityAI GetFocusedItem()
  25. {
  26. return m_Item;
  27. }
  28. Icon GetIcon()
  29. {
  30. return m_Icon;
  31. }
  32. override void SetDefaultFocus(bool while_micromanagment_mode = false)
  33. {
  34. super.SetDefaultFocus(while_micromanagment_mode);
  35. if ( m_Icon )
  36. m_Icon.SetActive(true);
  37. }
  38. override void SetLastFocus()
  39. {
  40. super.SetLastFocus();
  41. if ( m_Icon )
  42. m_Icon.SetActive(true);
  43. }
  44. override void Unfocus()
  45. {
  46. super.Unfocus();
  47. if ( m_Icon )
  48. m_Icon.SetActive(false);
  49. }
  50. float GetIconSize()
  51. {
  52. return m_IconSize;
  53. }
  54. override void SetLayoutName()
  55. {
  56. m_LayoutName = WidgetLayoutName.HandsPreview;
  57. }
  58. void RemoveItem()
  59. {
  60. delete m_Icon;
  61. m_Item = null;
  62. }
  63. override void UpdateInterval()
  64. {
  65. bool show_combine_swap = ItemManager.GetInstance().IsDragging();
  66. #ifdef PLATFORM_CONSOLE
  67. if ( m_Icon && !m_Icon.IsDragged() && GetGame().GetInput().IsEnabledMouseAndKeyboardEvenOnServer() )
  68. #else
  69. if ( m_Icon && !m_Icon.IsDragged() )
  70. #endif
  71. {
  72. m_Icon.GetMainWidget().FindAnyWidget( "Combine" ).Show( show_combine_swap );
  73. m_Icon.GetMainWidget().FindAnyWidget( "Swap" ).Show( show_combine_swap );
  74. }
  75. if ( m_Icon )
  76. {
  77. m_Icon.UpdateInterval();
  78. }
  79. }
  80. void CreateNewIcon( ItemBase item )
  81. {
  82. float y;
  83. GetRootWidget().GetParent().GetParent().GetParent().GetParent().GetScreenSize( m_IconSize, y );
  84. m_IconSize = m_IconSize / 10;
  85. m_Icon = new Icon( this, true );
  86. m_Icon.Refresh();
  87. if ( m_Icon )
  88. {
  89. m_Item = item;
  90. m_Icon.Init( m_Item );
  91. m_Icon.FullScreen();
  92. ( HandsContainer.Cast( m_Parent ) ).ShowAtt( m_Item );
  93. m_Icon.Refresh();
  94. }
  95. m_RootWidget.SetColor( ARGB( 180, 0, 0, 0 ) );
  96. m_Parent.GetParent().Refresh();
  97. Inventory.GetInstance().UpdateConsoleToolbar();
  98. HandsContainer parent = HandsContainer.Cast( m_Parent );
  99. HandsHeader header = HandsHeader.Cast( parent.GetHeader() );
  100. if( m_Item && !m_Item.GetInventory().GetCargo() )
  101. {
  102. string display_name = m_Item.GetDisplayName();
  103. display_name.ToUpper();
  104. header.SetName( display_name );
  105. }
  106. }
  107. void DeleteIcon()
  108. {
  109. RemoveItem();
  110. ( HandsContainer.Cast( m_Parent ) ).DestroyAtt();
  111. ( HandsContainer.Cast( m_Parent ) ).DestroyCargo();
  112. ( HandsContainer.Cast( m_Parent ) ).RemoveItem();
  113. m_AttachmentsInitialized = null;
  114. m_RootWidget.SetColor( ARGB( 166, 80, 80, 80 ) );
  115. m_Parent.GetParent().Refresh();
  116. Inventory.GetInstance().UpdateConsoleToolbar();
  117. }
  118. override bool SelectItem()
  119. {
  120. if( m_Item )
  121. {
  122. ItemManager.GetInstance().SetSelectedItemEx(m_Item, null, null);
  123. return true;
  124. }
  125. return false;
  126. }
  127. override bool Select()
  128. {
  129. Man player = GetGame().GetPlayer();
  130. EntityAI item_in_hands = m_Item;
  131. if( ItemManager.GetInstance().IsMicromanagmentMode() )
  132. {
  133. EntityAI selected_item = ItemManager.GetInstance().GetSelectedItem();
  134. if( selected_item && selected_item.GetInventory().CanRemoveEntity() )
  135. {
  136. if(item_in_hands && item_in_hands.GetInventory().CanRemoveEntity())
  137. {
  138. if( GameInventory.CanSwapEntitiesEx( item_in_hands, selected_item ) )
  139. {
  140. player.PredictiveSwapEntities( item_in_hands, selected_item );
  141. return true;
  142. }
  143. }
  144. else
  145. {
  146. if ( player.GetHumanInventory().CanAddEntityInHands( selected_item ) && selected_item.GetInventory().CanRemoveEntity())
  147. {
  148. ItemBase item_base = ItemBase.Cast( selected_item );
  149. float stackable = item_base.GetTargetQuantityMax();
  150. if (stackable == 0 || item_base.GetQuantity() <= stackable)
  151. {
  152. GetGame().GetPlayer().PredictiveTakeEntityToHands( item_base );
  153. return true;
  154. }
  155. else if( stackable != 0 && stackable <= item_base.GetQuantity() )
  156. {
  157. item_base.SplitIntoStackMaxHandsClient(PlayerBase.Cast( GetGame().GetPlayer() ));
  158. return true;
  159. }
  160. }
  161. }
  162. }
  163. }
  164. return false;
  165. }
  166. }