Пример #1
0
            public void SetOverlayProceduralData(OverlayData.OverlayProceduralData proceduralData)
            {
                proceduralData.name = this.name;
                switch (this.type)
                {
                case (int)ProceduralPropertyType.Boolean:
                    proceduralData.type         = ProceduralPropertyType.Boolean;
                    proceduralData.booleanValue = this.vals[0] > 0;
                    break;

                case (int)ProceduralPropertyType.Color3:
                    proceduralData.type       = ProceduralPropertyType.Color3;
                    proceduralData.colorValue = new Color32((byte)this.vals[0], (byte)this.vals[1], (byte)this.vals[2], 255);
                    break;

                case (int)ProceduralPropertyType.Color4:
                    proceduralData.type       = ProceduralPropertyType.Color4;
                    proceduralData.colorValue = new Color32((byte)this.vals[0], (byte)this.vals[1], (byte)this.vals[2], (byte)this.vals[3]);
                    break;

                case (int)ProceduralPropertyType.Enum:
                    proceduralData.type      = ProceduralPropertyType.Enum;
                    proceduralData.enumValue = this.vals[0];
                    break;

                case (int)ProceduralPropertyType.Float:
                    proceduralData.type       = ProceduralPropertyType.Float;
                    proceduralData.floatValue = intFloatScale * this.vals[0];
                    break;

                case (int)ProceduralPropertyType.Vector2:
                    proceduralData.type          = ProceduralPropertyType.Vector2;
                    proceduralData.vectorValue.x = intFloatScale * this.vals[0];
                    proceduralData.vectorValue.y = intFloatScale * this.vals[1];
                    break;

                case (int)ProceduralPropertyType.Vector3:
                    proceduralData.type          = ProceduralPropertyType.Vector3;
                    proceduralData.vectorValue.x = intFloatScale * this.vals[0];
                    proceduralData.vectorValue.y = intFloatScale * this.vals[1];
                    proceduralData.vectorValue.z = intFloatScale * this.vals[2];
                    break;

                case (int)ProceduralPropertyType.Vector4:
                    proceduralData.type          = ProceduralPropertyType.Vector4;
                    proceduralData.vectorValue.x = intFloatScale * this.vals[0];
                    proceduralData.vectorValue.y = intFloatScale * this.vals[1];
                    proceduralData.vectorValue.z = intFloatScale * this.vals[2];
                    proceduralData.vectorValue.w = intFloatScale * this.vals[3];
                    break;

                case (int)ProceduralPropertyType.Texture:
                    proceduralData.type = ProceduralPropertyType.Texture;
                    if (Debug.isDebugBuild)
                    {
                        Debug.LogWarning("Unsupported Texture property in PackedOverlaySubstanceData.");
                    }
                    break;

                default:
                    if (Debug.isDebugBuild)
                    {
                        Debug.LogError("Bad type enum in PackedOverlaySubstanceData! " + this.type);
                    }
                    break;
                }
            }
