handsarea.c 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. class HandsArea: Container
  2. {
  3. protected ScrollWidget m_Scroller;
  4. protected ref HandsContainer m_HandsContainer;
  5. protected ref SizeToChild m_HandsResizer;
  6. protected bool m_ShouldChangeSize = true;
  7. void HandsArea( LayoutHolder parent )
  8. {
  9. m_HandsContainer = new HandsContainer( this );
  10. m_Body.Insert(m_HandsContainer);
  11. if ( m_ImmedUpdate )
  12. m_MainWidget.Update();
  13. m_ParentWidget.GetScript( m_HandsResizer );
  14. m_Scroller = ScrollWidget.Cast( m_ParentWidget );
  15. RecomputeOpenedContainers();
  16. }
  17. bool IsSwapActive()
  18. {
  19. Widget swap_cursor = m_MainWidget.FindAnyWidget("SwapCursor");
  20. if ( swap_cursor )
  21. return swap_cursor.IsVisible();
  22. else
  23. return false;
  24. }
  25. bool IsCombineActive()
  26. {
  27. Widget combine_cursor = m_MainWidget.FindAnyWidget("CombineCursor");
  28. if ( combine_cursor )
  29. return combine_cursor.IsVisible();
  30. else
  31. return false;
  32. }
  33. override ScrollWidget GetScrollWidget()
  34. {
  35. return m_Scroller;
  36. }
  37. override void UpdateSelectionIcons()
  38. {
  39. #ifdef PLATFORM_CONSOLE
  40. ScrollToActiveContainer();
  41. #endif
  42. }
  43. override void UpdateInterval()
  44. {
  45. if (!m_Scroller.IsScrollbarVisible())
  46. {
  47. m_Scroller.VScrollToPos01(0.0);
  48. }
  49. else if (m_Scroller.GetVScrollPos01() > 1.0)
  50. {
  51. m_Scroller.VScrollToPos01(1.0);
  52. }
  53. m_HandsContainer.UpdateInterval();
  54. float x, y;
  55. float x2, y2;
  56. m_Scroller.GetScreenSize( x, y );
  57. m_MainWidget.GetScreenSize( x2, y2 );
  58. if ( y2 != y )
  59. m_ShouldChangeSize = true;
  60. bool changed_size;
  61. if ( m_ShouldChangeSize && m_HandsResizer.ResizeParentToChild( changed_size, InventoryMenu.GetHeight() * 0.5 ) )
  62. m_Scroller.SetAlpha( 0.3921 );
  63. else
  64. m_Scroller.SetAlpha( 0 );
  65. if ( changed_size )
  66. m_ShouldChangeSize = false;
  67. }
  68. override void SetLayoutName()
  69. {
  70. m_LayoutName = WidgetLayoutName.HandsArea;
  71. }
  72. override void SetParentWidget()
  73. {
  74. m_ParentWidget = m_Parent.GetMainWidget().FindAnyWidget( "HandsPanel" );
  75. }
  76. override void OnShow()
  77. {
  78. super.OnShow();
  79. m_HandsContainer.OnShow();
  80. }
  81. override void Refresh()
  82. {
  83. UpdateSelectionIcons();
  84. m_ShouldChangeSize = true;
  85. }
  86. override void SetSameLevelNextActive()
  87. {
  88. super.SetSameLevelNextActive();
  89. Refresh();
  90. }
  91. override void SetSameLevelPreviousActive()
  92. {
  93. super.SetSameLevelPreviousActive();
  94. Refresh();
  95. }
  96. void DraggingOverHandsPanel( Widget w, int x, int y, Widget receiver )
  97. {
  98. if ( w == NULL )
  99. {
  100. return;
  101. }
  102. ItemPreviewWidget ipw = ItemPreviewWidget.Cast( w.FindAnyWidget( "Render" ) );
  103. if( !ipw )
  104. {
  105. string name = w.GetName();
  106. name.Replace( "PanelWidget", "Render" );
  107. ipw = ItemPreviewWidget.Cast( w.FindAnyWidget( name ) );
  108. }
  109. if( !ipw )
  110. {
  111. ipw = ItemPreviewWidget.Cast( w );
  112. }
  113. if( !ipw || !ipw.IsInherited( ItemPreviewWidget ) )
  114. {
  115. return;
  116. }
  117. if( ipw.GetItem() && GetGame().GetPlayer().GetHumanInventory().CanAddEntityIntoHands( ipw.GetItem() ) )
  118. {
  119. ColorManager.GetInstance().SetColor( w, ColorManager.GREEN_COLOR );
  120. ItemManager.GetInstance().HideDropzones();
  121. ItemManager.GetInstance().GetCenterDropzone().SetAlpha( 1 );
  122. }
  123. else
  124. {
  125. ColorManager.GetInstance().SetColor( w, ColorManager.RED_COLOR );
  126. ItemManager.GetInstance().HideDropzones();
  127. ItemManager.GetInstance().GetCenterDropzone().SetAlpha( 1 );
  128. }
  129. }
  130. void OnHandsPanelDropReceived( Widget w, int x, int y, Widget receiver )
  131. {
  132. ItemPreviewWidget ipw = ItemPreviewWidget.Cast( w.FindAnyWidget( "Render" ) );
  133. if( !ipw )
  134. {
  135. string name = w.GetName();
  136. name.Replace( "PanelWidget", "Render" );
  137. ipw = ItemPreviewWidget.Cast( w.FindAnyWidget( name ) );
  138. }
  139. if( !ipw )
  140. {
  141. ipw = ItemPreviewWidget.Cast( w );
  142. }
  143. if( !ipw || !ipw.GetItem() || !ipw.IsInherited( ItemPreviewWidget ) )
  144. {
  145. return;
  146. }
  147. if( !ipw.GetItem().GetInventory().CanRemoveEntity() )
  148. return;
  149. if( GetGame().GetPlayer().GetHumanInventory().CanAddEntityIntoHands( ipw.GetItem() ) )
  150. {
  151. ItemBase item_base = ItemBase.Cast( ipw.GetItem() );
  152. float stackable = item_base.GetTargetQuantityMax(-1);
  153. if( stackable == 0 || item_base.GetQuantity() <= stackable )
  154. {
  155. GetGame().GetPlayer().PredictiveTakeEntityToHands( item_base );
  156. }
  157. else if( stackable != 0 && stackable <= item_base.GetQuantity() )
  158. {
  159. item_base.SplitIntoStackMaxHandsClient( PlayerBase.Cast( GetGame().GetPlayer() ) );
  160. }
  161. }
  162. }
  163. }