Example #1
0
    Character4D ResolveCharacter()
    {
        Character4D character = new Character4D();

        //character = character.FromJson();
        return(new Character4D());
    }
Example #2
0
        /// <summary>
        /// Load character from prefab by given path.
        /// </summary>
        public void Load(string path)
        {
            var character = UnityEditor.AssetDatabase.LoadAssetAtPath <Character4D>(path);

            if (character == null)
            {
                throw new Exception("Error loading character, please make sure you are loading correct prefab!");
            }

            if (Character4D != null)
            {
                Destroy(Character4D.gameObject);
            }

            Character4D = Instantiate(character, transform);
            Character4D.transform.localPosition = Vector3.zero;
            Shadow = Character4D.transform.Find("Shadow").gameObject;
            OnDirectionChanged(DirectionDropdown.value);

            var mat = new Material(Shader.Find("Sprites/Default"));

            foreach (var spriteRenderer in Character4D.GetComponentsInChildren <SpriteRenderer>())
            {
                if (spriteRenderer.name != "Eyes")
                {
                    spriteRenderer.material = mat;
                }
            }

            Debug.LogWarning("All materials were replaced by [Sprites/Default] to avoid outline artefacts.");
        }
Example #3
0
    void Start()
    {
        character4D = this.GetComponent <Character4D>();
        string jsonString = JsonConvert.SerializeObject(PersistentData.Instance.CurrentSave.characterJson.characterJson);

        character4D.FromJson(jsonString, true);
    }
Example #4
0
 void Start()
 {
     tileManager   = GameObject.FindGameObjectWithTag("TileManager").GetComponent <TileManager>();
     destroyObject = GetComponent <DestroyObject>();
     player        = GameObject.Find("Player").GetComponent <PlayerController>();
     attackSpeed   = 0.8f;
     time          = 0.0f;
     character     = player.GetComponentInChildren <Character4D>();
 }
Example #5
0
 void Start()
 {
     hotbarUI         = GameObject.Find("HotbarUI").GetComponent <Canvas>();
     MainUI           = GameObject.Find("MainUI").GetComponent <Canvas>();
     hotbarUI.enabled = true;
     MainUI.enabled   = false;
     mainCamera       = GetComponentInChildren <Camera>();
     body             = GetComponent <Rigidbody2D>();
     animator         = this.GetComponentInChildren <AnimationManager>();
     character4D      = this.GetComponentInChildren <Character4D>();
 }
Example #6
0
 private void SetCharacter()
 {
     character4D = GameObject.Find("Human").GetComponent <Character4D>();
 }
