InventoryQuickbar.c
class InventoryQuickbar extends InventoryGridController
{
protected ref TItemsMap m_Items;
protected InventoryGrid m_Grid;
protected int m_DraggingIndex;
void InventoryQuickbar(Widget quickbarGridWidget)
{
m_DraggingIndex = INDEX_NOT_FOUND;
m_Items = new TItemsMap;
UpdateItems( quickbarGridWidget );
}
void ~InventoryQuickbar()
{
}
void UpdateItems( Widget quickbarGridWidget )
{
if( !quickbarGridWidget )
{
return;
}
PlayerBase player = PlayerBase.Cast( g_Game.GetPlayer() );
if ( !player )
return;
int i;
// create grid and align it to center
if( !m_Grid )
{
quickbarGridWidget.GetScript( m_Grid );
m_Grid.SetController( this );
m_Grid.GenerateQuickBarBackgroundTiles( 10 );
}
m_Items.Clear();
InventoryItem item;
if( m_Grid )
{
if( m_Grid.GetGridSize() != player.GetQuickBarSize() )
{
m_Grid.SetGridSize( player.GetQuickBarSize() );
}
}
for( i = 0; i < m_Grid.GetGridSize(); i++)
{
item = InventoryItem.Cast( player.GetQuickBarEntity(i) );
if( item )
{
m_Items.Set( item, Vector(i, 1, 1) );
}
}
if( m_Grid )
{
m_Grid.UpdateQuickbarItems( m_Items );
}
}
void Remove(InventoryItem itemToRemove)
{
PlayerBase player = PlayerBase.Cast( g_Game.GetPlayer() );
for ( int i = 0; i < m_Grid.GetGridSize(); i++ )
{
InventoryItem item = InventoryItem.Cast( player.GetQuickBarEntity(i) );
if(item == itemToRemove)
{
player.RemoveQuickBarEntityShortcut( item );
}
}
}
// InventoryGridController override
override void OnItemEnter(InventoryGrid grid, Widget w, int row, int col)
{
Widget quickbar = grid.GetRoot();
if( quickbar )
{
// quickbar.SetColor( 0xFFFFFFFF );
}
}
override void OnItemLeave(InventoryGrid grid, Widget w)
{
Widget quickbar = grid.GetRoot();
if( quickbar )
{
// quickbar.SetColor( 0x7FFFFFFF );
}
}
override void OnItemDraggingOver(InventoryGrid grid, Widget w, int row, int col)
{
ItemPreviewWidget iw;
InventoryItem dragged_item;
iw = ItemPreviewWidget.Cast( w.FindAnyWidget( "Render" ) );
if( !iw )
{
string name = w.GetName();
name.Replace( "PanelWidget", "Render" );
iw = ItemPreviewWidget.Cast( w.FindAnyWidget( name ) );
}
if( !iw || !iw.GetItem() )
{
return;
}
if(!dragged_item && iw)
dragged_item = InventoryItem.Cast( iw.GetItem() );
if ( dragged_item == NULL)
return;
if (dragged_item && dragged_item.GetInventory().CanRemoveEntity() == false)
{
int color;
color = ARGB( 150, 255, 1, 1 );
if( w.FindAnyWidget("Cursor") )
{
w.FindAnyWidget("Cursor").SetColor( color );
}
else
{
name = w.GetName();
name.Replace( "PanelWidget", "Cursor" );
if( w.FindAnyWidget( name ) )
{
w.FindAnyWidget( name ).SetColor( color );
}
}
}
else
{
color = ARGB( 150, 1, 255, 1 );
if( w.FindAnyWidget("Cursor") )
{
w.FindAnyWidget("Cursor").SetColor( color );
}
else
{
name = w.GetName();
name.Replace( "PanelWidget", "Cursor" );
if( w.FindAnyWidget( name ) )
{
w.FindAnyWidget( name ).SetColor( color );
}
}
}
}
override void OnItemDropReceived(InventoryGrid grid, Widget w, int row, int col)
{
PlayerBase player = PlayerBase.Cast( g_Game.GetPlayer() );
ItemBase dragged_item = ItemBase.Cast( ItemManager.GetInstance().GetDraggedItem() );
ItemPreviewWidget iw = ItemPreviewWidget.Cast( w.FindAnyWidget( "Render" ) );
if( !iw )
{
string name = w.GetName();
name.Replace( "PanelWidget", "Render" );
iw = ItemPreviewWidget.Cast( w.FindAnyWidget( name ) );
}
if(!dragged_item && iw)
dragged_item = ItemBase.Cast( iw.GetItem() );
if(dragged_item && dragged_item.GetHierarchyRootPlayer()!= g_Game.GetPlayer())
return;
ItemBase quickbar_item = ItemBase.Cast( player.GetQuickBarEntity(col) );
if (m_DraggingIndex != INDEX_NOT_FOUND)
{
dragged_item = ItemBase.Cast( player.GetQuickBarEntity(m_DraggingIndex) );
}
if (dragged_item && dragged_item.GetInventory().CanRemoveEntity())
{
player.SetQuickBarEntityShortcut(dragged_item, col);
if (quickbar_item && quickbar_item != dragged_item && m_DraggingIndex != INDEX_NOT_FOUND)
{
player.SetQuickBarEntityShortcut(quickbar_item, m_DraggingIndex);
}
}
m_DraggingIndex = INDEX_NOT_FOUND;
InventoryMenu menu = InventoryMenu.Cast( g_Game.GetUIManager().FindMenu(MENU_INVENTORY) );
if ( menu )
{
menu.RefreshQuickbar();
}
}
override void OnItemDrop(InventoryGrid grid, Widget w, int row, int col)
{
if (m_DraggingIndex != INDEX_NOT_FOUND)
{
PlayerBase player = PlayerBase.Cast( g_Game.GetPlayer() );
InventoryItem dragged_item = InventoryItem.Cast( player.GetQuickBarEntity(m_DraggingIndex) );
Remove(dragged_item);
m_DraggingIndex = INDEX_NOT_FOUND;
}
InventoryMenu menu = InventoryMenu.Cast( g_Game.GetUIManager().FindMenu(MENU_INVENTORY) );
if ( menu )
{
menu.RefreshQuickbar();
}
ItemManager.GetInstance().HideDropzones();
}
override void OnItemDrag(InventoryGrid grid, Widget w, int row, int col)
{
PlayerBase player = PlayerBase.Cast( g_Game.GetPlayer() );
InventoryItem item = InventoryItem.Cast( player.GetQuickBarEntity(col) );
if (item)
{
m_DraggingIndex = col;
m_Grid.SetItemColor(item, InventoryGrid.ITEM_COLOR_DRAG);
}
}
override int GetQuickbarItemColor( InventoryGrid grid, InventoryItem item )
{
int color = 0x0AFFFFFF;
PlayerBase player = PlayerBase.Cast( g_Game.GetPlayer() );
EntityAI itemInHand = player.GetEntityInHands();
if ( player && itemInHand == item )
{
if ( player.GetHumanInventory().FindUserReservedLocationIndex(item) != -1 || grid.CanAddItemInHandToInventory() )
color = InventoryGrid.ITEM_COLOR_QUICKBAR_H_GOOD;
else
color = InventoryGrid.ITEM_COLOR_QUICKBAR_H_BAD;
}
else if ( itemInHand )
{
if ( !grid.CanAddItemInHandToInventory() && !GameInventory.CanSwapEntitiesEx(item, itemInHand) )
color = InventoryGrid.ITEM_COLOR_QUICKBAR_I_BAD;
}
return color;
}
override int HasItemQuantity( InventoryItem item )
{
return QuantityConversions.HasItemQuantity( item );
}
override string GetItemQuantityText( InventoryItem item )
{
return QuantityConversions.GetItemQuantityText( item );
}
override float GetItemQuantity( InventoryItem item )
{
return QuantityConversions.GetItemQuantity( item );
}
override int GetItemQuantityMax( InventoryItem item )
{
ItemBase ib = ItemBase.Cast(item);
return ib.m_VarQuantityMax;
}
override int GetItemCount( InventoryItem item )
{
ItemBase ib = ItemBase.Cast(item);
return ib.m_Count;
}
override bool CanAddItemInHandToInventory()
{
PlayerBase player = PlayerBase.Cast( g_Game.GetPlayer() );
EntityAI itemInHand = player.GetEntityInHands();
return itemInHand && player.GetInventory().CanAddEntityToInventory(itemInHand);
}
}