inventoryquickbar.c 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. class InventoryQuickbar extends InventoryGridController
  2. {
  3. protected ref TItemsMap m_Items;
  4. protected InventoryGrid m_Grid;
  5. protected int m_DraggingIndex;
  6. void InventoryQuickbar(Widget quickbarGridWidget)
  7. {
  8. m_DraggingIndex = INDEX_NOT_FOUND;
  9. m_Items = new TItemsMap;
  10. UpdateItems( quickbarGridWidget );
  11. }
  12. void ~InventoryQuickbar()
  13. {
  14. }
  15. void UpdateItems( Widget quickbarGridWidget )
  16. {
  17. if( !quickbarGridWidget )
  18. {
  19. return;
  20. }
  21. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  22. if ( !player )
  23. return;
  24. int i;
  25. // create grid and align it to center
  26. if( !m_Grid )
  27. {
  28. quickbarGridWidget.GetScript( m_Grid );
  29. m_Grid.SetController( this );
  30. m_Grid.GenerateQuickBarBackgroundTiles( 10 );
  31. }
  32. m_Items.Clear();
  33. InventoryItem item;
  34. if( m_Grid )
  35. {
  36. if( m_Grid.GetGridSize() != player.GetQuickBarSize() )
  37. {
  38. m_Grid.SetGridSize( player.GetQuickBarSize() );
  39. }
  40. }
  41. for( i = 0; i < m_Grid.GetGridSize(); i++)
  42. {
  43. item = InventoryItem.Cast( player.GetQuickBarEntity(i) );
  44. if( item )
  45. {
  46. m_Items.Set( item, Vector(i, 1, 1) );
  47. }
  48. }
  49. if( m_Grid )
  50. {
  51. m_Grid.UpdateQuickbarItems( m_Items );
  52. }
  53. }
  54. void Remove(InventoryItem itemToRemove)
  55. {
  56. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  57. for ( int i = 0; i < m_Grid.GetGridSize(); i++ )
  58. {
  59. InventoryItem item = InventoryItem.Cast( player.GetQuickBarEntity(i) );
  60. if(item == itemToRemove)
  61. {
  62. player.RemoveQuickBarEntityShortcut( item );
  63. }
  64. }
  65. }
  66. // InventoryGridController override
  67. override void OnItemEnter(InventoryGrid grid, Widget w, int row, int col)
  68. {
  69. Widget quickbar = grid.GetRoot();
  70. if( quickbar )
  71. {
  72. // quickbar.SetColor( 0xFFFFFFFF );
  73. }
  74. }
  75. override void OnItemLeave(InventoryGrid grid, Widget w)
  76. {
  77. Widget quickbar = grid.GetRoot();
  78. if( quickbar )
  79. {
  80. // quickbar.SetColor( 0x7FFFFFFF );
  81. }
  82. }
  83. override void OnItemDraggingOver(InventoryGrid grid, Widget w, int row, int col)
  84. {
  85. ItemPreviewWidget iw;
  86. InventoryItem dragged_item;
  87. iw = ItemPreviewWidget.Cast( w.FindAnyWidget( "Render" ) );
  88. if( !iw )
  89. {
  90. string name = w.GetName();
  91. name.Replace( "PanelWidget", "Render" );
  92. iw = ItemPreviewWidget.Cast( w.FindAnyWidget( name ) );
  93. }
  94. if( !iw || !iw.GetItem() )
  95. {
  96. return;
  97. }
  98. if(!dragged_item && iw)
  99. dragged_item = InventoryItem.Cast( iw.GetItem() );
  100. if ( dragged_item == NULL)
  101. return;
  102. if (dragged_item && dragged_item.GetInventory().CanRemoveEntity() == false)
  103. {
  104. int color;
  105. color = ARGB( 150, 255, 1, 1 );
  106. if( w.FindAnyWidget("Cursor") )
  107. {
  108. w.FindAnyWidget("Cursor").SetColor( color );
  109. }
  110. else
  111. {
  112. name = w.GetName();
  113. name.Replace( "PanelWidget", "Cursor" );
  114. if( w.FindAnyWidget( name ) )
  115. {
  116. w.FindAnyWidget( name ).SetColor( color );
  117. }
  118. }
  119. }
  120. else
  121. {
  122. color = ARGB( 150, 1, 255, 1 );
  123. if( w.FindAnyWidget("Cursor") )
  124. {
  125. w.FindAnyWidget("Cursor").SetColor( color );
  126. }
  127. else
  128. {
  129. name = w.GetName();
  130. name.Replace( "PanelWidget", "Cursor" );
  131. if( w.FindAnyWidget( name ) )
  132. {
  133. w.FindAnyWidget( name ).SetColor( color );
  134. }
  135. }
  136. }
  137. }
  138. override void OnItemDropReceived(InventoryGrid grid, Widget w, int row, int col)
  139. {
  140. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  141. ItemBase dragged_item = ItemBase.Cast( ItemManager.GetInstance().GetDraggedItem() );
  142. ItemPreviewWidget iw = ItemPreviewWidget.Cast( w.FindAnyWidget( "Render" ) );
  143. if( !iw )
  144. {
  145. string name = w.GetName();
  146. name.Replace( "PanelWidget", "Render" );
  147. iw = ItemPreviewWidget.Cast( w.FindAnyWidget( name ) );
  148. }
  149. if(!dragged_item && iw)
  150. dragged_item = ItemBase.Cast( iw.GetItem() );
  151. if(dragged_item && dragged_item.GetHierarchyRootPlayer()!= GetGame().GetPlayer())
  152. return;
  153. ItemBase quickbar_item = ItemBase.Cast( player.GetQuickBarEntity(col) );
  154. if (m_DraggingIndex != INDEX_NOT_FOUND)
  155. {
  156. dragged_item = ItemBase.Cast( player.GetQuickBarEntity(m_DraggingIndex) );
  157. }
  158. if (dragged_item && dragged_item.GetInventory().CanRemoveEntity())
  159. {
  160. player.SetQuickBarEntityShortcut(dragged_item, col);
  161. if (quickbar_item && quickbar_item != dragged_item && m_DraggingIndex != INDEX_NOT_FOUND)
  162. {
  163. player.SetQuickBarEntityShortcut(quickbar_item, m_DraggingIndex);
  164. }
  165. }
  166. m_DraggingIndex = INDEX_NOT_FOUND;
  167. InventoryMenu menu = InventoryMenu.Cast( GetGame().GetUIManager().FindMenu(MENU_INVENTORY) );
  168. if ( menu )
  169. {
  170. menu.RefreshQuickbar();
  171. }
  172. }
  173. override void OnItemDrop(InventoryGrid grid, Widget w, int row, int col)
  174. {
  175. if (m_DraggingIndex != INDEX_NOT_FOUND)
  176. {
  177. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  178. InventoryItem dragged_item = InventoryItem.Cast( player.GetQuickBarEntity(m_DraggingIndex) );
  179. Remove(dragged_item);
  180. m_DraggingIndex = INDEX_NOT_FOUND;
  181. }
  182. InventoryMenu menu = InventoryMenu.Cast( GetGame().GetUIManager().FindMenu(MENU_INVENTORY) );
  183. if ( menu )
  184. {
  185. menu.RefreshQuickbar();
  186. }
  187. ItemManager.GetInstance().HideDropzones();
  188. }
  189. override void OnItemDrag(InventoryGrid grid, Widget w, int row, int col)
  190. {
  191. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  192. InventoryItem item = InventoryItem.Cast( player.GetQuickBarEntity(col) );
  193. if (item)
  194. {
  195. m_DraggingIndex = col;
  196. m_Grid.SetItemColor(item, InventoryGrid.ITEM_COLOR_DRAG);
  197. }
  198. }
  199. override int GetQuickbarItemColor( InventoryGrid grid, InventoryItem item )
  200. {
  201. int color = 0x0AFFFFFF;
  202. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  203. EntityAI itemInHand = player.GetHumanInventory().GetEntityInHands();
  204. if ( player && itemInHand == item )
  205. {
  206. if ( player.GetHumanInventory().FindUserReservedLocationIndex(item) != -1 || grid.CanAddItemInHandToInventory() )
  207. color = InventoryGrid.ITEM_COLOR_QUICKBAR_H_GOOD;
  208. else
  209. color = InventoryGrid.ITEM_COLOR_QUICKBAR_H_BAD;
  210. }
  211. else if ( itemInHand )
  212. {
  213. if ( !grid.CanAddItemInHandToInventory() && !GameInventory.CanSwapEntitiesEx(item, itemInHand) )
  214. color = InventoryGrid.ITEM_COLOR_QUICKBAR_I_BAD;
  215. }
  216. return color;
  217. }
  218. override int HasItemQuantity( InventoryItem item )
  219. {
  220. return QuantityConversions.HasItemQuantity( item );
  221. }
  222. override string GetItemQuantityText( InventoryItem item )
  223. {
  224. return QuantityConversions.GetItemQuantityText( item );
  225. }
  226. override float GetItemQuantity( InventoryItem item )
  227. {
  228. return QuantityConversions.GetItemQuantity( item );
  229. }
  230. override int GetItemQuantityMax( InventoryItem item )
  231. {
  232. ItemBase ib = ItemBase.Cast(item);
  233. return ib.m_VarQuantityMax;
  234. }
  235. override int GetItemCount( InventoryItem item )
  236. {
  237. ItemBase ib = ItemBase.Cast(item);
  238. return ib.m_Count;
  239. }
  240. override bool CanAddItemInHandToInventory()
  241. {
  242. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  243. EntityAI itemInHand = player.GetHumanInventory().GetEntityInHands();
  244. return itemInHand && player.GetInventory().CanAddEntityToInventory(itemInHand);
  245. }
  246. }