Ui-Info-Suite/SDVModTest/UIElements/ShowBirthdayIcon.cs

133 lines
4.6 KiB
C#

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using UIInfoSuite.Extensions;
using StardewModdingAPI.Events;
using StardewValley;
using StardewValley.Menus;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Netcode;
namespace UIInfoSuite.UIElements
{
class ShowBirthdayIcon : IDisposable
{
private NPC _birthdayNPC;
private ClickableTextureComponent _birthdayIcon;
public void ToggleOption(bool showBirthdayIcon)
{
TimeEvents.AfterDayStarted -= CheckForBirthday;
GraphicsEvents.OnPreRenderHudEvent -= DrawBirthdayIcon;
GraphicsEvents.OnPostRenderHudEvent -= DrawHoverText;
GameEvents.HalfSecondTick -= CheckIfGiftHasBeenGiven;
if (showBirthdayIcon)
{
CheckForBirthday(null, null);
TimeEvents.AfterDayStarted += CheckForBirthday;
GraphicsEvents.OnPreRenderHudEvent += DrawBirthdayIcon;
GraphicsEvents.OnPostRenderHudEvent += DrawHoverText;
GameEvents.HalfSecondTick += CheckIfGiftHasBeenGiven;
}
}
private void CheckIfGiftHasBeenGiven(object sender, EventArgs e)
{
if (_birthdayNPC != null &&
Game1.player != null &&
Game1.player.friendshipData != null)
{
Game1.player.friendshipData.FieldDict.TryGetValue(_birthdayNPC.Name, out var netRef);
//var birthdayNPCDetails = Game1.player.friendshipData.SafeGet(_birthdayNPC.name);
Friendship birthdayNPCDetails = netRef;
if (birthdayNPCDetails != null)
{
if (birthdayNPCDetails.GiftsToday == 1)
_birthdayNPC = null;
}
}
}
public void Dispose()
{
ToggleOption(false);
}
private void CheckForBirthday(object sender, EventArgs e)
{
_birthdayNPC = null;
foreach (var location in Game1.locations)
{
foreach (var character in location.characters)
{
if (character.isBirthday(Game1.currentSeason, Game1.dayOfMonth))
{
_birthdayNPC = character;
break;
}
}
if (_birthdayNPC != null)
break;
}
}
private void DrawBirthdayIcon(object sender, EventArgs e)
{
if (!Game1.eventUp)
{
if (_birthdayNPC != null)
{
Rectangle headShot = _birthdayNPC.GetHeadShot();
Point iconPosition = IconHandler.Handler.GetNewIconPosition();
float scale = 2.9f;
Game1.spriteBatch.Draw(
Game1.mouseCursors,
new Vector2(iconPosition.X, iconPosition.Y),
new Rectangle(228, 409, 16, 16),
Color.White,
0.0f,
Vector2.Zero,
scale,
SpriteEffects.None,
1f);
_birthdayIcon =
new ClickableTextureComponent(
_birthdayNPC.Name,
new Rectangle(
iconPosition.X - 7,
iconPosition.Y - 2,
(int)(16.0 * scale),
(int)(16.0 * scale)),
null,
_birthdayNPC.Name,
_birthdayNPC.Sprite.Texture,
headShot,
2f);
_birthdayIcon.draw(Game1.spriteBatch);
}
}
}
private void DrawHoverText(object sender, EventArgs e)
{
if (_birthdayNPC != null &&
_birthdayIcon.containsPoint(Game1.getMouseX(), Game1.getMouseY()))
{
String hoverText = String.Format("{0}'s Birthday", _birthdayNPC.Name);
IClickableMenu.drawHoverText(
Game1.spriteBatch,
hoverText,
Game1.dialogueFont);
}
}
}
}