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; } }
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()); } } } }
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; } }