From fb253941dfdd370d3081c6e46707424d993b300a Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sun, 25 Nov 2018 00:07:26 -0500 Subject: add support for propagating map asset changes --- src/SMAPI/Framework/ContentCoordinator.cs | 16 +++++++----- .../ContentManagers/BaseContentManager.cs | 14 +++++----- .../Framework/ContentManagers/IContentManager.cs | 4 +-- src/SMAPI/Metadata/CoreAssetPropagator.cs | 30 +++++++++++++++++++--- 4 files changed, 45 insertions(+), 19 deletions(-) (limited to 'src/SMAPI') diff --git a/src/SMAPI/Framework/ContentCoordinator.cs b/src/SMAPI/Framework/ContentCoordinator.cs index 9eb7b5f9..08a32a9b 100644 --- a/src/SMAPI/Framework/ContentCoordinator.cs +++ b/src/SMAPI/Framework/ContentCoordinator.cs @@ -238,28 +238,30 @@ namespace StardewModdingAPI.Framework public IEnumerable InvalidateCache(Func predicate, bool dispose = false) { // invalidate cache - HashSet removedAssetNames = new HashSet(); + IDictionary removedAssetNames = new Dictionary(StringComparer.InvariantCultureIgnoreCase); foreach (IContentManager contentManager in this.ContentManagers) { - foreach (string name in contentManager.InvalidateCache(predicate, dispose)) - removedAssetNames.Add(name); + foreach (Tuple asset in contentManager.InvalidateCache(predicate, dispose)) + removedAssetNames[asset.Item1] = asset.Item2; } // reload core game assets int reloaded = 0; - foreach (string key in removedAssetNames) + foreach (var pair in removedAssetNames) { - if (this.CoreAssets.Propagate(this.MainContentManager, key)) // use an intercepted content manager + string key = pair.Key; + Type type = pair.Value; + if (this.CoreAssets.Propagate(this.MainContentManager, key, type)) // use an intercepted content manager reloaded++; } // report result if (removedAssetNames.Any()) - this.Monitor.Log($"Invalidated {removedAssetNames.Count} asset names: {string.Join(", ", removedAssetNames.OrderBy(p => p, StringComparer.InvariantCultureIgnoreCase))}. Reloaded {reloaded} core assets.", LogLevel.Trace); + this.Monitor.Log($"Invalidated {removedAssetNames.Count} asset names: {string.Join(", ", removedAssetNames.Keys.OrderBy(p => p, StringComparer.InvariantCultureIgnoreCase))}. Reloaded {reloaded} core assets.", LogLevel.Trace); else this.Monitor.Log("Invalidated 0 cache entries.", LogLevel.Trace); - return removedAssetNames; + return removedAssetNames.Keys; } /// Dispose held resources. diff --git a/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs b/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs index 18aae05b..ed08f11c 100644 --- a/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs +++ b/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs @@ -200,23 +200,25 @@ namespace StardewModdingAPI.Framework.ContentManagers /// Purge matched assets from the cache. /// Matches the asset keys to invalidate. /// Whether to dispose invalidated assets. This should only be true when they're being invalidated as part of a dispose, to avoid crashing the game. - /// Returns the number of invalidated assets. - public IEnumerable InvalidateCache(Func predicate, bool dispose = false) + /// Returns the invalidated asset names and types. + public IEnumerable> InvalidateCache(Func predicate, bool dispose = false) { - HashSet removeAssetNames = new HashSet(StringComparer.InvariantCultureIgnoreCase); + Dictionary removeAssetNames = new Dictionary(StringComparer.InvariantCultureIgnoreCase); this.Cache.Remove((key, type) => { this.ParseCacheKey(key, out string assetName, out _); - if (removeAssetNames.Contains(assetName) || predicate(assetName, type)) + if (removeAssetNames.ContainsKey(assetName)) + return true; + if (predicate(assetName, type)) { - removeAssetNames.Add(assetName); + removeAssetNames[assetName] = type; return true; } return false; }); - return removeAssetNames; + return removeAssetNames.Select(p => Tuple.Create(p.Key, p.Value)); } /// Dispose held resources. diff --git a/src/SMAPI/Framework/ContentManagers/IContentManager.cs b/src/SMAPI/Framework/ContentManagers/IContentManager.cs index 1eb8b0ac..17618edd 100644 --- a/src/SMAPI/Framework/ContentManagers/IContentManager.cs +++ b/src/SMAPI/Framework/ContentManagers/IContentManager.cs @@ -80,7 +80,7 @@ namespace StardewModdingAPI.Framework.ContentManagers /// Purge matched assets from the cache. /// Matches the asset keys to invalidate. /// Whether to dispose invalidated assets. This should only be true when they're being invalidated as part of a dispose, to avoid crashing the game. - /// Returns the number of invalidated assets. - IEnumerable InvalidateCache(Func predicate, bool dispose = false); + /// Returns the invalidated asset names and types. + IEnumerable> InvalidateCache(Func predicate, bool dispose = false); } } diff --git a/src/SMAPI/Metadata/CoreAssetPropagator.cs b/src/SMAPI/Metadata/CoreAssetPropagator.cs index 8487b6be..841e6d64 100644 --- a/src/SMAPI/Metadata/CoreAssetPropagator.cs +++ b/src/SMAPI/Metadata/CoreAssetPropagator.cs @@ -13,6 +13,7 @@ using StardewValley.Menus; using StardewValley.Objects; using StardewValley.Projectiles; using StardewValley.TerrainFeatures; +using xTile; using xTile.Tiles; namespace StardewModdingAPI.Metadata @@ -45,10 +46,11 @@ namespace StardewModdingAPI.Metadata /// Reload one of the game's core assets (if applicable). /// The content manager through which to reload the asset. /// The asset key to reload. + /// The asset type to reload. /// Returns whether an asset was reloaded. - public bool Propagate(LocalizedContentManager content, string key) + public bool Propagate(LocalizedContentManager content, string key, Type type) { - object result = this.PropagateImpl(content, key); + object result = this.PropagateImpl(content, key, type); if (result is bool b) return b; return result != null; @@ -61,9 +63,12 @@ namespace StardewModdingAPI.Metadata /// Reload one of the game's core assets (if applicable). /// The content manager through which to reload the asset. /// The asset key to reload. - /// Returns any non-null value to indicate an asset was loaded. - private object PropagateImpl(LocalizedContentManager content, string key) + /// The asset type to reload. + /// Returns whether an asset was loaded. The return value may be true or false, or a non-null value for true. + private object PropagateImpl(LocalizedContentManager content, string key, Type type) { + key = this.GetNormalisedPath(key); + /**** ** Special case: current map tilesheet ** We only need to do this for the current location, since tilesheets are reloaded when you enter a location. @@ -78,6 +83,23 @@ namespace StardewModdingAPI.Metadata } } + /**** + ** Propagate map changes + ****/ + if (type == typeof(Map)) + { + bool anyChanged = false; + foreach (GameLocation location in this.GetLocations()) + { + if (this.GetNormalisedPath(location.mapPath.Value) == key) + { + this.Reflection.GetMethod(location, "reloadMap").Invoke(); + anyChanged = true; + } + } + return anyChanged; + } + /**** ** Propagate by key ****/ -- cgit From b34cbb5b860ac4cd4a4b9e564e6e53245be3e790 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sun, 25 Nov 2018 13:14:45 -0500 Subject: fix error when leaving & rejoining a server in the same session --- src/SMAPI/Framework/SGame.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'src/SMAPI') diff --git a/src/SMAPI/Framework/SGame.cs b/src/SMAPI/Framework/SGame.cs index 75cf4c52..9c6ff4dd 100644 --- a/src/SMAPI/Framework/SGame.cs +++ b/src/SMAPI/Framework/SGame.cs @@ -206,6 +206,15 @@ namespace StardewModdingAPI.Framework this.Events.ModMessageReceived.RaiseForMods(new ModMessageReceivedEventArgs(message), mod => mod != null && modIDs.Contains(mod.Manifest.UniqueID)); } + /// A callback raised when the player quits a save and returns to the title screen. + private void OnReturnedToTitle() + { + this.Monitor.Log("Context: returned to title", LogLevel.Trace); + this.Multiplayer.Peers.Clear(); + this.Events.ReturnedToTitle.RaiseEmpty(); + this.Events.Legacy_AfterReturnToTitle.Raise(); + } + /// Constructor a content manager to read XNB files. /// The service provider to use to locate services. /// The root directory to search for content. @@ -430,11 +439,7 @@ namespace StardewModdingAPI.Framework ** Load / return-to-title events *********/ if (wasWorldReady && !Context.IsWorldReady) - { - this.Monitor.Log("Context: returned to title", LogLevel.Trace); - this.Events.ReturnedToTitle.RaiseEmpty(); - this.Events.Legacy_AfterReturnToTitle.Raise(); - } + this.OnReturnedToTitle(); else if (!this.RaisedAfterLoadEvent && Context.IsWorldReady) { // print context -- cgit From 924c3a5d3fe6bfad483834112883156bdf202b57 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sun, 25 Nov 2018 15:19:12 -0500 Subject: add support for propagating NPCDisposition asset changes --- src/SMAPI/Metadata/CoreAssetPropagator.cs | 33 +++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src/SMAPI') diff --git a/src/SMAPI/Metadata/CoreAssetPropagator.cs b/src/SMAPI/Metadata/CoreAssetPropagator.cs index 841e6d64..8083b4b1 100644 --- a/src/SMAPI/Metadata/CoreAssetPropagator.cs +++ b/src/SMAPI/Metadata/CoreAssetPropagator.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using StardewModdingAPI.Framework.Reflection; using StardewValley; @@ -163,6 +164,9 @@ namespace StardewModdingAPI.Metadata case "data\\craftingrecipes": // CraftingRecipe.InitShared return CraftingRecipe.craftingRecipes = content.Load>(key); + case "data\\npcdispositions": // NPC constructor + return this.ReloadNpcDispositions(content, key); + case "data\\npcgifttastes": // Game1.loadContent return Game1.NPCGiftTastes = content.Load>(key); @@ -482,6 +486,35 @@ namespace StardewModdingAPI.Metadata return true; } + /// Reload the disposition data for matching NPCs. + /// The content manager through which to reload the asset. + /// The asset key to reload. + /// Returns whether any NPCs were affected. + private bool ReloadNpcDispositions(LocalizedContentManager content, string key) + { + IDictionary dispositions = content.Load>(key); + foreach (NPC character in this.GetCharacters()) + { + if (!character.isVillager() || !dispositions.ContainsKey(character.Name)) + continue; + + NPC clone = new NPC(null, Vector2.Zero, 0, character.Name); + character.Age = clone.Age; + character.Manners = clone.Manners; + character.SocialAnxiety = clone.SocialAnxiety; + character.Optimism = clone.Optimism; + character.Gender = clone.Gender; + character.datable.Value = clone.datable.Value; + character.homeRegion = clone.homeRegion; + character.Birthday_Season = clone.Birthday_Season; + character.Birthday_Day = clone.Birthday_Day; + character.id = clone.id; + character.displayName = clone.displayName; + } + + return true; + } + /// Reload the sprites for matching NPCs. /// The content manager through which to reload the asset. /// The asset key to reload. -- cgit From e58681f1bccb02a5aa079a54a981fa05e39260c9 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Wed, 28 Nov 2018 18:37:46 -0500 Subject: fix some map tilesheets not editable if not playing in English --- .../ContentManagers/BaseContentManager.cs | 6 ++--- .../ContentManagers/GameContentManager.cs | 27 ++++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) (limited to 'src/SMAPI') diff --git a/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs b/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs index ed08f11c..724a6e1c 100644 --- a/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs +++ b/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs @@ -32,12 +32,12 @@ namespace StardewModdingAPI.Framework.ContentManagers /// Whether the content coordinator has been disposed. private bool IsDisposed; - /// The language enum values indexed by locale code. - private readonly IDictionary LanguageCodes; - /// A callback to invoke when the content manager is being disposed. private readonly Action OnDisposing; + /// The language enum values indexed by locale code. + protected IDictionary LanguageCodes { get; } + /********* ** Accessors diff --git a/src/SMAPI/Framework/ContentManagers/GameContentManager.cs b/src/SMAPI/Framework/ContentManagers/GameContentManager.cs index a53840bc..4f3b6fbc 100644 --- a/src/SMAPI/Framework/ContentManagers/GameContentManager.cs +++ b/src/SMAPI/Framework/ContentManagers/GameContentManager.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; using StardewModdingAPI.Framework.Content; +using StardewModdingAPI.Framework.Exceptions; using StardewModdingAPI.Framework.Reflection; using StardewModdingAPI.Framework.Utilities; using StardewValley; @@ -52,7 +53,10 @@ namespace StardewModdingAPI.Framework.ContentManagers /// The language code for which to load content. public override T Load(string assetName, LanguageCode language) { + // normalise asset name assetName = this.AssertAndNormaliseAssetName(assetName); + if (this.TryParseExplicitLanguageAssetKey(assetName, out string newAssetName, out LanguageCode newLanguage)) + return this.Load(newAssetName, newLanguage); // get from cache if (this.IsLoaded(assetName)) @@ -124,6 +128,29 @@ namespace StardewModdingAPI.Framework.ContentManagers return false; } + /// Parse an asset key that contains an explicit language into its asset name and language, if applicable. + /// The asset key to parse. + /// The asset name without the language code. + /// The language code removed from the asset name. + private bool TryParseExplicitLanguageAssetKey(string rawAsset, out string assetName, out LanguageCode language) + { + if (string.IsNullOrWhiteSpace(rawAsset)) + throw new SContentLoadException("The asset key is empty."); + + // extract language code + int splitIndex = rawAsset.LastIndexOf('.'); + if (splitIndex != -1 && this.LanguageCodes.TryGetValue(rawAsset.Substring(splitIndex + 1), out language)) + { + assetName = rawAsset.Substring(0, splitIndex); + return true; + } + + // no explicit language code found + assetName = rawAsset; + language = this.Language; + return false; + } + /// Load the initial asset from the registered . /// The basic asset metadata. /// Returns the loaded asset metadata, or null if no loader matched. -- cgit From dd15416d55a4ee6839e4343bc65cd3b08b467de7 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Thu, 29 Nov 2018 23:06:36 -0500 Subject: fix RenderedWorld event not invoked before overlays are rendered --- src/SMAPI/Framework/SGame.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/SMAPI') diff --git a/src/SMAPI/Framework/SGame.cs b/src/SMAPI/Framework/SGame.cs index 9c6ff4dd..f76245a2 100644 --- a/src/SMAPI/Framework/SGame.cs +++ b/src/SMAPI/Framework/SGame.cs @@ -1345,6 +1345,7 @@ namespace StardewModdingAPI.Framework } Game1.spriteBatch.End(); } + this.Events.RenderedWorld.RaiseEmpty(); Game1.spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, (DepthStencilState)null, (RasterizerState)null); if (Game1.drawGrid) { @@ -1532,7 +1533,7 @@ namespace StardewModdingAPI.Framework string s = Game1.content.LoadString("Strings\\StringsFromCSFiles:DayTimeMoneyBox.cs.10378"); SpriteText.drawStringWithScrollBackground(Game1.spriteBatch, s, 96, 32, "", 1f, -1); } - this.Events.RenderedWorld.RaiseEmpty(); + this.Events.Rendered.RaiseEmpty(); this.Events.Legacy_OnPostRenderEvent.Raise(); Game1.spriteBatch.End(); -- cgit From 3c5bdc96b57b523fb389dda5138b57fc5801edd2 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 3 Dec 2018 01:29:05 -0500 Subject: fix new event arg constructors not marked internal (#606) --- src/SMAPI/Events/BuildingListChangedEventArgs.cs | 2 +- src/SMAPI/Events/CursorMovedEventArgs.cs | 2 +- src/SMAPI/Events/DebrisListChangedEventArgs.cs | 2 +- src/SMAPI/Events/EventArgsClickableMenuChanged.cs | 2 +- src/SMAPI/Events/EventArgsClickableMenuClosed.cs | 2 +- src/SMAPI/Events/InventoryChangedEventArgs.cs | 2 +- src/SMAPI/Events/LargeTerrainFeatureListChangedEventArgs.cs | 2 +- src/SMAPI/Events/LevelChangedEventArgs.cs | 2 +- src/SMAPI/Events/LocationListChangedEventArgs.cs | 2 +- src/SMAPI/Events/MenuChangedEventArgs.cs | 2 +- src/SMAPI/Events/MouseWheelScrolledEventArgs.cs | 2 +- src/SMAPI/Events/NpcListChangedEventArgs.cs | 2 +- src/SMAPI/Events/ObjectListChangedEventArgs.cs | 2 +- src/SMAPI/Events/TerrainFeatureListChangedEventArgs.cs | 2 +- src/SMAPI/Events/TimeChangedEventArgs.cs | 2 +- src/SMAPI/Events/UnvalidatedUpdateTickedEventArgs.cs | 2 +- src/SMAPI/Events/UnvalidatedUpdateTickingEventArgs.cs | 2 +- src/SMAPI/Events/UpdateTickedEventArgs.cs | 2 +- src/SMAPI/Events/UpdateTickingEventArgs.cs | 2 +- src/SMAPI/Events/WarpedEventArgs.cs | 2 +- src/SMAPI/Events/WindowResizedEventArgs.cs | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) (limited to 'src/SMAPI') diff --git a/src/SMAPI/Events/BuildingListChangedEventArgs.cs b/src/SMAPI/Events/BuildingListChangedEventArgs.cs index 9bc691fc..0237342f 100644 --- a/src/SMAPI/Events/BuildingListChangedEventArgs.cs +++ b/src/SMAPI/Events/BuildingListChangedEventArgs.cs @@ -29,7 +29,7 @@ namespace StardewModdingAPI.Events /// The location which changed. /// The buildings added to the location. /// The buildings removed from the location. - public BuildingListChangedEventArgs(GameLocation location, IEnumerable added, IEnumerable removed) + internal BuildingListChangedEventArgs(GameLocation location, IEnumerable added, IEnumerable removed) { this.Location = location; this.Added = added.ToArray(); diff --git a/src/SMAPI/Events/CursorMovedEventArgs.cs b/src/SMAPI/Events/CursorMovedEventArgs.cs index 453743b9..43ff90ce 100644 --- a/src/SMAPI/Events/CursorMovedEventArgs.cs +++ b/src/SMAPI/Events/CursorMovedEventArgs.cs @@ -21,7 +21,7 @@ namespace StardewModdingAPI.Events /// Construct an instance. /// The previous cursor position. /// The new cursor position. - public CursorMovedEventArgs(ICursorPosition oldPosition, ICursorPosition newPosition) + internal CursorMovedEventArgs(ICursorPosition oldPosition, ICursorPosition newPosition) { this.OldPosition = oldPosition; this.NewPosition = newPosition; diff --git a/src/SMAPI/Events/DebrisListChangedEventArgs.cs b/src/SMAPI/Events/DebrisListChangedEventArgs.cs index 1337bd3b..68328885 100644 --- a/src/SMAPI/Events/DebrisListChangedEventArgs.cs +++ b/src/SMAPI/Events/DebrisListChangedEventArgs.cs @@ -28,7 +28,7 @@ namespace StardewModdingAPI.Events /// The location which changed. /// The debris added to the location. /// The debris removed from the location. - public DebrisListChangedEventArgs(GameLocation location, IEnumerable added, IEnumerable removed) + internal DebrisListChangedEventArgs(GameLocation location, IEnumerable added, IEnumerable removed) { this.Location = location; this.Added = added.ToArray(); diff --git a/src/SMAPI/Events/EventArgsClickableMenuChanged.cs b/src/SMAPI/Events/EventArgsClickableMenuChanged.cs index 2a2aa163..5e00b86d 100644 --- a/src/SMAPI/Events/EventArgsClickableMenuChanged.cs +++ b/src/SMAPI/Events/EventArgsClickableMenuChanged.cs @@ -1,4 +1,4 @@ -using System; +using System; using StardewValley.Menus; namespace StardewModdingAPI.Events diff --git a/src/SMAPI/Events/EventArgsClickableMenuClosed.cs b/src/SMAPI/Events/EventArgsClickableMenuClosed.cs index 5e6585f0..65751da7 100644 --- a/src/SMAPI/Events/EventArgsClickableMenuClosed.cs +++ b/src/SMAPI/Events/EventArgsClickableMenuClosed.cs @@ -1,4 +1,4 @@ -using System; +using System; using StardewValley.Menus; namespace StardewModdingAPI.Events diff --git a/src/SMAPI/Events/InventoryChangedEventArgs.cs b/src/SMAPI/Events/InventoryChangedEventArgs.cs index a081611b..1b22af8d 100644 --- a/src/SMAPI/Events/InventoryChangedEventArgs.cs +++ b/src/SMAPI/Events/InventoryChangedEventArgs.cs @@ -30,7 +30,7 @@ namespace StardewModdingAPI.Events /// Construct an instance. /// The player whose inventory changed. /// The inventory changes. - public InventoryChangedEventArgs(Farmer player, ItemStackChange[] changedItems) + internal InventoryChangedEventArgs(Farmer player, ItemStackChange[] changedItems) { this.Player = player; this.Added = changedItems diff --git a/src/SMAPI/Events/LargeTerrainFeatureListChangedEventArgs.cs b/src/SMAPI/Events/LargeTerrainFeatureListChangedEventArgs.cs index 63b12687..c7d55bf8 100644 --- a/src/SMAPI/Events/LargeTerrainFeatureListChangedEventArgs.cs +++ b/src/SMAPI/Events/LargeTerrainFeatureListChangedEventArgs.cs @@ -29,7 +29,7 @@ namespace StardewModdingAPI.Events /// The location which changed. /// The large terrain features added to the location. /// The large terrain features removed from the location. - public LargeTerrainFeatureListChangedEventArgs(GameLocation location, IEnumerable added, IEnumerable removed) + internal LargeTerrainFeatureListChangedEventArgs(GameLocation location, IEnumerable added, IEnumerable removed) { this.Location = location; this.Added = added.ToArray(); diff --git a/src/SMAPI/Events/LevelChangedEventArgs.cs b/src/SMAPI/Events/LevelChangedEventArgs.cs index 174094c7..a0a761c4 100644 --- a/src/SMAPI/Events/LevelChangedEventArgs.cs +++ b/src/SMAPI/Events/LevelChangedEventArgs.cs @@ -31,7 +31,7 @@ namespace StardewModdingAPI.Events /// The skill whose level changed. /// The previous skill level. /// The new skill level. - public LevelChangedEventArgs(Farmer player, SkillType skill, int oldLevel, int newLevel) + internal LevelChangedEventArgs(Farmer player, SkillType skill, int oldLevel, int newLevel) { this.Player = player; this.Skill = skill; diff --git a/src/SMAPI/Events/LocationListChangedEventArgs.cs b/src/SMAPI/Events/LocationListChangedEventArgs.cs index e93f0a80..1ebb3e2d 100644 --- a/src/SMAPI/Events/LocationListChangedEventArgs.cs +++ b/src/SMAPI/Events/LocationListChangedEventArgs.cs @@ -24,7 +24,7 @@ namespace StardewModdingAPI.Events /// Construct an instance. /// The added locations. /// The removed locations. - public LocationListChangedEventArgs(IEnumerable added, IEnumerable removed) + internal LocationListChangedEventArgs(IEnumerable added, IEnumerable removed) { this.Added = added.ToArray(); this.Removed = removed.ToArray(); diff --git a/src/SMAPI/Events/MenuChangedEventArgs.cs b/src/SMAPI/Events/MenuChangedEventArgs.cs index e1c049a2..977ba38b 100644 --- a/src/SMAPI/Events/MenuChangedEventArgs.cs +++ b/src/SMAPI/Events/MenuChangedEventArgs.cs @@ -22,7 +22,7 @@ namespace StardewModdingAPI.Events /// Construct an instance. /// The previous menu. /// The current menu. - public MenuChangedEventArgs(IClickableMenu oldMenu, IClickableMenu newMenu) + internal MenuChangedEventArgs(IClickableMenu oldMenu, IClickableMenu newMenu) { this.OldMenu = oldMenu; this.NewMenu = newMenu; diff --git a/src/SMAPI/Events/MouseWheelScrolledEventArgs.cs b/src/SMAPI/Events/MouseWheelScrolledEventArgs.cs index 3ab9d412..0c736b39 100644 --- a/src/SMAPI/Events/MouseWheelScrolledEventArgs.cs +++ b/src/SMAPI/Events/MouseWheelScrolledEventArgs.cs @@ -28,7 +28,7 @@ namespace StardewModdingAPI.Events /// The cursor position. /// The old scroll value. /// The new scroll value. - public MouseWheelScrolledEventArgs(ICursorPosition position, int oldValue, int newValue) + internal MouseWheelScrolledEventArgs(ICursorPosition position, int oldValue, int newValue) { this.Position = position; this.OldValue = oldValue; diff --git a/src/SMAPI/Events/NpcListChangedEventArgs.cs b/src/SMAPI/Events/NpcListChangedEventArgs.cs index eca28244..a9ec2a3b 100644 --- a/src/SMAPI/Events/NpcListChangedEventArgs.cs +++ b/src/SMAPI/Events/NpcListChangedEventArgs.cs @@ -28,7 +28,7 @@ namespace StardewModdingAPI.Events /// The location which changed. /// The NPCs added to the location. /// The NPCs removed from the location. - public NpcListChangedEventArgs(GameLocation location, IEnumerable added, IEnumerable removed) + internal NpcListChangedEventArgs(GameLocation location, IEnumerable added, IEnumerable removed) { this.Location = location; this.Added = added.ToArray(); diff --git a/src/SMAPI/Events/ObjectListChangedEventArgs.cs b/src/SMAPI/Events/ObjectListChangedEventArgs.cs index 55a4034f..d0cf9e7b 100644 --- a/src/SMAPI/Events/ObjectListChangedEventArgs.cs +++ b/src/SMAPI/Events/ObjectListChangedEventArgs.cs @@ -30,7 +30,7 @@ namespace StardewModdingAPI.Events /// The location which changed. /// The objects added to the location. /// The objects removed from the location. - public ObjectListChangedEventArgs(GameLocation location, IEnumerable> added, IEnumerable> removed) + internal ObjectListChangedEventArgs(GameLocation location, IEnumerable> added, IEnumerable> removed) { this.Location = location; this.Added = added.ToArray(); diff --git a/src/SMAPI/Events/TerrainFeatureListChangedEventArgs.cs b/src/SMAPI/Events/TerrainFeatureListChangedEventArgs.cs index 562b1d3c..0992633e 100644 --- a/src/SMAPI/Events/TerrainFeatureListChangedEventArgs.cs +++ b/src/SMAPI/Events/TerrainFeatureListChangedEventArgs.cs @@ -30,7 +30,7 @@ namespace StardewModdingAPI.Events /// The location which changed. /// The terrain features added to the location. /// The terrain features removed from the location. - public TerrainFeatureListChangedEventArgs(GameLocation location, IEnumerable> added, IEnumerable> removed) + internal TerrainFeatureListChangedEventArgs(GameLocation location, IEnumerable> added, IEnumerable> removed) { this.Location = location; this.Added = added.ToArray(); diff --git a/src/SMAPI/Events/TimeChangedEventArgs.cs b/src/SMAPI/Events/TimeChangedEventArgs.cs index fd472092..d8349bd8 100644 --- a/src/SMAPI/Events/TimeChangedEventArgs.cs +++ b/src/SMAPI/Events/TimeChangedEventArgs.cs @@ -21,7 +21,7 @@ namespace StardewModdingAPI.Events /// Construct an instance. /// The previous time of day in 24-hour notation (like 1600 for 4pm). /// The current time of day in 24-hour notation (like 1600 for 4pm). - public TimeChangedEventArgs(int oldTime, int newTime) + internal TimeChangedEventArgs(int oldTime, int newTime) { this.OldTime = oldTime; this.NewTime = newTime; diff --git a/src/SMAPI/Events/UnvalidatedUpdateTickedEventArgs.cs b/src/SMAPI/Events/UnvalidatedUpdateTickedEventArgs.cs index 5638bdb7..95ae59d8 100644 --- a/src/SMAPI/Events/UnvalidatedUpdateTickedEventArgs.cs +++ b/src/SMAPI/Events/UnvalidatedUpdateTickedEventArgs.cs @@ -20,7 +20,7 @@ namespace StardewModdingAPI.Events *********/ /// Construct an instance. /// The number of ticks elapsed since the game started, including the current tick. - public UnvalidatedUpdateTickedEventArgs(uint ticks) + internal UnvalidatedUpdateTickedEventArgs(uint ticks) { this.Ticks = ticks; this.IsOneSecond = this.IsMultipleOf(60); diff --git a/src/SMAPI/Events/UnvalidatedUpdateTickingEventArgs.cs b/src/SMAPI/Events/UnvalidatedUpdateTickingEventArgs.cs index ebadbb99..4ed781e0 100644 --- a/src/SMAPI/Events/UnvalidatedUpdateTickingEventArgs.cs +++ b/src/SMAPI/Events/UnvalidatedUpdateTickingEventArgs.cs @@ -20,7 +20,7 @@ namespace StardewModdingAPI.Events *********/ /// Construct an instance. /// The number of ticks elapsed since the game started, including the current tick. - public UnvalidatedUpdateTickingEventArgs(uint ticks) + internal UnvalidatedUpdateTickingEventArgs(uint ticks) { this.Ticks = ticks; this.IsOneSecond = this.IsMultipleOf(60); diff --git a/src/SMAPI/Events/UpdateTickedEventArgs.cs b/src/SMAPI/Events/UpdateTickedEventArgs.cs index 56912643..3466b731 100644 --- a/src/SMAPI/Events/UpdateTickedEventArgs.cs +++ b/src/SMAPI/Events/UpdateTickedEventArgs.cs @@ -20,7 +20,7 @@ namespace StardewModdingAPI.Events *********/ /// Construct an instance. /// The number of ticks elapsed since the game started, including the current tick. - public UpdateTickedEventArgs(uint ticks) + internal UpdateTickedEventArgs(uint ticks) { this.Ticks = ticks; this.IsOneSecond = this.IsMultipleOf(60); diff --git a/src/SMAPI/Events/UpdateTickingEventArgs.cs b/src/SMAPI/Events/UpdateTickingEventArgs.cs index 5998fd9b..d4913268 100644 --- a/src/SMAPI/Events/UpdateTickingEventArgs.cs +++ b/src/SMAPI/Events/UpdateTickingEventArgs.cs @@ -20,7 +20,7 @@ namespace StardewModdingAPI.Events *********/ /// Construct an instance. /// The number of ticks elapsed since the game started, including the current tick. - public UpdateTickingEventArgs(uint ticks) + internal UpdateTickingEventArgs(uint ticks) { this.Ticks = ticks; this.IsOneSecond = this.IsMultipleOf(60); diff --git a/src/SMAPI/Events/WarpedEventArgs.cs b/src/SMAPI/Events/WarpedEventArgs.cs index 1b1c7381..cb7ff204 100644 --- a/src/SMAPI/Events/WarpedEventArgs.cs +++ b/src/SMAPI/Events/WarpedEventArgs.cs @@ -27,7 +27,7 @@ namespace StardewModdingAPI.Events /// The player who warped to a new location. /// The player's previous location. /// The player's current location. - public WarpedEventArgs(Farmer player, GameLocation oldLocation, GameLocation newLocation) + internal WarpedEventArgs(Farmer player, GameLocation oldLocation, GameLocation newLocation) { this.Player = player; this.NewLocation = newLocation; diff --git a/src/SMAPI/Events/WindowResizedEventArgs.cs b/src/SMAPI/Events/WindowResizedEventArgs.cs index a990ba9d..1852636a 100644 --- a/src/SMAPI/Events/WindowResizedEventArgs.cs +++ b/src/SMAPI/Events/WindowResizedEventArgs.cs @@ -22,7 +22,7 @@ namespace StardewModdingAPI.Events /// Construct an instance. /// The previous window size. /// The current window size. - public WindowResizedEventArgs(Point oldSize, Point newSize) + internal WindowResizedEventArgs(Point oldSize, Point newSize) { this.OldSize = oldSize; this.NewSize = newSize; -- cgit From a2a0469cd024e2fd4b35503db152ba1a6df712ec Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 3 Dec 2018 01:43:02 -0500 Subject: deprecate old events (#606) --- src/SMAPI/Events/ContentEvents.cs | 15 ++++++-- src/SMAPI/Events/ControlEvents.cs | 57 ++++++++++++++++++++++++++----- src/SMAPI/Events/GameEvents.cs | 57 ++++++++++++++++++++++++++----- src/SMAPI/Events/GraphicsEvents.cs | 51 ++++++++++++++++++++++----- src/SMAPI/Events/InputEvents.cs | 21 ++++++++++-- src/SMAPI/Events/LocationEvents.cs | 27 ++++++++++++--- src/SMAPI/Events/MenuEvents.cs | 21 ++++++++++-- src/SMAPI/Events/MineEvents.cs | 15 ++++++-- src/SMAPI/Events/MultiplayerEvents.cs | 33 +++++++++++++++--- src/SMAPI/Events/PlayerEvents.cs | 27 ++++++++++++--- src/SMAPI/Events/SaveEvents.cs | 45 ++++++++++++++++++++---- src/SMAPI/Events/SpecialisedEvents.cs | 15 ++++++-- src/SMAPI/Events/TimeEvents.cs | 21 ++++++++++-- src/SMAPI/Framework/DeprecationManager.cs | 6 ++++ src/SMAPI/Framework/SCore.cs | 26 +++++++------- src/SMAPI/IModHelper.cs | 1 - 16 files changed, 363 insertions(+), 75 deletions(-) (limited to 'src/SMAPI') diff --git a/src/SMAPI/Events/ContentEvents.cs b/src/SMAPI/Events/ContentEvents.cs index 3ee0560b..3bf3881b 100644 --- a/src/SMAPI/Events/ContentEvents.cs +++ b/src/SMAPI/Events/ContentEvents.cs @@ -1,9 +1,11 @@ using System; +using StardewModdingAPI.Framework; using StardewModdingAPI.Framework.Events; namespace StardewModdingAPI.Events { /// Events raised when the game loads content. + [Obsolete("Use " + nameof(Mod.Helper) + "." + nameof(IModHelper.Events) + " instead. See https://smapi.io/3.0 for more info.")] public static class ContentEvents { /********* @@ -12,6 +14,9 @@ namespace StardewModdingAPI.Events /// The core event manager. private static EventManager EventManager; + /// Manages deprecation warnings. + private static DeprecationManager DeprecationManager; + /********* ** Events @@ -19,7 +24,11 @@ namespace StardewModdingAPI.Events /// Raised after the content language changes. public static event EventHandler> AfterLocaleChanged { - add => ContentEvents.EventManager.Legacy_LocaleChanged.Add(value); + add + { + ContentEvents.DeprecationManager.WarnForOldEvents(); + ContentEvents.EventManager.Legacy_LocaleChanged.Add(value); + } remove => ContentEvents.EventManager.Legacy_LocaleChanged.Remove(value); } @@ -29,9 +38,11 @@ namespace StardewModdingAPI.Events *********/ /// Initialise the events. /// The core event manager. - internal static void Init(EventManager eventManager) + /// Manages deprecation warnings. + internal static void Init(EventManager eventManager, DeprecationManager deprecationManager) { ContentEvents.EventManager = eventManager; + ContentEvents.DeprecationManager = deprecationManager; } } } diff --git a/src/SMAPI/Events/ControlEvents.cs b/src/SMAPI/Events/ControlEvents.cs index 56a4fa3f..c50d5bea 100644 --- a/src/SMAPI/Events/ControlEvents.cs +++ b/src/SMAPI/Events/ControlEvents.cs @@ -1,10 +1,12 @@ using System; using Microsoft.Xna.Framework.Input; +using StardewModdingAPI.Framework; using StardewModdingAPI.Framework.Events; namespace StardewModdingAPI.Events { /// Events raised when the player uses a controller, keyboard, or mouse. + [Obsolete("Use " + nameof(Mod.Helper) + "." + nameof(IModHelper.Events) + " instead. See https://smapi.io/3.0 for more info.")] public static class ControlEvents { /********* @@ -13,6 +15,9 @@ namespace StardewModdingAPI.Events /// The core event manager. private static EventManager EventManager; + /// Manages deprecation warnings. + private static DeprecationManager DeprecationManager; + /********* ** Events @@ -20,56 +25,88 @@ namespace StardewModdingAPI.Events /// Raised when the changes. That happens when the player presses or releases a key. public static event EventHandler KeyboardChanged { - add => ControlEvents.EventManager.Legacy_KeyboardChanged.Add(value); + add + { + ControlEvents.DeprecationManager.WarnForOldEvents(); + ControlEvents.EventManager.Legacy_KeyboardChanged.Add(value); + } remove => ControlEvents.EventManager.Legacy_KeyboardChanged.Remove(value); } /// Raised after the player presses a keyboard key. public static event EventHandler KeyPressed { - add => ControlEvents.EventManager.Legacy_KeyPressed.Add(value); + add + { + ControlEvents.DeprecationManager.WarnForOldEvents(); + ControlEvents.EventManager.Legacy_KeyPressed.Add(value); + } remove => ControlEvents.EventManager.Legacy_KeyPressed.Remove(value); } /// Raised after the player releases a keyboard key. public static event EventHandler KeyReleased { - add => ControlEvents.EventManager.Legacy_KeyReleased.Add(value); + add + { + ControlEvents.DeprecationManager.WarnForOldEvents(); + ControlEvents.EventManager.Legacy_KeyReleased.Add(value); + } remove => ControlEvents.EventManager.Legacy_KeyReleased.Remove(value); } /// Raised when the changes. That happens when the player moves the mouse, scrolls the mouse wheel, or presses/releases a button. public static event EventHandler MouseChanged { - add => ControlEvents.EventManager.Legacy_MouseChanged.Add(value); + add + { + ControlEvents.DeprecationManager.WarnForOldEvents(); + ControlEvents.EventManager.Legacy_MouseChanged.Add(value); + } remove => ControlEvents.EventManager.Legacy_MouseChanged.Remove(value); } /// The player pressed a controller button. This event isn't raised for trigger buttons. public static event EventHandler ControllerButtonPressed { - add => ControlEvents.EventManager.Legacy_ControllerButtonPressed.Add(value); + add + { + ControlEvents.DeprecationManager.WarnForOldEvents(); + ControlEvents.EventManager.Legacy_ControllerButtonPressed.Add(value); + } remove => ControlEvents.EventManager.Legacy_ControllerButtonPressed.Remove(value); } /// The player released a controller button. This event isn't raised for trigger buttons. public static event EventHandler ControllerButtonReleased { - add => ControlEvents.EventManager.Legacy_ControllerButtonReleased.Add(value); + add + { + ControlEvents.DeprecationManager.WarnForOldEvents(); + ControlEvents.EventManager.Legacy_ControllerButtonReleased.Add(value); + } remove => ControlEvents.EventManager.Legacy_ControllerButtonReleased.Remove(value); } /// The player pressed a controller trigger button. public static event EventHandler ControllerTriggerPressed { - add => ControlEvents.EventManager.Legacy_ControllerTriggerPressed.Add(value); + add + { + ControlEvents.DeprecationManager.WarnForOldEvents(); + ControlEvents.EventManager.Legacy_ControllerTriggerPressed.Add(value); + } remove => ControlEvents.EventManager.Legacy_ControllerTriggerPressed.Remove(value); } /// The player released a controller trigger button. public static event EventHandler ControllerTriggerReleased { - add => ControlEvents.EventManager.Legacy_ControllerTriggerReleased.Add(value); + add + { + ControlEvents.DeprecationManager.WarnForOldEvents(); + ControlEvents.EventManager.Legacy_ControllerTriggerReleased.Add(value); + } remove => ControlEvents.EventManager.Legacy_ControllerTriggerReleased.Remove(value); } @@ -79,9 +116,11 @@ namespace StardewModdingAPI.Events *********/ /// Initialise the events. /// The core event manager. - internal static void Init(EventManager eventManager) + /// Manages deprecation warnings. + internal static void Init(EventManager eventManager, DeprecationManager deprecationManager) { ControlEvents.EventManager = eventManager; + ControlEvents.DeprecationManager = deprecationManager; } } } diff --git a/src/SMAPI/Events/GameEvents.cs b/src/SMAPI/Events/GameEvents.cs index 952b3570..13f6bfb0 100644 --- a/src/SMAPI/Events/GameEvents.cs +++ b/src/SMAPI/Events/GameEvents.cs @@ -1,9 +1,11 @@ using System; +using StardewModdingAPI.Framework; using StardewModdingAPI.Framework.Events; namespace StardewModdingAPI.Events { /// Events raised when the game changes state. + [Obsolete("Use " + nameof(Mod.Helper) + "." + nameof(IModHelper.Events) + " instead. See https://smapi.io/3.0 for more info.")] public static class GameEvents { /********* @@ -12,6 +14,9 @@ namespace StardewModdingAPI.Events /// The core event manager. private static EventManager EventManager; + /// Manages deprecation warnings. + private static DeprecationManager DeprecationManager; + /********* ** Events @@ -19,56 +24,88 @@ namespace StardewModdingAPI.Events /// Raised when the game updates its state (≈60 times per second). public static event EventHandler UpdateTick { - add => GameEvents.EventManager.Legacy_UpdateTick.Add(value); + add + { + GameEvents.DeprecationManager.WarnForOldEvents(); + GameEvents.EventManager.Legacy_UpdateTick.Add(value); + } remove => GameEvents.EventManager.Legacy_UpdateTick.Remove(value); } /// Raised every other tick (≈30 times per second). public static event EventHandler SecondUpdateTick { - add => GameEvents.EventManager.Legacy_SecondUpdateTick.Add(value); + add + { + GameEvents.DeprecationManager.WarnForOldEvents(); + GameEvents.EventManager.Legacy_SecondUpdateTick.Add(value); + } remove => GameEvents.EventManager.Legacy_SecondUpdateTick.Remove(value); } /// Raised every fourth tick (≈15 times per second). public static event EventHandler FourthUpdateTick { - add => GameEvents.EventManager.Legacy_FourthUpdateTick.Add(value); + add + { + GameEvents.DeprecationManager.WarnForOldEvents(); + GameEvents.EventManager.Legacy_FourthUpdateTick.Add(value); + } remove => GameEvents.EventManager.Legacy_FourthUpdateTick.Remove(value); } /// Raised every eighth tick (≈8 times per second). public static event EventHandler EighthUpdateTick { - add => GameEvents.EventManager.Legacy_EighthUpdateTick.Add(value); + add + { + GameEvents.DeprecationManager.WarnForOldEvents(); + GameEvents.EventManager.Legacy_EighthUpdateTick.Add(value); + } remove => GameEvents.EventManager.Legacy_EighthUpdateTick.Remove(value); } /// Raised every 15th tick (≈4 times per second). public static event EventHandler QuarterSecondTick { - add => GameEvents.EventManager.Legacy_QuarterSecondTick.Add(value); + add + { + GameEvents.DeprecationManager.WarnForOldEvents(); + GameEvents.EventManager.Legacy_QuarterSecondTick.Add(value); + } remove => GameEvents.EventManager.Legacy_QuarterSecondTick.Remove(value); } /// Raised every 30th tick (≈twice per second). public static event EventHandler HalfSecondTick { - add => GameEvents.EventManager.Legacy_HalfSecondTick.Add(value); + add + { + GameEvents.DeprecationManager.WarnForOldEvents(); + GameEvents.EventManager.Legacy_HalfSecondTick.Add(value); + } remove => GameEvents.EventManager.Legacy_HalfSecondTick.Remove(value); } /// Raised every 60th tick (≈once per second). public static event EventHandler OneSecondTick { - add => GameEvents.EventManager.Legacy_OneSecondTick.Add(value); + add + { + GameEvents.DeprecationManager.WarnForOldEvents(); + GameEvents.EventManager.Legacy_OneSecondTick.Add(value); + } remove => GameEvents.EventManager.Legacy_OneSecondTick.Remove(value); } /// Raised once after the game initialises and all methods have been called. public static event EventHandler FirstUpdateTick { - add => GameEvents.EventManager.Legacy_FirstUpdateTick.Add(value); + add + { + GameEvents.DeprecationManager.WarnForOldEvents(); + GameEvents.EventManager.Legacy_FirstUpdateTick.Add(value); + } remove => GameEvents.EventManager.Legacy_FirstUpdateTick.Remove(value); } @@ -78,9 +115,11 @@ namespace StardewModdingAPI.Events *********/ /// Initialise the events. /// The core event manager. - internal static void Init(EventManager eventManager) + /// Manages deprecation warnings. + internal static void Init(EventManager eventManager, DeprecationManager deprecationManager) { GameEvents.EventManager = eventManager; + GameEvents.DeprecationManager = deprecationManager; } } } diff --git a/src/SMAPI/Events/GraphicsEvents.cs b/src/SMAPI/Events/GraphicsEvents.cs index 53f04822..de79e42e 100644 --- a/src/SMAPI/Events/GraphicsEvents.cs +++ b/src/SMAPI/Events/GraphicsEvents.cs @@ -1,9 +1,11 @@ using System; +using StardewModdingAPI.Framework; using StardewModdingAPI.Framework.Events; namespace StardewModdingAPI.Events { /// Events raised during the game's draw loop, when the game is rendering content to the window. + [Obsolete("Use " + nameof(Mod.Helper) + "." + nameof(IModHelper.Events) + " instead. See https://smapi.io/3.0 for more info.")] public static class GraphicsEvents { /********* @@ -12,6 +14,9 @@ namespace StardewModdingAPI.Events /// The core event manager. private static EventManager EventManager; + /// Manages deprecation warnings. + private static DeprecationManager DeprecationManager; + /********* ** Events @@ -19,7 +24,11 @@ namespace StardewModdingAPI.Events /// Raised after the game window is resized. public static event EventHandler Resize { - add => GraphicsEvents.EventManager.Legacy_Resize.Add(value); + add + { + GraphicsEvents.DeprecationManager.WarnForOldEvents(); + GraphicsEvents.EventManager.Legacy_Resize.Add(value); + } remove => GraphicsEvents.EventManager.Legacy_Resize.Remove(value); } @@ -29,14 +38,22 @@ namespace StardewModdingAPI.Events /// Raised before drawing the world to the screen. public static event EventHandler OnPreRenderEvent { - add => GraphicsEvents.EventManager.Legacy_OnPreRenderEvent.Add(value); + add + { + GraphicsEvents.DeprecationManager.WarnForOldEvents(); + GraphicsEvents.EventManager.Legacy_OnPreRenderEvent.Add(value); + } remove => GraphicsEvents.EventManager.Legacy_OnPreRenderEvent.Remove(value); } /// Raised after drawing the world to the screen. public static event EventHandler OnPostRenderEvent { - add => GraphicsEvents.EventManager.Legacy_OnPostRenderEvent.Add(value); + add + { + GraphicsEvents.DeprecationManager.WarnForOldEvents(); + GraphicsEvents.EventManager.Legacy_OnPostRenderEvent.Add(value); + } remove => GraphicsEvents.EventManager.Legacy_OnPostRenderEvent.Remove(value); } @@ -46,14 +63,22 @@ namespace StardewModdingAPI.Events /// Raised before drawing the HUD (item toolbar, clock, etc) to the screen. The HUD is available at this point, but not necessarily visible. (For example, the event is raised even if a menu is open.) public static event EventHandler OnPreRenderHudEvent { - add => GraphicsEvents.EventManager.Legacy_OnPreRenderHudEvent.Add(value); + add + { + GraphicsEvents.DeprecationManager.WarnForOldEvents(); + GraphicsEvents.EventManager.Legacy_OnPreRenderHudEvent.Add(value); + } remove => GraphicsEvents.EventManager.Legacy_OnPreRenderHudEvent.Remove(value); } /// Raised after drawing the HUD (item toolbar, clock, etc) to the screen. The HUD is available at this point, but not necessarily visible. (For example, the event is raised even if a menu is open.) public static event EventHandler OnPostRenderHudEvent { - add => GraphicsEvents.EventManager.Legacy_OnPostRenderHudEvent.Add(value); + add + { + GraphicsEvents.DeprecationManager.WarnForOldEvents(); + GraphicsEvents.EventManager.Legacy_OnPostRenderHudEvent.Add(value); + } remove => GraphicsEvents.EventManager.Legacy_OnPostRenderHudEvent.Remove(value); } @@ -63,14 +88,22 @@ namespace StardewModdingAPI.Events /// Raised before drawing a menu to the screen during a draw loop. This includes the game's internal menus like the title screen. public static event EventHandler OnPreRenderGuiEvent { - add => GraphicsEvents.EventManager.Legacy_OnPreRenderGuiEvent.Add(value); + add + { + GraphicsEvents.DeprecationManager.WarnForOldEvents(); + GraphicsEvents.EventManager.Legacy_OnPreRenderGuiEvent.Add(value); + } remove => GraphicsEvents.EventManager.Legacy_OnPreRenderGuiEvent.Remove(value); } /// Raised after drawing a menu to the screen during a draw loop. This includes the game's internal menus like the title screen. public static event EventHandler OnPostRenderGuiEvent { - add => GraphicsEvents.EventManager.Legacy_OnPostRenderGuiEvent.Add(value); + add + { + GraphicsEvents.DeprecationManager.WarnForOldEvents(); + GraphicsEvents.EventManager.Legacy_OnPostRenderGuiEvent.Add(value); + } remove => GraphicsEvents.EventManager.Legacy_OnPostRenderGuiEvent.Remove(value); } @@ -80,9 +113,11 @@ namespace StardewModdingAPI.Events *********/ /// Initialise the events. /// The core event manager. - internal static void Init(EventManager eventManager) + /// Manages deprecation warnings. + internal static void Init(EventManager eventManager, DeprecationManager deprecationManager) { GraphicsEvents.EventManager = eventManager; + GraphicsEvents.DeprecationManager = deprecationManager; } } } diff --git a/src/SMAPI/Events/InputEvents.cs b/src/SMAPI/Events/InputEvents.cs index 4c1781a5..788dde62 100644 --- a/src/SMAPI/Events/InputEvents.cs +++ b/src/SMAPI/Events/InputEvents.cs @@ -1,9 +1,11 @@ using System; +using StardewModdingAPI.Framework; using StardewModdingAPI.Framework.Events; namespace StardewModdingAPI.Events { /// Events raised when the player uses a controller, keyboard, or mouse button. + [Obsolete("Use " + nameof(Mod.Helper) + "." + nameof(IModHelper.Events) + " instead. See https://smapi.io/3.0 for more info.")] public static class InputEvents { /********* @@ -12,6 +14,9 @@ namespace StardewModdingAPI.Events /// The core event manager. private static EventManager EventManager; + /// Manages deprecation warnings. + private static DeprecationManager DeprecationManager; + /********* ** Events @@ -19,14 +24,22 @@ namespace StardewModdingAPI.Events /// Raised when the player presses a button on the keyboard, controller, or mouse. public static event EventHandler ButtonPressed { - add => InputEvents.EventManager.Legacy_ButtonPressed.Add(value); + add + { + InputEvents.DeprecationManager.WarnForOldEvents(); + InputEvents.EventManager.Legacy_ButtonPressed.Add(value); + } remove => InputEvents.EventManager.Legacy_ButtonPressed.Remove(value); } /// Raised when the player releases a keyboard key on the keyboard, controller, or mouse. public static event EventHandler ButtonReleased { - add => InputEvents.EventManager.Legacy_ButtonReleased.Add(value); + add + { + InputEvents.DeprecationManager.WarnForOldEvents(); + InputEvents.EventManager.Legacy_ButtonReleased.Add(value); + } remove => InputEvents.EventManager.Legacy_ButtonReleased.Remove(value); } @@ -36,9 +49,11 @@ namespace StardewModdingAPI.Events *********/ /// Initialise the events. /// The core event manager. - internal static void Init(EventManager eventManager) + /// Manages deprecation warnings. + internal static void Init(EventManager eventManager, DeprecationManager deprecationManager) { InputEvents.EventManager = eventManager; + InputEvents.DeprecationManager = deprecationManager; } } } diff --git a/src/SMAPI/Events/LocationEvents.cs b/src/SMAPI/Events/LocationEvents.cs index 81f547ae..4aad5387 100644 --- a/src/SMAPI/Events/LocationEvents.cs +++ b/src/SMAPI/Events/LocationEvents.cs @@ -1,9 +1,11 @@ using System; +using StardewModdingAPI.Framework; using StardewModdingAPI.Framework.Events; namespace StardewModdingAPI.Events { /// Events raised when the player transitions between game locations, a location is added or removed, or the objects in the current location change. + [Obsolete("Use " + nameof(Mod.Helper) + "." + nameof(IModHelper.Events) + " instead. See https://smapi.io/3.0 for more info.")] public static class LocationEvents { /********* @@ -12,6 +14,9 @@ namespace StardewModdingAPI.Events /// The core event manager. private static EventManager EventManager; + /// Manages deprecation warnings. + private static DeprecationManager DeprecationManager; + /********* ** Events @@ -19,21 +24,33 @@ namespace StardewModdingAPI.Events /// Raised after a game location is added or removed. public static event EventHandler LocationsChanged { - add => LocationEvents.EventManager.Legacy_LocationsChanged.Add(value); + add + { + LocationEvents.DeprecationManager.WarnForOldEvents(); + LocationEvents.EventManager.Legacy_LocationsChanged.Add(value); + } remove => LocationEvents.EventManager.Legacy_LocationsChanged.Remove(value); } /// Raised after buildings are added or removed in a location. public static event EventHandler BuildingsChanged { - add => LocationEvents.EventManager.Legacy_BuildingsChanged.Add(value); + add + { + LocationEvents.DeprecationManager.WarnForOldEvents(); + LocationEvents.EventManager.Legacy_BuildingsChanged.Add(value); + } remove => LocationEvents.EventManager.Legacy_BuildingsChanged.Remove(va