Example #1
0
        public void EquipRandomArmor()
        {
            var randomIndex = Random.Range(0, Character.SpriteCollection.Armor.Count);
            var randomItem  = Character.SpriteCollection.Armor[randomIndex];

            Character.Equip(randomItem, EquipmentPart.Armor);
        }
Example #2
0
        /// <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);
        }
Example #3
0
        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;
                }
            }
        }