From d42d4dcb98059be3a03382838a5c20bd7c3bc9ab Mon Sep 17 00:00:00 2001 From: Joshua Navarro Date: Wed, 8 Mar 2017 09:45:46 -0800 Subject: [PATCH] Now I can use reflection on text boxes --- .../MenuControllerCompatability/Class1.cs | 58 +++ .../Menus/Compatability/SpriteKeyboard.cs | 391 +++++++++++++++++- .../bin/Debug/MenuControllerCompatability.dll | Bin 13824 -> 19968 bytes .../obj/Debug/MenuControllerCompatability.dll | Bin 13824 -> 19968 bytes 4 files changed, 444 insertions(+), 5 deletions(-) diff --git a/GeneralMods/MenuControllerCompatability/MenuControllerCompatability/Class1.cs b/GeneralMods/MenuControllerCompatability/MenuControllerCompatability/Class1.cs index 1a879c36..db9b1c3c 100644 --- a/GeneralMods/MenuControllerCompatability/MenuControllerCompatability/Class1.cs +++ b/GeneralMods/MenuControllerCompatability/MenuControllerCompatability/Class1.cs @@ -8,6 +8,8 @@ using StardewValley; using Compatability; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework; +using StardewValley.Menus; +using System.Reflection; namespace MenuControllerCompatability { @@ -18,8 +20,64 @@ namespace MenuControllerCompatability { StardewModdingAPI.Events.GameEvents.UpdateTick += MenuCompatability; StardewModdingAPI.Events.GraphicsEvents.Resize += GraphicsEvents_Resize; + StardewModdingAPI.Events.ControlEvents.KeyPressed += ControlEvents_KeyPressed; } + private void ControlEvents_KeyPressed(object sender, StardewModdingAPI.Events.EventArgsKeyPressed e) + { + + + + // FieldInfo f = Game1.activeClickableMenu.GetType().GetField("subMenu", BindingFlags.NonPublic | BindingFlags.Instance); + //Log.AsyncG(l.GetType()); + // Game1.activeClickableMenu.GetType().GetProperty("subMenu").GetValue(Game1.activeClickableMenu, null); + + /* + MethodInfo dynMethod = l.GetType().GetMethod("receiveScrollWheelAction", + BindingFlags.Public | BindingFlags.Instance); + + dynMethod.Invoke(l, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Public, null, new object[] { -1 }, null); + */ + + + if (e.KeyPressed.ToString() == "R") + { + Game1.activeClickableMenu = new SpriteKeyboard(); + } + } + + private void changeNameBoxOnCharacterCustomizer() + { + + + object l = new CharacterCustomization(null, null, null, false); + object nameBox = new StardewValley.Menus.TextBox(null, null, Game1.smoothFont, Color.White); + object text = new string(new char[5] { 'a', 'b', 'c', 'd', 'e' }); + l = (StardewValley.Menus.CharacterCustomization)Game1.activeClickableMenu.GetType().GetField("subMenu", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(Game1.activeClickableMenu); + Log.AsyncM(l); + if (l == null) + { + Log.AsyncC("cry"); + } + nameBox = (TextBox)l.GetType().GetField("nameBox", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(l); + if (nameBox == null) + { + Log.AsyncM("BLARG"); + + } + Log.AsyncG(nameBox); + + + text = (string)nameBox.GetType().GetField("_text", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(nameBox); + if ((text as string) == "") + { + Log.AsyncM("WTF"); + + } + nameBox.GetType().GetField("_text", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(nameBox, "fuck"); + } + + private void GraphicsEvents_Resize(object sender, EventArgs e) { if (CompatabilityManager.compatabilityMenu != null) diff --git a/GeneralMods/MenuControllerCompatability/MenuControllerCompatability/Menus/Compatability/SpriteKeyboard.cs b/GeneralMods/MenuControllerCompatability/MenuControllerCompatability/Menus/Compatability/SpriteKeyboard.cs index d53d8ab4..4dfd0802 100644 --- a/GeneralMods/MenuControllerCompatability/MenuControllerCompatability/Menus/Compatability/SpriteKeyboard.cs +++ b/GeneralMods/MenuControllerCompatability/MenuControllerCompatability/Menus/Compatability/SpriteKeyboard.cs @@ -1,16 +1,397 @@ -using System; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using StardewValley.Minigames; +using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; -namespace MenuControllerCompatability.Menus.Compatability +namespace StardewValley.Menus { - class SpriteKeyboard + public class SpriteKeyboard : IClickableMenu { + + + private List labels = new List(); + + public List keyboardButtonsLowerCase; + public List keyboardButtonsUpperCase; + + + private ClickableTextureComponent okButton; + + private TextBox nameBox; + + + + private string hoverText; + + private string hoverTitle; + + private ClickableComponent nameLabel; + + + public SpriteKeyboard() : base(Game1.viewport.Width / 2 - (632 + IClickableMenu.borderWidth * 2) / 2, Game1.viewport.Height / 2 - (600 + IClickableMenu.borderWidth * 2) / 2 - Game1.tileSize, 632 + IClickableMenu.borderWidth * 2, 600 + IClickableMenu.borderWidth * 2 + Game1.tileSize, false) + { + keyboardButtonsLowerCase = new List(); + keyboardButtonsUpperCase = new List(); + this.setUpPositions(); + Game1.player.faceDirection(2); + Game1.player.FarmerSprite.StopAnimation(); + } + + public override void gameWindowSizeChanged(Rectangle oldBounds, Rectangle newBounds) + { + + base.gameWindowSizeChanged(oldBounds, newBounds); + this.xPositionOnScreen = Game1.viewport.Width / 2 - (632 + IClickableMenu.borderWidth * 2) / 2; + this.yPositionOnScreen = Game1.viewport.Height / 2 - (600 + IClickableMenu.borderWidth * 2) / 2 - Game1.tileSize; + this.setUpPositions(); + } + + private void setUpPositions() + { + this.labels.Clear(); + + + this.keyboardButtonsLowerCase.Clear(); + this.keyboardButtonsUpperCase.Clear(); + + + this.okButton = new ClickableTextureComponent("OK", new Rectangle(this.xPositionOnScreen + this.width - IClickableMenu.borderWidth - IClickableMenu.spaceToClearSideBorder - Game1.tileSize, this.yPositionOnScreen + this.height - IClickableMenu.borderWidth - IClickableMenu.spaceToClearTopBorder + Game1.tileSize / 4, Game1.tileSize, Game1.tileSize), null, null, Game1.mouseCursors, Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 46, -1, -1), 1f, false); + this.nameBox = new TextBox(Game1.content.Load("LooseSprites\\textBox"), null, Game1.smallFont, Game1.textColor) + { + X = this.xPositionOnScreen + Game1.tileSize + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 4, + Y = this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder - Game1.tileSize / 4, + Text = Game1.player.name + }; + this.labels.Add(this.nameLabel = new ClickableComponent(new Rectangle(this.xPositionOnScreen + Game1.tileSize / 4 + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 3 + 8, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder - Game1.tileSize / 8, 1, 1), Game1.content.LoadString("Strings\\UI:Character_Name", new object[0]))); + + int num = Game1.tileSize * 2; + + + + num = Game1.tileSize * 4 + 8; + + // Point point = new Point(this.xPositionOnScreen + this.width + Game1.pixelZoom + Game1.tileSize / 8, this.yPositionOnScreen + IClickableMenu.borderWidth * 2); + // this.farmTypeButtons.Add(new ClickableTextureComponent("Standard", new Rectangle(point.X, point.Y + 22 * Game1.pixelZoom, 22 * Game1.pixelZoom, 20 * Game1.pixelZoom), null, Game1.content.LoadString("Strings\\UI:Character_FarmStandard", new object[0]), Game1.mouseCursors, new Rectangle(0, 324, 22, 20), (float)Game1.pixelZoom, false)); + // this.farmTypeButtons.Add(new ClickableTextureComponent("Riverland", new Rectangle(point.X, point.Y + 22 * Game1.pixelZoom * 2, 22 * Game1.pixelZoom, 20 * Game1.pixelZoom), null, Game1.content.LoadString("Strings\\UI:Character_FarmFishing", new object[0]), Game1.mouseCursors, new Rectangle(22, 324, 22, 20), (float)Game1.pixelZoom, false)); + // this.farmTypeButtons.Add(new ClickableTextureComponent("Forest", new Rectangle(point.X, point.Y + 22 * Game1.pixelZoom * 3, 22 * Game1.pixelZoom, 20 * Game1.pixelZoom), null, Game1.content.LoadString("Strings\\UI:Character_FarmForaging", new object[0]), Game1.mouseCursors, new Rectangle(44, 324, 22, 20), (float)Game1.pixelZoom, false)); + // this.farmTypeButtons.Add(new ClickableTextureComponent("Hills", new Rectangle(point.X, point.Y + 22 * Game1.pixelZoom * 4, 22 * Game1.pixelZoom, 20 * Game1.pixelZoom), null, Game1.content.LoadString("Strings\\UI:Character_FarmMining", new object[0]), Game1.mouseCursors, new Rectangle(66, 324, 22, 20), (float)Game1.pixelZoom, false)); + // this.farmTypeButtons.Add(new ClickableTextureComponent("Wilderness", new Rectangle(point.X, point.Y + 22 * Game1.pixelZoom * 5, 22 * Game1.pixelZoom, 20 * Game1.pixelZoom), null, Game1.content.LoadString("Strings\\UI:Character_FarmCombat", new object[0]), Game1.mouseCursors, new Rectangle(88, 324, 22, 20), (float)Game1.pixelZoom, false)); + + // this.labels.Add(new ClickableComponent(new Rectangle(this.xPositionOnScreen + Game1.tileSize / 4 + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 3 + 8, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + num + 16, 1, 1), Game1.content.LoadString("Strings\\UI:Character_EyeColor", new object[0]))); + + num += Game1.tileSize + 8; + + // this.labels.Add(new ClickableComponent(new Rectangle(this.xPositionOnScreen + Game1.tileSize / 4 + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 3 + 8, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + num + 16, 1, 1), Game1.content.LoadString("Strings\\UI:Character_HairColor", new object[0]))); + + num += Game1.tileSize + 8; + + // this.labels.Add(new ClickableComponent(new Rectangle(this.xPositionOnScreen + Game1.tileSize / 4 + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 3 + 8, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + num + 16, 1, 1), Game1.content.LoadString("Strings\\UI:Character_PantsColor", new object[0]))); + + + num += Game1.tileSize + 8; + + } + + private void optionButtonClick(string name) + { + if (name == "OK") + { + if (!this.canLeaveMenu()) + { + return; + } + Game1.player.Name = this.nameBox.Text.Trim(); + Game1.exitActiveMenu(); + if (Game1.currentMinigame != null && Game1.currentMinigame is Intro) + { + (Game1.currentMinigame as Intro).doneCreatingCharacter(); + } + + } + Game1.playSound("coin"); + } + + private void selectionClick(string name, int change) + { + if (name == "Skin") + { + Game1.player.changeSkinColor(Game1.player.skin + change); + Game1.playSound("skeletonStep"); + return; + } + if (name == "Hair") + { + Game1.player.changeHairStyle(Game1.player.hair + change); + Game1.playSound("grassyStep"); + return; + } + if (name == "Shirt") + { + Game1.player.changeShirt(Game1.player.shirt + change); + Game1.playSound("coin"); + return; + } + if (name == "Acc") + { + Game1.player.changeAccessory(Game1.player.accessory + change); + Game1.playSound("purchase"); + return; + } + if (!(name == "Direction")) + { + return; + } + Game1.player.faceDirection((Game1.player.facingDirection - change + 4) % 4); + Game1.player.FarmerSprite.StopAnimation(); + Game1.player.completelyStopAnimatingOrDoingAction(); + Game1.playSound("pickUpItem"); + } + + public override void receiveLeftClick(int x, int y, bool playSound = true) + { + /* + foreach (ClickableComponent current in this.genderButtons) + { + if (current.containsPoint(x, y)) + { + this.optionButtonClick(current.name); + current.scale -= 0.5f; + current.scale = Math.Max(3.5f, current.scale); + } + } + */ + /* + foreach (ClickableComponent current4 in this.leftSelectionButtons) + { + if (current4.containsPoint(x, y)) + { + this.selectionClick(current4.name, -1); + current4.scale -= 0.25f; + current4.scale = Math.Max(0.75f, current4.scale); + } + }*/ + if (this.okButton.containsPoint(x, y) && this.canLeaveMenu()) + { + this.optionButtonClick(this.okButton.name); + this.okButton.scale -= 0.25f; + this.okButton.scale = Math.Max(0.75f, this.okButton.scale); + } + + this.nameBox.Update(); + + + } + + public override void leftClickHeld(int x, int y) + { + + } + + public override void releaseLeftClick(int x, int y) + { + + } + + public override void receiveRightClick(int x, int y, bool playSound = true) + { + } + + public override void receiveKeyPress(Keys key) + { + if (key == Keys.Tab) + { + if (this.nameBox.Selected) + { + this.nameBox.Selected = false; + return; + } + + this.nameBox.SelectMe(); + } + } + + public override void performHoverAction(int x, int y) + { + this.hoverText = ""; + this.hoverTitle = ""; + /* + using (List.Enumerator enumerator = this.leftSelectionButtons.GetEnumerator()) + { + while (enumerator.MoveNext()) + { + ClickableTextureComponent clickableTextureComponent = (ClickableTextureComponent)enumerator.Current; + if (clickableTextureComponent.containsPoint(x, y)) + { + clickableTextureComponent.scale = Math.Min(clickableTextureComponent.scale + 0.02f, clickableTextureComponent.baseScale + 0.1f); + } + else + { + clickableTextureComponent.scale = Math.Max(clickableTextureComponent.scale - 0.02f, clickableTextureComponent.baseScale); + } + } + } + */ + + + /* + if (!this.wizardSource) + { + using (List.Enumerator enumerator = this.genderButtons.GetEnumerator()) + { + while (enumerator.MoveNext()) + { + ClickableTextureComponent clickableTextureComponent3 = (ClickableTextureComponent)enumerator.Current; + if (clickableTextureComponent3.containsPoint(x, y)) + { + clickableTextureComponent3.scale = Math.Min(clickableTextureComponent3.scale + 0.02f, clickableTextureComponent3.baseScale + 0.1f); + } + else + { + clickableTextureComponent3.scale = Math.Max(clickableTextureComponent3.scale - 0.02f, clickableTextureComponent3.baseScale); + } + } + } + using (List.Enumerator enumerator = this.petButtons.GetEnumerator()) + { + while (enumerator.MoveNext()) + { + ClickableTextureComponent clickableTextureComponent4 = (ClickableTextureComponent)enumerator.Current; + if (clickableTextureComponent4.containsPoint(x, y)) + { + clickableTextureComponent4.scale = Math.Min(clickableTextureComponent4.scale + 0.02f, clickableTextureComponent4.baseScale + 0.1f); + } + else + { + clickableTextureComponent4.scale = Math.Max(clickableTextureComponent4.scale - 0.02f, clickableTextureComponent4.baseScale); + } +- } + } + } + */ + if (this.okButton.containsPoint(x, y) && this.canLeaveMenu()) + { + this.okButton.scale = Math.Min(this.okButton.scale + 0.02f, this.okButton.baseScale + 0.1f); + } + else + { + this.okButton.scale = Math.Max(this.okButton.scale - 0.02f, this.okButton.baseScale); + } + + } + + public bool canLeaveMenu() + { + return true; + } + + public override void draw(SpriteBatch b) + { + Game1.drawDialogueBox(this.xPositionOnScreen, this.yPositionOnScreen, this.width, this.height, false, true, null, false); + b.Draw(Game1.daybg, new Vector2((float)(this.xPositionOnScreen + Game1.tileSize + Game1.tileSize * 2 / 3 - 2), (float)(this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder - Game1.tileSize / 4)), Color.White); + // Game1.player.FarmerRenderer.draw(b, Game1.player.FarmerSprite.CurrentAnimationFrame, Game1.player.FarmerSprite.CurrentFrame, Game1.player.FarmerSprite.SourceRect, new Vector2((float)(this.xPositionOnScreen - 2 + Game1.tileSize * 2 / 3 + Game1.tileSize * 2 - Game1.tileSize / 2), (float)(this.yPositionOnScreen + IClickableMenu.borderWidth - Game1.tileSize / 4 + IClickableMenu.spaceToClearTopBorder + Game1.tileSize / 2)), Vector2.Zero, 0.8f, Color.White, 0f, 1f, Game1.player); + + + /* + using (List.Enumerator enumerator = this.genderButtons.GetEnumerator()) + { + while (enumerator.MoveNext()) + { + ClickableTextureComponent clickableTextureComponent = (ClickableTextureComponent)enumerator.Current; + clickableTextureComponent.draw(b); + if ((clickableTextureComponent.name.Equals("Male") && Game1.player.isMale) || (clickableTextureComponent.name.Equals("Female") && !Game1.player.isMale)) + { + b.Draw(Game1.mouseCursors, clickableTextureComponent.bounds, new Rectangle?(Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 34, -1, -1)), Color.White); + } + } + } + + using (List.Enumerator enumerator = this.petButtons.GetEnumerator()) + { + while (enumerator.MoveNext()) + { + ClickableTextureComponent clickableTextureComponent2 = (ClickableTextureComponent)enumerator.Current; + clickableTextureComponent2.draw(b); + if ((clickableTextureComponent2.name.Equals("Cat") && Game1.player.catPerson) || (clickableTextureComponent2.name.Equals("Dog") && !Game1.player.catPerson)) + { + b.Draw(Game1.mouseCursors, clickableTextureComponent2.bounds, new Rectangle?(Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 34, -1, -1)), Color.White); + } + } + } + */ + Game1.player.name = this.nameBox.Text; + + /* + using (List.Enumerator enumerator = this.leftSelectionButtons.GetEnumerator()) + { + while (enumerator.MoveNext()) + { + ((ClickableTextureComponent)enumerator.Current).draw(b); + } + } + */ + foreach (ClickableComponent current in this.labels) + { + string text = ""; + Color color = Game1.textColor; + if (current == this.nameLabel) + { + color = ((Game1.player.name.Length < 1) ? Color.Red : Game1.textColor); + + } + else + { + color = Game1.textColor; + } + Utility.drawTextWithShadow(b, current.name, Game1.smallFont, new Vector2((float)current.bounds.X, (float)current.bounds.Y), color, 1f, -1f, -1, -1, 1f, 3); + if (text.Length > 0) + { + Utility.drawTextWithShadow(b, text, Game1.smallFont, new Vector2((float)(current.bounds.X + Game1.tileSize / 3) - Game1.smallFont.MeasureString(text).X / 2f, (float)(current.bounds.Y + Game1.tileSize / 2)), color, 1f, -1f, -1, -1, 1f, 3); + } + } + + /* + if (!this.wizardSource) + { + IClickableMenu.drawTextureBox(b, this.farmTypeButtons[0].bounds.X - Game1.pixelZoom * 4, this.farmTypeButtons[0].bounds.Y - Game1.pixelZoom * 5, 30 * Game1.pixelZoom, 110 * Game1.pixelZoom + Game1.pixelZoom * 9, Color.White); + for (int i = 0; i < this.farmTypeButtons.Count; i++) + { + this.farmTypeButtons[i].draw(b, this.farmTypeButtons[i].name.Contains("Gray") ? (Color.Black * 0.5f) : Color.White, 0.88f); + if (this.farmTypeButtons[i].name.Contains("Gray")) + { + b.Draw(Game1.mouseCursors, new Vector2((float)(this.farmTypeButtons[i].bounds.Center.X - Game1.pixelZoom * 3), (float)(this.farmTypeButtons[i].bounds.Center.Y - Game1.pixelZoom * 2)), new Rectangle?(new Rectangle(107, 442, 7, 8)), Color.White, 0f, Vector2.Zero, (float)Game1.pixelZoom, SpriteEffects.None, 0.89f); + } + if (i == Game1.whichFarm) + { + IClickableMenu.drawTextureBox(b, Game1.mouseCursors, new Rectangle(375, 357, 3, 3), this.farmTypeButtons[i].bounds.X, this.farmTypeButtons[i].bounds.Y - Game1.pixelZoom, this.farmTypeButtons[i].bounds.Width, this.farmTypeButtons[i].bounds.Height + Game1.pixelZoom * 2, Color.White, (float)Game1.pixelZoom, false); + } + } + } + */ + if (this.canLeaveMenu()) + { + this.okButton.draw(b, Color.White, 0.75f); + } + else + { + this.okButton.draw(b, Color.White, 0.75f); + this.okButton.draw(b, Color.Black * 0.5f, 0.751f); + } + + + this.nameBox.Draw(b); + + if (this.hoverText != null && this.hoverTitle != null && this.hoverText.Count() > 0) + { + IClickableMenu.drawHoverText(b, Game1.parseText(this.hoverText, Game1.smallFont, Game1.tileSize * 4), Game1.smallFont, 0, 0, -1, this.hoverTitle, -1, null, null, 0, -1, -1, -1, -1, 1f, null); + } + base.drawMouse(b); + } } } diff --git a/GeneralMods/MenuControllerCompatability/MenuControllerCompatability/bin/Debug/MenuControllerCompatability.dll b/GeneralMods/MenuControllerCompatability/MenuControllerCompatability/bin/Debug/MenuControllerCompatability.dll index 6bc846a21c362308283a1d948622bcffee6cebdc..f0d5c2cd50f8181c059072d9a0af3ba01d4f46c1 100644 GIT binary patch literal 19968 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 literal 13824 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 diff --git a/GeneralMods/MenuControllerCompatability/MenuControllerCompatability/obj/Debug/MenuControllerCompatability.dll b/GeneralMods/MenuControllerCompatability/MenuControllerCompatability/obj/Debug/MenuControllerCompatability.dll index 6bc846a21c362308283a1d948622bcffee6cebdc..f0d5c2cd50f8181c059072d9a0af3ba01d4f46c1 100644 GIT binary patch literal 19968 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 literal 13824 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