summaryrefslogtreecommitdiff
path: root/src/SMAPI/Framework
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <github@jplamondonw.com>2018-04-11 21:15:16 -0400
committerJesse Plamondon-Willard <github@jplamondonw.com>2018-04-11 21:15:16 -0400
commit9c1617c9ee51a0f6b93242fe8fc789336957460c (patch)
treefc1cf736ed0c7c6e8731abf87bfb8d1a17f8746d /src/SMAPI/Framework
parentb9bc1a6d17cafa0a97b46ffecda432cfc2f23b51 (diff)
downloadSMAPI-9c1617c9ee51a0f6b93242fe8fc789336957460c.tar.gz
SMAPI-9c1617c9ee51a0f6b93242fe8fc789336957460c.tar.bz2
SMAPI-9c1617c9ee51a0f6b93242fe8fc789336957460c.zip
drop support for Stardew Valley 1.2 (#453)
Diffstat (limited to 'src/SMAPI/Framework')
-rw-r--r--src/SMAPI/Framework/ContentCore.cs83
-rw-r--r--src/SMAPI/Framework/ContentManagerShim.cs8
-rw-r--r--src/SMAPI/Framework/GameVersion.cs8
-rw-r--r--src/SMAPI/Framework/ModHelpers/ReflectionHelper.cs116
-rw-r--r--src/SMAPI/Framework/Reflection/ReflectedField.cs3
-rw-r--r--src/SMAPI/Framework/Reflection/ReflectedMethod.cs3
-rw-r--r--src/SMAPI/Framework/Reflection/ReflectedProperty.cs3
-rw-r--r--src/SMAPI/Framework/SGame.cs711
8 files changed, 12 insertions, 923 deletions
diff --git a/src/SMAPI/Framework/ContentCore.cs b/src/SMAPI/Framework/ContentCore.cs
index 43357553..9da18481 100644
--- a/src/SMAPI/Framework/ContentCore.cs
+++ b/src/SMAPI/Framework/ContentCore.cs
@@ -44,10 +44,8 @@ namespace StardewModdingAPI.Framework
/// <summary>The underlying asset cache.</summary>
private readonly ContentCache Cache;
-#if STARDEW_VALLEY_1_3
/// <summary>A lookup which indicates whether the asset is localisable (i.e. the filename contains the locale), if previously loaded.</summary>
private readonly IDictionary<string, bool> IsLocalisableLookup;
-#endif
/// <summary>The locale codes used in asset keys indexed by enum value.</summary>
private readonly IDictionary<LocalizedContentManager.LanguageCode, string> Locales;
@@ -111,9 +109,7 @@ namespace StardewModdingAPI.Framework
this.CoreAssets = new CoreAssetPropagator(this.NormaliseAssetName, reflection);
this.Locales = this.GetKeyLocales(reflection);
this.LanguageCodes = this.Locales.ToDictionary(p => p.Value, p => p.Key, StringComparer.InvariantCultureIgnoreCase);
-#if STARDEW_VALLEY_1_3
this.IsLocalisableLookup = reflection.GetField<IDictionary<string, bool>>(this.Content, "_localizedAsset").GetValue();
-#endif
}
/// <summary>Get a new content manager which defers loading to the content core.</summary>
@@ -209,11 +205,7 @@ namespace StardewModdingAPI.Framework
/// <param name="language">The language code for which to load content.</param>
/// <exception cref="ArgumentException">The <paramref name="assetName"/> is empty or contains invalid characters.</exception>
/// <exception cref="ContentLoadException">The content asset couldn't be loaded (e.g. because it doesn't exist).</exception>
- public T Load<T>(string assetName, ContentManager instance
-#if STARDEW_VALLEY_1_3
- , LocalizedContentManager.LanguageCode language
-#endif
- )
+ public T Load<T>(string assetName, ContentManager instance, LocalizedContentManager.LanguageCode language)
{
// normalise asset key
this.AssertValidAssetKeyFormat(assetName);
@@ -221,11 +213,7 @@ namespace StardewModdingAPI.Framework
// load game content
if (!assetName.StartsWith(this.ModContentPrefix))
-#if STARDEW_VALLEY_1_3
return this.LoadImpl<T>(assetName, instance, language);
-#else
- return this.LoadImpl<T>(assetName, instance);
-#endif
// load mod content
SContentLoadException GetContentError(string reasonPhrase) => new SContentLoadException($"Failed loading content asset '{assetName}': {reasonPhrase}");
@@ -235,11 +223,7 @@ namespace StardewModdingAPI.Framework
{
// try cache
if (this.IsLoaded(assetName))
-#if STARDEW_VALLEY_1_3
return this.LoadImpl<T>(assetName, instance, language);
-#else
- return this.LoadImpl<T>(assetName, instance);
-#endif
// get file
FileInfo file = this.GetModFile(assetName);
@@ -251,11 +235,7 @@ namespace StardewModdingAPI.Framework
{
// XNB file
case ".xnb":
-#if STARDEW_VALLEY_1_3
return this.LoadImpl<T>(assetName, instance, language);
-#else
- return this.LoadImpl<T>(assetName, instance);
-#endif
// unpacked map
case ".tbin":
@@ -436,10 +416,6 @@ namespace StardewModdingAPI.Framework
/// <param name="reflection">Simplifies access to private game code.</param>
private IDictionary<LocalizedContentManager.LanguageCode, string> GetKeyLocales(Reflector reflection)
{
-#if !STARDEW_VALLEY_1_3
- IReflectedField<LocalizedContentManager.LanguageCode> codeField = reflection.GetField<LocalizedContentManager.LanguageCode>(typeof(LocalizedContentManager), "_currentLangCode");
- LocalizedContentManager.LanguageCode previousCode = codeField.GetValue();
-#endif
string previousOverride = this.Content.LanguageCodeOverride;
try
@@ -448,21 +424,11 @@ namespace StardewModdingAPI.Framework
this.Content.LanguageCodeOverride = null;
// create locale => code map
- IReflectedMethod languageCodeString = reflection
-#if STARDEW_VALLEY_1_3
- .GetMethod(this.Content, "languageCodeString");
-#else
- .GetMethod(this.Content, "languageCode");
-#endif
+ IReflectedMethod languageCodeString = reflection.GetMethod(this.Content, "languageCodeString");
IDictionary<LocalizedContentManager.LanguageCode, string> map = new Dictionary<LocalizedContentManager.LanguageCode, string>();
foreach (LocalizedContentManager.LanguageCode code in Enum.GetValues(typeof(LocalizedContentManager.LanguageCode)))
{
-#if STARDEW_VALLEY_1_3
map[code] = languageCodeString.Invoke<string>(code);
-#else
- codeField.SetValue(code);
- map[code] = languageCodeString.Invoke<string>();
-#endif
}
return map;
@@ -471,10 +437,6 @@ namespace StardewModdingAPI.Framework
{
// restore previous settings
this.Content.LanguageCodeOverride = previousOverride;
-#if !STARDEW_VALLEY_1_3
- codeField.SetValue(previousCode);
-#endif
-
}
}
@@ -520,18 +482,12 @@ namespace StardewModdingAPI.Framework
/// <param name="normalisedAssetName">The normalised asset name.</param>
private bool IsNormalisedKeyLoaded(string normalisedAssetName)
{
-#if STARDEW_VALLEY_1_3
if (!this.IsLocalisableLookup.TryGetValue(normalisedAssetName, out bool localisable))
return false;
return localisable
? this.Cache.ContainsKey($"{normalisedAssetName}.{this.Locales[this.Content.GetCurrentLanguage()]}")
: this.Cache.ContainsKey(normalisedAssetName);
-#else
- return
- this.Cache.ContainsKey(normalisedAssetName)
- || this.Cache.ContainsKey($"{normalisedAssetName}.{this.Locales[this.Content.GetCurrentLanguage()]}"); // translated asset
-#endif
}
/// <summary>Track that a content manager loaded an asset.</summary>
@@ -552,11 +508,7 @@ namespace StardewModdingAPI.Framework
/// <param name="assetName">The asset path relative to the loader root directory, not including the <c>.xnb</c> extension.</param>
/// <param name="instance">The content manager instance for which to load the asset.</param>
/// <param name="language">The language code for which to load content.</param>
- private T LoadImpl<T>(string assetName, ContentManager instance
-#if STARDEW_VALLEY_1_3
- , LocalizedContentManager.LanguageCode language
-#endif
- )
+ private T LoadImpl<T>(string assetName, ContentManager instance, LocalizedContentManager.LanguageCode language)
{
return this.WithWriteLock(() =>
{
@@ -564,13 +516,7 @@ namespace StardewModdingAPI.Framework
if (this.IsNormalisedKeyLoaded(assetName))
{
this.TrackAssetLoader(assetName, instance);
- return this.Content
-
-#if STARDEW_VALLEY_1_3
- .Load<T>(assetName, language);
-#else
- .Load<T>(assetName);
-#endif
+ return this.Content.Load<T>(assetName, language);
}
// load asset
@@ -579,30 +525,17 @@ namespace StardewModdingAPI.Framework
{
this.Monitor.Log($"Broke loop while loading asset '{assetName}'.", LogLevel.Warn);
this.Monitor.Log($"Bypassing mod loaders for this asset. Stack trace:\n{Environment.StackTrace}", LogLevel.Trace);
- data = this.Content
-#if STARDEW_VALLEY_1_3
- .Load<T>(assetName, language);
-#else
- .Load<T>(assetName);
-#endif
+ data = this.Content.Load<T>(assetName, language);
}
else
{
data = this.AssetsBeingLoaded.Track(assetName, () =>
{
- string locale =
-#if STARDEW_VALLEY_1_3
- this.GetLocale(language);
-#else
- this.GetLocale();
-#endif
+ string locale = this.GetLocale(language);
IAssetInfo info = new AssetInfo(locale, assetName, typeof(T), this.NormaliseAssetName);
- IAssetData asset = this.ApplyLoader<T>(info)
-#if STARDEW_VALLEY_1_3
+ IAssetData asset =
+ this.ApplyLoader<T>(info)
?? new AssetDataForObject(info, this.Content.Load<T>(assetName, language), this.NormaliseAssetName);
-#else
- ?? new AssetDataForObject(info, this.Content.Load<T>(assetName), this.NormaliseAssetName);
-#endif
asset = this.ApplyEditors<T>(info, asset);
return (T)asset.Data;
});
diff --git a/src/SMAPI/Framework/ContentManagerShim.cs b/src/SMAPI/Framework/ContentManagerShim.cs
index 8f88fc2d..2791eb78 100644
--- a/src/SMAPI/Framework/ContentManagerShim.cs
+++ b/src/SMAPI/Framework/ContentManagerShim.cs
@@ -43,14 +43,9 @@ namespace StardewModdingAPI.Framework
/// <param name="assetName">The asset path relative to the loader root directory, not including the <c>.xnb</c> extension.</param>
public override T Load<T>(string assetName)
{
-#if STARDEW_VALLEY_1_3
return this.Load<T>(assetName, LocalizedContentManager.CurrentLanguageCode);
-#else
- return this.ContentCore.Load<T>(assetName, this);
-#endif
}
-#if STARDEW_VALLEY_1_3
/// <summary>Load an asset that has been processed by the content pipeline.</summary>
/// <typeparam name="T">The type of asset to load.</typeparam>
/// <param name="assetName">The asset path relative to the loader root directory, not including the <c>.xnb</c> extension.</param>
@@ -67,7 +62,6 @@ namespace StardewModdingAPI.Framework
{
return this.Load<T>(assetName, LanguageCode.en);
}
-#endif
/// <summary>Inject an asset into the cache.</summary>
/// <typeparam name="T">The type of asset to inject.</typeparam>
@@ -78,13 +72,11 @@ namespace StardewModdingAPI.Framework
this.ContentCore.Inject<T>(assetName, value, this);
}
-#if STARDEW_VALLEY_1_3
/// <summary>Create a new content manager for temporary use.</summary>
public override LocalizedContentManager CreateTemporary()
{
return this.ContentCore.CreateContentManager("(temporary)");
}
-#endif
/*********
diff --git a/src/SMAPI/Framework/GameVersion.cs b/src/SMAPI/Framework/GameVersion.cs
index e5022212..85b2eef6 100644
--- a/src/SMAPI/Framework/GameVersion.cs
+++ b/src/SMAPI/Framework/GameVersion.cs
@@ -49,10 +49,8 @@ namespace StardewModdingAPI.Framework
/// <param name="gameVersion">The game version string.</param>
private static string GetSemanticVersionString(string gameVersion)
{
-#if STARDEW_VALLEY_1_3
- if(gameVersion.StartsWith("1.3.0."))
+ if (gameVersion.StartsWith("1.3.0."))
return new SemanticVersion(1, 3, 0, "alpha." + gameVersion.Substring("1.3.0.".Length)).ToString();
-#endif
return GameVersion.VersionMap.TryGetValue(gameVersion, out string semanticVersion)
? semanticVersion
@@ -63,10 +61,8 @@ namespace StardewModdingAPI.Framework
/// <param name="semanticVersion">The semantic version string.</param>
private static string GetGameVersionString(string semanticVersion)
{
- #if STARDEW_VALLEY_1_3
- if(semanticVersion.StartsWith("1.3-alpha."))
+ if (semanticVersion.StartsWith("1.3-alpha."))
return "1.3.0." + semanticVersion.Substring("1.3-alpha.".Length);
- #endif
foreach (var mapping in GameVersion.VersionMap)
{
diff --git a/src/SMAPI/Framework/ModHelpers/ReflectionHelper.cs b/src/SMAPI/Framework/ModHelpers/ReflectionHelper.cs
index e5bf47f6..648d6742 100644
--- a/src/SMAPI/Framework/ModHelpers/ReflectionHelper.cs
+++ b/src/SMAPI/Framework/ModHelpers/ReflectionHelper.cs
@@ -107,122 +107,6 @@ namespace StardewModdingAPI.Framework.ModHelpers
);
}
-#if !STARDEW_VALLEY_1_3
- /****
- ** Obsolete
- ****/
- /// <summary>Get a private instance field.</summary>
- /// <typeparam name="TValue">The field type.</typeparam>
- /// <param name="obj">The object which has the field.</param>
- /// <param name="name">The field name.</param>
- /// <param name="required">Whether to throw an exception if the private field is not found.</param>
- /// <returns>Returns the field wrapper, or <c>null</c> if the field doesn't exist and <paramref name="required"/> is <c>false</c>.</returns>
- [Obsolete]
- public IPrivateField<TValue> GetPrivateField<TValue>(object obj, string name, bool required = true)
- {
- this.DeprecationManager.Warn($"{nameof(IReflectionHelper)}.GetPrivate*", "2.3", DeprecationLevel.Notice);
- return (IPrivateField<TValue>)this.GetField<TValue>(obj, name, required);
- }
-
- /// <summary>Get a private static field.</summary>
- /// <typeparam name="TValue">The field type.</typeparam>
- /// <param name="type">The type which has the field.</param>
- /// <param name="name">The field name.</param>
- /// <param name="required">Whether to throw an exception if the private field is not found.</param>
- [Obsolete]
- public IPrivateField<TValue> GetPrivateField<TValue>(Type type, string name, bool required = true)
- {
- this.DeprecationManager.Warn($"{nameof(IReflectionHelper)}.GetPrivate*", "2.3", DeprecationLevel.Notice);
- return (IPrivateField<TValue>)this.GetField<TValue>(type, name, required);
- }
-
- /// <summary>Get a private instance property.</summary>
- /// <typeparam name="TValue">The property type.</typeparam>
- /// <param name="obj">The object which has the property.</param>
- /// <param name="name">The property name.</param>
- /// <param name="required">Whether to throw an exception if the private property is not found.</param>
- [Obsolete]
- public IPrivateProperty<TValue> GetPrivateProperty<TValue>(object obj, string name, bool required = true)
- {
- this.DeprecationManager.Warn($"{nameof(IReflectionHelper)}.GetPrivate*", "2.3", DeprecationLevel.Notice);
- return (IPrivateProperty<TValue>)this.GetProperty<TValue>(obj, name, required);
- }
-
- /// <summary>Get a private static property.</summary>
- /// <typeparam name="TValue">The property type.</typeparam>
- /// <param name="type">The type which has the property.</param>
- /// <param name="name">The property name.</param>
- /// <param name="required">Whether to throw an exception if the private property is not found.</param>
- [Obsolete]
- public IPrivateProperty<TValue> GetPrivateProperty<TValue>(Type type, string name, bool required = true)
- {
- this.DeprecationManager.Warn($"{nameof(IReflectionHelper)}.GetPrivate*", "2.3", DeprecationLevel.Notice);
- return (IPrivateProperty<TValue>)this.GetProperty<TValue>(type, name, required);
- }
-
- /// <summary>Get the value of a private instance field.</summary>
- /// <typeparam name="TValue">The field type.</typeparam>
- /// <param name="obj">The object which has the field.</param>
- /// <param name="name">The field name.</param>
- /// <param name="required">Whether to throw an exception if the private field is not found.</param>
- /// <returns>Returns the field value, or the default value for <typeparamref name="TValue"/> if the field wasn't found and <paramref name="required"/> is false.</returns>
- /// <remarks>
- /// This is a shortcut for <see cref="GetPrivateField{TValue}(object,string,bool)"/> followed by <see cref="IPrivateField{TValue}.GetValue"/>.
- /// When <paramref name="required" /> is false, this will return the default value if reflection fails. If you need to check whether the field exists, use <see cref="GetPrivateField{TValue}(object,string,bool)" /> instead.
- /// </remarks>
- [Obsolete]
- public TValue GetPrivateValue<TValue>(object obj, string name, bool required = true)
- {
- this.DeprecationManager.Warn($"{nameof(IReflectionHelper)}.GetPrivate*", "2.3", DeprecationLevel.Notice);
- IPrivateField<TValue> field = (IPrivateField<TValue>)this.GetField<TValue>(obj, name, required);
- return field != null
- ? field.GetValue()
- : default(TValue);
- }
-
- /// <summary>Get the value of a private static field.</summary>
- /// <typeparam name="TValue">The field type.</typeparam>
- /// <param name="type">The type which has the field.</param>
- /// <param name="name">The field name.</param>
- /// <param name="required">Whether to throw an exception if the private field is not found.</param>
- /// <returns>Returns the field value, or the default value for <typeparamref name="TValue"/> if the field wasn't found and <paramref name="required"/> is false.</returns>
- /// <remarks>
- /// This is a shortcut for <see cref="GetPrivateField{TValue}(Type,string,bool)"/> followed by <see cref="IPrivateField{TValue}.GetValue"/>.
- /// When <paramref name="required" /> is false, this will return the default value if reflection fails. If you need to check whether the field exists, use <see cref="GetPrivateField{TValue}(Type,string,bool)" /> instead.
- /// </remarks>
- [Obsolete]
- public TValue GetPrivateValue<TValue>(Type type, string name, bool required = true)
- {
- this.DeprecationManager.Warn($"{nameof(IReflectionHelper)}.GetPrivate*", "2.3", DeprecationLevel.Notice);
- IPrivateField<TValue> field = (IPrivateField<TValue>)this.GetField<TValue>(type, name, required);
- return field != null
- ? field.GetValue()
- : default(TValue);
- }
-
- /// <summary>Get a private instance method.</summary>
- /// <param name="obj">The object which has the method.</param>
- /// <param name="name">The field name.</param>
- /// <param name="required">Whether to throw an exception if the private field is not found.</param>
- [Obsolete]
- public IPrivateMethod GetPrivateMethod(object obj, string name, bool required = true)
- {
- this.DeprecationManager.Warn($"{nameof(IReflectionHelper)}.GetPrivate*", "2.3", DeprecationLevel.Notice);
- return (IPrivateMethod)this.GetMethod(obj, name, required);
- }
-
- /// <summary>Get a private static method.</summary>
- /// <param name="type">The type which has the method.</param>
- /// <param name="name">The field name.</param>
- /// <param name="required">Whether to throw an exception if the private field is not found.</param>
- [Obsolete]
- public IPrivateMethod GetPrivateMethod(Type type, string name, bool required = true)
- {
- this.DeprecationManager.Warn($"{nameof(IReflectionHelper)}.GetPrivate*", "2.3", DeprecationLevel.Notice);
- return (IPrivateMethod)this.GetMethod(type, name, required);
- }
-#endif
-
/*********
** Private methods
diff --git a/src/SMAPI/Framework/Reflection/ReflectedField.cs b/src/SMAPI/Framework/Reflection/ReflectedField.cs
index fb420dc5..09638b1d 100644
--- a/src/SMAPI/Framework/Reflection/ReflectedField.cs
+++ b/src/SMAPI/Framework/Reflection/ReflectedField.cs
@@ -6,9 +6,6 @@ namespace StardewModdingAPI.Framework.Reflection
/// <summary>A field obtained through reflection.</summary>
/// <typeparam name="TValue">The field value type.</typeparam>
internal class ReflectedField<TValue> : IReflectedField<TValue>
-#if !STARDEW_VALLEY_1_3
- , IPrivateField<TValue>
-#endif
{
/*********
** Properties
diff --git a/src/SMAPI/Framework/Reflection/ReflectedMethod.cs b/src/SMAPI/Framework/Reflection/ReflectedMethod.cs
index 803bc316..7d9072a0 100644
--- a/src/SMAPI/Framework/Reflection/ReflectedMethod.cs
+++ b/src/SMAPI/Framework/Reflection/ReflectedMethod.cs
@@ -5,9 +5,6 @@ namespace StardewModdingAPI.Framework.Reflection
{
/// <summary>A method obtained through reflection.</summary>
internal class ReflectedMethod : IReflectedMethod
-#if !STARDEW_VALLEY_1_3
- , IPrivateMethod
-#endif
{
/*********
** Properties
diff --git a/src/SMAPI/Framework/Reflection/ReflectedProperty.cs b/src/SMAPI/Framework/Reflection/ReflectedProperty.cs
index 4f9d4e19..d59b71ac 100644
--- a/src/SMAPI/Framework/Reflection/ReflectedProperty.cs
+++ b/src/SMAPI/Framework/Reflection/ReflectedProperty.cs
@@ -6,9 +6,6 @@ namespace StardewModdingAPI.Framework.Reflection
/// <summary>A property obtained through reflection.</summary>
/// <typeparam name="TValue">The property value type.</typeparam>
internal class ReflectedProperty<TValue> : IReflectedProperty<TValue>
-#if !STARDEW_VALLEY_1_3
- , IPrivateProperty<TValue>
-#endif
{
/*********
** Properties
diff --git a/src/SMAPI/Framework/SGame.cs b/src/SMAPI/Framework/SGame.cs
index c6e9aa92..b486f8cd 100644
--- a/src/SMAPI/Framework/SGame.cs
+++ b/src/SMAPI/Framework/SGame.cs
@@ -1,18 +1,14 @@
using System;
using System.Collections;
using System.Collections.Generic;
-using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text;
using System.Threading;
-using System.Threading.Tasks;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
-#if STARDEW_VALLEY_1_3
using Netcode;
-#endif
using StardewModdingAPI.Events;
using StardewModdingAPI.Framework.Events;
using StardewModdingAPI.Framework.Input;
@@ -24,11 +20,7 @@ using StardewValley.Locations;
using StardewValley.Menus;
using StardewValley.Tools;
using xTile.Dimensions;
-#if !STARDEW_VALLEY_1_3
-using xTile.Layers;
-#else
using SFarmer = StardewValley.Farmer;
-#endif
namespace StardewModdingAPI.Framework
{
@@ -136,11 +128,6 @@ namespace StardewModdingAPI.Framework
/// <summary>Whether this is the very first update tick since the game started.</summary>
private bool FirstUpdate;
-#if !STARDEW_VALLEY_1_3
- /// <summary>The current game instance.</summary>
- private static SGame Instance;
-#endif
-
/// <summary>A callback to invoke after the game finishes initialising.</summary>
private readonly Action OnGameInitialised;
@@ -150,29 +137,9 @@ namespace StardewModdingAPI.Framework
/// <summary>Simplifies access to private game code.</summary>
private static Reflector Reflection;
-#if !STARDEW_VALLEY_1_3
// ReSharper disable ArrangeStaticMemberQualifier, ArrangeThisQualifier, InconsistentNaming
- /// <summary>Used to access private fields and methods.</summary>
- private static List<float> _fpsList => SGame.Reflection.GetField<List<float>>(typeof(Game1), nameof(_fpsList)).GetValue();
- private static Stopwatch _fpsStopwatch => SGame.Reflection.GetField<Stopwatch>(typeof(Game1), nameof(SGame._fpsStopwatch)).GetValue();
- private static float _fps
- {
- set => SGame.Reflection.GetField<float>(typeof(Game1), nameof(_fps)).SetValue(value);
- }
- private static Task _newDayTask => SGame.Reflection.GetField<Task>(typeof(Game1), nameof(_newDayTask)).GetValue();
- private Color bgColor => SGame.Reflection.GetField<Color>(this, nameof(this.bgColor)).GetValue();
- public RenderTarget2D screenWrapper => SGame.Reflection.GetProperty<RenderTarget2D>(this, "screen").GetValue(); // deliberately renamed to avoid an infinite loop
- public BlendState lightingBlend => SGame.Reflection.GetField<BlendState>(this, nameof(this.lightingBlend)).GetValue();
- private readonly Action drawFarmBuildings = () => SGame.Reflection.GetMethod(SGame.Instance, nameof(drawFarmBuildings)).Invoke();
- private readonly Action drawHUD = () => SGame.Reflection.GetMethod(SGame.Instance, nameof(drawHUD)).Invoke();
- private readonly Action drawDialogueBox = () => SGame.Reflection.GetMethod(SGame.Instance, nameof(drawDialogueBox)).Invoke();
- private readonly Action renderScreenBuffer = () => SGame.Reflection.GetMethod(SGame.Instance, nameof(renderScreenBuffer)).Invoke();
- // ReSharper restore ArrangeStaticMemberQualifier, ArrangeThisQualifier, InconsistentNaming
-#endif
-
-#if STARDEW_VALLEY_1_3
private static StringBuilder _debugStringBuilder => SGame.Reflection.GetField<StringBuilder>(typeof(Game1), nameof(_debugStringBuilder)).GetValue();
-#endif
+ // ReSharper restore ArrangeStaticMemberQualifier, ArrangeThisQualifier, InconsistentNaming
/*********
@@ -199,9 +166,6 @@ namespace StardewModdingAPI.Framework
this.Monitor = monitor;
this.Events = eventManager;
this.FirstUpdate = true;
-#if !STARDEW_VALLEY_1_3
- SGame.Instance = this;
-#endif
SGame.Reflection = reflection;
this.OnGameInitialised = onGameInitialised;
if (this.ContentCore == null) // shouldn't happen since CreateContentManager is called first, but let's init here just in case
@@ -209,13 +173,6 @@ namespace StardewModdingAPI.Framework
// set XNA option required by Stardew Valley
Game1.graphics.GraphicsProfile = GraphicsProfile.HiDef;
-
-#if !STARDEW_VALLEY_1_3
- // replace already-created content managers
- this.Monitor?.Log("Overriding content manager...", LogLevel.Trace);
- this.Content = this.ContentCore.CreateContentManager("SGame.Content");
- reflection.GetField<LocalizedContentManager>(typeof(Game1), "_temporaryContent").SetValue(this.ContentCore.CreateContentManager("Game1._temporaryContent")); // regenerate value with new content manager
-#endif
}
/****
@@ -262,11 +219,7 @@ namespace StardewModdingAPI.Framework
// a small chance that the task will finish after we defer but before the game checks,
// which means technically events should be raised, but the effects of missing one
// update tick are neglible and not worth the complications of bypassing Game1.Update.
-#if STARDEW_VALLEY_1_3
if (Game1._newDayTask != null)
-#else
- if (SGame._newDayTask != null)
-#endif
{
base.Update(gameTime);
this.Events.Specialised_UnvalidatedUpdateTick.Raise();
@@ -553,13 +506,7 @@ namespace StardewModdingAPI.Framework
// raise current location's object list changed
if (this.GetHash(Game1.currentLocation.objects) != this.PreviousLocationObjects)
- this.Events.Location_LocationObjectsChanged.Raise(new EventArgsLocationObjectsChanged(
-#if STARDEW_VALLEY_1_3
- Game1.currentLocation.objects.FieldDict
-#else
- Game1.currentLocation.objects
-#endif
- ));
+ this.Events.Location_LocationObjectsChanged.Raise(new EventArgsLocationObjectsChanged(Game1.currentLocation.objects.FieldDict));
// raise time changed
if (Game1.timeOfDay != this.PreviousTime)
@@ -686,7 +633,6 @@ namespace StardewModdingAPI.Framework
[SuppressMessage("ReSharper", "RedundantCast", Justification = "copied from game code as-is")]
[SuppressMessage("ReSharper", "RedundantExplicitNullableCreation", Justification = "copied from game code as-is")]
[SuppressMessage("ReSharper", "RedundantTypeArgumentsOfMethod", Justification = "copied from game code as-is")]
-#if STARDEW_VALLEY_1_3
private void DrawImpl(GameTime gameTime)
{
if (Game1.debugMode)
@@ -1318,659 +1264,6 @@ namespace StardewModdingAPI.Framework
}
}
}
-#else
- private void DrawImpl(GameTime gameTime)
- {
- if (Game1.debugMode)
- {
- if (SGame._fpsStopwatch.IsRunning)
- {
- float totalSeconds = (float)SGame._fpsStopwatch.Elapsed.TotalSeconds;
- SGame._fpsList.Add(totalSeconds);
- while (SGame._fpsList.Count >= 120)
- SGame._fpsList.RemoveAt(0);
- float num = 0.0f;
- foreach (float fps in SGame._fpsList)
- num += fps;
- SGame._fps = (float)(1.0 / ((double)num / (double)SGame._fpsList.Count));
- }
- SGame._fpsStopwatch.Restart();
- }
- else
- {
- if (SGame._fpsStopwatch.IsRunning)
- SGame._fpsStopwatch.Reset();
- SGame._fps = 0.0f;
- SGame._fpsList.Clear();
- }
- if (SGame._newDayTask != null)
- {
- this.GraphicsDevice.Clear(this.bgColor);
- //base.Draw(gameTime);
- }
- else
- {
- if ((double)Game1.options.zoomLevel != 1.0)
- this.GraphicsDevice.SetRenderTarget(this.screenWrapper);
- if (this.IsSaving)
- {
- this.GraphicsDevice.Clear(this.bgColor);
- IClickableMenu activeClickableMenu = Game1.activeClickableMenu;
- if (activeClickableMenu != null)
- {
- Game1.spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, (DepthStencilState)null, (RasterizerState)null);
- try
- {
- this.Events.Graphics_OnPreRenderGuiEvent.Raise();
- activeClickableMenu.draw(Game1.spriteBatch);
- this.Events.Graphics_OnPostRenderGuiEvent.Raise();
- }
- catch (Exception ex)
- {
- this.Monitor.Log($"The {activeClickableMenu.GetType().FullName} menu crashed while drawing itself during save. SMAPI will force it to exit to avoid crashing the game.\n{ex.GetLogSummary()}", LogLevel.Error);
- activeClickableMenu.exitThisMenu();
- }
- this.RaisePostRender();
- Game1.spriteBatch.End();
- }
- //base.Draw(gameTime);
- this.renderScreenBuffer();
- }
- else
- {
- this.GraphicsDevice.Clear(this.bgColor);
- if (Game1.activeClickableMenu != null && Game1.options.showMenuBackground && Game1.activeClickableMenu.showWithoutTransparencyIfOptionIsSet())
- {
- Game1.spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, (DepthStencilState)null, (RasterizerState)null);
- try
- {
- Game1.activeClickableMenu.drawBackground(Game1.spriteBatch);
- this.Events.Graphics_OnPreRenderGuiEvent.Raise();
- Game1.activeClickableMenu.draw(Game1.spriteBatch);
- this.Events.Graphics_OnPostRenderGuiEvent.Raise();
- }
- catch (Exception ex)
- {
- this.Monitor.Log($"The {Game1.activeClickableMenu.GetType().FullName} menu crashed while drawing itself. SMAPI will force it to exit to avoid crashing the game.\n{ex.GetLogSummary()}", LogLevel.Error);
- Game1.activeClickableMenu.exitThisMenu();
- }
- this.RaisePostRender();
- Game1.spriteBatch.End();
- if ((double)Game1.options.zoomLevel != 1.0)
- {
- this.GraphicsDevice.SetRenderTarget((RenderTarget2D)null);
- this.GraphicsDevice.Clear(this.bgColor);
- Game1.spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.LinearClamp, DepthStencilState.Default, RasterizerState.CullNone);
- Game1.spriteBatch.Draw((Texture2D)this.screenWrapper, Vector2.Zero, new Microsoft.Xna.Framework.Rectangle?(this.screenWrapper.Bounds), Color.White, 0.0f, Vector2.Zero, Game1.options.zoomLevel, SpriteEffects.None, 1f);
- Game1.spriteBatch.End();
- }
- if (Game1.overlayMenu != null)
- {
- Game1.spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, (DepthStencilState)null, (RasterizerState)null);
- Game1.overlayMenu.draw(Game1.spriteBatch);
- Game1.spriteBatch.End();
- }
- }
- else if ((int)Game1.gameMode == 11)
- {
- Game1.spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.PointClamp, (DepthStencilState)null, (RasterizerState)null);
- Game1.spriteBatch.DrawString(Game1.dialogueFont, Game1.content.LoadString("Strings\\StringsFromCSFiles:Game1.cs.3685"), new Vector2(16f, 16f), Color.HotPink);
- Game1.spriteBatch.DrawString(Game1.dialogueFont, Game1.content.LoadString("Strings\\StringsFromCSFiles:Game1.cs.3686"), new Vector2(16f, 32f), new Color(0, (int)byte.MaxValue, 0));
- Game1.spriteBatch.DrawString(Game1.dialogueFont, Game1.parseText(Game1.errorMessage, Game1.dialogueFont, Game1.graphics.GraphicsDevice.Viewport.Width), new Vector2(16f, 48f), Color.White);
- this.RaisePostRender();
- Game1.spriteBatch.End();
- }
- else if (Game1.currentMinigame != null)
- {
- Game1.currentMinigame.draw(Game1.spriteBatch);
- if (Game1.globalFade && !Game1.menuUp && (!Game1.nameSelectUp || Game1.messagePause))
- {
- Game1.spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, (DepthStencilState)null, (RasterizerState)null);
- Game1.spriteBatch.Draw(Game1.fadeToBlackRect, Game1.graphics.GraphicsDevice.Viewport.Bounds, Color.Black * ((int)Game1.gameMode == 0 ? 1f - Game1.fadeToBlackAlpha : Game1.fadeToBlackAlpha));
- Game1.spriteBatch.End();
- }
- this.RaisePostRender(needsNewBatch: true);
- if ((double)Game1.options.zoomLevel != 1.0)
- {
- this.GraphicsDevice.SetRenderTarget((RenderTarget2D)null);
- this.GraphicsDevice.Clear(this.bgColor);
- Game1.spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.Li