From f3f4f4da2761b434e518dc51b26abae48aedb447 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Thu, 22 Aug 2019 21:38:22 -0700 Subject: [PATCH] Fixed vanilla machines not rendering CustomObject(s) when finished producing. --- .../Framework/Hacks/ObjectInteractionHacks.cs | 49 +++++++++++++++++++ GeneralMods/Revitalize/ModCore.cs | 1 + 2 files changed, 50 insertions(+) diff --git a/GeneralMods/Revitalize/Framework/Hacks/ObjectInteractionHacks.cs b/GeneralMods/Revitalize/Framework/Hacks/ObjectInteractionHacks.cs index 2e00eed8..5914f950 100644 --- a/GeneralMods/Revitalize/Framework/Hacks/ObjectInteractionHacks.cs +++ b/GeneralMods/Revitalize/Framework/Hacks/ObjectInteractionHacks.cs @@ -5,6 +5,7 @@ using System.Text; using System.Threading.Tasks; using Microsoft.Xna.Framework; using Revitalize.Framework.Crafting; +using Revitalize.Framework.Objects; using Revitalize.Framework.Utilities; using StardewValley; using SObject = StardewValley.Object; @@ -17,6 +18,8 @@ namespace Revitalize.Framework.Hacks /// Returns the object underneath the mouse's position. /// /// + /// + public static Dictionary> TrackedMachines = new Dictionary>(); public static SObject GetItemAtMouseTile() { if (Game1.player == null) return null; @@ -58,9 +61,55 @@ 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)); 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() + { + obj + }); + } } } } + public static void Render_RenderCustomObjectsHeldInMachines(object sender, StardewModdingAPI.Events.RenderedWorldEventArgs e) + { + if (TrackedMachines.ContainsKey(Game1.player.currentLocation)) + { + List removalList = new List(); + 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 + { + + } + } + } } diff --git a/GeneralMods/Revitalize/ModCore.cs b/GeneralMods/Revitalize/ModCore.cs index 3b6be6c3..f09df947 100644 --- a/GeneralMods/Revitalize/ModCore.cs +++ b/GeneralMods/Revitalize/ModCore.cs @@ -226,6 +226,7 @@ namespace Revitalize ModHelper.Events.GameLoop.DayStarted += ObjectManager.resources.DailyResourceSpawn; ModHelper.Events.Input.ButtonPressed += ObjectInteractionHacks.Input_CheckForObjectInteraction; ModHelper.Events.GameLoop.DayEnding += Serializer.DayEnding_CleanUpFilesForDeletion; + ModHelper.Events.Display.RenderedWorld += ObjectInteractionHacks.Render_RenderCustomObjectsHeldInMachines; //ModHelper.Events.Display.Rendered += MenuHacks.EndOfDay_OnMenuChanged; //ModHelper.Events.GameLoop.Saved += MenuHacks.EndOfDay_CleanupForNewDay;