private void cbItem_SelectedIndexChanged(object sender, EventArgs e) { var selectedItemId = (ushort)(int)cbItem.SelectedValue; var itemCount = (ushort)0; pbItem.BackColor = ItemColor.GetItemColor(selectedItemId); pbItem.Image = ItemSprite.GetItemSprite(selectedItemId, itemCount); SelectedItemInfo = itemConvertor.FromItemId(selectedItemId); OnItemChanged(); }
public DisplaySegmentLayout(ItemConvertor itemConvertor, Item rawItem, DisplaySegmentLayoutOptions options) { this.options = options; itemInfo = itemConvertor.FromItemId(itemConvertor.GetItemId(rawItem)); ushort displayItemId; if (this.itemInfo.Kind == ItemKind.Kind_Fish || this.itemInfo.Kind == ItemKind.Kind_Insect) { ushort modelId = itemConvertor.GetCreatureModel(itemInfo.ItemId); switch (options.CreatureDisplayStyle) { case CreatureDisplayStyle.AsModel: displayItemId = modelId; break; case CreatureDisplayStyle.InTank: displayItemId = itemInfo.ItemId; break; default: throw new Exception("Unsupported creature display type"); } if (options.CreatureDropStyle.HasFlag(CreatureDropStyle.Creature)) { droppedItems.Add(itemConvertor.ApplyPresentation(new Item(itemInfo.ItemId), PresentationType.Dropped)); } if (options.CreatureDropStyle.HasFlag(CreatureDropStyle.Model)) { droppedItems.Add(itemConvertor.ApplyPresentation(new Item(modelId), PresentationType.Dropped)); } } else { var item = new Item(); item.CopyFrom(rawItem); if (!itemInfo.HasVariants) { item.Count = (ushort)(itemInfo.MaxStackSize - 1); } droppedItems.Add(itemConvertor.ApplyPresentation(item, PresentationType.Dropped)); } placedItem = new Item(); placedItem.CopyFrom(rawItem); itemConvertor.ApplyPresentation(placedItem, PresentationType.Hung, PresentationType.Placed, PresentationType.Dropped); placedItemSize = placedItem.GetSize(); if (itemInfo.CanRecipe) { recipeItem = new Item(); recipeItem.CopyFrom(rawItem); itemConvertor.ApplyPresentation(recipeItem, PresentationType.Recipe, PresentationType.Dropped); recipeItemSize = recipeItem.GetSize(); } else { recipeItem = null; recipeItemSize = Size.Empty; } }
public IEnumerable <Item> ResolveItems() { List <ushort> itemIds = new List <ushort>(); HashSet <ushort> visitedItemIds = new HashSet <ushort>(); HashSet <Guid> visitedCollectionIds = new HashSet <Guid>(); void AddCollection(ItemCollection collection) { if (visitedCollectionIds.Contains(collection.Id)) { return; } foreach (var member in collection.Members) { switch (member.Type) { case CollectionMemberType.Collection: if (collectionLookup.TryGetValue(member.CollectionId, out var childCollection)) { AddCollection(childCollection); } break; case CollectionMemberType.Item: AddItem(member.ItemId); break; } } } void AddItem(ushort itemId) { if (visitedItemIds.Contains(itemId)) { return; } itemIds.Add(itemId); visitedItemIds.Add(itemId); } foreach (TreeNode itemNode in itemsNode.Nodes) { if (itemNode.Checked) { var itemId = (ushort)itemNode.Tag; AddItem(itemId); } } foreach (TreeNode collectionNode in collectionsNode.Nodes) { if (collectionNode.Checked) { var collection = (ItemCollection)collectionNode.Tag; AddCollection(collection); } } foreach (ushort itemId in itemIds) { ItemEditorInfo info = itemConvertor.FromItemId(itemId); bool includeVariants = info.HasVariants && ((chkVaryDiy.Checked && info.CanRecipe) || (chkVaryOther.Checked && !info.CanRecipe)); if (includeVariants) { if (info.BodyVariants?.Length > 0) { foreach (var bodyVariant in info.BodyVariants) { if (info.FabricVariants?.Length > 0) { Item item = new Item(itemId); item.Count = bodyVariant.Value; item.UseCount = info.FabricVariants[0].Value; yield return(item); } else { Item item = new Item(itemId); item.Count = bodyVariant.Value; item.UseCount = 0; yield return(item); } } } else if (info.FabricVariants?.Length > 0) { foreach (var fabricVariant in info.FabricVariants) { Item item = new Item(itemId); item.Count = 0; item.UseCount = fabricVariant.Value; yield return(item); } } else { Item item = new Item(itemId); item.Count = 0; item.UseCount = 0; yield return(item); } } else { Item item = new Item(itemId); item.Count = (ushort)(info.MaxStackSize - 1); yield return(item); } } }