protected override void Start()
    {
        _DKumaGenerator = GameObject.Find("DKUMAGenerator").GetComponent <DKUMAGenerator>();
        //	umaGenerator.umaData.cleanTextures();

        materialDefinitionList = new List <DKUMAData.MaterialDefinition>();

        //Update atlas area can be handled here
        DKUMAData.MaterialDefinition tempMaterialDefinition = new DKUMAData.MaterialDefinition();

        DKSlotData[] slots = umaGenerator.umaData.umaRecipe.slotDataList;
        if (slots == null)
        {
            Debug.LogError(umaGenerator.umaData.gameObject.name + " can not be generated : the Slot list is umpty. Verify your Elements configuration.");
        }
        else
        if (slots.Length > 0)
        {
            for (int i = 0; i < slots.Length; i++)
            {
                if (slots[i] != null && slots[i].overlayList.Count != 0)
                {
                    tempMaterialDefinition                        = new DKUMAData.MaterialDefinition();
                    tempMaterialDefinition.baseTexture            = slots[i].overlayList[0].textureList;
                    tempMaterialDefinition.baseColor              = slots[i].overlayList[0].color;
                    tempMaterialDefinition.materialSample         = slots[i].materialSample;
                    tempMaterialDefinition.overlays               = new DKUMAData.textureData[slots[i].overlayList.Count - 1];
                    tempMaterialDefinition.overlayColors          = new Color32[tempMaterialDefinition.overlays.Length];
                    tempMaterialDefinition.rects                  = new Rect[tempMaterialDefinition.overlays.Length];
                    tempMaterialDefinition.channelMask            = new Color32[tempMaterialDefinition.overlays.Length + 1][];
                    tempMaterialDefinition.channelAdditiveMask    = new Color32[tempMaterialDefinition.overlays.Length + 1][];
                    tempMaterialDefinition.channelMask[0]         = slots[i].overlayList[0].channelMask;
                    tempMaterialDefinition.channelAdditiveMask[0] = slots[i].overlayList[0].channelAdditiveMask;
                    tempMaterialDefinition.slotData               = slots[i];

                    for (int overlayID = 0; overlayID < slots[i].overlayList.Count - 1; overlayID++)
                    {
                        tempMaterialDefinition.overlays[overlayID]                = new DKUMAData.textureData();
                        tempMaterialDefinition.rects[overlayID]                   = slots[i].overlayList[overlayID + 1].rect;
                        tempMaterialDefinition.overlays[overlayID].textureList    = slots[i].overlayList[overlayID + 1].textureList;
                        tempMaterialDefinition.overlayColors[overlayID]           = slots[i].overlayList[overlayID + 1].color;
                        tempMaterialDefinition.channelMask[overlayID + 1]         = slots[i].overlayList[overlayID + 1].channelMask;
                        tempMaterialDefinition.channelAdditiveMask[overlayID + 1] = slots[i].overlayList[overlayID + 1].channelAdditiveMask;
                    }
                    materialDefinitionList.Add(tempMaterialDefinition);
                }
            }
        }

        if (_DKumaGenerator.usePRO && UnityEditorInternal.InternalEditorUtility.HasPro())
        {
            textureProcessPROCoroutine = new DK_RPG_TextureProcessPROCoroutine();
        }
        else
        {
            textureProcessIndieCoroutine = new DK_RPG_TextureProcessIndieCoroutine();
        }

        packTexture = new MaxRectsBinPack(_DKumaGenerator.atlasResolution, _DKumaGenerator.atlasResolution, false);
    }
    private void OrderMaterialDefinition()
    {
        //Ordering List based on textureSize, for atlas calculation
        for (int i = 0; i < orderedMaterialDefinition.Length; i++)
        {
            int LargestIndex = i;

            for (int i2 = i; i2 < orderedMaterialDefinition.Length; i2++)
            {
                if (orderedMaterialDefinition[LargestIndex].baseTexture[0].width * orderedMaterialDefinition[LargestIndex].baseTexture[0].height < orderedMaterialDefinition[i2].baseTexture[0].width * orderedMaterialDefinition[i2].baseTexture[0].height)
                {
                    LargestIndex = i2;
                }

                if (i2 == orderedMaterialDefinition.Length - 1)
                {
                    DKUMAData.MaterialDefinition tempMaterialDefinition = orderedMaterialDefinition[i];
                    orderedMaterialDefinition[i]            = orderedMaterialDefinition[LargestIndex];
                    orderedMaterialDefinition[LargestIndex] = tempMaterialDefinition;
                }
            }
        }
    }