summaryrefslogtreecommitdiff
path: root/src/SMAPI/Framework/ContentManagers
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2019-08-09 01:18:05 -0400
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2019-09-14 19:08:06 -0400
commitfd77ae93d59222d70c86aebfc044f3af11063372 (patch)
tree76fac6ffc0cac70fb44f8b9ffc72471a2796a02f /src/SMAPI/Framework/ContentManagers
parent3f6865e8301535c8fbe83bc0f931a116adac0636 (diff)
downloadSMAPI-fd77ae93d59222d70c86aebfc044f3af11063372.tar.gz
SMAPI-fd77ae93d59222d70c86aebfc044f3af11063372.tar.bz2
SMAPI-fd77ae93d59222d70c86aebfc044f3af11063372.zip
fix typos and inconsistent spelling
Diffstat (limited to 'src/SMAPI/Framework/ContentManagers')
-rw-r--r--src/SMAPI/Framework/ContentManagers/BaseContentManager.cs34
-rw-r--r--src/SMAPI/Framework/ContentManagers/GameContentManager.cs58
-rw-r--r--src/SMAPI/Framework/ContentManagers/IContentManager.cs10
-rw-r--r--src/SMAPI/Framework/ContentManagers/ModContentManager.cs28
4 files changed, 65 insertions, 65 deletions
diff --git a/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs b/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs
index fc558eb9..de39dbae 100644
--- a/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs
+++ b/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs
@@ -64,7 +64,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
/// <param name="name">A name for the mod manager. Not guaranteed to be unique.</param>
/// <param name="serviceProvider">The service provider to use to locate services.</param>
/// <param name="rootDirectory">The root directory to search for content.</param>
- /// <param name="currentCulture">The current culture for which to localise content.</param>
+ /// <param name="currentCulture">The current culture for which to localize content.</param>
/// <param name="coordinator">The central coordinator which manages content managers.</param>
/// <param name="monitor">Encapsulates monitoring and logging.</param>
/// <param name="reflection">Simplifies access to private code.</param>
@@ -109,7 +109,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
/// <param name="useCache">Whether to read/write the loaded asset to the asset cache.</param>
public abstract T Load<T>(string assetName, LocalizedContentManager.LanguageCode language, bool useCache);
- /// <summary>Load the base asset without localisation.</summary>
+ /// <summary>Load the base asset without localization.</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>
[Obsolete("This method is implemented for the base game and should not be used directly. To load an asset from the underlying content manager directly, use " + nameof(BaseContentManager.RawLoad) + " instead.")]
@@ -121,19 +121,19 @@ namespace StardewModdingAPI.Framework.ContentManagers
/// <summary>Perform any cleanup needed when the locale changes.</summary>
public virtual void OnLocaleChanged() { }
- /// <summary>Normalise path separators in a file path. For asset keys, see <see cref="AssertAndNormaliseAssetName"/> instead.</summary>
- /// <param name="path">The file path to normalise.</param>
+ /// <summary>Normalize path separators in a file path. For asset keys, see <see cref="AssertAndNormalizeAssetName"/> instead.</summary>
+ /// <param name="path">The file path to normalize.</param>
[Pure]
- public string NormalisePathSeparators(string path)
+ public string NormalizePathSeparators(string path)
{
- return this.Cache.NormalisePathSeparators(path);
+ return this.Cache.NormalizePathSeparators(path);
}
- /// <summary>Assert that the given key has a valid format and return a normalised form consistent with the underlying cache.</summary>
+ /// <summary>Assert that the given key has a valid format and return a normalized form consistent with the underlying cache.</summary>
/// <param name="assetName">The asset key to check.</param>
/// <exception cref="SContentLoadException">The asset key is empty or contains invalid characters.</exception>
[SuppressMessage("ReSharper", "ParameterOnlyUsedForPreconditionCheck.Local", Justification = "Parameter is only used for assertion checks by design.")]
- public string AssertAndNormaliseAssetName(string assetName)
+ public string AssertAndNormalizeAssetName(string assetName)
{
// NOTE: the game checks for ContentLoadException to handle invalid keys, so avoid
// throwing other types like ArgumentException here.
@@ -142,7 +142,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
if (assetName.Intersect(Path.GetInvalidPathChars()).Any())
throw new SContentLoadException("The asset key or local path contains invalid characters.");
- return this.Cache.NormaliseKey(assetName);
+ return this.Cache.NormalizeKey(assetName);
}
/****
@@ -165,8 +165,8 @@ namespace StardewModdingAPI.Framework.ContentManagers
/// <param name="assetName">The asset path relative to the loader root directory, not including the <c>.xnb</c> extension.</param>
public bool IsLoaded(string assetName)
{
- assetName = this.Cache.NormaliseKey(assetName);
- return this.IsNormalisedKeyLoaded(assetName);
+ assetName = this.Cache.NormalizeKey(assetName);
+ return this.IsNormalizedKeyLoaded(assetName);
}
/// <summary>Get the cached asset keys.</summary>
@@ -248,7 +248,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
*********/
/// <summary>Load an asset file directly from the underlying content manager.</summary>
/// <typeparam name="T">The type of asset to load.</typeparam>
- /// <param name="assetName">The normalised asset key.</param>
+ /// <param name="assetName">The normalized asset key.</param>
/// <param name="useCache">Whether to read/write the loaded asset to the asset cache.</param>
protected virtual T RawLoad<T>(string assetName, bool useCache)
{
@@ -264,17 +264,17 @@ namespace StardewModdingAPI.Framework.ContentManagers
/// <param name="language">The language code for which to inject the asset.</param>
protected virtual void Inject<T>(string assetName, T value, LanguageCode language)
{
- assetName = this.AssertAndNormaliseAssetName(assetName);
+ assetName = this.AssertAndNormalizeAssetName(assetName);
this.Cache[assetName] = value;
}
/// <summary>Parse a cache key into its component parts.</summary>
/// <param name="cacheKey">The input cache key.</param>
/// <param name="assetName">The original asset name.</param>
- /// <param name="localeCode">The asset locale code (or <c>null</c> if not localised).</param>
+ /// <param name="localeCode">The asset locale code (or <c>null</c> if not localized).</param>
protected void ParseCacheKey(string cacheKey, out string assetName, out string localeCode)
{
- // handle localised key
+ // handle localized key
if (!string.IsNullOrWhiteSpace(cacheKey))
{
int lastSepIndex = cacheKey.LastIndexOf(".", StringComparison.InvariantCulture);
@@ -296,8 +296,8 @@ namespace StardewModdingAPI.Framework.ContentManagers
}
/// <summary>Get whether an asset has already been loaded.</summary>
- /// <param name="normalisedAssetName">The normalised asset name.</param>
- protected abstract bool IsNormalisedKeyLoaded(string normalisedAssetName);
+ /// <param name="normalizedAssetName">The normalized asset name.</param>
+ protected abstract bool IsNormalizedKeyLoaded(string normalizedAssetName);
/// <summary>Get the locale codes (like <c>ja-JP</c>) used in asset keys.</summary>
private IDictionary<LanguageCode, string> GetKeyLocales()
diff --git a/src/SMAPI/Framework/ContentManagers/GameContentManager.cs b/src/SMAPI/Framework/ContentManagers/GameContentManager.cs
index 488ec245..c64e9ba9 100644
--- a/src/SMAPI/Framework/ContentManagers/GameContentManager.cs
+++ b/src/SMAPI/Framework/ContentManagers/GameContentManager.cs
@@ -26,8 +26,8 @@ namespace StardewModdingAPI.Framework.ContentManagers
/// <summary>Interceptors which edit matching assets after they're loaded.</summary>
private IDictionary<IModMetadata, IList<IAssetEditor>> Editors => this.Coordinator.Editors;
- /// <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;
+ /// <summary>A lookup which indicates whether the asset is localizable (i.e. the filename contains the locale), if previously loaded.</summary>
+ private readonly IDictionary<string, bool> IsLocalizableLookup;
/// <summary>Whether the next load is the first for any game content manager.</summary>
private static bool IsFirstLoad = true;
@@ -43,7 +43,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
/// <param name="name">A name for the mod manager. Not guaranteed to be unique.</param>
/// <param name="serviceProvider">The service provider to use to locate services.</param>
/// <param name="rootDirectory">The root directory to search for content.</param>
- /// <param name="currentCulture">The current culture for which to localise content.</param>
+ /// <param name="currentCulture">The current culture for which to localize content.</param>
/// <param name="coordinator">The central coordinator which manages content managers.</param>
/// <param name="monitor">Encapsulates monitoring and logging.</param>
/// <param name="reflection">Simplifies access to private code.</param>
@@ -52,7 +52,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
public GameContentManager(string name, IServiceProvider serviceProvider, string rootDirectory, CultureInfo currentCulture, ContentCoordinator coordinator, IMonitor monitor, Reflector reflection, Action<BaseContentManager> onDisposing, Action onLoadingFirstAsset)
: base(name, serviceProvider, rootDirectory, currentCulture, coordinator, monitor, reflection, onDisposing, isNamespaced: false)
{
- this.IsLocalisableLookup = reflection.GetField<IDictionary<string, bool>>(this, "_localizedAsset").GetValue();
+ this.IsLocalizableLookup = reflection.GetField<IDictionary<string, bool>>(this, "_localizedAsset").GetValue();
this.OnLoadingFirstAsset = onLoadingFirstAsset;
}
@@ -70,8 +70,8 @@ namespace StardewModdingAPI.Framework.ContentManagers
this.OnLoadingFirstAsset();
}
- // normalise asset name
- assetName = this.AssertAndNormaliseAssetName(assetName);
+ // normalize asset name
+ assetName = this.AssertAndNormalizeAssetName(assetName);
if (this.TryParseExplicitLanguageAssetKey(assetName, out string newAssetName, out LanguageCode newLanguage))
return this.Load<T>(newAssetName, newLanguage, useCache);
@@ -101,10 +101,10 @@ namespace StardewModdingAPI.Framework.ContentManagers
data = this.AssetsBeingLoaded.Track(assetName, () =>
{
string locale = this.GetLocale(language);
- IAssetInfo info = new AssetInfo(locale, assetName, typeof(T), this.AssertAndNormaliseAssetName);
+ IAssetInfo info = new AssetInfo(locale, assetName, typeof(T), this.AssertAndNormalizeAssetName);
IAssetData asset =
this.ApplyLoader<T>(info)
- ?? new AssetDataForObject(info, this.RawLoad<T>(assetName, language, useCache), this.AssertAndNormaliseAssetName);
+ ?? new AssetDataForObject(info, this.RawLoad<T>(assetName, language, useCache), this.AssertAndNormalizeAssetName);
asset = this.ApplyEditors<T>(info, asset);
return (T)asset.Data;
});
@@ -122,7 +122,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
// find assets for which a translatable version was loaded
HashSet<string> removeAssetNames = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
- foreach (string key in this.IsLocalisableLookup.Where(p => p.Value).Select(p => p.Key))
+ foreach (string key in this.IsLocalizableLookup.Where(p => p.Value).Select(p => p.Key))
removeAssetNames.Add(this.TryParseExplicitLanguageAssetKey(key, out string assetName, out _) ? assetName : key);
// invalidate translatable assets
@@ -149,20 +149,20 @@ namespace StardewModdingAPI.Framework.ContentManagers
** Private methods
*********/
/// <summary>Get whether an asset has already been loaded.</summary>
- /// <param name="normalisedAssetName">The normalised asset name.</param>
- protected override bool IsNormalisedKeyLoaded(string normalisedAssetName)
+ /// <param name="normalizedAssetName">The normalized asset name.</param>
+ protected override bool IsNormalizedKeyLoaded(string normalizedAssetName)
{
// default English
- if (this.Language == LocalizedContentManager.LanguageCode.en || this.Coordinator.IsManagedAssetKey(normalisedAssetName))
- return this.Cache.ContainsKey(normalisedAssetName);
+ if (this.Language == LocalizedContentManager.LanguageCode.en || this.Coordinator.IsManagedAssetKey(normalizedAssetName))
+ return this.Cache.ContainsKey(normalizedAssetName);
// translated
- string keyWithLocale = $"{normalisedAssetName}.{this.GetLocale(this.GetCurrentLanguage())}";
- if (this.IsLocalisableLookup.TryGetValue(keyWithLocale, out bool localisable))
+ string keyWithLocale = $"{normalizedAssetName}.{this.GetLocale(this.GetCurrentLanguage())}";
+ if (this.IsLocalizableLookup.TryGetValue(keyWithLocale, out bool localizable))
{
- return localisable
+ return localizable
? this.Cache.ContainsKey(keyWithLocale)
- : this.Cache.ContainsKey(normalisedAssetName);
+ : this.Cache.ContainsKey(normalizedAssetName);
}
// not loaded yet
@@ -190,13 +190,13 @@ namespace StardewModdingAPI.Framework.ContentManagers
string keyWithLocale = $"{assetName}.{this.GetLocale(language)}";
if (this.Cache.ContainsKey(keyWithLocale))
{
- this.IsLocalisableLookup[assetName] = true;
- this.IsLocalisableLookup[keyWithLocale] = true;
+ this.IsLocalizableLookup[assetName] = true;
+ this.IsLocalizableLookup[keyWithLocale] = true;
}
else if (this.Cache.ContainsKey(assetName))
{
- this.IsLocalisableLookup[assetName] = false;
- this.IsLocalisableLookup[keyWithLocale] = false;
+ this.IsLocalizableLookup[assetName] = false;
+ this.IsLocalizableLookup[keyWithLocale] = false;
}
else
this.Monitor.Log($"Asset '{assetName}' could not be found in the cache immediately after injection.", LogLevel.Error);
@@ -204,7 +204,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
/// <summary>Load an asset file directly from the underlying content manager.</summary>
/// <typeparam name="T">The type of asset to load.</typeparam>
- /// <param name="assetName">The normalised asset key.</param>
+ /// <param name="assetName">The normalized asset key.</param>
/// <param name="language">The language code for which to load content.</param>
/// <param name="useCache">Whether to read/write the loaded asset to the asset cache.</param>
/// <remarks>Derived from <see cref="LocalizedContentManager.Load{T}(string, LocalizedContentManager.LanguageCode)"/>.</remarks>
@@ -214,19 +214,19 @@ namespace StardewModdingAPI.Framework.ContentManagers
if (language != LocalizedContentManager.LanguageCode.en)
{
string translatedKey = $"{assetName}.{this.GetLocale(language)}";
- if (!this.IsLocalisableLookup.TryGetValue(translatedKey, out bool isTranslatable) || isTranslatable)
+ if (!this.IsLocalizableLookup.TryGetValue(translatedKey, out bool isTranslatable) || isTranslatable)
{
try
{
T obj = base.RawLoad<T>(translatedKey, useCache);
- this.IsLocalisableLookup[assetName] = true;
- this.IsLocalisableLookup[translatedKey] = true;
+ this.IsLocalizableLookup[assetName] = true;
+ this.IsLocalizableLookup[translatedKey] = true;
return obj;
}
catch (ContentLoadException)
{
- this.IsLocalisableLookup[assetName] = false;
- this.IsLocalisableLookup[translatedKey] = false;
+ this.IsLocalizableLookup[assetName] = false;
+ this.IsLocalizableLookup[translatedKey] = false;
}
}
}
@@ -313,7 +313,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
}
// return matched asset
- return new AssetDataForObject(info, data, this.AssertAndNormaliseAssetName);
+ return new AssetDataForObject(info, data, this.AssertAndNormalizeAssetName);
}
/// <summary>Apply any <see cref="Editors"/> to a loaded asset.</summary>
@@ -322,7 +322,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
/// <param name="asset">The loaded asset.</param>
private IAssetData ApplyEditors<T>(IAssetInfo info, IAssetData asset)
{
- IAssetData GetNewData(object data) => new AssetDataForObject(info, data, this.AssertAndNormaliseAssetName);
+ IAssetData GetNewData(object data) => new AssetDataForObject(info, data, this.AssertAndNormalizeAssetName);
// edit asset
foreach (var entry in this.GetInterceptors(this.Editors))
diff --git a/src/SMAPI/Framework/ContentManagers/IContentManager.cs b/src/SMAPI/Framework/ContentManagers/IContentManager.cs
index 78211821..12c01352 100644
--- a/src/SMAPI/Framework/ContentManagers/IContentManager.cs
+++ b/src/SMAPI/Framework/ContentManagers/IContentManager.cs
@@ -39,15 +39,15 @@ namespace StardewModdingAPI.Framework.ContentManagers
/// <summary>Perform any cleanup needed when the locale changes.</summary>
void OnLocaleChanged();
- /// <summary>Normalise path separators in a file path. For asset keys, see <see cref="AssertAndNormaliseAssetName"/> instead.</summary>
- /// <param name="path">The file path to normalise.</param>
+ /// <summary>Normalize path separators in a file path. For asset keys, see <see cref="AssertAndNormalizeAssetName"/> instead.</summary>
+ /// <param name="path">The file path to normalize.</param>
[Pure]
- string NormalisePathSeparators(string path);
+ string NormalizePathSeparators(string path);
- /// <summary>Assert that the given key has a valid format and return a normalised form consistent with the underlying cache.</summary>
+ /// <summary>Assert that the given key has a valid format and return a normalized form consistent with the underlying cache.</summary>
/// <param name="assetName">The asset key to check.</param>
/// <exception cref="SContentLoadException">The asset key is empty or contains invalid characters.</exception>
- string AssertAndNormaliseAssetName(string assetName);
+ string AssertAndNormalizeAssetName(string assetName);
/// <summary>Get the current content locale.</summary>
string GetLocale();
diff --git a/src/SMAPI/Framework/ContentManagers/ModContentManager.cs b/src/SMAPI/Framework/ContentManagers/ModContentManager.cs
index 34cabefc..b88bd71e 100644
--- a/src/SMAPI/Framework/ContentManagers/ModContentManager.cs
+++ b/src/SMAPI/Framework/ContentManagers/ModContentManager.cs
@@ -7,7 +7,7 @@ using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using StardewModdingAPI.Framework.Exceptions;
using StardewModdingAPI.Framework.Reflection;
-using StardewModdingAPI.Toolkit.Serialisation;
+using StardewModdingAPI.Toolkit.Serialization;
using StardewModdingAPI.Toolkit.Utilities;
using StardewValley;
using xTile;
@@ -41,7 +41,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
/// <param name="gameContentManager">The game content manager used for map tilesheets not provided by the mod.</param>
/// <param name="serviceProvider">The service provider to use to locate services.</param>
/// <param name="rootDirectory">The root directory to search for content.</param>
- /// <param name="currentCulture">The current culture for which to localise content.</param>
+ /// <param name="currentCulture">The current culture for which to localize content.</param>
/// <param name="coordinator">The central coordinator which manages content managers.</param>
/// <param name="monitor">Encapsulates monitoring and logging.</param>
/// <param name="reflection">Simplifies access to private code.</param>
@@ -78,7 +78,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
/// <param name="useCache">Whether to read/write the loaded asset to the asset cache.</param>
public override T Load<T>(string assetName, LanguageCode language, bool useCache)
{
- assetName = this.AssertAndNormaliseAssetName(assetName);
+ assetName = this.AssertAndNormalizeAssetName(assetName);
// disable caching
// This is necessary to avoid assets being shared between content managers, which can
@@ -91,7 +91,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
// disable language handling
// Mod files don't support automatic translation logic, so this should never happen.
if (language != this.DefaultLanguage)
- throw new InvalidOperationException("Localised assets aren't supported by the mod content manager.");
+ throw new InvalidOperationException("Localized assets aren't supported by the mod content manager.");
// resolve managed asset key
{
@@ -121,7 +121,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
T data = this.RawLoad<T>(assetName, useCache: false);
if (data is Map map)
{
- this.NormaliseTilesheetPaths(map);
+ this.NormalizeTilesheetPaths(map);
this.FixCustomTilesheetPaths(map, relativeMapPath: assetName);
}
return data;
@@ -161,7 +161,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
// fetch & cache
FormatManager formatManager = FormatManager.Instance;
Map map = formatManager.LoadMap(file.FullName);
- this.NormaliseTilesheetPaths(map);
+ this.NormalizeTilesheetPaths(map);
this.FixCustomTilesheetPaths(map, relativeMapPath: assetName);
return (T)(object)map;
}
@@ -199,10 +199,10 @@ namespace StardewModdingAPI.Framework.ContentManagers
** Private methods
*********/
/// <summary>Get whether an asset has already been loaded.</summary>
- /// <param name="normalisedAssetName">The normalised asset name.</param>
- protected override bool IsNormalisedKeyLoaded(string normalisedAssetName)
+ /// <param name="normalizedAssetName">The normalized asset name.</param>
+ protected override bool IsNormalizedKeyLoaded(string normalizedAssetName)
{
- return this.Cache.ContainsKey(normalisedAssetName);
+ return this.Cache.ContainsKey(normalizedAssetName);
}
/// <summary>Get a file from the mod folder.</summary>
@@ -245,12 +245,12 @@ namespace StardewModdingAPI.Framework.ContentManagers
return texture;
}
- /// <summary>Normalise map tilesheet paths for the current platform.</summary>
+ /// <summary>Normalize map tilesheet paths for the current platform.</summary>
/// <param name="map">The map whose tilesheets to fix.</param>
- private void NormaliseTilesheetPaths(Map map)
+ private void NormalizeTilesheetPaths(Map map)
{
foreach (TileSheet tilesheet in map.TileSheets)
- tilesheet.ImageSource = this.NormalisePathSeparators(tilesheet.ImageSource);
+ tilesheet.ImageSource = this.NormalizePathSeparators(tilesheet.ImageSource);
}
/// <summary>Fix custom map tilesheet paths so they can be found by the content manager.</summary>
@@ -258,7 +258,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
/// <param name="relativeMapPath">The relative map path within the mod folder.</param>
/// <exception cref="ContentLoadException">A map tilesheet couldn't be resolved.</exception>
/// <remarks>
- /// The game's logic for tilesheets in <see cref="Game1.setGraphicsForSeason"/> is a bit specialised. It boils
+ /// The game's logic for tilesheets in <see cref="Game1.setGraphicsForSeason"/> is a bit specialized. It boils
/// down to this:
/// * If the location is indoors or the desert, or the image source contains 'path' or 'object', it's loaded
/// as-is relative to the <c>Content</c> folder.
@@ -276,7 +276,7 @@ namespace StardewModdingAPI.Framework.ContentManagers
// get map info
if (!map.TileSheets.Any())
return;
- relativeMapPath = this.AssertAndNormaliseAssetName(relativeMapPath); // Mono's Path.GetDirectoryName doesn't handle Windows dir separators
+ relativeMapPath = this.AssertAndNormalizeAssetName(relativeMapPath); // Mono's Path.GetDirectoryName doesn't handle Windows dir separators
string relativeMapFolder = Path.GetDirectoryName(relativeMapPath) ?? ""; // folder path containing the map, relative to the mod folder
bool isOutdoors = map.Properties.TryGetValue("Outdoors", out PropertyValue outdoorsProperty) && outdoorsProperty != null;