public List <BodyColors> GetAllBodyColors()
        {
            List <BodyColors> bodyColors = new List <BodyColors>();

            using (var cn = new SqlConnection(Settings.GetConnectionString()))
            {
                SqlCommand cmd = new SqlCommand("BodyColorsSelectAll", cn);
                cmd.CommandType = CommandType.StoredProcedure;

                cn.Open();

                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        BodyColors currentRow = new BodyColors();
                        currentRow.BodyColorId          = (int)dr["BodyColorId"];
                        currentRow.BodyColorDescription = dr["BodyColorDescription"].ToString();

                        bodyColors.Add(currentRow);
                    }
                }
            }
            return(bodyColors);
        }
        public TextureCompositor ComposeTextureMap(Folder characterAssets, BodyColors bodyColors)
        {
            TextureCompositor compositor = new TextureCompositor(AvatarType.R6, RECT_FULL);

            compositor.CharacterAssets = characterAssets;

            // Append BodyColors
            compositor.AppendColor(bodyColors.TorsoColor, COMPOSIT_TORSO, RECT_FULL);
            compositor.AppendColor(bodyColors.LeftArmColor, COMPOSIT_LEFT_ARM, RECT_FULL);
            compositor.AppendColor(bodyColors.LeftLegColor, COMPOSIT_LEFT_LEG, RECT_FULL);
            compositor.AppendColor(bodyColors.RightArmColor, COMPOSIT_RIGHT_ARM, RECT_FULL);
            compositor.AppendColor(bodyColors.RightLegColor, COMPOSIT_RIGHT_LEG, RECT_FULL);

            // Append Head & Face
            Asset faceAsset = GetAvatarFace(characterAssets);

            compositor.AppendColor(bodyColors.HeadColor, RECT_HEAD);
            compositor.AppendTexture(faceAsset, RECT_HEAD, 1);

            // 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);
        }
 /// <summary>
 /// Adds body part.
 /// </summary>
 /// <param name="color">Decides the color.</param>
 /// <param name="position">Decides the position.</param>
 /// <param name="insertIndex">Decides the position in the list.</param>
 public void AddBodyPart(Position position, ConsoleColor color, int insertIndex)
 {
     BodyColors.Insert(insertIndex, color);
     Positions.Insert(insertIndex, position);
 }
 /// <summary>
 /// Adds body part.
 /// </summary>
 /// <param name="color">Decides the color.</param>
 /// <param name="position">Decides the position.</param>
 public void AddBodyPart(Position position, ConsoleColor color)
 {
     BodyColors.Add(color);
     Positions.Add(position);
 }
        public TextureCompositor ComposeTextureMap(Folder characterAssets, BodyColors bodyColors)
        {
            TextureCompositor compositor = new TextureCompositor(AvatarType.R15, 1024, 568);

            // Append BodyColors
            compositor.AppendColor(bodyColors.HeadColor, RECT_HEAD);
            compositor.AppendColor(bodyColors.TorsoColor, RECT_TORSO);
            compositor.AppendColor(bodyColors.LeftArmColor, RECT_LEFT_ARM);
            compositor.AppendColor(bodyColors.LeftLegColor, RECT_LEFT_LEG);
            compositor.AppendColor(bodyColors.RightArmColor, RECT_RIGHT_ARM);
            compositor.AppendColor(bodyColors.RightLegColor, 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 <Limb> overlainLimbs = new List <Limb>();

            foreach (MeshPart part in avatarParts.GetChildrenOfClass <MeshPart>())
            {
                Limb   limb      = GetLimb(part);
                string textureId = part.TextureID;
                if (textureId != null && textureId.Length > 0 && !overlainLimbs.Contains(limb))
                {
                    Asset overlay = Asset.GetByAssetId(textureId);

                    if (limb == Limb.Torso)
                    {
                        compositor.AppendTexture(overlay, RECT_TORSO, 3);
                    }
                    else if (limb == Limb.LeftArm)
                    {
                        compositor.AppendTexture(overlay, RECT_LEFT_ARM, 3);
                    }
                    else if (limb == Limb.RightArm)
                    {
                        compositor.AppendTexture(overlay, RECT_RIGHT_ARM, 3);
                    }
                    else if (limb == Limb.LeftLeg)
                    {
                        compositor.AppendTexture(overlay, RECT_LEFT_LEG, 3);
                    }
                    else if (limb == Limb.RightLeg)
                    {
                        compositor.AppendTexture(overlay, RECT_RIGHT_LEG, 3);
                    }

                    overlainLimbs.Add(limb);
                }
            }

            return(compositor);
        }