Fixed vanilla machines not rendering CustomObject(s) when finished producing.

This commit is contained in:
JoshuaNavarro 2019-08-22 21:38:22 -07:00
parent f194b5eb4f
commit f3f4f4da27
2 changed files with 50 additions and 0 deletions

View File

@ -5,6 +5,7 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using Revitalize.Framework.Crafting; using Revitalize.Framework.Crafting;
using Revitalize.Framework.Objects;
using Revitalize.Framework.Utilities; using Revitalize.Framework.Utilities;
using StardewValley; using StardewValley;
using SObject = StardewValley.Object; using SObject = StardewValley.Object;
@ -17,6 +18,8 @@ namespace Revitalize.Framework.Hacks
/// Returns the object underneath the mouse's position. /// Returns the object underneath the mouse's position.
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
///
public static Dictionary<GameLocation, List<SObject>> TrackedMachines = new Dictionary<GameLocation, List<SObject>>();
public static SObject GetItemAtMouseTile() public static SObject GetItemAtMouseTile()
{ {
if (Game1.player == null) return null; if (Game1.player == null) return null;
@ -58,7 +61,53 @@ namespace Revitalize.Framework.Hacks
*/ */
(Game1.player.currentLocation).TemporarySprites.Add(new TemporaryAnimatedSprite(30, obj.TileLocation * 64f + new Vector2(0.0f, -16f), Color.White, 4, false, 50f, 10, 64, (float)(((double)obj.TileLocation.Y + 1.0) * 64.0 / 10000.0 + 9.99999974737875E-05), -1, 0)); (Game1.player.currentLocation).TemporarySprites.Add(new TemporaryAnimatedSprite(30, obj.TileLocation * 64f + new Vector2(0.0f, -16f), Color.White, 4, false, 50f, 10, 64, (float)(((double)obj.TileLocation.Y + 1.0) * 64.0 / 10000.0 + 9.99999974737875E-05), -1, 0));
obj.addWorkingAnimation(Game1.player.currentLocation); obj.addWorkingAnimation(Game1.player.currentLocation);
if (TrackedMachines.ContainsKey(Game1.player.currentLocation))
{
TrackedMachines[Game1.player.currentLocation].Add(obj);
} }
else
{
TrackedMachines.Add(Game1.player.currentLocation, new List<SObject>()
{
obj
});
}
}
}
}
public static void Render_RenderCustomObjectsHeldInMachines(object sender, StardewModdingAPI.Events.RenderedWorldEventArgs e)
{
if (TrackedMachines.ContainsKey(Game1.player.currentLocation))
{
List<SObject> removalList = new List<SObject>();
foreach(SObject obj in TrackedMachines[Game1.player.currentLocation])
{
if (obj.heldObject.Value == null)
{
removalList.Add(obj);
}
else
{
if(obj.heldObject.Value is CustomObject)
{
if (obj.MinutesUntilReady == 0)
{
float num = (float)(4.0 * Math.Round(Math.Sin(DateTime.UtcNow.TimeOfDay.TotalMilliseconds / 250.0), 2));
Vector2 pos = new Vector2(obj.TileLocation.X * Game1.tileSize, (obj.TileLocation.Y-1) * Game1.tileSize - 32+num);
obj.heldObject.Value.draw(e.SpriteBatch, (int)pos.X, (int)pos.Y, 0.25f, 1f);
}
}
}
}
foreach(SObject obj in removalList)
{
TrackedMachines[Game1.player.currentLocation].Remove(obj);
}
}
else
{
} }
} }

View File

@ -226,6 +226,7 @@ namespace Revitalize
ModHelper.Events.GameLoop.DayStarted += ObjectManager.resources.DailyResourceSpawn; ModHelper.Events.GameLoop.DayStarted += ObjectManager.resources.DailyResourceSpawn;
ModHelper.Events.Input.ButtonPressed += ObjectInteractionHacks.Input_CheckForObjectInteraction; ModHelper.Events.Input.ButtonPressed += ObjectInteractionHacks.Input_CheckForObjectInteraction;
ModHelper.Events.GameLoop.DayEnding += Serializer.DayEnding_CleanUpFilesForDeletion; ModHelper.Events.GameLoop.DayEnding += Serializer.DayEnding_CleanUpFilesForDeletion;
ModHelper.Events.Display.RenderedWorld += ObjectInteractionHacks.Render_RenderCustomObjectsHeldInMachines;
//ModHelper.Events.Display.Rendered += MenuHacks.EndOfDay_OnMenuChanged; //ModHelper.Events.Display.Rendered += MenuHacks.EndOfDay_OnMenuChanged;
//ModHelper.Events.GameLoop.Saved += MenuHacks.EndOfDay_CleanupForNewDay; //ModHelper.Events.GameLoop.Saved += MenuHacks.EndOfDay_CleanupForNewDay;