示例#1
0
        /// <summary>Perform the action associated with a component.</summary>
        /// <param name="cpt">The component.</param>
        /// <return>whether the component action is processed</return>
        public override bool handleLeftClick(IAutoComponent cpt)
        {
            switch (cpt.m_name)
            {
            case "Save":
                if (m_currentFav > -1)
                {
                    m_farmerMakeup.SaveFavorite(m_currentFav + 1);
                    m_extraFavButtons[m_currentFav - 6].sourceRect.Y = 26;
                    m_alerts.Add(new Alert(Game1.mouseCursors, new Rectangle(310, 392, 16, 16), Game1.viewport.Width / 2 - (700 + IClickableMenu.borderWidth * 2) / 2, Game1.viewport.Height / 2 - (500 + IClickableMenu.borderWidth * 2) / 2, "Favorite Saved To Slot " + (m_currentFav + 1) + " .", 1200, false));
                    Game1.playSound("purchase");
                }
                return(true);

            case "Load":
                if (m_currentFav > -1)
                {
                    if (m_farmerMakeup.LoadFavorite(m_currentFav + 1))
                    {
                        Game1.playSound("yoba");
                    }
                    else
                    {
                        m_alerts.Add(new Alert(Game1.mouseCursors, new Rectangle(268, 470, 16, 16), Game1.viewport.Width / 2 - (700 + IClickableMenu.borderWidth * 2) / 2, Game1.viewport.Height / 2 - (500 + IClickableMenu.borderWidth * 2) / 2, "Uh oh! No Favorite is Set!", 1000, false));
                    }
                }
                return(true);

            case "Fav":
                ClickableTextureButton btn = (ClickableTextureButton)cpt;
                int i = btn.m_par;
                if (m_currentFav == -1)
                {
                    m_selectFavLabel.visible = false;
                    m_saveLabel.visible      = true;
                    m_loadLabel.visible      = true;
                    m_saveFavButton.visible  = true;
                    m_loadFavButton.visible  = true;
                }
                else
                {
                    m_extraFavButtons[m_currentFav - 6].drawShadow = false;
                }
                m_extraFavButtons[i].drawShadow = true;
                m_currentFav      = i + 6;
                m_saveLabel.label = "Currently selected: " + (m_currentFav + 1) + ".";
                return(true);

            default:
                return(false);
            }
        }
        /// <summary>Perform the action associated with a component.</summary>
        /// <param name="cpt">The component.</param>
        /// <return>whether the component action is processed</return>
        public override bool handleLeftClick(IAutoComponent cpt)
        {
            switch (cpt.m_name)
            {
            case "QFav":
                ClickableTextureButton btn = (ClickableTextureButton)cpt;
                m_farmerMakeup.SaveFavorite(btn.m_par + 1);
                this.m_alerts.Add(new Alert(Game1.mouseCursors, new Rectangle(310, 392, 16, 16), Game1.viewport.Width / 2 - (700 + IClickableMenu.borderWidth * 2) / 2, Game1.viewport.Height / 2 - (500 + IClickableMenu.borderWidth * 2) / 2, "New Favorite Saved.", 1200, false));
                Game1.playSound("purchase");
                return(true);

            default:
                return(false);
            }
        }
        /// <summary>construct a ganeral value selector.</summary>
        private void selectorLayout(int xBase, int[] selectorOffset, int y, string name, string label, string value)
        {
            ClickableTextureButton b;

            b = new ClickableTextureButton(name, new Rectangle(xBase + selectorOffset[0], y, Game1.tileSize, Game1.tileSize), "", "", Game1.mouseCursors, Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 44), 0.75f)
            {
                m_par = -1, m_hoverScale = 0.1f
            };
            m_components.Add(b);
            LabelComponent l;

            l = new LabelComponent(new Rectangle(xBase + selectorOffset[1], y, selectorOffset[2] - selectorOffset[1], 1), label)
            {
                m_baseX = xBase + selectorOffset[1]
            };
            l.centerLabelX();
            m_components.Add(l);
            l = new LabelComponent(new Rectangle(xBase + selectorOffset[1], y + Game1.tileSize / 2, selectorOffset[2] - selectorOffset[1], 1), value)
            {
                m_baseX = xBase + selectorOffset[1]
            };
            if (value.Length > 3)
            {
                l.centerLabelX();
            }
            else
            {
                l.rightCenterLabelX((int)Game1.smallFont.MeasureString("0").X);
            }
            m_selectValueLabels[name] = l;
            m_components.Add(l);
            b = new ClickableTextureButton(name, new Rectangle(xBase + selectorOffset[2], y, Game1.tileSize, Game1.tileSize), "", "", Game1.mouseCursors, Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 33), 0.75f)
            {
                m_par = 1, m_hoverScale = 0.1f
            };
            m_components.Add(b);
        }
