public TextureCompositor ComposeTextureMap(Folder characterAssets, WebBodyColors bodyColors) { Contract.Requires(characterAssets != null && bodyColors != null); var compositor = new TextureCompositor(AvatarType.R6, RECT_FULL) { CharacterAssets = characterAssets }; // Append BodyColors compositor.AppendColor(bodyColors.TorsoColorId, COMPOSIT_TORSO, RECT_FULL); compositor.AppendColor(bodyColors.LeftArmColorId, COMPOSIT_LEFT_ARM, RECT_FULL); compositor.AppendColor(bodyColors.LeftLegColorId, COMPOSIT_LEFT_LEG, RECT_FULL); compositor.AppendColor(bodyColors.RightArmColorId, COMPOSIT_RIGHT_ARM, RECT_FULL); compositor.AppendColor(bodyColors.RightLegColorId, COMPOSIT_RIGHT_LEG, RECT_FULL); // Append Head & Face Asset faceAsset = GetAvatarFace(characterAssets); compositor.AppendTexture(faceAsset, RECT_HEAD, 1); compositor.AppendColor(bodyColors.HeadColorId, RECT_HEAD); // Append Shirt Shirt shirt = characterAssets.FindFirstChildOfClass <Shirt>(); if (shirt != null) { Asset shirtAsset = Asset.GetByAssetId(shirt.ShirtTemplate); compositor.AppendTexture(shirtAsset, COMPOSIT_SHIRT, RECT_FULL, 2); } // Append Pants Pants pants = characterAssets.FindFirstChildOfClass <Pants>(); if (pants != null) { Asset pantsAsset = Asset.GetByAssetId(pants.PantsTemplate); compositor.AppendTexture(pantsAsset, COMPOSIT_PANTS, RECT_FULL, 1); } // Append T-Shirt ShirtGraphic tshirt = characterAssets.FindFirstChildOfClass <ShirtGraphic>(); if (tshirt != null) { Asset tshirtAsset = Asset.GetByAssetId(tshirt.Graphic); compositor.AppendTexture(tshirtAsset, RECT_TSHIRT, 3, RotateFlipType.Rotate90FlipNone); } return(compositor); }
public TextureCompositor ComposeTextureMap(Folder characterAssets, WebBodyColors bodyColors) { Contract.Requires(characterAssets != null && bodyColors != null); TextureCompositor compositor = new TextureCompositor(AvatarType.R15, 1024, 568); // Append BodyColors compositor.AppendColor(bodyColors.HeadColorId, RECT_HEAD); compositor.AppendColor(bodyColors.TorsoColorId, RECT_TORSO); compositor.AppendColor(bodyColors.LeftArmColorId, RECT_LEFT_ARM); compositor.AppendColor(bodyColors.LeftLegColorId, RECT_LEFT_LEG); compositor.AppendColor(bodyColors.RightArmColorId, RECT_RIGHT_ARM); compositor.AppendColor(bodyColors.RightLegColorId, RECT_RIGHT_LEG); // Append Face Asset face = GetAvatarFace(characterAssets); compositor.AppendTexture(face, RECT_HEAD, 1); // Append Shirt Shirt shirt = characterAssets.FindFirstChildOfClass <Shirt>(); if (shirt != null) { Asset shirtTemplate = Asset.GetByAssetId(shirt.ShirtTemplate); compositor.AppendTexture(shirtTemplate, COMPOSIT_TORSO, RECT_TORSO, 2); compositor.AppendTexture(shirtTemplate, COMPOSIT_LEFT_LIMB, RECT_LEFT_ARM, 1); compositor.AppendTexture(shirtTemplate, COMPOSIT_RIGHT_LIMB, RECT_RIGHT_ARM, 1); } // Append Pants Pants pants = characterAssets.FindFirstChildOfClass <Pants>(); if (pants != null) { Asset pantsTemplate = Asset.GetByAssetId(pants.PantsTemplate); compositor.AppendTexture(pantsTemplate, COMPOSIT_TORSO, RECT_TORSO, 1); compositor.AppendTexture(pantsTemplate, COMPOSIT_LEFT_LIMB, RECT_LEFT_LEG, 1); compositor.AppendTexture(pantsTemplate, COMPOSIT_RIGHT_LIMB, RECT_RIGHT_LEG, 1); } // Append T-Shirt ShirtGraphic tshirt = characterAssets.FindFirstChildOfClass <ShirtGraphic>(); if (tshirt != null) { Asset graphic = Asset.GetByAssetId(tshirt.Graphic); compositor.AppendTexture(graphic, RECT_TSHIRT, 4); } // Append Package Overlays Folder avatarParts = characterAssets.FindFirstChild <Folder>("ASSEMBLY"); List <BodyPart> overlainLimbs = new List <BodyPart>(); foreach (MeshPart part in avatarParts.GetChildrenOfType <MeshPart>()) { BodyPart?maybeLimb = GetLimb(part); if (!maybeLimb.HasValue) { continue; } BodyPart limb = maybeLimb.Value; string textureId = part.TextureID; if (textureId != null && textureId.Length > 0 && !overlainLimbs.Contains(limb)) { Asset overlay = Asset.GetByAssetId(textureId); Rectangle crop = UVCrops[limb]; compositor.AppendTexture(overlay, crop, 3); overlainLimbs.Add(limb); } } return(compositor); }