private void Events_Rendering(object sender, EventArgs e) { if (Game1.activeClickableMenu is Billboard) { #region accessing Billboard Billboard menu = (Billboard)Game1.activeClickableMenu; FieldInfo calendarField = menu.GetType().GetField("calendarDays", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); if (calendarField == null) { this.Monitor.Log("Could not find field 'calendarDays' in Billboard!", LogLevel.Error); return; } List <ClickableTextureComponent> calendarDays = (List <ClickableTextureComponent>)calendarField.GetValue(menu); IReflectedField <string> privateField = this.Helper.Reflection.GetField <string>(menu, "hoverText"); string hoverText = privateField.GetValue(); #endregion if (calendarDays != null && !(hoverText.Contains("Moon") || hoverText.Contains("moon"))) { for (int day = 1; day <= 28; day++) { ClickableTextureComponent component = calendarDays[day - 1]; // 0 - 27 if (component.bounds.Contains(Game1.getMouseX(), Game1.getMouseY())) { if (moon.LunarCalendar[day] >= 0 && moon.LunarCalendar[day] <= 3) { if (hoverText.Length > 0) { hoverText += "\n"; } hoverText += $"{moon.CalculatePhaseName(moon.LunarCalendar[day])} moon"; } else { hoverText += ""; break; } } } privateField.SetValue(hoverText); } } }
private void OnPreRenderGuiEvent(object sender, EventArgs e) { if (Game1.activeClickableMenu is Billboard) { Billboard menu = (Billboard)Game1.activeClickableMenu; FieldInfo calendarField = menu.GetType().GetField("calendarDays", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); if (calendarField == null) { this.Monitor.Log("Could not find field 'calendarDays' in Billboard!", LogLevel.Error); return; } List <ClickableTextureComponent> calendarDays = (List <ClickableTextureComponent>)calendarField.GetValue(menu); IPrivateField <string> hoverField = this.Helper.Reflection.GetPrivateField <string>(menu, "hoverText"); string hoverText = hoverField.GetValue(); if (calendarDays != null && !(hoverText.Contains("Shrooms") || hoverText.Contains("shrooms"))) { for (int day = 1; day <= 28; day++) { ClickableTextureComponent component = calendarDays[day - 1]; if (component.bounds.Contains(Game1.getMouseX(), Game1.getMouseY())) { List <int> shrooms = this.GetShroomLayers(day - Game1.dayOfMonth); if (hoverText.Length > 0) { hoverText += "\n"; } if (shrooms.Count > 0) { hoverText += "Shrooms: " + string.Join(", ", shrooms); } else { hoverText += "No shrooms"; } break; } } hoverField.SetValue(hoverText); } } }
private void Events_Rendered(object sender, EventArgs e) { if (Game1.activeClickableMenu is Billboard) { #region accessing Billboard and sprites Billboard menu = (Billboard)Game1.activeClickableMenu; FieldInfo calendarField = menu.GetType().GetField("calendarDays", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); if (calendarField == null) { this.Monitor.Log("Could not find field 'calendarDays' in Billboard!", LogLevel.Error); return; } List <ClickableTextureComponent> calendarDays = (List <ClickableTextureComponent>)calendarField.GetValue(menu); if (calendarDays == null) { return; } string hoverText = this.Helper.Reflection.GetField <string>(menu, "hoverText").GetValue(); SpriteBatch b = Game1.spriteBatch; #endregion for (int day = 1; day <= 28; day++) { ClickableTextureComponent component = calendarDays[day - 1]; if (moon.LunarCalendar[day] >= 0 && moon.LunarCalendar[day] <= 3) { // insert loop that changes id based on phase const int id = 339; // id for moon, 339 = full Rectangle source = GameLocation.getSourceRectForObject(id); Vector2 dest = new Vector2(component.bounds.X, component.bounds.Y + 10f * Game1.pixelZoom); b.Draw(Game1.objectSpriteSheet, dest, new Rectangle?(source), Color.White, 0.0f, Vector2.Zero, Game1.pixelZoom / 2f, SpriteEffects.None, 1f); } } IClickableMenu.drawHoverText(b, hoverText, Game1.dialogueFont, 0, 0, -1, null, -1, null, null, 0, -1, -1, -1, -1, 1f, null); } }
private void OnPostRenderGuiEvent(object sender, EventArgs e) { if (Game1.activeClickableMenu is Billboard) { Billboard menu = (Billboard)Game1.activeClickableMenu; FieldInfo calendarField = menu.GetType().GetField("calendarDays", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); if (calendarField == null) { this.Monitor.Log("Could not find field 'calendarDays' in Billboard!", LogLevel.Error); return; } List <ClickableTextureComponent> calendarDays = (List <ClickableTextureComponent>)calendarField.GetValue(menu); if (calendarDays == null) { return; } string hoverText = this.Helper.Reflection.GetPrivateValue <string>(menu, "hoverText"); SpriteBatch b = Game1.spriteBatch; for (int day = 1; day <= 28; day++) { ClickableTextureComponent component = calendarDays[day - 1]; List <int> shrooms = this.GetShroomLayers(day - Game1.dayOfMonth); if (shrooms.Count > 0) { const int id = 422; Rectangle source = Game1.currentLocation.getSourceRectForObject(id); Vector2 dest = new Vector2(component.bounds.X, component.bounds.Y + 10f * Game1.pixelZoom); b.Draw(Game1.objectSpriteSheet, dest, new Rectangle?(source), Color.White, 0.0f, Vector2.Zero, Game1.pixelZoom / 2f, SpriteEffects.None, 1f); } } IClickableMenu.drawHoverText(b, hoverText, Game1.dialogueFont, 0, 0, -1, null, -1, null, null, 0, -1, -1, -1, -1, 1f, null); } }