示例#4
0
        /// <summary>Update the menu layout for a change in the zoom level or viewport size.</summary>
        public override void updateLayout()
        {
            // reset window position
            this.xPositionOnScreen  = (Game1.viewport.Width - this.width) / 2;
            this.yPositionOnScreen  = (Game1.viewport.Height - this.height) / 2;
            this.yPositionOnScreen += Game1.tileSize / 2;

            Texture2D menuTextures = Game1.content.Load <Texture2D>(ContentHelper.s_MenuTextureKey);

            // reset current components ans status
            m_alerts.Clear();
            m_components.Clear();
            m_extraFavButtons.Clear();
            m_currentFav = -1;

            //constants
            const int   firstExtraFavIndex = 7;
            const int   nRow = 3, nCol = 10;
            const float facBtnZoom = 4.5f;
            const int   extraFavTextureW = 8, extraFavTextureH = 8;
            const int   xGapForExtraFav = 50, yGapForExtraFav = 50;
            const int   extraFavBtnW = (int)(facBtnZoom * extraFavTextureW), extraFavBtnH = (int)(facBtnZoom * extraFavTextureH);

            int xOffset = xPositionOnScreen + IClickableMenu.borderWidth;
            int yOffset = yPositionOnScreen + IClickableMenu.borderWidth;

            // portrait
            m_components.Add(new PortraitComponent(xOffset + Game1.tileSize * 8, yOffset + +Game1.tileSize / 2));

            // hint labels
            m_components.Add(new LabelComponent(new Rectangle(xOffset, yOffset, 1, 1), "You can set up to 30 additional favorite appearance"));
            m_components.Add(new LabelComponent(new Rectangle(xOffset, yOffset + 25, 1, 1), "configurations for each character."));
            m_components.Add(new LabelComponent(new Rectangle(xOffset, yOffset + 110, 1, 1), "Your current appearance is shown on"));
            m_components.Add(new LabelComponent(new Rectangle(xOffset, yOffset + 135, 1, 1), "the right, select a favorite below to"));
            m_components.Add(new LabelComponent(new Rectangle(xOffset, yOffset + 160, 1, 1), "save your appearance in it or load the"));
            m_components.Add(new LabelComponent(new Rectangle(xOffset, yOffset + 185, 1, 1), "appearance saved in it :"));

            xOffset  = this.xPositionOnScreen + (this.width - (nCol - 1) * xGapForExtraFav - extraFavBtnW) / 2;
            yOffset += Game1.tileSize * 6;
            // save load buttons
            m_loadFavButton = new ClickableTextureButton("Load", new Rectangle(xOffset + Game1.tileSize * 6, yOffset - 100, Game1.pixelZoom * 20, Game1.pixelZoom * 10), menuTextures, new Rectangle(0, 207, 26, 11), 3f)
            {
                m_hoverScale = 0.25f
            };
            m_loadFavButton.visible = m_currentFav != -1;
            m_components.Add(m_loadFavButton);
            m_saveFavButton = new ClickableTextureButton("Save", new Rectangle(xOffset + Game1.tileSize * 6, yOffset - 50, Game1.pixelZoom * 20, Game1.pixelZoom * 10), menuTextures, new Rectangle(0, 193, 26, 11), 3f)
            {
                m_hoverScale = 0.25f
            };
            m_saveFavButton.visible = m_currentFav != -1;
            m_components.Add(m_saveFavButton);

            m_selectFavLabel         = new LabelComponent(new Rectangle(xOffset, yOffset - 100, 1, 1), "Please select a favorite...");
            m_selectFavLabel.visible = m_currentFav == -1;
            m_components.Add(m_selectFavLabel);
            m_saveLabel         = new LabelComponent(new Rectangle(xOffset, yOffset - 100, 1, 1), "");
            m_saveLabel.visible = m_currentFav != -1;
            m_components.Add(m_saveLabel);
            m_loadLabel         = new LabelComponent(new Rectangle(xOffset, yOffset - 50, 1, 1), "Overwrite Fav. Slot");
            m_loadLabel.visible = m_currentFav != -1;
            m_components.Add(m_loadLabel);

            // extra favorites buttons
            for (int i = 0; i < nRow; i++)
            {
                for (int j = 0; j < nCol; j++)
                {
                    int y = m_farmerMakeup.m_config.HasFavSlot(i * nCol + j + firstExtraFavIndex) ? 26 : 67;
                    ClickableTextureButton c = new ClickableTextureButton("Fav", new Rectangle(xOffset + j * xGapForExtraFav, yOffset + i * yGapForExtraFav, extraFavBtnW, extraFavBtnH), menuTextures, new Rectangle(0, y, extraFavTextureW, extraFavTextureH), facBtnZoom)
                    {
                        m_par = j + i * nCol
                    };
                    m_extraFavButtons.Add(c);
                    m_components.Add(c);
                }
            }
        }
