/// <summary> /// This can be used as an example for building your own inventory UI. /// </summary> public void OnSelectTab(bool value) { if (!value) { return; } Item.GetParams = null; Dictionary <string, SpriteGroupEntry> dict; Action <Item> equipAction; int equippedIndex; var tab = Tabs.GetComponentsInChildren <Toggle>().Single(i => i.isOn); switch (tab.name) { case "Armor": { dict = SpriteCollection.Armor.ToDictionary(i => i.FullName, i => i); equipAction = item => Character4D.EquipArmor(dict[item.Id]?.Sprites); equippedIndex = Character.Front.Armor == null ? -1 : SpriteCollection.Armor.FindIndex(i => i.Sprites.SequenceEqual(Character.Front.Armor)); break; } case "Helmet": { dict = SpriteCollection.Armor.ToDictionary(i => i.FullName, i => i); equipAction = item => Character4D.EquipHelmet(dict[item.Id]); equippedIndex = SpriteCollection.Armor.FindIndex(i => i.Sprites.Contains(Character.Front.Helmet)); Item.GetParams = item => new ItemParams { Id = item.Id, Path = dict[item.Id] == null ? null : dict[item.Id].Path.Replace("Armor/", "Helmet/") + ".Helmet", Meta = dict[item.Id]?.Id.ToString() }; break; } case "Shield": { dict = SpriteCollection.Shield.ToDictionary(i => i.FullName, i => i); equipAction = item => Character4D.EquipShield(dict[item.Id]?.Sprites); equippedIndex = Character.Front.Shield == null ? -1 : SpriteCollection.Shield.FindIndex(i => i.Sprites.SequenceEqual(Character.Front.Shield)); break; } case "Melee1H": { dict = SpriteCollection.MeleeWeapon1H.ToDictionary(i => i.FullName, i => i); equipAction = item => Character4D.EquipMeleeWeapon1H(dict[item.Id]?.Sprite); equippedIndex = SpriteCollection.MeleeWeapon1H.FindIndex(i => i.Sprites.Contains(Character.Front.PrimaryMeleeWeapon)); break; } case "Melee2H": { dict = SpriteCollection.MeleeWeapon2H.ToDictionary(i => i.FullName, i => i); equipAction = item => Character4D.EquipMeleeWeapon2H(dict[item.Id]?.Sprite); equippedIndex = SpriteCollection.MeleeWeapon2H.FindIndex(i => i.Sprites.Contains(Character.Front.PrimaryMeleeWeapon)); break; } case "Bow": { dict = SpriteCollection.Bow.ToDictionary(i => i.FullName, i => i); equipAction = item => Character4D.EquipBow(dict[item.Id]?.Sprites); equippedIndex = Character.Front.CompositeWeapon == null ? -1 : SpriteCollection.Bow.FindIndex(i => i.Sprites.SequenceEqual(Character.Front.CompositeWeapon)); break; } case "Crossbow": { dict = SpriteCollection.Crossbow.ToDictionary(i => i.FullName, i => i); equipAction = item => Character4D.EquipCrossbow(dict[item.Id]?.Sprites); equippedIndex = Character.Front.CompositeWeapon == null ? -1 : SpriteCollection.Crossbow.FindIndex(i => i.Sprites.SequenceEqual(Character.Front.CompositeWeapon)); break; } case "Ears": { dict = SpriteCollection.Ears.ToDictionary(i => i.FullName, i => i); equipAction = item => Character4D.SetEars(dict[item.Id]?.Sprites); equippedIndex = SpriteCollection.Ears.FindIndex(i => i.Sprites.SequenceEqual(Character.Front.Ears)); break; } case "Eyebrows": { dict = SpriteCollection.Eyebrows.ToDictionary(i => i.FullName, i => i); equipAction = item => Character4D.SetEyebrows(dict[item.Id]?.Sprites); equippedIndex = SpriteCollection.Eyebrows.FindIndex(i => i.Sprites.Contains(Character.Front.Expressions[0].Eyebrows)); break; } case "Eyes": { dict = SpriteCollection.Eyes.ToDictionary(i => i.FullName, i => i); equipAction = item => Character4D.SetEyes(dict[item.Id]?.Sprites); equippedIndex = SpriteCollection.Eyes.FindIndex(i => i.Sprites.Contains(Character.Front.Expressions[0].Eyes)); break; } case "Hair": { dict = SpriteCollection.Hair.ToDictionary(i => i.FullName, i => i); equipAction = item => Character4D.SetHair(dict[item.Id]); equippedIndex = SpriteCollection.Hair.FindIndex(i => i.Sprites.Contains(Character.Front.Hair)); break; } case "Mouth": { dict = SpriteCollection.Mouth.ToDictionary(i => i.FullName, i => i); equipAction = item => Character4D.SetMouth(dict[item.Id]?.Sprites); equippedIndex = SpriteCollection.Mouth.FindIndex(i => i.Sprites.Contains(Character.Front.Expressions[0].Mouth)); break; } default: throw new NotImplementedException(tab.name); } var items = dict.Values.Select(i => new Item(i.FullName)).ToList(); items.Insert(0, new Item("Empty")); dict.Add("Empty", null); if (Item.GetParams == null) { Item.GetParams = item => new ItemParams { Id = item.Id, Path = dict[item.Id]?.Path, Meta = dict[item.Id]?.Id.ToString() }; // We override GetParams method because we don't have a database with item params. } InventoryItem.OnLeftClick = item => { equipAction(item); EquipCallback?.Invoke(item); ItemName.text = item.Params.Id ?? "Empty"; }; Inventory.Initialize(ref items, items[equippedIndex + 1], reset: true); ColorButtons[0].SetActive(tab.name == "Hair"); ColorButtons[1].SetActive(tab.name == "Eyes"); ColorButtons[2].SetActive(tab.name == "Body"); if (ColorButtons.Count == 4) { ColorButtons[3].SetActive(!ColorButtons[0].activeSelf && !ColorButtons[1].activeSelf && !ColorButtons[2].activeSelf); } }