コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }