133 lines
4.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|