Example #7
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 #8
0
        private IEnumerator CaptureFrames(Vector2 direction, List <CaptureOption> options, int frameSize, int frameCount, bool shadow)
        {
            _character = FindObjectOfType <Character4D>();
            _character.SetDirection(direction);
            _character.Shadows.ForEach(i => i.SetActive(false));
            _character.Shadows[0].SetActive(shadow);

            var stateHandler = _character.Animator.GetBehaviours <StateHandler>().SingleOrDefault(i => i.Name == "Death");

            if (stateHandler)
            {
                stateHandler.StateExit.RemoveAllListeners();
            }

            var clips = new Dictionary <string, List <Texture2D> >();

            foreach (var option in options)
            {
                _character.Animator.SetInteger("State", (int)option.State);

                if (option.Action != null)
                {
                    _character.Animator.SetTrigger(option.Action);
                }
                else
                {
                    _character.Animator.ResetTrigger("Slash1H");
                    _character.Animator.ResetTrigger("Slash2H");
                    _character.Animator.ResetTrigger("Jab");
                }

                _character.Animator.SetBool("Action", option.Action != null);
                _character.Animator.speed = 2;

                yield return(new WaitForSeconds(0.1f));

                _character.Animator.speed = 0;

                var lowerClip   = option.State == CharacterState.Death ? null : _character.Animator.GetCurrentAnimatorClipInfo(0)[0].clip;
                var upperClip   = option.State == CharacterState.Death ? null : _character.Animator.GetCurrentAnimatorClipInfo(1)[0].clip;
                var complexClip = option.State == CharacterState.Death ? _character.Animator.GetCurrentAnimatorClipInfo(2)[0].clip : null;

                for (var j = 0; j < frameCount; j++)
                {
                    var normalizedTime  = (float)j / (frameCount - 1);
                    var clip            = upperClip ?? complexClip;
                    var expressionEvent = clip.events.Where(i => i.functionName == "SetExpression" && Mathf.Abs(i.time / clip.length - normalizedTime) <= 1f / (frameCount - 1))
                                          .OrderBy(i => Mathf.Abs(i.time / clip.length - normalizedTime)).FirstOrDefault();

                    if (expressionEvent != null)
                    {
                        _character.SetExpression(expressionEvent.stringParameter);
                    }

                    yield return(ShowFrame(lowerClip?.name, upperClip?.name, complexClip?.name, normalizedTime));

                    var frame         = CaptureFrame(frameSize, frameSize);
                    var animationName = option.Action ?? option.State.ToString();

                    if (clips.ContainsKey(animationName))
                    {
                        clips[animationName].Add(frame);
                    }
                    else
                    {
                        clips.Add(animationName, new List <Texture2D> {
                            frame
                        });
                    }
                }
            }

            _character.LayerManager.Sprites[0].gameObject.SetActive(false);
            _character.AnimationManager.SetState(CharacterState.Idle);
            _character.Animator.speed = 1;

            if (stateHandler)
            {
                stateHandler.StateExit.AddListener(() => _character.SetExpression("Default"));
            }

            var texture = CreateSheet(clips, frameSize, frameSize);

            yield return(StandaloneFilePicker.SaveFile("Save as sprite sheet", "", "Character", "png", texture.EncodeToPNG(), (success, path) => { Debug.Log(success ? $"Saved as {path}" : "Error saving."); }));
        }
Example #9
0
 public void Setup(Character4D character)
 {
     character.Parts.ForEach(i => Setup(i));
 }
Example #10
0
 protected override void Awake()
 {
     base.Awake();
     Character4D.SetDirection(Vector2.down);
     SetupComponent();
 }
Example #11
0
        public override void PlayMoveAnimation()
        {
            if (!Animator.gameObject.activeInHierarchy)
            {
                return;
            }

            if (isDead)
            {
                Animator.SetInteger(ANIM_STATE, (int)StateTypes.Death);
                return;
            }

            if (isCasting)
            {
                Animator.SetInteger(ANIM_STATE, (int)StateTypes.Ready);
                return;
            }

            if (movementState.Has(MovementState.Forward) ||
                movementState.Has(MovementState.Backward) ||
                movementState.Has(MovementState.Right) ||
                movementState.Has(MovementState.Left))
            {
                if (extraMovementState == ExtraMovementState.IsSprinting)
                {
                    Animator.SetInteger(ANIM_STATE, (int)StateTypes.Run);
                }
                else
                {
                    Animator.SetInteger(ANIM_STATE, (int)StateTypes.Walk);
                }
            }
            else
            {
                Animator.SetInteger(ANIM_STATE, (int)StateTypes.Idle);
            }

            // Update direction
            if (Mathf.Abs(Mathf.Abs(direction2D.x) - Mathf.Abs(direction2D.y)) < 0.01f)
            {
                // Up, Down is higher priority
                Vector2 applyDirection2D = direction2D;
                applyDirection2D.x = 0;
                direction2D        = applyDirection2D.normalized;
            }
            if (Mathf.Abs(direction2D.x) > Mathf.Abs(direction2D.y))
            {
                if (direction2D.x > 0)
                {
                    Character4D.SetDirection(Vector2.right);
                }
                else
                {
                    Character4D.SetDirection(Vector2.left);
                }
            }
            else
            {
                if (direction2D.y > 0)
                {
                    Character4D.SetDirection(Vector2.up);
                }
                else
                {
                    Character4D.SetDirection(Vector2.down);
                }
            }
        }
Example #12
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;
                }
            }
        }