public void ActivatePreset()
    {
        if (presetOptions.assetList.value != 0) //Option 0 is "None"
        {
            characters[characterCounter].gameObject.SetActive(false);

            presets.ActivateCharacter(presetOptions.assetList.value - 1, characters[characterCounter].transform.position);

            var characterRotate = GetComponent <CharacterRotate>();

            if (characterRotate != null)
            {
                characterRotate.objectToRotate = presets.GetCurrentCharacter;
            }

            var presetAnimations = presets.GetCurrentCharacter.GetComponent <Animation>();
            if (presetAnimations != null)
            {
                currentCharacterAnimation = presetAnimations;
                GenerateAnimationsUI();
            }
        }
        else
        {
            ActivatePlayerCharacter();
        }

        presetOptions.CheckButtons();
    }
    public void ActivateModel(int elementIndex, OptionsHolder optionsHolder, List <Transform> materialOptions, Transform assetHolder)
    {
        //If we used presets our character is currently inactive therefore we need to switch it on
        if (characters[characterCounter].gameObject.activeInHierarchy == false)
        {
            if (presets != null)
            {
                presets.DeactivatePreset();
            }

            characters[characterCounter].gameObject.SetActive(true);
        }

        currentCharacterItems.itemsConfiguration[elementIndex].ActivateModel(optionsHolder.assetList.value);
        optionsHolder.CheckButtons();

        //Clearing material options
        foreach (var materialOption in materialOptions)
        {
            if (materialOption != null)
            {
                Destroy(materialOption.gameObject);
            }
        }

        //Generating material options for given item
        if (currentCharacterItems.itemsConfiguration[elementIndex].items[optionsHolder.assetList.value].materials != null)
        {
            for (int i = 0; i < currentCharacterItems.itemsConfiguration[elementIndex].items[optionsHolder.assetList.value].materials.Count; i++)
            {
                var materialIndex = i;
                var instantiatedMaterialOption = Instantiate(optionHodler, assetHolder);
                materialOptions.Add(instantiatedMaterialOption.transform);

                var optionsNames = new List <string>();

                foreach (var option in currentCharacterItems.itemsConfiguration[elementIndex].items[optionsHolder.assetList.value].materials[i].aviableMaterials)
                {
                    optionsNames.Add(option.name);
                }

                instantiatedMaterialOption.assetList.AddOptions(optionsNames);
                instantiatedMaterialOption.assetList.value = currentCharacterItems.itemsConfiguration[elementIndex].items[optionsHolder.assetList.value].materials[materialIndex].GetCounter;
                instantiatedMaterialOption.assetList.onValueChanged.AddListener(delegate { ChangeMaterial(elementIndex, materialIndex, instantiatedMaterialOption); });
                instantiatedMaterialOption.nextButton.onClick.AddListener(delegate { NextMaterial(elementIndex, materialIndex, instantiatedMaterialOption); });
                instantiatedMaterialOption.previousButton.onClick.AddListener(delegate { PreviousMaterial(elementIndex, materialIndex, instantiatedMaterialOption); });
                ChangeMaterial(elementIndex, materialIndex, instantiatedMaterialOption);
            }
        }
    }
    public void ChangeMaterial(int meshIndex, int objectIndex, OptionsHolder optionsHodler)
    {
        if (characters[characterCounter].gameObject.activeInHierarchy == false)
        {
            if (presets != null)
            {
                presets.DeactivatePreset();
            }

            characters[characterCounter].gameObject.SetActive(true);
        }

        optionsHodler.CheckButtons();
        currentCharacterItems.itemsConfiguration[meshIndex].ChangeMaterial(objectIndex, optionsHodler.assetList.value);
    }
    private void ActivateCharacter(OptionsHolder optionsHolder)
    {
        characters[characterCounter].gameObject.SetActive(false);
        if (presets != null)
        {
            presets.DeactivatePreset();
        }

        characters[optionsHolder.assetList.value].gameObject.SetActive(true);

        presets          = characters[optionsHolder.assetList.value].gameObject.GetComponent <PresetCharacter>();
        characterCounter = optionsHolder.assetList.value;

        GeneratePresetUI();
        ActivatePlayerCharacter();

        optionsHolder.CheckButtons();
    }
    //-----------------------------------------------------------------
    private void GeneratePresetUI()
    {
        if (presetsHolder != null)
        {
            Destroy(presetsHolder.gameObject);
        }

        if (presets != null)
        {
            var assetHolderInstance = Instantiate(assetHolder, rightHolder);

            presetsHolder = assetHolderInstance;

            var holderName = assetHolderInstance.GetComponentInChildren <Text>();

            if (holderName != null)
            {
                holderName.text = "Presets";
            }

            var optionsInstance = Instantiate(optionHodler, assetHolderInstance);

            var presetsNames = new List <string>();
            presetsNames.Add("None");

            foreach (var preset in presets.characters)
            {
                if (preset != null)
                {
                    presetsNames.Add(preset.name);
                }
            }

            optionsInstance.assetList.AddOptions(presetsNames);
            optionsInstance.assetList.value = 0;
            presetOptions = optionsInstance;
            presetOptions.CheckButtons();

            optionsInstance.assetList.onValueChanged.AddListener(delegate { ActivatePreset(); });
            optionsInstance.nextButton.onClick.AddListener(delegate { ActivateNextPreset(); });
            optionsInstance.previousButton.onClick.AddListener(delegate { ActivatePreviousPreset(); });
        }
    }
 public void PlayAnimation(OptionsHolder optionsHolder)
 {
     currentCharacterAnimation.Play(optionsHolder.assetList.options[optionsHolder.assetList.value].text);
     optionsHolder.CheckButtons();
 }