示例#5
0
        /// <summary>Update the menu layout for a change in the zoom level or viewport size.</summary>
        public override void updateLayout()
        {
            // reset window position
            this.xPositionOnScreen  = (Game1.viewport.Width - this.width) / 2;
            this.yPositionOnScreen  = (Game1.viewport.Height - this.height) / 2;
            this.yPositionOnScreen += Game1.tileSize / 2;

            m_alerts.Clear();
            m_components.Clear();

            // info
            int yOffset = this.yPositionOnScreen + IClickableMenu.borderWidth;
            int xOffset = this.xPositionOnScreen + IClickableMenu.borderWidth;

            m_components.Add(new LabelComponent(xOffset, yOffset, "Kisekae")
            {
                m_isTitle = true
            });
            yOffset += 50;
            m_components.Add(new LabelComponent(xOffset, yOffset, "A modified version of Get Dressed to work with SDV 1.3"));
            m_components.Add(new LabelComponent(xOffset, yOffset + 26, $"You are using version:  {m_env.ModManifest.Version}"));
            yOffset += 60;
            m_components.Add(new LabelComponent(xOffset, yOffset, "Settings:")
            {
                m_isTitle = true
            });
            m_components.Add(new LabelComponent(xOffset, yOffset + 60, "Face Types (M-F): " + m_globalConfig.MaleFaceTypes + "-" + m_globalConfig.FemaleFaceTypes));
            m_components.Add(new LabelComponent(xOffset + 300, yOffset + 60, "Nose Types (M-F): " + m_globalConfig.MaleNoseTypes + "-" + m_globalConfig.FemaleNoseTypes));
            m_components.Add(new LabelComponent(xOffset, yOffset + 110, "Shoes Types (M-F): " + m_globalConfig.MaleShoeTypes + "-" + m_globalConfig.FemaleShoeTypes));
            m_bottomNumberLabel = new LabelComponent(xOffset + 300, yOffset + 110, "Bottoms Types (M-F): " + (m_globalConfig.HideMaleSkirts ? 2 : m_globalConfig.MaleBottomsTypes) + "-" + m_globalConfig.FemaleBottomsTypes);
            m_components.Add(m_bottomNumberLabel);
            m_components.Add(new LabelComponent(xOffset, yOffset + 160, "Stove in Corner: " + m_globalConfig.StoveInCorner));
            m_showDresserLabel = new LabelComponent(xOffset + 300, yOffset + 160, "Show Dresser: " + m_globalConfig.ShowDresser);
            m_components.Add(m_showDresserLabel);
            m_components.Add(new ClickableTextureButton("SetDresser", new Rectangle(xOffset + 560, yOffset + 160, Game1.pixelZoom * 15, Game1.pixelZoom * 10), Game1.mouseCursors, new Rectangle(294, 428, 21, 11), 3f)
            {
                m_hoverScale = 0.25f
            });
            // set menu access key
            m_accessKeyLabel = new LabelComponent(xOffset, yOffset + 210, "Open Menu Key: " + m_globalConfig.MenuAccessKey);
            m_components.Add(m_accessKeyLabel);
            m_components.Add(new ClickableTextureButton("ClearAccessKey", new Rectangle(xOffset + 510, yOffset + 208, 30, 30), m_menuTextures, new Rectangle(50, 146, 12, 12), 3f)
            {
                m_hoverScale = 0.25f
            });
            m_components.Add(new ClickableTextureButton("SetAccessKey", new Rectangle(xOffset + 560, yOffset + 210, 21 * 3, 11 * 3), Game1.mouseCursors, new Rectangle(294, 428, 21, 11), 3f)
            {
                m_hoverScale = 0.25f
            });
            // toggle skirs for male characters
            m_components.Add(new LabelComponent(xOffset, yOffset + 260, "Toggle Skirts for Male Characters"));
            m_components.Add(new ClickableTextureButton("SetMaleShirt", new Rectangle(xOffset + 560, yOffset + 260, Game1.pixelZoom * 15, Game1.pixelZoom * 10), Game1.mouseCursors, new Rectangle(294, 428, 21, 11), 3f)
            {
                m_hoverScale = 0.25f
            });
            // set gender change
            m_components.Add(new LabelComponent(xOffset, yOffset + 310, "Can Change Gender"));
            m_components.Add(new ClickableTextureButton("SetGenderButton", new Rectangle(xOffset + 560, yOffset + 310, Game1.pixelZoom * 15, Game1.pixelZoom * 10), Game1.mouseCursors, new Rectangle(294, 428, 21, 11), 3f)
            {
                m_hoverScale = 0.25f
            });
            // set zoom level
            int  zoomValue  = (int)Math.Round((double)Game1.options.zoomLevel * 100.0);
            bool canZoomOut = (m_globalConfig.MenuZoomLock && !m_globalConfig.MenuZoomOut) || (!m_globalConfig.MenuZoomLock && zoomValue > 75);
            bool canZoomIn  = (m_globalConfig.MenuZoomLock && m_globalConfig.MenuZoomOut) || (!m_globalConfig.MenuZoomLock && zoomValue < 125);

            m_zoomLevelLabel = new LabelComponent(xOffset, yOffset + 360, (m_globalConfig.MenuZoomLock ? "Independent Zoom Level: ": "Game Zoom Level: ") + (zoomValue) + "%");
            m_components.Add(m_zoomLevelLabel);
            m_zoomOutButton = new ClickableTextureButton("ZoomOut", new Rectangle(xOffset + 530, yOffset + 360, Game1.pixelZoom * 10, Game1.pixelZoom * 10), m_menuTextures, new Rectangle(0, canZoomOut ? 167 : 177, 7, 9), 3f)
            {
                m_hoverScale = canZoomOut ? 0.25f : 0f
            };
            m_zoomLockButton = new ClickableTextureButton("ZoomLock", new Rectangle(xOffset + 575, yOffset + 360 - 4, (int)(12 * 2.5), (int)(14 * 2.5)), m_menuTextures, new Rectangle(m_globalConfig.MenuZoomLock ? 178:162, m_globalConfig.MenuZoomLock ? 145 : 161, 12, 14), 2.5f)
            {
                m_hoverScale = 0.25f
            };
            m_zoomInButton = new ClickableTextureButton("ZoomIn", new Rectangle(xOffset + 630, yOffset + 360, Game1.pixelZoom * 10, Game1.pixelZoom * 10), m_menuTextures, new Rectangle(10, canZoomIn ? 167 : 177, 7, 9), 3f)
            {
                m_hoverScale = canZoomIn ? 0.25f : 0f
            };
            m_components.Add(m_zoomOutButton);
            m_components.Add(m_zoomInButton);
            m_components.Add(m_zoomLockButton);
            // reset config options
            m_components.Add(new LabelComponent(xOffset, yOffset + 410, "Reset Options to Default"));
            m_components.Add(new ClickableTextureButton("Reset", new Rectangle(xOffset + 560, yOffset + 410, Game1.pixelZoom * 15, Game1.pixelZoom * 10), Game1.mouseCursors, new Rectangle(294, 428, 21, 11), 3f)
            {
                m_hoverScale = 0.25f
            });
        }
        /// <summary>Perform the action associated with a component.</summary>
        /// <param name="cpt">The component.</param>
        /// <return>whether the component action is processed</return>
        public override bool handleLeftClick(IAutoComponent cpt)
        {
            AutoColorPicker        p   = null;
            ClickableTextureButton btn = null;

            if (cpt is ClickableTextureButton)
            {
                btn = (ClickableTextureButton)cpt;
            }
            else if (cpt is AutoColorPicker)
            {
                p = (AutoColorPicker)cpt;
            }
            switch (cpt.m_name)
            {
            case "Male":
                m_farmerMakeup.ChangeGender(true);
                m_farmerMakeup.ChangeHairStyle(0);
                m_maleOutlineButton.m_visible   = true;
                m_femaleOutlineButton.m_visible = false;
                refreshLabelAttrs();
                break;

            case "Female":
                m_farmerMakeup.ChangeGender(false);
                m_farmerMakeup.ChangeHairStyle(16);
                m_maleOutlineButton.m_visible   = false;
                m_femaleOutlineButton.m_visible = true;
                refreshLabelAttrs();
                break;

            case "Direction":
                Game1.player.faceDirection((Game1.player.facingDirection - btn.m_par + 4) % 4);
                Game1.player.FarmerSprite.StopAnimation();
                Game1.player.completelyStopAnimatingOrDoingAction();
                Game1.playSound("pickUpItem");
                btn.scale = Math.Max(0.75f, btn.scale - 0.25f);
                return(true);

            case "OK":
                if (m_parent != null)
                {
                    m_parent.exitThisMenuNoSound();
                }
                else
                {
                    exitThisMenuNoSound();
                }
                break;

            case "Random":
                this.randomiseCharacter();
                btn.scale = Game1.pixelZoom - 0.5f;
                this.m_eyeColorPicker.setColor(Game1.player.newEyeColor);
                this.m_hairColorPicker.setColor(Game1.player.hairstyleColor);
                this.m_pantsColorPicker.setColor(Game1.player.pantsColor);
                refreshLabelAttrs();
                return(true);

            case "MultiplayerFix":
                m_farmerMakeup.TougleMultiplayerFix();
                btn.sourceRect.X = btn.sourceRect.X == 227 ? 236 : 227;
                Game1.playSound("drumkit6");
                return(true);

            case "EyeColorPicker":
                m_farmerMakeup.ChangeEyeColor(p.click(Game1.getOldMouseX(), Game1.getOldMouseY()));
                m_lastHeldColorPicker = p;
                return(true);

            case "HairColorPicker":
                m_farmerMakeup.ChangeHairColor(p.click(Game1.getOldMouseX(), Game1.getOldMouseY()));
                m_lastHeldColorPicker = p;
                return(true);

            case "PantsColorPicker":
                m_farmerMakeup.ChangeBottomsColor(p.click(Game1.getOldMouseX(), Game1.getOldMouseY()));
                m_lastHeldColorPicker = p;
                return(true);

            case "Fav":
                int i = btn.m_par;
                if (m_farmerMakeup.LoadFavorite(i + 1))
                {
                    Game1.playSound("yoba");
                    this.m_eyeColorPicker.setColor(Game1.player.newEyeColor);
                    this.m_hairColorPicker.setColor(Game1.player.hairstyleColor);
                    this.m_pantsColorPicker.setColor(Game1.player.pantsColor);
                    refreshLabelAttrs();
                }
                else
                {
                    m_alerts.Add(new Alert(Game1.mouseCursors, new Rectangle(268, 470, 16, 16), Game1.viewport.Width / 2 - (700 + IClickableMenu.borderWidth * 2) / 2, Game1.viewport.Height / 2 - (500 + IClickableMenu.borderWidth * 2) / 2, "Uh oh! No Favorite is Set!", 1000, false));
                    if (m_parent is MenuFarmerMakeup mk)
                    {
                        mk.ShowFavTabArrow = true;
                    }
                }
                return(true);

            default:
                if (btn != null)
                {
                    btn.scale = Math.Max(0.75f, btn.scale - 2.5f);
                    return(this.handleSelectorChange(btn.name, btn.m_par));
                }
                return(false);
            }
            Game1.playSound("coin");
            return(true);
        }
        /// <summary>Update the menu layout for a change in the zoom level or viewport size.</summary>
        public override void updateLayout()
        {
            // reset window position
            this.xPositionOnScreen  = (Game1.viewport.Width - this.width) / 2;
            this.yPositionOnScreen  = (Game1.viewport.Height - this.height) / 2;
            this.yPositionOnScreen += Game1.tileSize / 2;

            int xBase = xPositionOnScreen + IClickableMenu.borderWidth;
            int yBase = yPositionOnScreen + IClickableMenu.borderWidth;

            m_alerts.Clear();
            m_components.Clear();
            m_selectValueLabels.Clear();

            // random button
            m_components.Add(new ClickableTextureButton("Random", new Rectangle(xBase, yBase, Game1.pixelZoom * 10, Game1.pixelZoom * 10), null, "Random", Game1.mouseCursors, new Rectangle(381, 361, 10, 10), Game1.pixelZoom)
            {
                m_hoverScale = 0.25f
            });
            // portrait
            m_components.Add(new PortraitComponent(xBase + Game1.tileSize * 3 / 4, yBase));
            // direction buttons
            int xOffset = xBase + Game1.tileSize / 4;
            int yOffset = yBase + Game1.tileSize / 4 + Game1.tileSize * 2;

            m_components.Add(new ClickableTextureButton("Direction", new Rectangle(xOffset, yOffset, Game1.tileSize, Game1.tileSize), "", "", Game1.mouseCursors, Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 44), 1f)
            {
                m_par = -1, m_hoverScale = 0.1f
            });
            m_components.Add(new ClickableTextureButton("Direction", new Rectangle(xOffset + Game1.tileSize * 2, yOffset, Game1.tileSize, Game1.tileSize), "", "", Game1.mouseCursors, Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 33), 1f)
            {
                m_par = 1, m_hoverScale = 0.1f
            });
            // gender buttons
            if (m_globalConfig.CanChangeGender)
            {
                int scale = Game1.pixelZoom / 2;
                m_components.Add(new ClickableTextureButton("Male", new Rectangle(xBase + Game1.tileSize * 3, yBase, Game1.tileSize, Game1.tileSize), null, "Male", Game1.mouseCursors, new Rectangle(128, 192, 16, 16), scale));
                m_components.Add(new ClickableTextureButton("Female", new Rectangle(xBase + Game1.tileSize * 3, yBase + Game1.tileSize, Game1.tileSize, Game1.tileSize), null, "Female", Game1.mouseCursors, new Rectangle(144, 192, 16, 16), scale));
                this.m_maleOutlineButton = new ClickableTextureButton("", new Rectangle(
                                                                          xBase + Game1.tileSize * 3 - 3,
                                                                          yBase - 3,
                                                                          Game1.tileSize, Game1.tileSize), "", "", m_menuTextures, new Rectangle(19, 38, 19, 19), scale)
                {
                    m_visible = Game1.player.isMale
                };
                this.m_femaleOutlineButton = new ClickableTextureButton("", new Rectangle(
                                                                            xBase + Game1.tileSize * 3 - 3,
                                                                            yBase + Game1.tileSize - 3,
                                                                            Game1.tileSize, Game1.tileSize), "", "", m_menuTextures, new Rectangle(19, 38, 19, 19), scale)
                {
                    m_visible = !Game1.player.isMale
                };
                m_components.Add(m_maleOutlineButton);
                m_components.Add(m_femaleOutlineButton);
            }
            // color pickers
            {
                // eye color
                xOffset = xBase + Game1.tileSize * 4 + Game1.tileSize / 4;
                yOffset = yBase;
                int xPickerOffset = Game1.tileSize * 3 - Game1.tileSize / 4;
                int yLabelOffset  = 16;
                m_components.Add(new LabelComponent(new Rectangle(xOffset, yOffset + yLabelOffset, 1, 1), "Eye Color:"));
                this.m_eyeColorPicker = new AutoColorPicker("EyeColorPicker", xOffset + xPickerOffset, yOffset);
                this.m_eyeColorPicker.setColor(Game1.player.newEyeColor);
                m_components.Add(m_eyeColorPicker);
                // hair color
                yOffset += Game1.tileSize + 8;
                m_components.Add(new LabelComponent(new Rectangle(xOffset, yOffset + yLabelOffset, 1, 1), "Hair Color:"));
                this.m_hairColorPicker = new AutoColorPicker("HairColorPicker", xOffset + xPickerOffset, yOffset);
                this.m_hairColorPicker.setColor(Game1.player.hairstyleColor);
                m_components.Add(m_hairColorPicker);
                // pants color
                yOffset += Game1.tileSize + 8;
                m_components.Add(new LabelComponent(new Rectangle(xOffset, yOffset + yLabelOffset, 1, 1), "Pants Color:"));
                this.m_pantsColorPicker = new AutoColorPicker("PantsColorPicker", xOffset + xPickerOffset, yOffset);
                this.m_pantsColorPicker.setColor(Game1.player.pantsColor);
                m_components.Add(m_pantsColorPicker);
            }
            // type selectors
            {
                xOffset = xBase + Game1.tileSize / 4;
                yOffset = yBase + Game1.tileSize * 3 + Game1.tileSize / 2;
                int   xGap                 = xBase + Game1.tileSize * 4 - Game1.tileSize / 4;
                int[] xSelectorOffset      = new int[] { Game1.tileSize / 4, Game1.tileSize, Game1.tileSize * 2 };
                int[] xSelectorRightOffset = new int[] { Game1.tileSize / 4, Game1.tileSize + 8, Game1.tileSize * 3 };
                selectorLayout(xOffset, xSelectorOffset, yOffset, Attr.Hair);
                m_components.Add(new ClickableTextureButton("MultiplayerFix", new Rectangle(
                                                                xGap + xSelectorRightOffset[0] + 5,
                                                                yOffset + Game1.tileSize / 4,
                                                                36, 36), null, null, Game1.mouseCursors, new Rectangle(m_farmerMakeup.m_config.MutiplayerFix ? 236 : 227, 425, 9, 9), 4f, false));
                m_components.Add(new LabelComponent(new Rectangle(xGap + xSelectorRightOffset[1], yOffset + Game1.tileSize / 4, 1, 1), "Multiplayer Fix"));

                yOffset += Game1.tileSize + 4;
                selectorLayout(xOffset, xSelectorOffset, yOffset, Attr.Skin);
                selectorLayout(xGap, xSelectorRightOffset, yOffset, Attr.Face);
                yOffset += Game1.tileSize + 4;
                selectorLayout(xOffset, xSelectorOffset, yOffset, Attr.Shirt);
                selectorLayout(xGap, xSelectorRightOffset, yOffset, Attr.Nose);
                yOffset += Game1.tileSize + 4;
                selectorLayout(xOffset, xSelectorOffset, yOffset, Attr.ShoeColor);
                selectorLayout(xGap, xSelectorRightOffset, yOffset, Attr.Bottoms);
                yOffset += Game1.tileSize + 4;
                selectorLayout(xOffset, xSelectorOffset, yOffset, Attr.Accessory);
                selectorLayout(xGap, xSelectorRightOffset, yOffset, Attr.Shoes);
            }
            // quick favorite star buttons
            {
                xOffset = xBase + Game1.tileSize * 8 + Game1.tileSize / 2;
                yOffset = yBase + Game1.tileSize * 3 + Game1.tileSize / 2;
                // text above quick favorite buttons
                m_components.Add(new LabelComponent(new Rectangle(
                                                        xOffset + 10,
                                                        yOffset,
                                                        1, 1), "Load"));
                m_components.Add(new LabelComponent(new Rectangle(
                                                        xOffset - Game1.tileSize / 4 + 5,
                                                        yOffset + 25,
                                                        1, 1), "Favorite"));

                yOffset += 75;
                int size = Game1.pixelZoom * 10;
                int zoom = Game1.pixelZoom;
                int y1   = m_farmerMakeup.m_config.HasFavSlot(1) ? 26 : 67;
                int y2   = m_farmerMakeup.m_config.HasFavSlot(2) ? 26 : 67;
                int y3   = m_farmerMakeup.m_config.HasFavSlot(3) ? 26 : 67;
                int y4   = m_farmerMakeup.m_config.HasFavSlot(4) ? 26 : 67;
                int y5   = m_farmerMakeup.m_config.HasFavSlot(5) ? 26 : 67;
                int y6   = m_farmerMakeup.m_config.HasFavSlot(6) ? 26 : 67;
                this.m_quickLoadFavButtons = new[] {
                    new ClickableTextureButton("Fav", new Rectangle(xOffset + 0, yOffset + 0, size, size), m_menuTextures, new Rectangle(24, y1, 8, 8), zoom)
                    {
                        m_par = 0, m_hoverScale = 0.2f
                    },
                    new ClickableTextureButton("Fav", new Rectangle(xOffset + 0, yOffset + Game1.tileSize + 4, size, size), m_menuTextures, new Rectangle(8, y2, 8, 8), zoom)
                    {
                        m_par = 1, m_hoverScale = 0.2f
                    },
                    new ClickableTextureButton("Fav", new Rectangle(xOffset + 0, yOffset + (Game1.tileSize + 4) * 2, size, size), m_menuTextures, new Rectangle(0, y3, 8, 8), zoom)
                    {
                        m_par = 2, m_hoverScale = 0.2f
                    },
                    new ClickableTextureButton("Fav", new Rectangle(xOffset + 45, yOffset + 0, size, size), m_menuTextures, new Rectangle(24, y4, 8, 8), zoom)
                    {
                        m_par = 3, m_hoverScale = 0.2f
                    },
                    new ClickableTextureButton("Fav", new Rectangle(xOffset + 45, yOffset + Game1.tileSize + 4, size, size), m_menuTextures, new Rectangle(8, y5, 8, 8), zoom)
                    {
                        m_par = 4, m_hoverScale = 0.2f
                    },
                    new ClickableTextureButton("Fav", new Rectangle(xOffset + 45, yOffset + (Game1.tileSize + 4) * 2, size, size), m_menuTextures, new Rectangle(0, y6, 8, 8), zoom)
                    {
                        m_par = 5, m_hoverScale = 0.2f
                    }
                };
                for (int i = 0; i < m_quickLoadFavButtons.Length; ++i)
                {
                    m_components.Add(m_quickLoadFavButtons[i]);
                }
                m_components.Add(new ClickableTextureButton("OK", new Rectangle(xOffset + 8, yOffset + (Game1.tileSize + 4) * 3 - Game1.tileSize / 4, Game1.tileSize, Game1.tileSize), null, null, Game1.mouseCursors, Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 46), 1f)
                {
                    m_hoverScale = 0.1f
                });
            }
        }