What's New: Inventory System GameFoundationSdk.inventory now allows StackableInventoryItems to be created with quantity using CreateItem(StackableInventoryItemDefinition, quantity). Inventory now implements a new event itemMutablePropertyChanged which is fired any time an item's mutable property is changed in the entire GameFoundationSdk.inventory (specific item and property affected are passed as an argument). This is in addition to individual Inventory Items mutablePropertyChanged event which targets only mutable property changes to a specific InventoryItem. GameFoundationSdk.inventory now emits OnCollectionAddedCallback or OnCollectionDeletedCallback events when IItemCollections are created or deleted (respectively), as well as OnCollectionItemAddedCallback or OnCollectionItemRemovedCallback events whenever items are added to or removed from IItemCollections. InventoryItemDefinitionAsset.initialQuantityPerStack has been added to the list of overridable catalog data for IExternalValueProvider. Improvements UX Improvements Added a Generate Constants button to CatalogAssets in Unity Inspector window to permit exporting constants. To utilize this feature, select a Catalog (i.e. SampleCatalog) and click the Generate Constants button at the top. Specify an export filename (must be inside Assets folder and is of type cs) and GameFoundation will generate all constants to simplify catalog access and avoid typos. Rewards now appear in the Game Foundation Debugger. Editor now clamps the initial balance between 0 and maximum balance. Renamed Real Number name on Properties to Double. Changed "<none>" option in filter dropdown to “<No Tags>” Renamed editor window tab names to align better on Game Foundation naming conventions. API Improvement Improved Game Foundation initialization flow to throw exceptions as less as possible. Improved Game Foundation Initialization to have better IAP SDK and Purchasing Adapter integration and exception handling during the Initialization. Game Foundation initialization will no longer fail if an IAP Transaction's product id is missing for the platform being built to. The purchase of that IAP Transaction can be attempted but will fail because a product id is required, however it will no longer prevent all of Game Foundation from functioning. Some fields from the different implementations of CatalogItemAsset are now wrapped in a ExternalizableValue<T>. They can be used as regular `T` properties. These fields are externalizable through `IExternalValueProvider` if you want to override them with an external source. Added new types of exception to be as explicit as possible when they occur. Avoid throwing Exceptions as much as possible and use more fitted exception types instead. Sample Scenes All sample scenes now have their own catalog. The user won’t need to download the first sample scene that has the catalog to be able to use sample scenes. Adjusts the canvas match setting from width to height for Promotion and Reward Sample Scenes so that they fit in both screen orientations. Changes Changed GameFoundationSdk.dataLayer property to public from internal. * Deferred and Deferred<T> are now IDisposable so you can use them in an using block to release them automatically. Game Foundation Init Prefab's default Data Layer has changed to Local Data Persistence from Memory Layer. Renamed Reward Popup prefab to Progressive Reward Popup. All sample scenes using Memory Data Layer or Persistence Data Layer now use Game Foundation Init Prefab instead of code initialization. PurchaseButton and RewardClaimButton prefabs now have a weak reference to the Purchase and Claim methods. They can be found in the button's onClick listener list in the inspector, and can be removed. Removed IDictionaryConvertible has been removed since the JsonDetail no longer exists. Fixes Fixed compilation errors when using IAP package version 2.1.0 or 2.1.1. Fixed issue "InvalidOperationException: UnityPurchasingAdapter Error: GameFoundationSdk.Initialize() must be called before FindProduct is used". There are two possible causes: Fixed an issue where the reward countdown would start going backwards if you missed an item and Reset if Expired is set to false. Fixed an issue where a reward with multiple items, Reset if Expired set to true, and a countdown of 0 would be reset immediately after the first claim. Fixed an issue where a missed reward item would show as Locked if it was right before the latest claimed item and during cooldown. Fixed an issue where sample scenes has the wrong aspect ratio in portrait mode. Fixed an issue where Resources Asset Property selector shows duplicates for prefabs that are stored in Resources folders. Fixed an issue where Chilliconnect breaks linkage to IAP product keys that have lower case letters in them, by converting them to uppercase. Fixed an issue where Debug window doesn’t show changes made to mutable properties during runtime until you have moused over or clicked on the property in the debug window. Fixed an issue where the Null reference to the parent Reward of a Reward Item when the Reward and RewardItem are newly created. GameFoundationInit component now serializes changes to the Override Catalog Asset bool and asset values, and the catalog asset value is no longer forgotten when unchecked. Fixed errors when editing asset property in the Debug Window.