Пример #2
0
        public static void UnpackRecipeVersion3(UMA.UMAData.UMARecipe umaRecipe, UMAPackRecipe umaPackRecipe, UMAContext context)
        {
            umaRecipe.slotDataList = new SlotData[umaPackRecipe.slotsV3.Length];
            umaRecipe.SetRace(context.GetRace(umaPackRecipe.race));

            umaRecipe.ClearDna();
            List <UMADnaBase> packedDna = UnPackDNA(umaPackRecipe.packedDna);

            foreach (UMADnaBase umd in packedDna)
            {
                umaRecipe.AddDna(umd);
            }

            OverlayColorData[] colorData;
            if (UMAPackRecipe.ArrayHasData(umaPackRecipe.fColors))
            {
                colorData = new OverlayColorData[umaPackRecipe.fColors.Length];
                for (int i = 0; i < colorData.Length; i++)
                {
                    colorData[i] = new OverlayColorData();
                    umaPackRecipe.fColors[i].SetOverlayColorData(colorData[i]);
                }
            }
            else if (UMAPackRecipe.ArrayHasData(umaPackRecipe.colors))
            {
                colorData = new OverlayColorData[umaPackRecipe.colors.Length];
                for (int i = 0; i < colorData.Length; i++)
                {
                    colorData[i] = new OverlayColorData();
                    umaPackRecipe.colors[i].SetOverlayColorData(colorData[i]);
                }
            }
            else
            {
                colorData = new OverlayColorData[0];
            }

            umaRecipe.sharedColors = new OverlayColorData[umaPackRecipe.sharedColorCount];
            for (int i = 0; i < umaRecipe.sharedColors.Length; i++)
            {
                umaRecipe.sharedColors[i] = colorData[i];
            }

            for (int i = 0; i < umaPackRecipe.slotsV3.Length; i++)
            {
                PackedSlotDataV3 packedSlot = umaPackRecipe.slotsV3[i];
                if (UMAPackRecipe.SlotIsValid(packedSlot))
                {
                    var tempSlotData = context.InstantiateSlot(packedSlot.id);
                    tempSlotData.overlayScale = packedSlot.scale * 0.01f;
                    umaRecipe.slotDataList[i] = tempSlotData;

                    if (packedSlot.copyIdx == -1)
                    {
                        for (int i2 = 0; i2 < packedSlot.overlays.Length; i2++)
                        {
                            PackedOverlayDataV3 packedOverlay = packedSlot.overlays[i2];
                            OverlayData         overlayData   = context.InstantiateOverlay(packedOverlay.id);
                            overlayData.rect = new Rect(
                                packedOverlay.rect[0],
                                packedOverlay.rect[1],
                                packedOverlay.rect[2],
                                packedOverlay.rect[3]);

                            if (packedOverlay.colorIdx < umaPackRecipe.sharedColorCount)
                            {
                                overlayData.colorData = umaRecipe.sharedColors[packedOverlay.colorIdx];
                            }
                            else
                            {
                                overlayData.colorData      = colorData[packedOverlay.colorIdx].Duplicate();
                                overlayData.colorData.name = OverlayColorData.UNSHARED;
                            }

                            if (UMAPackRecipe.MaterialIsValid(overlayData.asset.material))
                            {
                                overlayData.EnsureChannels(overlayData.asset.material.channels.Length);
                            }

                                                        #if (UNITY_STANDALONE || UNITY_IOS || UNITY_ANDROID || UNITY_PS4 || UNITY_XBOXONE) && !UNITY_2017_3_OR_NEWER //supported platforms for procedural materials
                            if (packedOverlay.data == null)
                            {
                                overlayData.proceduralData = new OverlayData.OverlayProceduralData[0];
                            }
                            else
                            {
                                overlayData.proceduralData = new OverlayData.OverlayProceduralData[packedOverlay.data.Length];

                                for (int dataIdx = 0; dataIdx < packedOverlay.data.Length; dataIdx++)
                                {
                                    OverlayData.OverlayProceduralData proceduralData = new OverlayData.OverlayProceduralData();
                                    packedOverlay.data[dataIdx].SetOverlayProceduralData(proceduralData);
                                    overlayData.proceduralData[dataIdx] = proceduralData;
                                }
                            }
                            #endif

                            tempSlotData.AddOverlay(overlayData);
                        }
                    }
                    else
                    {
                        tempSlotData.SetOverlayList(umaRecipe.slotDataList[packedSlot.copyIdx].GetOverlayList());
                    }
                }
            }
        }
Пример #3
0
            public PackedOverlaySubstanceData(OverlayData.OverlayProceduralData proceduralData)
            {
                this.name = proceduralData.name;
                this.type = (int)proceduralData.type;
                switch (proceduralData.type)
                {
                case ProceduralPropertyType.Boolean:
                    vals    = new int[1];
                    vals[0] = proceduralData.booleanValue ? 1 : 0;
                    break;

                case ProceduralPropertyType.Color3:
                    vals = new int[3];
                    Color32 color3 = proceduralData.colorValue;
                    vals[0] = color3.r;
                    vals[1] = color3.g;
                    vals[2] = color3.b;
                    break;

                case ProceduralPropertyType.Color4:
                    vals = new int[4];
                    Color32 color4 = proceduralData.colorValue;
                    vals[0] = color4.r;
                    vals[1] = color4.g;
                    vals[2] = color4.b;
                    vals[3] = color4.a;
                    break;

                case ProceduralPropertyType.Enum:
                    vals    = new int[1];
                    vals[0] = proceduralData.enumValue;
                    break;

                case ProceduralPropertyType.Float:
                    vals    = new int[1];
                    vals[0] = Mathf.FloorToInt(proceduralData.floatValue * floatIntScale);
                    break;

                case ProceduralPropertyType.Vector2:
                    vals    = new int[2];
                    vals[0] = Mathf.FloorToInt(proceduralData.vectorValue.x * floatIntScale);
                    vals[1] = Mathf.FloorToInt(proceduralData.vectorValue.y * floatIntScale);
                    break;

                case ProceduralPropertyType.Vector3:
                    vals    = new int[3];
                    vals[0] = Mathf.FloorToInt(proceduralData.vectorValue.x * floatIntScale);
                    vals[1] = Mathf.FloorToInt(proceduralData.vectorValue.y * floatIntScale);
                    vals[2] = Mathf.FloorToInt(proceduralData.vectorValue.z * floatIntScale);
                    break;

                case ProceduralPropertyType.Vector4:
                    vals    = new int[4];
                    vals[0] = Mathf.FloorToInt(proceduralData.vectorValue.x * floatIntScale);
                    vals[1] = Mathf.FloorToInt(proceduralData.vectorValue.y * floatIntScale);
                    vals[2] = Mathf.FloorToInt(proceduralData.vectorValue.z * floatIntScale);
                    vals[3] = Mathf.FloorToInt(proceduralData.vectorValue.w * floatIntScale);
                    break;

                case ProceduralPropertyType.Texture:
                    if (Debug.isDebugBuild)
                    {
                        Debug.LogWarning("Unsupported Texture property on OverlayProceduralData.");
                    }
                    break;

                default:
                    if (Debug.isDebugBuild)
                    {
                        Debug.LogError("Unsupported type enum in OverlayProceduralData! " + proceduralData.type);
                    }
                    break;
                }
            }