4 protected const int ROWS_NUMBER_XBOX = 5;
7 protected int m_CargoIndex = -1;
9 protected int m_FocusedItemPosition = -1;
24#ifndef PLATFORM_CONSOLE
30 protected int m_AttachmentSlotID = -1;
34 m_IsAttachment = is_attachment;
40 m_CargoContainer =
m_RootWidget.FindAnyWidget(
"grid_background" );
41 m_ItemsContainer =
m_RootWidget.FindAnyWidget(
"grid_overlay" );
42 m_CargoHeader =
m_RootWidget.FindAnyWidget(
"grid_container_header_spacer" );
43#ifndef PLATFORM_CONSOLE
46 m_RootWidget.FindAnyWidget(
"grid_container" ).GetScript( m_Resizer2 );
47 m_CargoHeader.Show( is_attachment );
48 m_FalseHeaderTextWidget = TextWidget.Cast(m_CargoHeader.FindAnyWidget(
"TextWidget0" ));
51 m_FocusedItemPosition = -1;
58 m_Entity.GetOnItemAddedIntoCargo().Remove( AddedToCargo );
59 m_Entity.GetOnItemRemovedFromCargo().Remove( RemovedFromCargo );
60 m_Entity.GetOnItemMovedInCargo().Remove( MovedInCargo );
62 m_Entity.GetOnReleaseLock().Remove( ReleaseLock );
71 item.GetInventory().GetCurrentInventoryLocation( il );
75 if ( m_ShowedItemPositions.Contains( item ) )
84 ref
Icon icon =
new Icon(
this,
false );
85 m_Icons.Insert( icon );
93 #ifdef PLATFORM_CONSOLE
94 for (
int i = 0; i < m_Cargo.GetItemCount(); i++ )
96 EntityAI item2 = m_Cargo.GetItem( i );
100 data.param1.SetCargoPos( i );
101 data.param1.SetPos();
105 m_FocusedItemPosition =
Math.Min( m_ShowedItemPositions.Count() - 1, m_FocusedItemPosition );
122 m_Icons.RemoveItem( data.param1 );
123 m_ShowedItemPositions.Remove( item );
128 #ifdef PLATFORM_CONSOLE
129 for(
int i = 0; i < m_Cargo.GetItemCount(); i++ )
131 EntityAI item2 = m_Cargo.GetItem( i );
132 data = m_ShowedItemPositions.Get( item2 );
133 if( data && data.param1 )
135 data.param1.SetCargoPos( i );
136 data.param1.SetPos();
140 m_FocusedItemPosition =
Math.Min( m_ShowedItemPositions.Count() - 1, m_FocusedItemPosition );
149 item.GetInventory().GetCurrentInventoryLocation( il );
152 #ifdef PLATFORM_CONSOLE
153 int y = il.GetRow() - 1;
157 if( m_ShowedItemPositions.Contains( item ) )
162 if( data.param2 !=
x || data.param3 !=
y )
166 #ifdef PLATFORM_CONSOLE
169 #ifdef PLATFORM_WINDOWS
170 data.param1.SetPosX( data.param2 );
171 data.param1.SetPosY( data.param3 );
174 data.param1.UpdateInterval();
182 #ifndef PLATFORM_CONSOLE
186 int index =
GetGame().GetPlayer().GetHumanInventory().FindUserReservedLocationIndex( item );
189 GetGame().GetPlayer().GetHumanInventory().GetUserReservedLocation( index, il );
191 ref
Icon icon =
new Icon(
this,
false );
192 m_Icons.Insert( icon );
193 icon.InitLock(
m_Entity, item, il.GetCol(), il.GetRow(), il.GetFlip() );
195 item.GetOnReleaseLock().Insert( ReleaseLock );
203 #ifndef PLATFORM_CONSOLE
204 if( m_ShowedLockPositions.Contains( item ) )
206 Icon ic = m_ShowedLockPositions.Get( item ).param1;
207 m_Icons.RemoveItem( ic );
208 m_ShowedLockPositions.Remove( item );
209 item.GetOnReleaseLock().Remove( ReleaseLock );
216 #ifdef PLATFORM_CONSOLE
246 m_Cargo = item.GetInventory().GetCargoFromIndex(cargo_index);
247 m_CargoIndex = cargo_index;
249 m_Entity.GetOnItemAddedIntoCargo().Insert( AddedToCargo );
250 m_Entity.GetOnItemRemovedFromCargo().Insert( RemovedFromCargo );
251 m_Entity.GetOnItemMovedInCargo().Insert( MovedInCargo );
253 m_Entity.GetOnReleaseLock().Insert( ReleaseLock );
264 int prev_count = m_ShowedItemPositions.Count();
267 for ( i = 0; i < m_Cargo.GetItemCount(); i++ )
269 EntityAI cargo_item = m_Cargo.GetItem( i );
276 #ifdef PLATFORM_CONSOLE
295 if (
m_Entity.CanDisplayCargo() &&
m_Entity.GetInventory().GetCargoFromIndex(m_CargoIndex) )
298 if ( m_IsAttachment && m_CargoHeader )
300 m_FalseHeaderTextWidget.SetText(
name);
302 m_FalseHeaderTextWidget.Update();
303 m_FalseHeaderTextWidget.GetScreenSize(
x,
y );
304 m_CargoHeader.FindAnyWidget(
"grid_container_header" ).SetSize( 1,
y +
InventoryMenu.GetHeightMultiplied( 10 ) );
305 m_CargoHeader.Update();
307 if (m_AlternateFalseHeaderTextWidget)
309 m_AlternateFalseHeaderTextWidget.SetText(
name);
322 m_ShowedItemPositions.Clear();
326 #ifdef PLATFORM_CONSOLE
327 int cargo_height = 1;
329 int cargo_height =
m_Entity.GetInventory().GetCargoFromIndex(m_CargoIndex).GetHeight();
332 for (
int j = 0; j < cargo_height; j++ )
339 #ifdef PLATFORM_WINDOWS
340 #ifndef PLATFORM_CONSOLE
341 row.SetWidth(
m_Entity.GetInventory().GetCargoFromIndex(m_CargoIndex).GetWidth(),
false );
345 row.GetRootWidget().SetSort( j,
false );
346 m_Rows.Insert( row );
350 row.GetRootWidget().FindAnyWidget(
"Icon0" ).GetScreenSize(
y, m_IconSize );
351 #ifdef PLATFORM_WINDOWS
352 #ifndef PLATFORM_CONSOLE
353 row.GetRootWidget().FindAnyWidget(
"Spacer0" ).GetScreenSize( m_SpaceSize,
y );
357 m_Resizer2.ResizeParentToChild();
358#ifndef PLATFORM_CONSOLE
359 m_Resizer1.ResizeParentToChild();
365#ifndef PLATFORM_CONSOLE
366 m_Resizer1.ResizeParentToChild();
368 m_Resizer2.ResizeParentToChild();
384 #ifdef PLATFORM_CONSOLE
385 #ifndef PLATFORM_WINDOWS
386 return CargoList.Cast( m_Cargo ).GetTotalWeight( null );
390 for (
int i = 0; i < m_Cargo.GetItemCount(); ++i )
393 m_Cargo.GetItemSize( i,
x,
y );
401 #ifdef PLATFORM_CONSOLE
402 #ifndef PLATFORM_WINDOWS
403 return CargoList.Cast( m_Cargo ).GetMaxWeight();
406 return m_Cargo.GetWidth() * m_Cargo.GetHeight();
411 if ( item && m_ShowedItemPositions.Contains( item ) )
421 if ( m_Cargo == null )
426 if ( index >= 0 && m_Cargo.GetItemCount() > index )
427 return GetIcon( m_Cargo.GetItem( index ) );
433 return GetIcon( m_FocusedItemPosition );
442 GetRootWidget().GetScreenSize(
x,
y );
452 GetRootWidget().GetPos(
x,
y );
462 GetRootWidget().GetScreenPos(
x,
y );
470 if( m_FocusedItemPosition >= m_Icons.Count() )
471 m_FocusedItemPosition = m_Icons.Count() - 1;
473 if( icon && !icon.IsActive() )
476 Inventory.GetInstance().UpdateConsoleToolbar();
484 int rows =
Math.Max(1,
Math.Ceil((count + 1) / ROWS_NUMBER_XBOX));
494 Error(
string.Format(
"%1::UpdateRowVisibility - CargoBase is NULL for entity %2 at position %3",
ToString(),
m_Entity.GetType(),
m_Entity.GetPosition()));
497 int diff = rows - m_Rows.Count();
500 for(i = m_Rows.Count() - 1; i >= rows; i--)
508 for(i = m_Rows.Count(); i < rows; i++)
514 row.GetRootWidget().SetSort(i);
520 m_Resizer2.ResizeParentToChild();
521 #ifndef PLATFORM_CONSOLE
522 m_Resizer1.ResizeParentToChild();
528 #ifdef PLATFORM_CONSOLE
529 if ( !m_ResizeTimer )
530 m_ResizeTimer =
new Timer();
531 if ( m_ResizeTimer.IsRunning() )
532 m_ResizeTimer.Stop();
533 m_ResizeTimer.Run( 0.05,
this,
"RefreshImpl" );
549 data.param1.UpdateInterval();
556 #ifdef PLATFORM_CONSOLE
558 #ifdef PLATFORM_WINDOWS
559 pos_y = pos_y * 5 + pos_x;
568 if ( item.GetInventory().GetFlipCargo() )
569 icon.
SetSize( size_y, size_x );
571 icon.
SetSize( size_x, size_y );
577 icon.
InitEx( item, refresh );
583 return InitIconEx( icon, item, pos_x, pos_y );
588 return m_ShowedItemPositions.Contains( item );
595 Man player =
GetGame().GetPlayer();
599 if( item && player.CanDropEntity( item ) )
601 if( item.GetTargetQuantityMax() < item.GetQuantity() )
602 item.SplitIntoStackMaxClient( null, -1 );
604 player.PhysicalPredictiveDropItem( item );
614 super.SetDefaultFocus(while_micromanagment_mode);
617 m_FocusedItemPosition = 0;
639 foreach(
Icon icon : m_Icons )
641 icon.SetActive(
false );
644 m_FocusedItemPosition = 0;
653 if ( max_row > focused_row )
656 if ( m_FocusedItemPosition >= m_Icons.Count() )
658 m_FocusedItemPosition = m_Icons.Count() - 1;
673 if ( focused_row > 0 )
687 if ( m_Icons.Count() > 0)
692 int row_max = row_min + ROWS_NUMBER_XBOX - 1;
694 if ( row_max >= m_Icons.Count() )
696 row_max = m_Icons.Count() - 1;
699 m_FocusedItemPosition++;
700 if( m_FocusedItemPosition > row_max )
702 m_FocusedItemPosition = row_min;
711 if ( m_Icons.Count() > 0)
716 int row_max = row_min + ROWS_NUMBER_XBOX - 1;
718 if ( row_max >= m_Icons.Count() )
720 row_max = m_Icons.Count() - 1;
723 m_FocusedItemPosition--;
724 if( m_FocusedItemPosition < row_min )
726 m_FocusedItemPosition = row_max;
746 super.SetLastActive();
752 int focusedIconCount = m_Icons.Count();
754 if (focusedIconCount > ROWS_NUMBER_XBOX)
757 int diff = focusedIconCount - iconMax;
760 m_FocusedItemPosition = focusedIconCount - diff;
764 m_FocusedItemPosition = 0;
771 super.SetActive( active );
780 return ( item != null );
797 return m_Icons.Count() == 0;
802 PluginRecipesManager recipes_manager = PluginRecipesManager.Cast(
GetPlugin( PluginRecipesManager ) );
803 return recipes_manager.GetValidRecipes( entity1, entity2, null, player );
822 if (CanTakeToInventory())
843 if (item && item.
IsTakeable() && item.CanPutIntoHands(null))
859 if( focused_item != selected_item )
863 if( selected_item.GetInventory().CanRemoveEntity() &&
m_Entity )
865 bool can_add =
m_Entity.GetInventory().CanAddEntityInCargo( selected_item, selected_item.GetInventory().GetFlipCargo());
866 bool in_cargo = !player.GetInventory().HasEntityInInventory( selected_item ) || !
m_Entity.GetInventory().HasEntityInCargo( selected_item );
867 if( can_add && in_cargo )
869 player.PredictiveTakeEntityToTargetCargo(
m_Entity, selected_item );
877 m_FocusedItemPosition = 0;
893 else if ( focused_item && focused_item.GetInventory().CanRemoveEntity() )
895 EntityAI item_in_hands =
GetGame().GetPlayer().GetHumanInventory().GetEntityInHands();
900 player.PredictiveSwapEntities( item_in_hands, focused_item );
906 if( player.GetHumanInventory().CanAddEntityInHands( focused_item ) )
908 player.PredictiveTakeEntityToHands( focused_item );
926 EntityAI item_in_hands =
GetGame().GetPlayer().GetHumanInventory().GetEntityInHands();
928 if( item_in_hands && prev_item )
940 m_CargoHeader.Show(show);
946 m_AlternateFalseHeaderTextWidget = w;
955 m_AttachmentSlotID = slotID;
965 return m_Icons.Count();
void Inventory(LayoutHolder parent)
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
bool CanPerformActionFromInventory(ItemBase mainItem, ItemBase targetItem)
bool CanSetActionFromInventory(ItemBase mainItem, ItemBase targetItem)
represents base for cargo storage for entities
override void SetLastFocus()
ref SizeToChild m_Resizer2
override void SetActive(bool active)
void SetAttachmentSlotID(int slotID)
void MovedInCargo(EntityAI item)
TextWidget m_FalseHeaderTextWidget
override void SetNextActive()
override void SetLayoutName()
void SetLock(EntityAI item)
override EntityAI GetFocusedItem()
void ShowFalseCargoHeader(bool show)
int GetAttachmentSlotID()
ref array< ref Icon > m_Icons
override float GetFocusedContainerYPos(bool contents=false)
int GetMaxCargoCapacity()
ref SizeToChild m_Resizer1
override void UnfocusAll()
override float GetFocusedContainerHeight(bool contents=false)
override bool IsItemActive()
const int ROWS_NUMBER_XBOX
void SetEntity(EntityAI item, int cargo_index=0, bool immedUpdate=true)
void AddedToCargoEx(EntityAI item, bool refresh=true)
override bool SelectItem()
override bool TransferItemToVicinity()
override bool TransferItem()
Icon InitIcon(Icon icon, EntityAI item, int pos_x, int pos_y)
bool HasItem(EntityAI item)
override void SetPreviousActive(bool force=false)
override Header GetHeader()
override float GetFocusedContainerYScreenPos(bool contents=false)
void RemovedFromCargo(EntityAI item)
void AddedToCargo(EntityAI item)
override void SetDefaultFocus(bool while_micromanagment_mode=false)
void UpdateRowVisibility(int count)
override bool IsItemWithQuantityActive()
void SetAlternateFalseTextHeaderWidget(TextWidget w)
override void SetNextLeftActive()
ref map< EntityAI, ref Param3< ref Icon, int, int > > m_ShowedItemPositions
ref map< EntityAI, ref Param3< ref Icon, int, int > > m_ShowedLockPositions
override bool CanCombineAmmo()
override void SetLastActive()
Icon GetIcon(EntityAI item)
void ReleaseLock(EntityAI item)
TextWidget m_AlternateFalseHeaderTextWidget
override void SetNextRightActive()
void CargoContainer(LayoutHolder parent, bool is_attachment=false)
int GetRecipeCount(bool recipe_anywhere, ItemBase entity1, ItemBase entity2, PlayerBase player)
Icon InitIconEx(Icon icon, EntityAI item, int pos_x, int pos_y, bool refresh=true)
ref array< ref CargoContainerRow > m_Rows
override void UpdateInterval()
script counterpart to engine's class Inventory
static bool CanSwapEntitiesEx(notnull EntityAI item1, notnull EntityAI item2)
void SetPosEx(bool refresh=true)
bool CombineItems(EntityAI entity1, EntityAI entity2)
override void SetActive(bool active)
void SetSize(int x, int y)
void InitEx(EntityAI obj, bool refresh=true)
override bool IsTakeable()
void SetSelectedItemEx(EntityAI selected_item, Container selected_container, LayoutHolder selected_icon)
Container GetSelectedContainer()
EntityAI GetSelectedItem()
static ItemManager GetInstance()
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto native CGame GetGame()
void Error(string err)
Messagebox with error message.
proto native vobject GetObject(string name)
Loads object from data, or gets it from cache. Object must be released when not used.
FindInventoryLocationType
flags for searching locations in inventory
PluginBase GetPlugin(typename plugin_type)
ref Widget m_RootWidget[MAX_SIMULTANIOUS_PLAYERS]