public void EquipRandomArmor() { var randomIndex = Random.Range(0, Character.SpriteCollection.Armor.Count); var randomItem = Character.SpriteCollection.Armor[randomIndex]; Character.Equip(randomItem, EquipmentPart.Armor); }
/// <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.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.Armor); equippedIndex = Character.Front.Armor == null ? -1 : SpriteCollection.Armor.FindIndex(i => i.Sprites.Contains(Character.Front.Armor.SingleOrDefault(j => j.name == "FrontBody"))); break; } case "Helmet": { dict = SpriteCollection.Armor.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.Helmet); equippedIndex = SpriteCollection.Armor.FindIndex(i => i.Sprites.Contains(Character.Front.Helmet)); Item.GetParams = item => CreateFakeItemParams(item, dict[item.Id], ".Armor.", ".Helmet."); break; } case "Vest": case "Bracers": case "Leggings": { string part; switch (tab.name) { case "Vest": part = "FrontBody"; break; case "Bracers": part = "FrontArmL"; break; case "Leggings": part = "FrontLegL"; break; default: throw new NotSupportedException(tab.name); } dict = SpriteCollection.Armor.ToDictionary(i => i.Id, i => i); equipAction = item => Character.Equip(dict[item.Id], tab.name.ToEnum <EquipmentPart>()); equippedIndex = Character.Front.Armor == null ? -1 : SpriteCollection.Armor.FindIndex(i => i.Sprites.Contains(Character.Front.Armor.SingleOrDefault(j => j.name == part))); Item.GetParams = item => CreateFakeItemParams(item, dict[item.Id], ".Armor.", $".{tab.name}."); break; } case "Shield": { dict = SpriteCollection.Shield.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.Shield); 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.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.MeleeWeapon1H); equippedIndex = SpriteCollection.MeleeWeapon1H.FindIndex(i => i.Sprites.Contains(Character.Front.PrimaryWeapon)); break; } case "Melee2H": { dict = SpriteCollection.MeleeWeapon2H.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.MeleeWeapon2H); equippedIndex = SpriteCollection.MeleeWeapon2H.FindIndex(i => i.Sprites.Contains(Character.Front.PrimaryWeapon)); break; } case "Bow": { dict = SpriteCollection.Bow.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.Bow); 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.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.Crossbow); equippedIndex = Character.Front.CompositeWeapon == null ? -1 : SpriteCollection.Crossbow.FindIndex(i => i.Sprites.SequenceEqual(Character.Front.CompositeWeapon)); break; } case "Firearm1H": { dict = SpriteCollection.Firearm1H.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.SecondaryFirearm1H); equippedIndex = Character.Front.SecondaryWeapon == null ? -1 : SpriteCollection.Firearm1H.FindIndex(i => i.Sprites.Contains(Character.Front.SecondaryWeapon)); break; } case "Body": { dict = SpriteCollection.Body.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.SetBody(dict[item.Id], BodyPart.Body); equippedIndex = Character.Front.Body == null ? -1 : SpriteCollection.Body.FindIndex(i => i.Sprites.SequenceEqual(Character.Front.Body)); break; } case "Head": { dict = SpriteCollection.Body.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.SetBody(dict[item.Id], BodyPart.Head); equippedIndex = Character.Front.Head == null ? -1 : SpriteCollection.Body.FindIndex(i => i.Sprites.Contains(Character.Front.Head)); break; } case "Ears": { dict = SpriteCollection.Ears.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.SetBody(dict[item.Id], BodyPart.Ears); equippedIndex = Character.Front.Ears == null ? -1 : SpriteCollection.Ears.FindIndex(i => i.Sprites.SequenceEqual(Character.Front.Ears)); break; } case "Eyebrows": { dict = SpriteCollection.Eyebrows.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.SetBody(dict[item.Id], BodyPart.Eyebrows); equippedIndex = SpriteCollection.Eyebrows.FindIndex(i => i.Sprites.Contains(Character.Front.Expressions[0].Eyebrows)); break; } case "Eyes": { dict = SpriteCollection.Eyes.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.SetBody(dict[item.Id], BodyPart.Eyes); equippedIndex = SpriteCollection.Eyes.FindIndex(i => i.Sprites.Contains(Character.Front.Expressions[0].Eyes)); break; } case "Hair": { dict = SpriteCollection.Hair.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.SetBody(dict[item.Id], BodyPart.Hair); equippedIndex = SpriteCollection.Hair.FindIndex(i => i.Sprites.Contains(Character.Front.Hair)); break; } case "Beard": { dict = SpriteCollection.Beard.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.SetBody(dict[item.Id], BodyPart.Beard); equippedIndex = SpriteCollection.Beard.FindIndex(i => i.Sprites.Contains(Character.Front.Beard)); break; } case "Mouth": { dict = SpriteCollection.Mouth.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.SetBody(dict[item.Id], BodyPart.Mouth); equippedIndex = SpriteCollection.Mouth.FindIndex(i => i.Sprites.Contains(Character.Front.Expressions[0].Mouth)); break; } case "Makeup": { dict = SpriteCollection.Makeup.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.SetBody(dict[item.Id], BodyPart.Makeup); equippedIndex = SpriteCollection.Makeup.FindIndex(i => i.Sprites.Contains(Character.Front.Makeup)); break; } case "Mask": { dict = SpriteCollection.Mask.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.Mask); equippedIndex = SpriteCollection.Mask.FindIndex(i => i.Sprites.Contains(Character.Front.Mask)); break; } case "Earrings": { dict = SpriteCollection.Earrings.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.Earrings); equippedIndex = Character.Front.Earrings == null ? -1 : SpriteCollection.Earrings.FindIndex(i => i.Sprites.SequenceEqual(Character.Front.Earrings)); break; } default: throw new NotImplementedException(tab.name); } var items = dict.Values.Select(i => new Item(i.Id)).ToList(); items.Insert(0, new Item("Empty")); dict.Add("Empty", null); if (Item.GetParams == null) { Item.GetParams = item => CreateFakeItemParams(item, dict[item.Id]); // We override GetParams method because we don't have a database with item params. } var collectionId = SpriteCollection.Id; IconCollection.Active = IconCollection.Instances.ContainsKey(collectionId) ? IconCollection.Instances[collectionId] : IconCollection.Instances["FantasyHeroes"]; InventoryItem.OnLeftClick = item => { equipAction(item); EquipCallback?.Invoke(item); ItemName.text = item.Params.SpriteId ?? "Empty"; SetPaintButton(tab.name, item); }; Inventory.Initialize(ref items, items[equippedIndex + 1], reset: true); var equipped = items.Count > equippedIndex + 1 ? items[equippedIndex + 1] : null; SetPaintButton(tab.name, equipped); }
private void SetEquipmentSprites() { List <CharacterItem> items = new List <CharacterItem>(); if (equipItems != null) { items.AddRange(equipItems); } if (equipWeapons != null) { items.Add(equipWeapons.leftHand); items.Add(equipWeapons.rightHand); } // Clear equipped items for (int i = 0; i < (int)EHeroEditorItemPart.Count; ++i) { switch ((EHeroEditorItemPart)i) { case EHeroEditorItemPart.Armor: Character4D.UnEquip(Enums.EquipmentPart.Armor); break; case EHeroEditorItemPart.Helmet: Character4D.UnEquip(Enums.EquipmentPart.Helmet); break; case EHeroEditorItemPart.Shield: Character4D.UnEquip(Enums.EquipmentPart.Shield); break; case EHeroEditorItemPart.Melee1H: Character4D.UnEquip(Enums.EquipmentPart.MeleeWeapon1H); break; case EHeroEditorItemPart.Melee2H: Character4D.UnEquip(Enums.EquipmentPart.MeleeWeapon2H); break; case EHeroEditorItemPart.Bow: Character4D.UnEquip(Enums.EquipmentPart.Bow); break; case EHeroEditorItemPart.Crossbow: Character4D.UnEquip(Enums.EquipmentPart.Crossbow); break; case EHeroEditorItemPart.Firearm1H: Character4D.UnEquip(Enums.EquipmentPart.SecondaryFirearm1H); break; case EHeroEditorItemPart.Supplies: break; case EHeroEditorItemPart.Body: Character4D.SetBody(null, Enums.BodyPart.Body); break; case EHeroEditorItemPart.Ears: Character4D.SetBody(null, Enums.BodyPart.Ears); break; case EHeroEditorItemPart.Eyebrows: Character4D.SetBody(null, Enums.BodyPart.Eyebrows); break; case EHeroEditorItemPart.Eyes: Character4D.SetBody(null, Enums.BodyPart.Eyes); break; case EHeroEditorItemPart.Hair: Character4D.SetBody(null, Enums.BodyPart.Hair); break; case EHeroEditorItemPart.Beard: Character4D.SetBody(null, Enums.BodyPart.Beard); break; case EHeroEditorItemPart.Mouth: Character4D.SetBody(null, Enums.BodyPart.Mouth); break; case EHeroEditorItemPart.Makeup: Character4D.SetBody(null, Enums.BodyPart.Makeup); break; case EHeroEditorItemPart.Mask: Character4D.UnEquip(Enums.EquipmentPart.Mask); break; case EHeroEditorItemPart.Earrings: Character4D.UnEquip(Enums.EquipmentPart.Earrings); break; case EHeroEditorItemPart.Vest: Character4D.UnEquip(Enums.EquipmentPart.Vest); break; case EHeroEditorItemPart.Bracers: Character4D.UnEquip(Enums.EquipmentPart.Bracers); break; case EHeroEditorItemPart.Leggings: Character4D.UnEquip(Enums.EquipmentPart.Leggings); break; case EHeroEditorItemPart.Cape: break; case EHeroEditorItemPart.Back: break; } } // Set default part Dictionary <EHeroEditorItemPart, HeroEditorSpriteData> sprites = new Dictionary <EHeroEditorItemPart, HeroEditorSpriteData>(); foreach (HeroEditorSpriteData defaultSprite in defaultSprites) { sprites[defaultSprite.part] = defaultSprite; } // Set equipping items IHeroEditorItem itemData; foreach (CharacterItem item in items) { if (item.IsEmptySlot() || !(item.GetItem() is IHeroEditorItem)) { continue; } itemData = item.GetItem() as IHeroEditorItem; sprites[itemData.SpriteData.part] = itemData.SpriteData; } foreach (HeroEditorSpriteData sprite in sprites.Values) { switch (sprite.part) { case EHeroEditorItemPart.Armor: Character4D.Equip(spriteCollection.Armor.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Armor, sprite.color); break; case EHeroEditorItemPart.Helmet: Character4D.Equip(spriteCollection.Armor.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Helmet, sprite.color); break; case EHeroEditorItemPart.Shield: Character4D.Equip(spriteCollection.Shield.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Shield, sprite.color); break; case EHeroEditorItemPart.Melee1H: Character4D.Equip(spriteCollection.MeleeWeapon1H.Single(i => i.Name == sprite.id), Enums.EquipmentPart.MeleeWeapon1H, sprite.color); break; case EHeroEditorItemPart.Melee2H: Character4D.Equip(spriteCollection.MeleeWeapon2H.Single(i => i.Name == sprite.id), Enums.EquipmentPart.MeleeWeapon2H, sprite.color); break; case EHeroEditorItemPart.Bow: Character4D.Equip(spriteCollection.Bow.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Bow, sprite.color); break; case EHeroEditorItemPart.Crossbow: Character4D.Equip(spriteCollection.Crossbow.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Crossbow, sprite.color); break; case EHeroEditorItemPart.Firearm1H: Character4D.Equip(spriteCollection.Firearm1H.Single(i => i.Name == sprite.id), Enums.EquipmentPart.SecondaryFirearm1H, sprite.color); break; case EHeroEditorItemPart.Supplies: break; case EHeroEditorItemPart.Body: Character4D.SetBody(spriteCollection.Body.Single(i => i.Name == sprite.id), Enums.BodyPart.Body, sprite.color); break; case EHeroEditorItemPart.Ears: Character4D.SetBody(spriteCollection.Ears.Single(i => i.Name == sprite.id), Enums.BodyPart.Ears, sprite.color); break; case EHeroEditorItemPart.Eyebrows: Character4D.SetBody(spriteCollection.Eyebrows.Single(i => i.Name == sprite.id), Enums.BodyPart.Eyebrows, sprite.color); break; case EHeroEditorItemPart.Eyes: Character4D.SetBody(spriteCollection.Eyes.Single(i => i.Name == sprite.id), Enums.BodyPart.Eyes, sprite.color); break; case EHeroEditorItemPart.Hair: Character4D.SetBody(spriteCollection.Hair.Single(i => i.Name == sprite.id), Enums.BodyPart.Hair, sprite.color); break; case EHeroEditorItemPart.Beard: Character4D.SetBody(spriteCollection.Beard.Single(i => i.Name == sprite.id), Enums.BodyPart.Beard, sprite.color); break; case EHeroEditorItemPart.Mouth: Character4D.SetBody(spriteCollection.Mouth.Single(i => i.Name == sprite.id), Enums.BodyPart.Mouth, sprite.color); break; case EHeroEditorItemPart.Makeup: Character4D.SetBody(spriteCollection.Makeup.Single(i => i.Name == sprite.id), Enums.BodyPart.Makeup, sprite.color); break; case EHeroEditorItemPart.Mask: Character4D.Equip(spriteCollection.Mask.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Mask, sprite.color); break; case EHeroEditorItemPart.Earrings: Character4D.Equip(spriteCollection.Earrings.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Earrings, sprite.color); break; case EHeroEditorItemPart.Vest: Character4D.Equip(spriteCollection.Armor.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Vest, sprite.color); break; case EHeroEditorItemPart.Bracers: Character4D.Equip(spriteCollection.Armor.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Bracers, sprite.color); break; case EHeroEditorItemPart.Leggings: Character4D.Equip(spriteCollection.Armor.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Leggings, sprite.color); break; case EHeroEditorItemPart.Cape: break; case EHeroEditorItemPart.Back: break; } } }