private void InternalHideItem(ItemInfo itemInfo, object userData) { IItem item = itemInfo.Item; if (itemInfo.Status == ItemStatus.Hidden) { return; } itemInfo.Status = ItemStatus.WillHide; item.OnHide(m_IsShutdown, userData); itemInfo.Status = ItemStatus.Hidden; ItemGroup itemGroup = (ItemGroup)item.ItemGroup; if (itemGroup == null) { throw new GameFrameworkException("Item group is invalid."); } itemGroup.RemoveItem(item); if (!m_ItemInfos.Remove(item.Id)) { throw new GameFrameworkException("Item info is unmanaged."); } if (m_HideItemCompleteEventHandler != null) { HideItemCompleteEventArgs hideItemCompleteEventArgs = HideItemCompleteEventArgs.Create(item.Id, item.ItemAssetName, itemGroup, userData); m_HideItemCompleteEventHandler(this, hideItemCompleteEventArgs); ReferencePool.Release(hideItemCompleteEventArgs); } m_RecycleQueue.Enqueue(itemInfo); }