Skip to content

IdleKit Changelog

Version 2.1.1 2022-05-04

  • CHANGE Changed MilestoneClaimableAction to MilestoneClaimableStateAction. Now all calls to this action requires the Milestone entity.
  • CHANGE Improvements to the IPayoutEntity interface to be able to pay out more than just currencies.
  • CHANGE Improvements to decrease strain on the backend, generator saved data is not sent with every automated generator collection.
  • BUFIX Fixes related to load phases being unable to complete if Beamable hasn't loaded.
  • BUGFIX Deserializing in beamable will only return true when returning valid save data.
  • FEATURE A user description string has been added to the IProgressable interface which can be used to display information about what is currently happening in load phases.

Version 2.1 2022-03-16

  • BUGFIX Fixes issue saving analytics events to json.
  • CHANGE Kraang Analytics package has been split into its own package, and is now pulled in as a dependency of IdleKit.
  • CHANGE Kraang Analytics classes have been refactored to be less dependent on IdleKit.
  • CHANGE Story Sequence Tool has been split into its own pacakge, and is now pulled in as a dependency of IdleKit.
  • BUGFIX Fixed a bug where random rewards for sometimes unevenly weighted to omit the lowest and the highest values in the rewards list.
  • CHANGE Refactored the ActivityTrackingService to make use of the ProjectionService instead of using its own logic for calculations. This change also introduced a new OfflineProgressAction which replaced the previous OfflineProgressActionStart and OfflineProgressActionEnd.
  • CHANGE The Startup class now has 2 separate methods for switching to main game content and to event content: SwitchToMainGame and SwitchToEvent. Both methods have clearer signatures.
  • FEATURE Added CheckVersionLoadPhase as well as VersionMismatchAction and VersionService for reacting to client's version mismatch. The data about current client version is stored inside of the VersionData class.
  • CHANGE UserSavedData now has a clear separation between ContentId and EventSettingsId.
  • BUGFIX A bunch of bugfixes for the Story Sequence Tool.
  • CHANGE Added an IsForceShowed property to the IPromoSavedData so the promo system can now tell whether a force shown promo has already been shown to the player.

Version 2.0.0, 2021-12-13

  • FEATURE Beamable backend framework has been integrated into IdleKit to handle saving player data.
  • FEATURE Added PromoPurchasedStateAction for saving PromoSaveData when a promo is purchased.
  • CHANGE Added RankRewardsSpritePath property into EventSettingsData for adding unique sprites for event rewards on rewarded leaderboards.
  • CHANGE Promo now inherits from StoreReward so it can be bought by in-game currency.
  • CHANGE Rename CurrencyUnlockReward to CurrencyAvailableReward

List of features added to IdleKit since 1.4.1

  • App Review Request Service
    • Handles opening the app review native dialogue for ios/android
  • Avatar Service for Manager Avatars
    • Handles retrieving avatars available to the player, unlocking new avatars
  • Beamable Backend
    • Game server for syncing player/game state to the cloud
  • Data Pipeline
    • Designer-friendly game data management
  • Gacha Odds Calculation Service
    • Generates odds for gacha rewards in game
  • IAP Purchase Service with Receipt Validation
    • Real money purchases integrated with backend validation
  • Kraang Analytics V2
    • Updated standard game analytic events within IdleKit
  • Leaderboard Service with Rewards
    • Handles event and main game leaderboards and gives out rewards based on leaderboard rankings and points
  • Localization Service
    • Localization service for accessing translation dictionaries for multiple languages
  • Local Notification Service
    • Show local notifications on device at a specific time in the future
  • Navigation Service for Android Inputs
    • Android back button navigation mapping with view layering
  • Network Connection Status Service
    • Service which detects when the game loses connection to the backend servers
  • New events structure based on phases
    • Introduces an announcement phase and a main phase to alert players about upcoming events
  • Plot Points deprecated in place of the Story Sequence Tool
    • Replaced by the new narrative engine for authoring story moments - Story Sequence Tool
  • Presentation Service
    • A service for queueing several visual elements in the game one after the other
  • Promos with Timed Durations and Triggers
    • Provide promos to the player for in-app purchases which can be triggered based on a varity of rules
  • Single Unified Repository
    • Idlekit repositories have been consolidated into easy to manage repository
  • Story Sequence Tool Integration
    • Story Sequence tool is now integrated into IdleKit for narrative moments.
  • User Stats Service for saving simple player data remotely
    • Simple player data can be stored in the server and used between sessions
  • Views Service
    • Optional service for controlling the lifecycle of UI views in IdleKit
  • Activity Tracking Service
    • Automatically detect and account for a player’s break from the game.

Version 1.4.1, 2021-01-13

idlekit-implementation

  • BUGFIX ClaimTimedRewardStateAction and GrantGoalRewardStateAction now dispatch as their base Action GrantRewardStateAction.

idlekit-tools

  • BUGFIX DebugGrantRewardStateAction now dispatches as their base Action GrantRewardStateAction.

idlekit-examples

  • FEATURE Added a new example to demonstrate extension of an IEntity. The new example is located in the EquippableCurrency scene, and corresponds to the new Entities/Customizing Entities page in the documentation. The example adds ability to equip/unequip a currency to apply its effects to a generator in the scene.

Version 1.4.0, 2020-10-16

idlekit-logging

  • N/A

idlekit-ioc

  • N/A

idlekit-framework

Base Collector Entity
  • FEATURE Introduced IPayoutEntity, which is implemented by IEntity that can be paid out by any implementation of IBaseCollectorEntity. At the moment, only ICurrency and IReward implement the interface.
  • CHANGE IBaseCollectorBalanceData's double basePayoutand string payoutCurrencyId getters have been renamed to basePayoutAmount and payoutEntityId. See UPGRADENOTES.md for details.
  • CHANGE IBaseCollectorEntity's double payout getter and void GetPayout(bool, IModifier[]) method have been renamed. See UPGRADENOTES.md for details.
Currency
  • CHANGE ICurrency and ICurrencyData implement IPayoutEntity and IPayoutEntityData so it can be output by an IBaseCollectorEntity.
Reward
  • CHANGE IReward and IRewardData implement IPayoutEntity and IPayoutEntityData so it can be output by an IBaseCollectorEntity.
Time Service
  • FEATURE Introduced Pause and Resume to the ITimerService to prevent gametime from automatically updated.

idlekit-implementation

Activity Tracking Service
  • CHANGE The service now pauses the ITimerService to prevent automatic timed updates between the SetContentStateAction and IdleKitInitializedAction during the initialization of a IContent. This makes sure that the catchup logic can be performed after IdleKitInitializedAction after an IContent initialization.
Goal
  • CHANGE DynamicGoal.targetProgress estimation has been changed to only target IGeneratorEntities that are producing ICurrencies since an IGeneratorEntity can also produce IReward due to the introduction of IPayoutEntity.
  • FEATURE Added CollectFromCollectorTypeGoal, which progresses when the player collects from any or a specified ICollectorEntity.
  • CHANGE Added CollectFromGeneratorTypeGoalData.any, so when any is set to true the goal targets any IGeneratorEntitys in the Stage.
  • CHANGE GeneratorGoal has been renamed to BaseCollectorGoal.
Projection Service
  • CHANGE GetPayoutProjections() calculation has been changed to only target IGeneratorEntities that are producing ICurrencies since an IGeneratorEntity can also produce IReward due to the introduction of IPayoutEntity.
State Action
  • CHANGE Due to ICurrency and IReward changed to implement the common IPayoutEntity interface, GrantRewardStateAction and CollectFromBaseCollectorStateAction also changed to share the same base code GrantPayoutStateAction.

idlekit-tools

UI
  • CHANGE Collector and Generator UI info buttons now also display the IPayoutEntity id, type, and amount.
PlotPoint Editor
  • CHANGE PlotPointEditor.SaveSequence has been simplified and refactored into a number of methods to improve readability and extensibility.

idlekit-examples

Generator Example
  • CHANGE The Generator example has been retrofitted to work with a regular IGeneratorEntity to produce an IReward. All the custom scripts have been removed as the base IBaseCollectorEntity now supports outputting an IReward.

idlekit-showcase

  • N/A

Version 1.3.0, 2020-09-02

idlekit-logging

  • N/A

idlekit-ioc

  • N/A

idlekit-framework

Base Collector Entity
  • FEATURE Added a new IBaseCollectorEntity that contains the properties shared between IGeneratorEntity and ICollectorEntity. The following interfaces have been similarly added:
  • IBaseCollectorBalanceData
  • IBaseCollectorData
  • IBaseCollectorEntityData
  • IBaseCollectorEntitySavedData
Collector Entity
  • FEATURE Added a new ICollectorEntity which extends IBaseCollectorEntity. Similarly to IGeneratorEntity, the following interfaces have also been added:
  • ICollectorBalanceData
  • ICollectorData
  • ICollectorEntityData
  • ICollectorEntitySavedData
  • FEATURE The following Actions have been added:
  • CollectorInitializedAction
  • CollectorPayoutChangedAction
  • CollectorStateChangedAction
  • CollectorSpeedChangedAction
  • FEATURE The following StateActions have been added:
  • BuyCollectorStateAction
  • CollectFromCollectorStateAction
Economy Service
  • CHANGE IEconomyService.GetPayout(IBaseCollectorEntity baseCollectorEntity) has been deprecated, use IBaseCollectorEntity.GetPayout() instead.
  • CHANGE IEconomyService.GetPayout(IBaseCollectorEntity baseCollectorEntity, bool applyModifiers, IModifier[] excludedModifiers = null) has been deprecated, use IBaseCollectorEntity.GetPayout(bool applyModifiers, IModifier[] excludedModifiers = null) instead.
  • CHANGE IEconomyService.GetDuration(IBaseCollectorEntity baseCollectorEntity) has been deprecated, use IBaseCollectorEntity.GetDuration() instead.
  • CHANGE IEconomyService.GetDuration(IBaseCollectorEntity baseCollectorEntity, bool applyModifiers, IModifier[] excludedModifiers = null) has been deprecated, use IBaseCollectorEntity.GetDuration(bool applyModifiers, IModifier[] excludedModifiers = null) instead.
  • CHANGE IEconomyService.GetAffordableUnitsToNextTarget(IGeneratorEntity generatorEntity, bool applyModifiers, IModifier[] excludedModifiers = null) has been deprecated, use IGeneratorEntity.GetAffordableUnitsToNextTarget(bool applyModifiers, IModifier[] excludedModifiers = null) instead.
  • CHANGE IEconomyService.GetMaxAffordableUnits(IGeneratorEntity generatorEntity, bool applyModifiers, int maxCap = -1, IModifier[] excludedModifiers = null)has been deprecated, use IGeneratorEntity.GetMaxAffordableUnits(bool applyModifiers, int maxCap = -1, IModifier[] excludedModifiers = null) instead.
  • CHANGE IEconomyService.GetIncrementGeneratorUnitCost(int unitsToIncrease, IGeneratorEntity generatorEntity, bool applyModifiers, IModifier[] excludedModifiers = null) has been deprecated, use IGeneratorEntity.GetIncrementGeneratorUnitCost(int unitsToIncrease, bool applyModifiers, IModifier[] excludedModifiers = null) instead.
Event Content
  • REMOVE IEventContentSavedData and IStandardEventContentSavedData have been removed as we no longer track the index of the active IMilestone. See UPGRADENOTES.md for details.
  • CHANGE IEventContent.activeMilestone has been renamed to IEventContent.GetCurrentMilestone().
  • FEATURE Added IEventContent.GetCurrentMilestoneIndex() to return the index of the current IMilestone. This is useful for UI display purpose.
Event Settings
  • FEATURE Added bool MilestoneCompletionInfo.complete that indicates the IMilestone associated with the MilestoneCompletionInfo has been actually completed instead of having a projected completion time (see below).
  • CHANGE MilestoneCompletionInfo.completionTime has been renamed to MilestoneCompletionInfo.projectedCompletionTime. This is a saved data breaking change and a FormerlySerializedAs attribute is added to the MilestoneCompletionInfo.projectedCompletionTime. See UPGRADENOTES.md for details.
  • CHANGE IEventSettings.CanCompleteMilestone(string); has been changed to IEventSettings.CanCompleteMilestone(IMilestone);. See UPGRADENOTES.md for details.
  • CHANGE IEventSettings.SetMilestoneCompletionTime(string, long); has been changed to IEventSettings.SetMilestoneCompletionTime(IMilestone, long);. See UPGRADENOTES.md for details.
Generator
  • CHANGE IGeneratorStates now implements IInjectable that allows them to be injected from the IContainer. See the GeneratorEntity in idlekit-implementation to see how it is utilized.
  • FEATURE Introduced specific IGeneratorState interfaces so the existing IGeneratorState interfaces can be injected:
    • IAutoCollectState, IProduceState, IWaitToBuyState, and IWaitToCollectState.
  • CHANGE GeneratorStateType enum has been changed to a static class that contains constant strings as state types, see UPGRADENOTES.md for more details. The affected IGeneratorState and IGeneratorEntity interfaces have been updated.
  • CHANGE In order to support the ICollectorEntity feature, the following interfaces have changed:
  • IGeneratorBalanceData now extends IBaseCollectorBalanceData and has some of its fields moved into it
  • IGeneratorData now extends IBaseCollectorData and has some of its fields moved into it
  • IGeneratorEntity now extends IBaseCollectorEntity and has some of its fields and methods moved into it
  • IGeneratorEntityData now extends IBaseCollectorEntityData and has some of its fields moved into it
  • IGeneratorEntitySavedData now extends IBaseCollectorEntitySavedData and has some of its fields and methods moved into it
  • CHANGE IGeneratorEntity.Collect(long count=1) now returns bool instead of void to indicate whether or not the collection was successful
Standard Content
  • FEATURE Added a IStandardContent.collectorEntities and IStandardContentData.collectorEntityIds to support the addition of CollectorEntity
Listener Priority
  • FEATURE Abstracted the class ListenerPriority with constant int values priorities from IActionService to also provide listener priority to ITimerListener in addition to IAction.
    • The constant priorities included are: LOWEST, LOW, MEDIUM, HIGH, and HIGHEST.
Timed Reward
  • FEATURE Added float ITimedReward.progress {get;} that shows a 0 to 1 progression whether the ITimedReward can be claimed or not.
Timer Service
  • FEATURE Added the ability to specify the order ITimerListeners are evaluated in ITimerService. All ITimerListener now can optionally provide the int priority in its ITimerSubscription. The higher the priority the earlier the ITimerListener would get evaluated.

idlekit-implementation

Action
  • REMOVE CompleteMilestoneStateAction has been deprecated, see UPGRADENOTES.md for details.
  • CHANGE SetProjectedMilestoneCompletionStateAction has been renamed to SetMilestoneCompletionInfoStateAction, see UPGRADENOTES.md for details.
  • FEATURE A ClearContentAction has been added. This signifies the point at which the currently loaded IContent entity is unloaded when restarting the app or switching content.
  • CHANGE The ClearContentStateAction has been renamed ClearContentIdStateAction to more specifically express the behavior of the action. See UPGRADENOTES.md for details.
Collector Entity
  • FEATURE Added a new CollectorEntity which extends BaseCollectorEntity. Similarly to GeneratorEntity, the following classes have also been added:
  • CollectorBalanceData
  • CollectorData
  • CollectorEntityData
  • CollectorEntitySavedData
Economy Service
  • CHANGE EconomyService.GetPayout(IBaseCollectorEntity baseCollectorEntity) has been deprecated, use BaseCollectorEntity.GetPayout() instead.
  • CHANGE EconomyService.GetPayout(IBaseCollectorEntity baseCollectorEntity, bool applyModifiers, IModifier[] excludedModifiers = null) has been deprecated, use BaseCollectorEntity.GetPayout(bool applyModifiers, IModifier[] excludedModifiers = null) instead.
  • CHANGE EconomyService.GetDuration(IBaseCollectorEntity baseCollectorEntity) has been deprecated, use BaseCollectorEntity.GetDuration() instead.
  • CHANGE EconomyService.GetDuration(IBaseCollectorEntity baseCollectorEntity, bool applyModifiers, IModifier[] excludedModifiers = null) has been deprecated, use BaseCollectorEntity.GetDuration(bool applyModifiers, IModifier[] excludedModifiers = null) instead.
Event Content
  • FEATURE Added a string[] collectorEntityIds property to support the addition of CollectorEntity
  • CHANGE Due to the removal of IEventContentSavedData, the EventContent implementation now determines the IEventContent.GetCurrentMilestone() dynamically based on the IMilestone.canClaim status of all the loaded IMilestones.
    • This eliminates the potential risk that the removed IEventContentSaveData.milestoneIndex be out of sync with the completion status of the IMilestones (it may point to a IMilestone that is completed if the they are tracked separately).
    • Use IMilestone.isActive on the IEventContent.GetCurrentMilestone() to see if the current IMilestone is active or not.
Event Settings
  • CHANGE IEventSettingsSavedData.SetMilestoneCompletionTime(string, long, bool) has been updated to only update the MilestoneCompletionInfo for the IMilestone when MilestoneCompletionInfo.complete is false.
Generator
  • CHANGE The existing AutoCollectState, ProduceState, WaitToBuyState, and WaitToCollectState have been retrofitted to work with the new interface and the container.
  • CHANGE Due to the change of GeneratorStateType enum to a static class, affected functions that originally use the enum are now using the type of the IGeneratorState object instead.
  • CHANGE The IGeneratorStates are now injected in the GeneratorEntity implementation.
  • CHANGE AutotCollectState.minimumUpdateInterval { set; } has been moved to TestAutoCollectState in idlekit-tools the { get; } functionality is retained.
  • CHANGE In order to support the CollectorEntity feature, the following classes have changed:
  • GeneratorBalanceData now extends BaseCollectorBalanceData and has some of its fields moved into it
  • GeneratorData now extends BaseCollectorData and has some of its fields moved into it
  • GeneratorEntity now extends BaseCollectorEntity and has some of its fields and methods moved into it
  • GeneratorEntityData now extends BaseCollectorEntityData and has some of its fields moved into it
  • GeneratorEntitySavedData now extends BaseCollectorEntitySavedData and has some of its fields and methods moved into it
  • CHANGE CollectorEntity.Collect(long count=1) now returns bool instead of void to indicate whether or not the collection was successful
  • CHANGE Removed the GeneratorAction. The Actions that previously extended GeneratorAction have not been removed.
  • CHANGE GeneratorBalanceData will now log an error if baseGeneratorUnitCost is equal to 0.
  • CHANGE GeneratorEntitySavedData.Buy() no longer increments the generator unit by 1. The functionality has been moved into the BuyGeneratorStateAction instead.
Listener Priority
  • CHANGE EventService now subscribes to ITimerService with priority of LOWEST.
  • CHANGE TimedBoost now subscribes to ITimerService with priority of LOW.
  • CHANGE SerializationService now subscribes to ITimerService with priority of LOWEST.
Modifier Formula
  • FEATURE Added CollectorPayoutModifierFormula to support Modifiers for CollectorEntity
  • FEATURE Added CollectorSpeedModifierFormula to support Modifiers for CollectorEntity
Standard Content
  • FEATURE Added a StandardContent.collectorEntities and StandardContentData.collectorEntityIds to support the addition of CollectorEntity
Startup
  • CHANGE Startup.ResetGame will no longer reset the content Id stored within the IUserSavedData. The effect of this is that when restarting the app via ResetGame, it will boot back into the IContent the player had loaded previously. This mirrors the behavior of quitting/restarting the app. See UPGRADENOTES.md for details.
Upgradeable Currency
  • BUGFIX Fixed an issue where upgradeLevel wasn't reset when resetting UpgradeableCurrencySavedData.

idlekit-tools

AssemblyUtil
  • CHANGE AssemblyUtil now filters out all system / Unity assemblies and returns IdleKit or custom types.
Data Asset Importer
  • FEATURE Importing a single data sheet now updates the entities database if it can be found in the output folder.
Class Generation Tool
  • CHANGE The generation of extended IEventContent and IGeneratorEntity classes has been disabled.
Guid Reference
  • CHANGE The Guid Ref helper now supports display of nested assets that share a single path.
UI
  • BUGFIX Fix an issue that the MilestonePanel scroll kept getting reset when there is an UI update in the game such as when an ICurrency is collected.

idlekit-examples

Reward Generator Entity
  • CHANGE Updated the RewardGeneratorEntity and RewardGeneratorEntityData to support the addition of BaseCollectorEntity.
Boost
  • CHANGE Updated the Boost example to show how Additive and Multiplicative modifiers can be applied for IGenerator speed, payout and unit cost.

idlekit-showcase

  • N/A

Version 1.2.0, 2020-07-02

idlekit-logging

  • N/A

idlekit-ioc

  • N/A

idlekit-framework

Activatable
  • FEATURE Added IActivatable and IActivatableData, which are entities that can be activated, deactivated and reset, such as ITrack or IGoal.
Event Settings
  • FEATURE Added IEventSettings.timeRemaining to get the time remaining of an event in milliseconds.
  • FEATURE Added IEventSettings.SetEventEndTime(long timestamp) to set the end time (and duration effectively) of an event.
  • CHANGE IEventSettingsData.eventDuration has been deprecated. See UPGRADENOTES.md for details.
  • FEATURE Added IEventSettingsSavedData.SetEventEndTime(long timestamp) to set the IEventSettingsSavedData.timeCompletedTimestamp.
  • CHANGE IEventSettingsSavedData.EndEvent(long eventEndTimestamp) has been deprecated. Use IEventSettingsSavedData.EndEvent() instead.
Goal
  • CHANGE IGoal now extends IActivatable and IGoalData extends IActivatableData
Milestone
  • CHANGE IMilestone now extends IActivatable and IMilestoneData extends IActivatableData
Projection Service
  • FEATURE Added IProjectionService.RefreshPayoutProjections() to re-calculate the current IPayoutProjections.
Random Service
  • FEATURE Added IRandomService that handles all random number generation.
  • CHANGE IRandomWeightedExtensions.GetRandomWeightedElement() has been deprecated. Please use IRandomService.GetRandomWeightedElement instead.
Standard Content
  • FEATURE Added the IStandardContentFeatures interface component which extracts the trade, timedboost, and timertrunk logic from the IStandardContent.
Timed Activatable
  • FEATURE Introduced interfaces for the Timed Activatable: ITimedActivatable, ITimedActivatableData, ITimedActivatableDataAsset and ITimedActivatableSavedData. A Timed Activatable contains an IActivatable and provides timer functionality to activate and deactivate this activatable.
  • FEATURE Introduced interfaces for the Timed Track: ITimedTrack, ITimedTrackData, ITimedTrackSavedData.
Track
  • FEATURE Introduced interfaces for the Track Entity:
    • ITrack, ITrackData, ITrackSavedData, ITrackDataAsset
    • IGoalTrack, IGoalTrackData
    • IMilestoneTrack, IMilestoneTrackData, IMilestoneTrackSavedData
  • FEATURE Added ITrackService that handles loading of ITracks and TimedTracks.

idlekit-implementation

Action
  • FEATURE Added the ResetEntitySavedDataStateAction to reset an IEntity's saved data.
  • FEATURE Added the TrackCompletedAction as part of the Track feature.
  • FEATURE Added the TimedEntityCompletedAction as part of the TimedEntity feature.
  • FEATURE Added the following state actions as part of the Track feature: ClaimTrackGoalStateAction, ClaimMilestoneTrackRewardsStateAction, CompleteMilestoneTrackStateAction, CompleteTrackMilestoneStateAction
  • FEATURE Added the following state actions for activating and deactivating certain Activatables: ToggleTimedEntityStateAction, ToggleMilestoneStateAction, ToggleTrackStateAction
  • CHANGE StaticDataAddedAction and StaticDataRemovedAction now store a dictionary of types and data Ids instead of an array of data, so listeners can iterate through the types instead of type checking each individual data.
  • CHANGE EventStartedStateAction and EventEndedStateAction now extend EventStateAction.
  • CHANGE eventContentId and uniqueEventContentId has been removed from EventStartedStateAction and EventEndedStateAction. This can be taken from eventSettings.eventSettingsData instead.
  • FEATURE SetEventDurationStateAction has been added to change an event's duration.
  • CHANGE All calls using System.Random in reward related actions have been replaced to calls to the RandomService.
  • CHANGE NewStageStateAction no longer sets available currencies for the new stage. This functionality has been moved to Content.SetAvailableCurrencies(), which dispatches SetAvailableCurrenciesStateAction.
  • FEATURE SetAvailableCurrenciesStateAction has been added to set a list of currencies' available status.
Currency
  • FEATURE CurrencyService now supports loading and unloading of Global currencies and Content specific currencies. Currency entities are also loaded by the service when ICurrencyData are loaded.
  • CHANGE CurrencyService now subscribes to StaticDataAddedAction and StaticDataRemovedAction instead of ContentDataAddedAction and ContentDataRemovedAction. This ensures that global currencies are not unloaded when switching content.
Economy Service
  • CHANGE Add a double overflow check for IEconomyService.GetIncrementGeneratorUnitCost(int, IGeneratorEntity, bool, IModifier[]) in case the generator unit cost becomes too large and returns infinity.
Event Settings
  • FEATURE Added EventSettings.timeRemaining to get the time remaining of an event in milliseconds.
  • FEATURE Added EventSettings.SetEventDuration(long eventDuration) to set the duration of an event.
  • CHANGE EventSettingsData.eventDuration has been deprecated. See UPGRADENOTES.md for details.
  • FEATURE Added EventSettingsSavedData.eventDuration and EventSettingsSavedData.SetEventDuration(long eventDuration) to save the duration of an event.
Content
  • FEATURE BeginStage() now calls SetAvailableCurrencies() to make all currencies in StageData.availableCurrencyIds of the current and previous stages to available.
Goal
  • FEATURE Added IActivatable interface member activatableData and isActive flag to abstract Goal class
  • CHANGE GoalSavedData.canClaim now checks if targetProgression has been set so that un-activated goals cannot be claimed
  • CHANGE Goal.Deactivate() no longer resets the saved data of a IGoal, the state of the IGoal will be preserved. See UPGRADENOTES.md for more details.
  • FEATURE Goal.Reset() has been added. This method will deactivate a IGoal and reset it's saved data.
  • FEATURE ResetGoalStateAction has been added to ensure that manipulation of saved data occurs within a IStateAction.
  • CHANGE Goals now resolve entities on Activate() instead of on Initialize() to support global loading of Goals.
Loading
  • REMOVE Removed ContentDataAddedAction and ContentDataRemovedAction from ClearContentDataLoadPhase and LoadContentDataLoadPhase respectively. Services now listen to StaticDataAddedAction and StaticDataRemovedAction instead.
Milestone
  • FEATURE Added IActivatable interface member activatableData to Milestone class
  • FEATURE Added isActive flag to Milestone and MilestoneSavedData
  • FEATURE Added Reset method to IMilestone in order to denote resetting (wipe saved data).
  • FEATURE ModifierService now supports loading and unloading of Global modifier formulas and Content specific modifier formulas. Modifier formula entities are also loaded by the service when IModifierFormulaData are loaded.
  • CHANGE ModifierService now subscribes to StaticDataAddedAction and StaticDataRemovedAction instead of ContentDataAddedAction and ContentDataRemovedAction. This ensures that global modifier formulas are not unloaded when switching content.
PlotPoint Runtime
  • CHANGE If Pause() is invoke on the PlotPointController in the middle of playing a plotpoint, it would finish playing the current plotpoint and then pause.
Projection Service
  • FEATURE Added ProjectionService.RefreshPayoutProjections() to re-calculate the current IPayoutProjections.
Random Service
  • FEATURE Added RandomService that handles all random number generation. The functionality can be overriden to generate these values from the backend.
  • CHANGE All calls using System.Random in entities, services, and actions have been replaced to calls to the RandomService.
Reward
  • FEATURE RewardService now supports loading and unloading of Global rewards and Content specific rewards. Reward entities are also loaded by the service when IRewardData are loaded.
  • CHANGE RewardService now subscribes to StaticDataAddedAction and StaticDataRemovedAction instead of ContentDataAddedAction and ContentDataRemovedAction. This ensures that global rewards are not unloaded when switching content.
  • FEATURE CurrencyReward, BaseRandomCurrencyReward now supports reward values (almost) up to max.double, see RandomService for Random.NextDouble() limitations.
  • CHANGE All calls using System.Random have been replaced to calls to the RandomService.
Standard Content
  • CHANGE Duplicate functionality of trade, timerTrunk, and timedBoost has been abstracted into the StandardContentFeatures component inside the StandardContent, and StandardEventContent.
Timed Activatable
  • FEATURE Introduced Timed Activatable related classes that inherit from the new ITimedActivatable interfaces.
  • FEATURE Introduced the abstract TimedTrack entity, which is a TimedEntity with an ITrack as its activatable, as well as concrete TimedGoalTrack and TimedMilestoneTrack entities.

Timer Service

  • CHANGE ITimerListener.UpdateProgression(1f) is called by the TimerService before ITimerListener.OnTimerEnded(long) in the ITimerListener evaluation logic. All implementations of ITimerListener will receive UpdateProgression(1f) before OnTimerEnded(long) is called.
  • CHANGE Non-looping ITimerListeners are automatically unsubscribed by the ITimerService before ITimerListener.OnTimerEnded(long) is called. ITimerListener no longer needs to unsubscribe itself from the ITimerService on OnTimerEnded(long).
Track
  • FEATURE Introduced Track Entity related classes that inherit from the new ITrack interfaces.
  • FEATURE Added new Track Entity Types:
    • Track: Provides base functionality for all concrete Track implementations
    • Goal Track: A Track that contains only IGoals, the track progresses when the active Goal is claimed.
    • Passive Goal Track: A Track that contains only IGoals, the track progresses when the active Goal can be claimed.
    • MilestoneTrack: A Track that contains only IMilestones
Trade
  • CHANGE All calls using System.Random have been replaced to calls to the RandomService.

idlekit-tools

Data Asset Importer
  • FEATURE Added functionality to import Track and Timed Entity data.
Debug Tools
  • BUGFIX Fixed clicking Ascend in the debug ascend tool in ev-FB_content would hang the game.
Events
  • CHANGE CanvasEventView and CanvasReturnToMainContentView has been updated to support the new IEventSettings.SetEventDuration() functionality.
Goal
  • FEATURE Added CanvasGoalView.SetActiveGoalView to change the progress bar fill color of active / inactive goals
  • FEATURE Goal UI now shows the current progression and target progression of each Goal.
Guid Reference
  • CHANGE GuidReference dropdowns in all the Unity Inspector views have been updated to show the IStaticData.id instead of the filename of the IGuidReferenceableAsset.
Timed Entity
  • FEATURE Added TimedEntityPanel which contains the Track panels.
Track
  • FEATURE Added GoalTrackPanel and MilestoneTrackPanel for the track feature.
  • FEATURE Added track data field in SimpleEntitiesDatabase for the track feature
  • FEATURE Added CanvasGoalTrackPanel and CanvasMilestoneTrackPanel to display a Goal Track or Milestone Track
UI
  • FEATURE Information on whether the user has seen an EventEnd popup is being reset in IStartup.ResetGame(bool).

idlekit-examples

Synchronous Loading
  • FEATURE The Synchronous Loading example has been repurposed into a First Scene tutorial. See the tutorials section http://docs.idlekit.io for more information.
Track
  • FEATURE Added a Track example which shows how the Timed Entity and Tracks could be used.

idlekit-showcase

Events
  • CHANGE Showcase Event UI has been updated to support the new IEventSettings.SetEventDuration() functionality.

Version 1.1.1, 2020-06-01

idlekit-logging

  • N/A

idlekit-ioc

  • N/A

idlekit-framework

  • N/A

idlekit-implementation

  • N/A

idlekit-tools

Unit Tests
  • Small fixes to unit tests to resolve issues in Unity 2019

idlekit-examples

  • N/A

idlekit-showcase

Balance Data
  • CHANGE Data changes to resolve a bug where TimedBoosts were not being applied in maingame Content. See DATACHANGELOG.md for details.

Version 1.1.0, 2020-05-25

idlekit-logging

Test Logger
  • CHANGE TestLogger.LogError now calls Debug.LogError to break the execution of tests in Unity unless ignoreFailingMessages is set to true. This is to ensure error logs are properly tested in unit tests.

idlekit-ioc

  • N/A

idlekit-framework

Action
  • FEATURE Added the ability to specify the priority the listeners(subscribers) get called, in the IActionService.Subscribe<T>(Action<T> listener, object instance, int priority) method. The listener with the higher priority will get called first when an IAction is dispatched.
  • CHANGE The delegate type ActionHandler<T> has been removed, use C#'s Action<T> instead. All functions that require ActionHandler<T> have been updated to use Action<T>. Since the signatures of ActionHandler<T> and Action<T> are the same, no client code change is required.
  • CHANGE IAction.dispatchAs has been renamed to IAction.typesToDispatchAs for consistency and to fix a class generation tool issue.
Container
  • FEATURE Added UnbindIKInstaller to the IIKMonoInstaller to cleanup the IIKInstaller component in the IIKMonoInstaller.
  • FEATURE Added IActionResolver which is an ITypedResolver similar to IEntityResolver to limit the access to provide resolution of IActions.
Currency
  • FEATURE Added void Cleanup() to CurrencyAmount struct for cleanup purpose.
Data Loader
  • FEATURE Added void ClearData(IStaticData) and void ClearData(IStaticData[]) for unloading IStaticData from the IContainer. All implementations of IDataLoaderService have been updated.
  • CHANGE void LoadData(IStaticData,bool) and void LoadData(IStaticData[], bool) have been changed to void LoadData(IStaticData) and void LoadData(IStaticData[]). See UPGRADENOTES.md for details.
Event Settings
  • REMOVE Removed IEventSettings.CompleteMilestone as this functionality should be performed via a CompleteMilestoneStateAction.
  • FEATURE Added convenience method MilestoneCompletionInfo GetMilestoneCompletionInfo(string) to IEventSettings.
Generator
  • CHANGE void Collect(int) has been changed to void Collect(long) to support a larger number of collections.
Loading
  • FEATURE Added new IAdvanceStageLoadPhase ILoadPhase that is responsible for moving the player to the next available IStage. It can also be used to load Stage specific assets.
  • FEATURE Added new IClearContentDataLoadPhase ILoadPhase that is responsible for clearing all IStaticData associated with an IContent.
  • FEATURE Added new IClearGlobalDataLoadPhase ILoadPhase that is responsible for clearing all global IStaticData.
  • FEATURE Added new IClearContentIdLoadPhase ILoadPhase that is responsible for clearing the IUserSavedData.contentInstanceId.
  • FEATURE Added new ISetContentIdLoadPhase ILoadPhase that is responsible for determining and setting up the IUserSavedData.contentInstanceId that the game is going to load.
Projection Service
  • FEATURE Added IProjectionService and IProjectionCalculator to get projections of CurrencyAmount earned over a period of time or completion timestamp to reached a certain CurrencyAmount without player input.
  • FEATURE Added IPayoutProjection model class that represents the ICurrency generation rate of the game before an expiration timestamp. This is useful to calculate currency earnings before an ITimedBoost expires.
Serializer
  • FEATURE Added void DeleteAll() to the ISerializer to delete all ISavedData at runtime. All implementations of ISerializer have been updated.
Startup
  • FEATURE Added void ResetGame(bool) feature to allow in app reset.
  • CHANGE void StartGame(IContext) has been changed to void StartGame(). All implementations of IStartup have been updated.
  • FEATURE If the player was going to start the game in an expired/complete EventContent, the game would now start the player in the MainGame.
Timer Listener
  • CHANGE void OnTimerEnd(int count) has been changed to void OnTimerEnd(long count) to support a larger number of collections. See UPGRADENOTES.md for details.

idlekit-implementation

Action
  • CHANGE Performed a cleanup pass on all IAction and IStateAction to prevent memory leak using the following guidelines:
    • All injected protected variables should be set to null on void ResetEvent()
    • All cached properties should be Clear() and set to null on void Cleanup()
  • REMOVE StaticDataAddedAction and StaticDataRemovedAction have had the bool contentSpecific { get; set; } flag removed. See UPGRADENOTES.md for details.
  • CHANGE IAction.dispatchAs has been renamed to IAction.typesToDispatchAs for consistency and to fix a class generation tool issue, which impacts all actions and state actions.
  • FEATURE Added SetProjectedMilestoneCompletionStateAction which should be dispatched when setting IMilestone projected completion timestamps in IEventSettingsSavedData.
  • CHANGE The CompleteMilestoneStateAction now validates that the IMilestone can be completed prior to changing saved data.
  • CHANGE Passing a null instance to ActionService.Unsubscribe now generates a warning. See UPGRADENOTES.md for details.
Activity Tracking
  • REMOVE Milestone projection logic has been moved to EventService. See Milestone Projection section below for details.
Data Loader
  • CHANGE DataLoaderService no longer automatically unload IStaticData on ClearContentStateAction and void Cleanup(). They are now unloaded in IClearGlobalDataLoadPhase and IClearContentDataLoadPhase.
  • FEATURE Added ContentDataAddedAction and ContentDataRemovedAction which are being listend to by CurrencyService, ModifierService, and RewardService to load ICurrencies, IModifierFormulas, and IRewards. The services no longer listen to SetContentStateAction and ClearContentStateAction.
Economy Service
  • CHANGE EconomyService.GetDuration now logs an error instead of a warning when generator duration is too high or too low.
Entity
  • CHANGE Perform a cleanup pass on all IEntity to prevent memory leak using the following guidelines:
    • All injected protected variables should be null and loaded IEntity should be unloaded on void Cleanup()
    • All cached collections should be Clear() and set to null on void Cleanup()
Event Settings
  • REMOVE Removed EventSettings.CompleteMilestone as this functionality should be performed via a CompleteMilestoneStateAction.
  • CHANGE EventSettings.SetMilestoneCompletionTime now broadcasts a SetProjectedMilestoneCompletionStateAction rather than directly manipulating saved data.
  • CHANGE EventSettingsSavedData.CompleteMilestone will now log an error if an invalid milestoneId is passed.
Generator
  • FEATURE Added long minimumUpdateInterval { get; set; } to AutoCollectState so the user can set the minimum collection interval for testing instead of using a constant 500 milliseconds.
Milestone Projection
  • CHANGE Milestone projection logic has been moved from ActivityTrackingService into EventService utilizing the new ProjectService to calculate the completion time of the Milestones without any player input.
Plot Point
  • CHANGE PlotPointService now implements BindingService so it can bind and unbind PlotPoint related entities with their base types.
SerializationService
  • FEATURE Added void ResetUser() to facilitate in app reset.
Service
  • CHANGE Performed a cleanup pass on all IService to prevent memory leak using the following guidelines:
    • All injected protected variables should be null and loaded IEntity should be unloaded on void Cleanup()
    • All cached collections should be Clear() and/or set to null on void Cleanup()
Timer
  • BUGFIX Fixed a bug where recursively calling TimerService.EvaluateListener would throw an index or null exception if the listeners in TimerService have been modified.

idlekit-tools

Action
  • CHANGE An issue with the class generation tool extending actions and state actions has been fixed by renamingIAction.dispatchAs to IAction.typesToDispatchAs for consistency
Data Asset Importer
  • FEATURE Added an input folder and Generate Paths option, which matches each data asset with its corresponding csv files.
    • This functionality only supports the default IdleKit csv naming format, e.g. !!!AscensionReward!!!.
    • To change the csv file name recognition, please change SimpleDataAssetImporterEditorWindow.GetFormattedTypeName()
Plot Point
  • BUGFIX Solved a bug that the ascension completion plotpoint would not be played if an event ends while during the ascension gameplay.
UI
  • CHANGE Perform a cleanup pass on all UI code to prevent memory leak using the following guidelines:
    • All injected protected variables should be null and loaded IEntity should be unloaded on its cleanup method.
    • All cached collections should be Clear() and set to null on its cleanup method.
  • FEATURE Added CanvasDebugResetGameTool and the UI reset game debug tool, which has the option to reset all the ISavedData.

idlekit-examples

  • CHANGE Updated SynchronousLoading example to override SwitchStage() now the base method uses async loadphases.

idlekit-showcase

  • N/A

Version 1.0.1, 2020-04-20

idlekit-logging

  • N/A

idlekit-ioc

  • N/A

idlekit-framework

  • N/A

idlekit-implementation

Activity Tracking Service
  • CHANGE Changed the interval at which IMilestone projection logic runs to once every 15 seconds.
Economy
  • BUGFIX Removed Economy.MIN_GENERATOR_DURATION, Economy.GetDuration() will use GeneratorBalanceData.MIN_DURATION instead.
  • BUGFIX Economy.GetDuration() will return long.MaxValue if generator duration is too large.
Event Content
  • BUGFIX CleanupActiveMilestone() is now called when the Event ends to prevent further invalid progress.
Generator
  • BUGFIX AutoCollecState.collectDuration() now properly returns a collect duration which is the closest multiple of IGeneratorEntity.duration.
  • BUGFIX CollectFromGeneratorPlayerEvent.Apply() now accounts for collections that aren't at current timestamp. This resolves a bug where resuming back into the app would not result in the correct production start timestamp for Generators that collected while offline.
PlotPoint
  • BUGFIX Fixed an issue where the PlotPointController sequenceQueue was not properly cleared on Cleanup().

idlekit-tools

Class Generation Tool
  • BUGFIX Resolved an issue where it was possible to extend test Entities in the Tools.Editor.Tests namespace.
  • BUGFIX Resolved a number of issues in the EntityBuilder and ServiceBuilder where incorrect base interfaces were being calculated.

idlekit-examples

  • N/A

idlekit-showcase

  • N/A

Version 1.0.0, 2020-03-10

idlekit-logging

  • FEATURE This repo has been added to contain any functionality related to IdleKitLog, IPriorityLogger and it's implementations. This repo has no dependencies and is used by all other idlekit repos.

idlekit-ioc

  • FEATURE This repo has been added to contain any functionality related to dependency container (IContainer and it's implementations). This repo depends on idlekit-logging and is used by all other idlekit repos.

idlekit-framework

Action Service
  • CHANGE IEventService has been renamed to IActionService.
  • CHANGE IActionService.Subscribe<T>(ActionHandler<T> listener, object instance) no longer has a null default value for instance.
  • CHANGE Added IActionService.Subscribe<T>(ActionHandler<T> listener) to allow implementations to subscribe globally.
  • FEATURE Added IActionService.Dispatch<T>(object instance = null) to allow dispatching IAction without the IAction object. This should not be used with IActions that need to have their parameters initialized. Calls to IActionService.Dispatch<T>(T actionTrigger, object instance =null) that do not need the IAction to be initialized are now using this new method.
Boost
  • FEATURE Introduced interfaces for the Timed Boost Entity; ITimedBoost, ITimedBoostData, ITimedBoostSavedData, ITimedBoostDataAsset.
Character
  • REMOVE Removed ICharacter, ICharacterData, ICharacterSavedData and ICharacterDataAsset. This functionality will return in the form of a more generic association data in the future. Please refer to the UPGRADENOTES.md for more details.
Content
  • FEATURE IShowcaseContent has been moved to framework and renamed IStandardContent.
  • FEATURE IShowcaseEventContent has been moved to framework and renamed IStandardEventContent
  • CHANGE IStandardContent.missingResourcesExchangeRateMultiplier has been split into softCurrencyMissingResourcesMultiplier and upgradeableCurrencyMissingResourcesMultiplier
  • CHANGE IStandardContentData.missingResourcesExchangeRateMultiplierId has been split into softCurrencyMissingResourcesMultiplierId and upgradeableCurrencyMissingResourcesMultiplierId
Continuous Integration
  • FEATURE Added a continuous integration script under Builder/Jenkinsfile that serves as an example on how to setup a Jenkins Multi-branch Pipeline with IdleKit.
Currency
  • CHANGE A setAvailable bool has been added to CurrencyAmount to signal that the Currency.available flag should be set when the CurrencyAmount is processed.
Currency Service
  • REMOVE Removed ICurrencyService.ValidateAddCurrencyAmount(string id, double amount) and ICurrencyService.ValidateRemoveCurrencyAmount(string id, double amount). Refer to the UPGRADENOTES.md for more details.
  • FEATURE Utility methods ICurrencyService.RemoveCurrencyAmount(CurrencyAmount amount), ICurrencyService.AddCurrencyAmount(CurrencyAmount amount) and ICurrencyService.SetCurrencyAmount(CurrencyAmount amount) have been added.
Dependency Container
  • FEATURE Introduced IdleKit's own dependency solution that allows the user to bind a type, instance, or method to different types of dependency with an optional Id and various scopes. When the dependency is required, an instance of the dependency will be provided by the container and it's dependencies will be injected if it implements the IInjectable.
  • FEATURE All the dependency container code is located in a separate repository at git@github.com/Idlekit/idlekit-ioc.git in its own name space IdleKit.IoC.
  • CHANGE The entire IdleKit codebase - the IEntity, IAction, IService, and UI code have been refactored to work with the container.
  • CHANGE Please refer to the documentation http://docs.idlekit.io for the various components of the dependency container and the details of the integration.
  • REMOVE The previous IDependencyContainer class has been deprecated.
Entity
  • FEATURE IEntity initialization flow has been refactored. Please refer to the UPGRADENOTES.md for more details.
  • FEATURE Introduce void Initialize() to the lifecycle of all IEntity to perform any setup logic including the subscription to IActions.
  • CHANGE IEntity.Cleanup(IEntity) method on all IEntity is now responsible for cleaning up all its child IEntities and other object references it may receive during its lifetime (i.e: IServices, IEntityData...etc).
  • CHANGE Changed all IEntityDataAsset interfaces to pass through a generic Type that must implement IStaticData. This allows Data Assets to be much more specific about the data they contain while also allowing them to extend other Data Assets. This also means extended Data Assets are forced to pass data that has also extended a base which means things are more consistent.
Event
  • FEATURE Introduced string uniqueContentId { get; } for IEventSettingsData so different IEventSettings can have an unique id for the IEventContent that is associated with the IEventSettings. Consequently, each IEventSettings is now working with IEventContent.instanceId so its IStaticData can be reused for another event (IEventSettings).
  • FEATURE Introduced void CompleteEvent() for IEventSettings and IEventSettingsSavedData, which marks the event (IEventSettings) as completed.
  • CHANGE Renamed OfflineProgressAction to OfflineProgressStartAction to mark the beginning of the Offline Activity Tracker process.
  • FEATURE Introduced OfflineProgressEndAction to mark that the Offline Activity Tracker catch-up process is complete.
Event Content
  • BUGFIX The next Milestone is no longer initialized with the previous Milestone's progress if they are not tracking the same currencyId.
Event Content Service
  • CHANGE IEventContentService has been renamed to IEventService. The previous IEventService has been renamed to IActionService.
Event Service
  • CHANGE IEventService has been renamed to IActionService.
  • REMOVE bool CanClaimRewards(string) and void ClaimRewards(string) have been removed from the IEventContentService. Refer to the UPGRADENOTES.md for more details.
Generator
  • CHANGE Removed references to ICharacter and ICharacterData in IGeneratorEntity and IGeneratorData.
Goal
  • FEATURE IGoalSavedData now stores whether it has been claimed or not.
  • CHANGE GoalDataSequence is no longer a struct. It is a class now because it contains mutable property in string[] goalIds { get; }.
  • CHANGE IGoal.normalizedProgress and IGoalSavedData.normalizedProgress now return a double instead of a float
Offline Activity Tracker
  • FEATURE Once the offline catch-up process is complete, an OfflineProgressEndAction will be broadcast.
Loading
  • FEATURE Added IAsyncLoadable and IAsyncLoader interfaces. These will help consolidate loading operations into more manageable processes with more feedback.
Logging
  • CHANGE All Logging related code has been moved into a new repository at git@github.com/Idlekit/idlekit-logging.git. Refer to the UPGRADENOTES.md for more details.
Milestone
  • REMOVE IMilestoneData.rewardId has been removed as it served no purpose. See UPGRADENOTES.md for details.
  • FEATURE Added double currentProgress { get; } and bool canClaim { get; } to IMilestone, and double progression { get; } and void SetProgressiong(double) to IMilestoneSavedData so they function more similarly to IGoal and IGoalSavedData.
  • CHANGE IMilestone.normalizedProgress now returns a double instead of a float
Modifier
  • REMOVE IModifier no longer implements IEntity.
  • CHANGE IModifierData is no longer IComparable.
  • REMOVE IModifierData.Initialize(IModifierCategoryData modifierCategoryData) has been removed.
  • REMOVE IModifierData no longer keeps a reference to a ModifierCategoryData.
  • REMOVE IModifierData.priority has been removed. The new IModifierFormula handles priority implicitly.
  • CHANGE IModifierCategoryData and IModifierCategoryDataAsset have been renamed to IModifierGroupData and IModifierGroupDataAsset.
  • FEATURE Added IModifierFormula, IModifierFormulaData and IModifierFormulaDataAsset.
  • FEATURE Added IModifierFormulaParser.
  • CHANGE Methods in IModifierCache that used to use IModifierCategoryData types now use IModifierFormula types.
  • REMOVE IModifierCache no longer holds a list of all registered IModifiers and IModifiables
  • REMOVE IEnumerable<ModifierSearchResult> SearchModifiersAffectingModifiable<TModifierCategoryData>(string modifiableId, bool checkCanBeApplied = true), IModifierCache.GetModifier(string modifierId) and IModifierCache.GetModifiable(string modifiableId) have been removed
  • CHANGE Added IEnumerable<IModifiable> IModifierCache.GetModifiablesAffectedByModifier(Type modifierFormulaType, string modifierId) and IEnumerable<IModifierGroupData> IModifierCache.GetModifierGroupDatasByModifierFormula(Type modifierFormulaType).
  • CHANGE Methods in IModifierService that used to use IModifierCategoryData types now use IModifierFormula types.
  • CHANGE Added IModifier[] IModifierService.GetModifiersAffectingModifiable(Type modifierFormulaType, string modifiableId) and IModifiable[] IModifierService.GetModifiablesAffectedByModifier(Type modifierFormulaType, string modifierId).
  • REMOVE Deleted ModifierSearchResult. This functionality is now handled by IModifierGroupData and IModifierFormula.
Namespaces
  • CHANGE The following namespaces have been renamed as follows:
    • IdleKit to IdleKit.Framework
    • IdleKit.PlotPoint to IdleKit.Framework
PlotPoint
Data
  • FEATURE Introduce generic typed version of IPlotPointDataAsset that allows implementations to have a strongly type data variable.
  • REMOVE IPlotPointSequenceCollectionData.StartActivators and IPlotPointSequenceCollectionData.Cleanup have been removed as it is now a pure data class. The functionality is moved into IPlotPointService.
Activation
  • CHANGE IPlotPointActivationCondition has been incorporated into the IContainer and became IInjectable therefore the previous IPlotPointActivationCondition.Start method has been eliminated.
  • FEATURE Added Subscribe and Unsubscribe to IPlotPointActivationCondition to deal with subscribing and un-subscribing to the IActionService.
  • REMOVE IPlotPointActivatorData.Start and IPlotPointActivatorData.Cleanup have been removed as the IPlotPointService is now in charge of creating and injecting the IPlotPointActivationCondition.
  • CHANGE All the implementing classes have been updated accordingly with the above changes.
Runtime
  • CHANGE IPlotPointService interface has been refactored. It is now in charge of managing all plot point related features during runtime and cleanup of the activated IPlotPointSequenceCollectionData for the current IStage.
  • CHANGE IPlotPointDataProvider.Clear has been renamed to IPlotPointDataProvider.Cleanup.
  • REMOVE IPlotPointDataProvider.SendDataAddedAction has been removed. LoadPlotPointsDataLoadPhase in idlekit-tools is now in charged of firing the action PlotPointsLoadedAction.
  • CHANGE All the implementing classes have been updated accordingly with the above changes.
  • CHANGE IPlotPointController interface has been refactored to remove unnecessary functionality and added more C# event callbacks. Visit the UPGRADENOTES.md for details.
Reward
  • FEATURE Added new IReward types:
    • ICurrencyUnlockReward
    • IRandomUnobtainedCurrencyReward
  • FEATURE Added new IRewardData types:
    • ICurrencyUnlockRewardData
    • IRandomUnobtainedCurrencyRewardData
    • IFallbackRewardData
    • ITagRewardData
  • CHANGE Changed the name of IRandomTagsCurrencyReward to IRandomObtainedCurrencyReward and removed all allowUnobtained references from it. IRandomTagsCurrencyRewardData was changed to IRandomObtainedCurrencyRewardData.
  • CHANGE Moved AscensionRewardGroup from idlekit-implementation to idlekit-framework since an interface references it.
  • CHANGE ITimedRewardSavedData and related classes have been converted due to the replacement of long timeStarted {get; }, and bool neverClaimed { get; } with long timeComplete { get; } and bool hasStarted { get; }. It is done so the class can be more consistent with the other timer related classes.
  • CHANGE IGachaReward.GetValidItems now takes an optional ignoreFallback flag.
  • CHANGE IReward.CanClaim now takes an optional ignoreFallback flag.
  • FEATURE IShowcaseTimerTrunk has been moved to idlekit-framework and renamed ITimerTrunk.
Serializer
  • FEATURE Added bool hasDirtyData { get; } so it can be more efficient in determining if on-disc serialization needs to take place.
Services
  • CHANGE Renamed the following Service interfaces to better fit naming conventions.
    • ICurrencyManager was renamed to ICurrencyService
    • IEconomy was renamed to IEconomyService
    • IEntityLoader was renamed to IEntityLoaderService
    • IEventManager was renamed to IActionService
    • IEventContentManager was renamed to IEventService
    • IModifierManager was renamed to IModifierService
    • IPlotpointManager was renamed to IPlotpointService
    • IRewardManager was renamed to IRewardService
    • IStaticDataLoader was renamed to IDataLoaderService
Stage
  • REMOVE Removed IStageData.startCurrencyId and IStageData.startCurrencyAmount.
  • CHANGE Added IStageData.startingCurrencyAmounts.
Startup
  • FEATURE Added IStartup interface to help manage the game boot flow.
  • FEATURE Added IPhaseLoader interface. This can be implemented to help manage the game boot flow.
  • FEATURE Added ILoadPhase interface. This interface will allow you to split game initialization into multiple load phases.
  • FEATURE Added the following ILoadPhase extensions that define typical game boot and content switch sequences:
    • IInitializeUserLoadPhase
    • ILoadGlobalDataLoadPhase
    • IProcessEventsSavedDataLoadPhase
    • ILoadContentDataLoadPhase
    • ILoadContentLoadPhase
    • IClearContentLoadPhase
Static Data
  • CHANGE IDataLoaderService is now able to load global data that do not get cleared between IContent using IDataLoaderService.LoadData(IStaticData, bool).
Time Service
  • FEATURE Add DateTime systemTime { get; }, and long systemTimestamp { get; } to allow setting of the current UTC time used in non-game specific functionality such as calculating the time the user is offline.
  • CHANGE The previous timestamp related functionality has been renamed to DateTime gameTime { get; }, long gameTimestamp { get; } and void SetGameTimestamp(long). Please the UPGRADENOTES.md for more details.
Trade
  • CHANGE GetRandomValidTrade has now been added to the ITradeService to get a valid trade from a random pool of ITrades.
  • CHANGE ITrade.MakeTrade() now returns a boolean value depending on whether or not the trade was successfully made.
  • CHANGE ITrade now dispatches TradeAcceptedActions and TradeDeclinedActions based on player actions.
Trade Service
  • FEATURE Added a GetRandomValidTradeFromPool method to ITradeService to get a valid ITrade from a given pool of ITrades.
Unity
  • CHANGE Upgraded Unity support to 2018.4.18f1.
Unlockable
  • CHANGE IUnlockable now requires SetAvailability and SetObtained methods to be implemented, see UPGRADENOTES.md for details.
  • CHANGE IUnlockableSavedData now requires a SetObtained method to be implemented.
  • REMOVE IUnlockableData has been removed. See UPGRADENOTES.md for details.
User
  • FEATURE long GetLastActivityTime is added to the IUserSavedData to get the timestamp of the last user activity in the current IContent
  • FEATURE void SetLastActivityTime(long) is added to the IUserSavedData to set the timestamp of the last user activity in the current IContent

idlekit-implementation

Action
  • CHANGE IEvent and related classes have now been renamed to IAction.
  • CHANGE IPlayerEvent and related classes have now been renamed to IStateAction.
  • CHANGE NewContentStateAction now sets the ContentSavedData.currentStageId.
  • CHANGE LogLastActiveTimeStateAction no longer requires the current IContent. Instead, it requires a IUserSavedData to store the user's last active time.
  • CHANGE Added ModifierChangedAction which denotes whenever a IModifier state has changed (activation, index change, etc).
  • CHANGE Added ModifierToggledAction which indicates when a IModifier has been activated/deactivated.
  • CHANGE ToggleTimedBoostStateAction and ToggleBoostStateAction now inherit directly from ModifierToggledAction.
  • CHANGE CurrencyObtainedAction now stores a flag denotes whether the obtained flag was set to true or false.
  • CHANGE Added CurrencyAvailableAction to denote when the available flag on an ICurrency has been set.
  • REMOVE StageSelectedAction has been removed. See the UPGRADENOTES.md for details.
  • BUGFIX The dispatch types of ToggleTimedBoostStateAction have had the incorrect type of ToggleBoostStateAction removed.
  • REMOVE OpenTimerTrunkStateAction has been removed. Please see the UPGRADENOTE.md for details.
  • CHANGE Renamed GeneratorUnitTargetHitAction to GeneratorModifierIndexChangedAction.
  • CHANGE IncrementGeneratorUnitStateAction no longer extends GrantRewardStateAction. All reward logic is now handled in GeneratorUnitTargetHitStateAction.
  • FEATURE Added new GeneratorUnitTargetHitStateAction which extends GrantRewardStateAction.
  • CHANGE Moved all ascension related save data changes, aside from rewards, from AscensionCompleteStateAction to AdvanceStageStateAction. See the UPGRADENOTES.md for details.
  • CHANGE Added a IContent field to IdleKitInitializedAction.
  • CHANGE The EventStartedAction and EventEndedAction have are now IStateActions and have been renamed EventStartedStateAction and EventEndedStateAction.
  • CHANGE The GrantRewardStateAction.Apply method will now set the availability of a currency as specified via a IReward.CalculateRewards method.
  • CHANGE Rewards that have been claimed by the GrantRewardStateAction will now be output to the Unity log.
  • CHANGE The protected GrantRewardStateAction.CalculateReward and AscensionCompleteStateAction.CalculateReward methods have been removed.
  • CHANGE TimerTrunkUnlockedPlayerAction has been moved from idlekit-showcase into idlekit-implementation.
  • FEATURE Added the following new TradeActions:
    • TradeActivatedAction is broadcast when an ITrade is successfully activated
    • TradeDeactivatedAction is not currently broadcast but can be sent if an ITrade should be automatically deactivated
    • TradeAcceptedAction is broadcast when a player has successfully completed the active ITrade
    • TradeDeclinedAction is broadcast when a player declines the active ITrade
    • ToggleActiveTradeStateAction is broadcast when an ITrade is activated or deactivated in an IStandardContent.
  • CHANGE AdvanceStageStateAction now checks that Content.nextStageId is not null or empty before setting ContentSavedData.currentStageId. See UPGRADENOTES for more information on this.
Action Service
  • CHANGE The EventService has been renamed to ActionService.
  • CHANGE ActionService.Subscribe<T>(ActionHandler<T> listener, object instance) will log an error if instance is null. Previously it would add a global subscription in this case.
  • CHANGE ActionService.Subscribe<T>(ActionHandler<T> listener) has been added to subscribe globally to actions.
Activity Tacking Service
  • CHANGE Due to the refactor of the IEntity initialization flow, the service now sets the timestamp of the ITimerService on SetContentPlayerAction instead of the ContentInitializedAction.
  • CHANGE Due to the refactor of the IEntity initialization flow, the service now evaluates the expired TimerSubscriptions of the ITimerService on ContentInitializedAction instead of the StageInitializedAction.
Boost
  • CHANGE Various fields in Boost and TimedBoost static data have been updated as a result of the addition of asset creators for Boosts and TimedBoosts. See UPGRADENOTES.md for more details.
  • CHANGE Timed Boost Entity related classes now inherit from the new interfaces in idlekit-framework (ITimedBoost, ITimedBoostData, ITimedBoostSavedData ITimedBoostDataAsset).
  • CHANGE TimedBoost.isActive no longer overrides Boost.isActive for consistency. The isActive flag is set via the ToggleTimedBoostPlayerAction in the same way as in the ToogleBoostPlayerAction.
  • BUGFIX TimedBoostSavedData now correctly inherits from BoostSavedData.
Currency Service
  • FEATURE Utility methods CurrencyService.RemoveCurrencyAmount(CurrencyAmount amount), CurrencyService.AddCurrencyAmount(CurrencyAmount amount) and CurrencyService.SetCurrencyAmount(CurrencyAmount amount) have been added.
Character
  • REMOVED Character, CharacterData, CharacterSavedData and CharacterDataAsset. This functionality will return in the form of a more generic association data in the future.
Core
  • FEATURE Added an extension method in CoreExtensions to get all interfaces and base classes that a class implements and extends.
  • FEATURE Added an extension method in CoreExtensions to help recursively inject dependencies into a root GameObject.
Content
  • FEATURE ShowcaseContent has been moved to implementation and renamed StandardContent
  • REMOVED IdleKit no longer uses IContentSavedData.timeModified to store user's last activity time as it is done now in IUserSavedData.SetLastActivityTime(long).
  • CHANGE ShowcaseContent and all its related classes have been renamed to StandardContent and moved into idlekit-implementation.
  • CHANGE StandardContent and StandardContentData now require videoAdBoostId properties.
  • CHANGE StandardContent and StandardContentData now hold and load a reference of an Boost.
  • FEATURE StandardContent and StandardEventContent now subscribe to all TradeActions to track the status of a player's active Trade.
  • FEATURE Added IStandardContentSavedData and IStandardEventContentSavedData which track the status of a player's active Trade in a given StandardContent.
  • CHANGE StandardContent.missingResourcesExchangeRateMultiplier has been split into softCurrencyMissingResourcesMultiplier and upgradeableCurrencyMissingResourcesMultiplier
  • CHANGE StandardContentData.missingResourcesExchangeRateMultiplierId has been split into softCurrencyMissingResourcesMultiplierId and upgradeableCurrencyMissingResourcesMultiplierId
  • CHANGE StandardEventContent.missingResourcesExchangeRateMultiplier has been split into softCurrencyMissingResourcesMultiplier and upgradeableCurrencyMissingResourcesMultiplier
  • CHANGE StandardEventContentData.missingResourcesExchangeRateMultiplierId has been split into softCurrencyMissingResourcesMultiplierId and upgradeableCurrencyMissingResourcesMultiplierId
Continuous Integration
  • FEATURE Added a continuous integration script under Builder/Jenkinsfile that serves as an example on how to setup a Jenkins Multi-branch Pipeline with IdleKit.
Dependency Container
  • FEATURE Introduced IKMonoInstaller and IKInstaller to handle the registration and de-registration of all the dependency specific to IdleKit.
Entities Database
  • CHANGE EntitiesDatabase has been renamed to SimpleEntitiesDatabase. See UPGRADENOTES.md for details.
Entity
  • CHANGE IEntity.Initialize() is now implicitly called when the IEntity is created in the IEntityLoader right after IEntity.Inject(IResolver) is performed to ensure the dependency is available.
  • CHANGE All EntityDataAssets have been changed to work with the interface changes outlined above in idlekit-framework.
  • CHANGE Missing interfaces have been added to keep the extended Entities consistent and extensible.
    • IStandardEventContent
    • IStandardEventContentData
    • IStandardEventContentDataAsset
    • IStandardContentDataAsset
    • IStandardUpgradeableCurrencyData
    • IStandardUpgradeableCurrencyDataAsset
    • IStandardEventSettingsDataAsset
    • ITimerTrunk
    • ITimerTrunkData
    • ITimerTrunkSavedData
Entity Loader
  • CHANGE In UnbindDerived the call to IEntity.Cleanup is moved to after the EntityRemoveAction is dispatched to stay consistent with the EntityAddedAction. So the listener of EntityRemovedAction can perform the logic before the entity gets cleaned up.
  • CHANGE EntityLoader now tracks the IEntity it has loaded or unloaded. It will add or remove it to the IContainer accordingly when the IEntity is first referenced or have its last reference removed.
  • CHANGE EntityAddedAction is now only called when the first reference to the IEntity is created.
  • CHANGE EntityRemovedAction is now only called when the last reference to the IEntity is removed.
Event
  • CHANGE IEvent and related classes have now been renamed to IAction. See the Action section above for related changes.
  • CHANGE IPlayerEvent and related classes have now been renamed to IStateAction.
Event Service
  • CHANGE The EventService has been renamed to ActionService.
Event Settings
  • CHANGE The EventStartedStateAction is now broadcast after subscription to the TimerService.
  • CHANGE The EventStartedStateAction, EventEndedStateAction and ClaimEventRewardsStateAction are now broadcast with the EventSettings object as their associated instance.
Event Content
  • BUGFIX The next Milestone is no longer initialized with the previous Milestone's progress if they are not tracking the same currencyId.
  • CHANGE ShowcaseEventContent and related classes have been moved to idlekit-implementation and renamed StandardEventContent.
Generator
  • CHANGE The GeneratorEntity.OnModifierIndexChanged method has been renamed to OnModifierAction and is now called whenever any Modifier type action is broadcast.
  • CHANGE Removed references to Character and CharacterData from GeneratorEntity and GeneratorData.
  • CHANGE When a unit target is reached GeneratorEntity will now dispatch both a GeneratorModifierIndexChangedAction and a GeneratorUnitTargetHitStateAction.
  • CHANGE BuyGeneratorStateAction now makes the ICurrencies specified in the GeneratorData.associatedUpgradeableCurrencyIds available and obtained.
  • CHANGE IGeneratorEntity.modifierDataIndex has been set from generatorUnitTargetHit - 1 to generatorUnitTargetHit. Hence, index 0 of the modifierData.amounts would be used when the user has achieved 0 generatorUnitTarget.
Goal
  • FEATURE Introduced a common base class (GeneratorGoal) for all IGeneratorEntity related goals. The following goals have been refactored to work with the base class.
    • AutomateGeneratorsGoal
    • BuyGeneratorTypeGoal
    • CollectFromGeneratorTypeGoal
    • GetGeneratorUnitsForAllGeneratorsGoal
    • GetGeneratorUnitsForGeneratorTypeGoal
    • GetGeneratorUnitsForGeneratorsGoal
    • GetTotalGeneratorUnitsGoal
    • HitGeneratorUnitTargetsGoal
  • FEATURE Introduce a common base class (UpgradeGoal) for all goals that deal with IUpgradeable. The following goals have been refactored to work with the base class.
    • GetUpgradesForCurrencyTypeGoal
    • UpgradeAnyCurrencyGoal
  • FEATURE Added new action GoalActivatedAction that gets send when an IGoal is newly activated in the IStage.
  • CHANGE HitGeneratorUnitTargetsGoal now listens to GeneratorUnitTargetHitStateAction instead of GeneratorUnitTargetHitAction.
  • BUGFIX GetGeneratorUnitsForGeneratorTypeGoal no longer incorrectly caches the first Generator in the stage, as it may be of the wrong type.
  • CHANGE The following goals now subscribe to TradeActivatedAction instead of MakeExchangeAction:
    • MakeAnyTradeGoal
    • MakeTradeTypeGoal
  • CHANGE Goal.normalizedProgress and GoalSavedData.normalizedProgress now return a double instead of a float
JsonSerializer
  • CHANGE JsonSerializer has been renamed to SimpleJsonSerializer.
Loading
  • FEATURE Added AsyncContext to allow the application initialization process to take place over multiple frames.
  • FEATURE Added AsyncLoader utility that can load a group of IAsyncLoadables over multiple frames.
Main
  • CHANGE Refactored completely to use the new IStartup and ILoadPhase system.
  • REMOVE IStage is now being loaded in Content it has been removed from Main.cs.
  • CHANGE Moved Main to idlekit-tools.
Milestone
  • REMOVE MilestoneData.rewardId has been removed as it served no purpose. See UPGRADENOTES.md for details.
  • REMOVE MilestoneProgressAction has been removed due to the introduction of ProgressMilestoneStateAction and SetMilestoneProgressStateAction.
  • FEATURE Added ProgressMilestoneStateAction and SetMilestoneProgressStateAction as previously the IMilestoneSavedData is altered in the IMilestone which is against the IdleKit convention.
  • CHANGE MilestoneCompletedStateAction has been renamed CompleteMilestoneStateAction for clarity.
  • CHANGE normalizedProgress now returns a double instead of a float
Modifier Cache
  • CHANGE IModifiers, IModifiables, and IModifierFormula are now stored in hash sets.
  • CHANGE _specificModifierLookup, _globalModifierLookup, _specificModifiableLookup, and _globalModifiableLookup have been consolidated into _modifierLookup and _modifiableLookup.
  • CHANGE Methods have been updated to use the new lookup structure.
  • REMOVE GetModifier(string modifierId) and GetModifiable(string modifiableId) have been removed.
Modifier Service
  • CHANGE This Service now listens to EntityRemovedAction to unregister IModifiers and IModifiables.
  • REMOVE The ModifierService no longer loads all IBoost Entities in the Entities Database when the Content is loaded, see UPGRADENOTES.md for more details.
  • REMOVE Removed all implementations of IModifierCategoryData:
    • AscensionPowerModifierCategoryData
    • GeneratorPayoutModifierCategoryData
    • GeneratorSpeedModifierCategoryData
    • GeneratorUnitCostModifierCategoryData
    • ModifierCategoryDataAsset
  • CHANGE ModifierData.modifierCategoryId was renamed to ModifierData.modifierGroupId.
  • REMOVE ModifierData.modifierCategoryData, ModifierData.Initialize() and ModifierData.CompareTo() have been removed.
  • FEATURE Added IModifierFormula and IModifierFormulaData implementations to replace the old ModifierCategoryData implementations:
    • AscensionPowerModifierFormula
    • AscensionPowerModifierFormulaData
    • AscensionPowerModifierFormulaDataAsset
    • GeneratorPayoutModifierFormula
    • GeneratorPayoutModifierFormulaData
    • GeneratorPayoutModifierFormulaDataAsset
    • GeneratorSpeedModifierFormula
    • GeneratorSpeedModifierFormulaData
    • GeneratorSpeedModifierFormulaDataAsset
    • GeneratorUnitCostModifierFormula
    • GeneratorUnitCostModifierFormulaData
    • GeneratorUnitCostModifierFormulaDataAsset
    • ModifierFormula
    • ModifierFormulaData
    • ModifierFormulaDataAsset
  • FEATURE Added ModifierFormulaParser to parse human readable formulas that now drive the Modifier system.
  • CHANGE Renamed ModifierCategoryData and ModifierCategoryDataAsset to ModifierGroupData and ModifierGroupDataAsset.
  • CHANGE All methods in EconomyService, ModifierService and ModifierCache that used ModifierCategoryData types to filter results now use ModifierFormula types instead.
  • CHANGE Implemented additional IModifierService and IModifierCache methods.
  • CHANGE ModifierService now pipes all modifier logic through ModifierFormula objects instead of handling the logic internally.
Namespaces
  • CHANGE The following namespaces have been changed:
    • IdleKit to IdleKit.Implementation
    • IdleKit.PlotPoint to IdleKit.Implementation
Offline Activity Tracker
  • FEATURE Once the offline catch-up process is complete, an OfflineProgressEndAction will be broadcast.
PlotPoint
  • FEATURE Added a number of new ActivationConditions: CurrencyObtained, CurrencyAvailable, NumTradesMade, PlotPointSequenceEnded`.
  • CHANGE Renamed AscensionActivationCondition to AscensionCompleteActivationCondition.
  • CHANGE Improved logic for deciding whether a PlotPointImageActor can be reused or not.
  • CHANGE The runtime implementation of the PlotPointDataProvider has been updated to utilize the IContainer.
  • REMOVE Removed the concept of state machine from the PlotPointController as it was not a proper state machine
  • CHANGE PlotPoint related IAction, and IService
Reward
  • CHANGE TimerTrunk and its related classes have been renamed to use the new suffix TimedReward.
  • CHANGE Due to the refactor to ITimedRewardSavedData, the implementations of the TimedReward, ClaimTimedRewardStateAction, and TimedRewardInitializationAction have been altered to support the changes.
  • FEATURE Added new CurrencyUnlockReward that sets the rewarded Currencys ICurrencySavedData.available to true.
  • CHANGE Changed the name of RandomTagsCurrencyReward to BaseRandomCurrencyReward and removed all allowUnobtained logic from it.
  • FEATURE Added new RandomObtainedCurrencyReward extending BaseRandomCurrencyReward that pulls a reward from ICurrencys that match the ITagConsumerData and are obtained. If it is unable to reward a currency it will fall back to a different reward if set.
  • FEATURE Added new RandomUnobtainedCurrencyReward extending BaseRandomCurrencyReward that pulls a reward from ICurrencys that match the ITagConsumerData and are not yet obtained. If it is unable to reward a currency it will fall back to a different reward if set.
  • CHANGE The CurrencyRewardData constructor will now throw an exception if invalid min/max values are passed.
  • CHANGE Moved AscensionRewardGroup to idlekit-framework since an interface there references it.
  • CHANGE The CanClaim methods of the following reward types have been updated to include an optional ignoreFallback flag:
    • AscensionReward
    • CurrencyReward
    • CurrencyUnlockReward
    • GachaReward
    • TimedReward
  • CHANGE The ICurrency used by CurrencyReward is now assigned on initialization and cached.
  • CHANGE TimerTrunk.CanClaim now implements an optional ignoreFallback flag.
  • CHANGE ShowcaseTimerTrunk has been moved to idlekit-implementation and renamed TimerTrunk.
Saved Data
  • FEATURE Introduced SerializedDataCache to keep track of all the content specific ISavedData based on the IContent.instanceId they are associated with. This object is serialized by the default IdleKit implementation.
  • BUGFIX Fixed the bug where content specific ICurrency is being saved as a global ICurrency, which means the progress is not specific to the IContent(event).

Serialization Service

  • CHANGE Due to the refactor to store the last activity time using IUserSavedData.SetLastActivityTime(long), the SerializationService does not need to subscribe to ContentInitializedAction and ClearContentStateAction.
  • CHANGE SerializationService is now responsible for maintaining the SerializedDataCache. This enables the tracking and deleting of content specific ISavedData of a different IContent.
  • CHANGE Introduced SerializationService.GenerateContentSpecificSavedId(string savedId), which consolidates all content specific savedId generation logic.
Services
  • CHANGE All IServices no longer contain cached lookups. They have been converted to retrieve the IEntity using the IResolver or IEntityResolver.
  • CHANGE Renamed the following Services to better fit naming conventions.
    • CurrencyManager was renamed to CurrencyService
    • Economy was renamed to EconomyService
    • EntityLoader was renamed to EntityLoaderService
    • EventManager was renamed to ActionService
    • EventContentManager was renamed to EventService
    • ModifierManager was renamed to ModifierService
    • PlotpointManager was renamed to PlotpointService
    • RewardManager was renamed to RewardService
    • StaticDataLoader was renamed to DataLoaderService
Startup
  • FEATURE Added abstract Startup class that handles typical IdleKit load and content/stage switching load sequences.
  • FEATURE Added abstract PhaseLoader class that manages loading sequences of ILoadPhase objects. Startup currently extends this class.
  • FEATURE Added implementations for all specific ILoadPhase interfaces defined in idlekit-framework:
    • InjectDependenciesLoadPhase
    • InitializeUserLoadPhase
    • LoadGlobalDataLoadPhase
    • ProcessEventsSavedDataLoadPhase
    • LoadContentDataLoadPhase
    • LoadContentLoadPhase
    • ClearContentLoadPhase
Static Data
  • CHANGE DataLoaderService is now able to load global data that do not get cleared between IContent.
  • CHANGE A StaticDataRemovedAction is now sent when data is removed from the DataLoaderService.
Trade
  • CHANGE MakeTrade() now returns a bool depending on whether or not the Trade was successful.
  • FEATURE The input and output currency amounts for an ITrade can now be set via SetInputCurrencyAmount(CurrencyAmount currencyAmount) and SetOutputCurrencyAmount(CurrencyAmount currencyAmount).
Timer Subscription
  • CHANGE* The overloaded constructor for TimerSubscription no longer accepts a DateTime endTime without an initial timestamp.
Timer Trunk
  • CHANGE The TimerTrunk implementation has been renamed to TimedReward. Related IActions and IStateActions have been renamed accordingly. See UPGRADENOTES.md for more information.
  • CHANGE Subscription to the TimerService is now made before, rather than after, the TimedRewardStartAction is sent.
Unity
  • CHANGE Upgraded Unity support to 2018.4.18f1.

idlekit-tools

Asset Importer
  • CHANGE ShowcaseDataAssetImporter has been moved into idlekit-tools and merged with BaseDataAssetImporter.
  • CHANGE BaseDataAssetImporter has been renamed SimpleDataAssetImporter. Related classes such as BaseDataAssetImporterEditorWindow and DataAssetImporterLogger have also been prefixed with Simple.
  • CHANGE BaseEntitiesDatabaseHelper has been renamed SimpleEntitiesDatabaseHelper
  • CHANGE The following DataAssetHeaders and DataAssetCreators have been moved from idlekit-showcase into idlekit-tools and renamed:
    • ShowcaseContentDataAssetHeader to StandardContentDataAssetHeader
    • ShowcaseEventContentDataAssetHeader to StandardEventContentDataAssetHeader
    • ShowcaseTimerTrunkDataAssetHeader to TimerTrunkDataAssetHeader
    • ShowcaseContentDataAssetCreator to StandardContentDataAssetCreator
    • ShowcaseEventContentDataAssetCreator to StandardEventContentDataAssetCreator
    • ShowcaseTimerTrunkDataAssetCreator to TimerTrunkDataAssetCreator
  • CHANGE The Data Asset Creators for StandardEventContent and StandardContent have been updated to import the videoAdBoostId field.
  • FEATURE Added TimedBoostDataAssetCreator and BoostDataAssetCreator to allow for importing of Boosts and TimedBoosts
Continuous Integration
  • FEATURE Added a continuous integration script under Builder/Jenkinsfile that serves as an example on how to setup a Jenkins Multi-branch Pipeline with IdleKit.
Debug Tools
  • CHANGE All debug tools that were initalized on ContentInitializedAction now listen to IdleKitInitializedAction instead.
  • CHANGE DebugCurrencyTool UI is able to take in negative number now, which is helpful for completing negative-income goals like SpendCurrencyGoal.
  • CHANGE The DebugAscendStageTool and DebugRewardTool now both use the newly implemented DebugGrantRewardStateAction in order to grant rewards.
Dependency Container
  • FEATURE Added SimpleInstaller to handle PlotPoint related IActions and IServices dependency registrations.
Entity Loader
  • CHANGE Added unit test to test the IEntity reference tracking ability introduced to EntityLoader.
Namespaces
  • CHANGE The following namespaces have changed:
    • IdleKit.Tools.Editor.GuidReference to IdleKit.Tools.Editor
    • IdleKit.Tools.Editor.PlotPoint to IdleKit.Tools.Editor
    • IdleKit.Tools.Editor.DataAssetImporter to IdleKit.Tools.Editor
    • IdleKit.Tools.Common to IdleKit.Tools
    • IdleKit.Tools.Test to IdleKit.Tools.Tests
Number Formatter
  • CHANGE FormatDouble will now also round values of less than 1000 as specified via the roundDown argument. See UPGRADENOTES.md for details.
Plot Points
  • BUGFIX The inspector updating of GameObject data for PlotPointActor types that was previously directly invoked from PlotPointBaseActor.OnValidate is now called in LateUpdate to resolve Unity warnings.
  • CHANGE Updated all prefabs to nested prefabs after migration to 2018 LTS.
  • FEATURE Added MilestoneCompletedActivationCondition.
Prefabs
  • CHANGE Added Prefab Unity scene that is now used by nested prefabs.
  • CHANGE Updated all UI prefabs to nested prefabs after migration to 2018 LTS.
Static Data
  • FEATURE Added unit test for IStaticDataLoader due to the addition of global IStaticData loading.
Startup
  • CHANGE Moved Main from idlekit-implementation. Main now extends Startup.
  • CHANGE Adjusted CanvasMain to work with startup flow changes. The static links to PlotPoint specific components have been moved into SimpleStartup.
  • REMOVE Removed PlotPointMain and moved it's functionality into SimpleInstaller, SimpleStartup, and LoadPlotPointsDataLoadPhase.
  • FEATURE Added UI specific load phases:
    • CanvasInitializeLoadingViewLoadPhase
    • CanvasInitializeUILoadPhase
    • CanvasCleanupUILoadPhase
    • CanvasToggleDebugUILoadPhase
  • FEATURE Added PlotPoint specific load phases:
    • LoadPlotPointsDataLoadPhase
UI
  • FEATURE Introduced CanvasEntityView<TEntity> that serves as the base class and handle the dependency for all CanvasView that showcases a single IEntity.
  • CHANGE Moved all UI specific code out of Context and into CanvasContext.
  • CHANGE All CanvasView are now being properly injected on creation or own startup.
  • CHANGE CanvasUI now displays a CanvasGenericDialog when a TimerTrunk is claimed.
  • CHANGE All IAction related code has been moved into CanvasUI from ShowcaseCanvasUI.
  • CHANGE Consolidated all the CanvasEntityView creation, initialization and cleanup code into CreateEntityViews and CleanupEntityViews methods on CanvasEntityPanel. All the codes related to populating and cleaning up owning CanvasEntityView have been refactored to use this method. (e.g: CanvasStageView now calls CanvasGeneratorPanel.CreateEntityViews to populate the generator views.)
  • CHANGE CanvasContentView is now responsible for populating CanvasStageView, CanvasEventView, CanvasMilestoneView, CanvasReturnToMainContentView, CanvasTradeViews, and CanvasTimedRewardViews. It is the point of entry for recursively creating all the CanvasEntityViews in the UI. The following classes have been changed due to the implementation:
    • CanvasMain
    • CanvasUI
    • CanvasContentView
    • CanvasStageView
  • CHANGE Introduced CanvasModifierEntityView so CanvasBoostViewand CanvasUpgradeableCurrencyView can share code that displays the ModifierData information in a popup CanvasDialog.
  • CHANGE CanvasTimedBoostView has been implemented, extracting the TimedBoost specific functionality from CanvasBoostView.
  • CHANGE CanvasBoostView no longer listens for ToggleBoostStateAction to activate itself. Instead the view is always active so that Boosts which are not currently active are still displayed, and can be activated by, the UI.
  • REMOVE CanvasModifierDataView and its UI prefab have been removed as the information is now shown in a CanvasDialog popup.
  • CHANGE CanvasUI now listens to GeneratorUnitTargetHitStateAction instead of IncrementGeneratorUnitStateAction to show Generator unit target rewards.
  • CHANGE Added CanvasContentView canvasContentView { get; } to CanvasUI. This is used by the new CanvasInitializeUILoadPhase.
  • FEATURE Added CanvasLoadingView that tracks load progress that is dispatched from IStartup.
  • CHANGE Moved CanvasDebugToggle from idlekit-showcase to here.
  • CHANGE Refactored CanvasMain to work with the new IStartup load flow.
  • CHANGE Any display of double values are now rounded consistently. All payouts and amounts the player has are now floor, targets and costs are ceiling.
  • CHANGE CanvasMilestoneView now displays rewardId based on data in the IEventSettings.
  • BUGFIX Fix a bug where CanvasTradeViews are not being cleared up between IContent so Trades in a different IContent are causing null references.
  • BUGFIX Fix a bug where CanvasUpgradeableCurrencyViews display the wrong background colours when the IUpgradeableCurrencies are made available on IStage start.
  • CHANGE A number of CanvasView classes have moved from idlekit-showcase into idlekit-tools:
    • CanvasAscensionGameplay
    • CanvasMissingResourcesDialog
    • CanvasTimerTrunkView
  • CHANGE PlotPointUI has been renamed StandardUI. See UPGRADENOTES for more.
  • FEATURE Added a CanvasModifiableEntityView which is the equivalent of the CanvasModifierEntityView but displays information about all IModifiers that affect the IModifiable.
Unity
  • CHANGE Upgraded Unity support to 2018.4.18f1.
  • CHANGE All the IdleKit UI has been retrofitted to work with Unity's nested prefabs system. The prefabs components that built up all the nested prefabs are located in idlekit-tools/Common/Prefabs.
Test
  • FEATURE Due to the introduction of IEntity.Initialize() and the changes made to IEntity.Cleanup(IEntityLoader) all IEntity unit tests also now test Initialize() and Cleanup(IEntityLoader) methods for all IEntity.
Welcome Back Dialog
  • BUGFIX Now only unsubscribes from CollectFromGeneratorStateAction when the OfflineProgressEndAction is recieved. This resolves an issue where currency earned via collections after TimedBoost expiry were not being displayed correctly.

idlekit-examples

Continuous Integration
  • FEATURE Added a continuous integration script under Builder/Jenkinsfile that serves as an example on how to setup a Jenkins Multi-branch Pipeline with IdleKit.
Examples
  • CHANGE The Boost Example now shows how both IBoost and ITimedBoost Entities function.
  • CHANGE The LoopingContentSavedData implementation no longer overrides currentStageId as it is required by the LoadPlotPointDataLoadPhase.
  • REMOVE Removed the ContentSwitch example as it wasn't demonstrating useful functionality.
Loading
  • FEATURE* Added new "AsyncLoading" and "SynchronousLoading" examples to demonstrate the two approaches to loading.
PlotPoint
  • CHANGE The previous PlotPoint tutorial example has been moved into (REPO)/Runtime/Tutorials/PlotPoint
  • FEATURE Add a new PlotPoint example that has built in plotpoints for all the IPlotPointActivationCondition offered in IdleKit.
Prefabs
  • CHANGE Updated all UI prefabs to nested prefabs after migration to 2018 LTS.
  • CHANGE All prefabs previously in idlekit-showcase have been moved into idlekit-tools.
UI
  • CHANGE Due to the update to CanvasContentView, the following classes have been modified or removed (replaced with their parent classes in Unity):
    • BoostMain - modified
    • BoostUI - removed
    • ContentSwitchUI - removed
    • CurrencyUI - removed
    • GachaUI - removed
    • SynchronousLoadingContext - removed
    • TimedRewardMain - modified
    • TimedRewardUI - removed
    • TradeMain - removed
    • TradeUI - removed
Unity
  • CHANGE Upgraded Unity support to 2018.4.18f1.
  • CHANGE The examples scenes are now composed of nested prefabs (with variants) built from the prefab components located in idlekit-tools.

idlekit-showcase

General
  • CHANGE All idlekit-showcase classes have been moved into idlekit-framework, idlekit-implementation, and idlekit-tools.
Asset Importer
  • CHANGE All asset importers and headers in idlekit-showcase have been moved into idlekit-tools.
CanvasView
  • CHANGE The following CanvasViews have been moved to idlekit-tools:
    • CanvasAscensionGameplay
    • CanvasMissingResourcesDialog
    • CanvasTimerTrunkView
  • REMOVE CanvasShowcaseUpgradeableCurrencyView has been merged with CanvasUpgradeableCurrencyView and it's cs file removed.
Content
  • CHANGE The previous idlekit-showcase content entities have been renamed and moved into idlekit-implementation.
    • IShowcaseContent, ShowcaseContent and related classes to IStandardContent and StandardContent
    • IShowcaseEventContent, ShowcaseEventContent and related classes to IStandardEventContent and StandardEventContent
Continuous Integration
  • FEATURE Added continuous integration scripts under Builder/ folder that serve as examples on how to setup a Jenkins Multi-branch Pipelines with IdleKit.
Services
  • CHANGE ShowcaseUpgradeableCurrencyManager was renamed StandardCurrencyService and move into idlekit-implementation.
Settings
  • CHANGE Added the editor settings file to Showcase project as it contains nested prefab editing environment settings.
  • CHANGE Added the project version file to the Showcase project as it contains Unity version information.
  • CHANGE Added the Unity manifest file to the Showcase project as it contains dependency information.
UI
  • CHANGE Due to the update to CanvasContentView, the following classes have been modified or removed:
    • ShowcaseUI - removed, replaced the usage with its base StandardUI and CanvasUI.
    • ShowcaseContentView - modified, moved into idlekit-tools and renamed to StandardCanvasContentView
  • CHANGE Moved CanvasDebugToggle to idlekit-tools.
  • CHANGE Any display of double values are now rounded consistently. All payouts and amounts the player has are now floor, targets and costs are ceiling.
Unity
  • CHANGE Upgraded Unity support to 2018.4.18f1.
  • CHANGE The Showcase scene is now composed of nested prefabs (with variants) built from the prefab components located in idlekit-tools.
UpgradeableCurrency
  • REMOVE ShowcaseUpgradeableCurrency has been removed. See UPGRADENOTES for detail.
  • REMOVE ShowcaseUpgradeableCurrencyManager has been removed. See UPGRADENOTES for detail.
TimerTrunk
  • CHANGE The IShowcaseTimerTrunk interface and ShowcaseTimerTrunk implementation has been moved to idlekit-framework`idlekit-implementationand renamedITimerTrunkandTimerTrunk`.

Version 0.20.7, 2020-01-28

idlekit-framework

  • N/A

idlekit-examples

  • N/A

idlekit-implementation

  • BUGFIX Stage.Cleanup() now correctly calls Cleanup() on each active goal rather than Deactivate(), which would previously cause the goal progress to reset on content switch.
  • BUGFIX The Milestone tracking code in OfflineActivityTracker now fails gracefully when completion times overflow.

idlekit-showcase

  • N/A

idlekit-tools

Plot Points
  • FEATURE Added MilestoneCompletedActivationCondition.

Version 0.20.6, 2019-12-11

idlekit-framework

  • N/A

idlekit-examples

  • N/A

idlekit-implementation

Event Settings
  • BUGFIX EventSettingsSavedData now correctly serializes the next IMilestone completion time.
  • BUGFIX EventSettings now subscribes to the ITimerService after a ContentInitializedEvent is triggered. This prevents the ITimerService from evaluating any IEventSettings that are subscribed to it before the initialization phase has completed. It was previously possible for an EventEndedEvent to be triggered before all the IEntities were loaded.

idlekit-showcase

  • N/A

idlekit-tools

  • N/A

Version 0.20.5, 2019-11-20

idlekit-framework

Economy
  • CHANGE Added optional IModifier[] exclusion list parameter to several methods in IEconomy.
  • GetPayout(IGeneratorEntity generatorEntity, bool applyModifiers, IModifier[] excludedModifiers = null)
  • GetDuration(IGeneratorEntity generatorEntity, bool applyModifiers, IModifier[] excludedModifiers = null)
  • GetAffordableUnitsToNextTarget(IGeneratorEntity generatorEntity, bool applyModifiers, IModifier[] excludedModifiers = null);
  • GetMaxAffordableUnits(IGeneratorEntity generatorEntity, bool applyModifiers, int maxCap = -1, IModifier[] excludedModifiers = null)
  • GetIncrementGeneratorUnitCost(int unitsToIncrease, IGeneratorEntity generatorEntity, bool applyModifiers, IModifier[] excludedModifiers = null)
  • GetAscensionPower(IStage stage, bool applyModifiers = true, double ascensionPower = 1d, IModifier[] excludedModifiers = null)
Event Settings
  • CHANGE Moved time related functionality from idlekit-showcase. Doing this allows for the prediction of milestone completion times for use when events are finished while players are offline.
  • Added IEventSettings.isActive
  • Added IEventSettings.SetMilestoneCompletionTime(string milestoneId, long timestampInMilliseconds)
  • Added IEventSettings.StartEvent(long timestampInMilliseconds)
  • Added IEventSettings.EndEvent(long timestampInMilliseconds)
  • Added IEventSettingsData.eventDurationInMilliseconds { get; }
  • Deprecated IEventSettingsSavedData.completedMilestoneIds { get; }. See UPGRADENOTES for details.
  • Added IEventSettingsSavedData.milestoneCompletionInfo { get; }
  • Added IEventSettingsSavedData.timeStartedInMilliseconds { get; }
  • Added IEventSettingsSavedData.timeCompletedInMilliseconds { get; }
  • Added IEventSettingsSavedData.isComplete { get; }
  • Deprecated IEventSettingsSavedData.CompleteMilestone(string milestoneId). See UPGRADENOTES for details.
  • Added IEventSettingsSavedData.CompleteMilestone(string milestoneId, long timestampInMilliseconds)
  • Added IEventSettingsSavedData.StartEvent(long eventStartTimeInMilliseconds)
  • Added IEventSettingsSavedData.EndEvent(long eventEndTimeInMilliseconds)
Modifier Cache
  • CHANGE Added optional IModifier[] exclusion list parameter to IModifierCache.SearchModifiersAffectingModifiable<TModifierCategoryData>(string modifiableId, bool checkCanBeApplied = true, IModifier[] excludedModifiers = null).
Modifier Manager
  • CHANGE Changed IModifierManager and IModifierCache method signatures that involve applying modifiers to take an optional list of IModifier objects to exclude from calculations.
  • IModifierManager.ApplyModifiers<TModifierCategoryData>(IModifiable modifiable, ref double modifiedValue, IModifier[] excludedModifiers = null)
  • IModifierManager.ApplyModifiers<TModifierCategoryData>(IModifiable modifiable, ref double modifiedValue, int additionalLevels, IModifier[] excludedModifiers = null)
Timer Service
  • CHANGE Added ITimerService.timestampInMilliseconds.

idlekit-implementation

Economy
  • CHANGE Economy implemented all changes made in IEconomy.
Event Settings
  • CHANGE EventSettings implemented all added interface properties and methods in IEventSettings.
  • CHANGE EventSettings implemented ITimerListener and based on the Event duration will automatically end the event after the duration has passed.
  • FEATURE Added EventStartedEvent and EventEndedEvent events that are dispatched by EventSettings when an event starts or ends.
  • CHANGE EventSettings.CanClaimRewards(string contentId) now also checks that the Event is complete.
  • CHANGE EventSettings.GetRewardIds() now checks milestone completion times before adding rewards to the list.
  • CHANGE Added serialized date EventSettingsData._eventDurationInSeconds which is converted to milliseconds at runtime and accessible via EventSettingsData.eventDurationInMilliseconds.
  • CHANGE EventSettingsSavedData implemented all changes made in IEventSettingsSavedData.
  • FEATURE Added IdleKitInitialized event to signify when all IdleKit Entities have been initialized.
Main
  • CHANGE Now broadcasts the IdleKitInitialized at the end of Main.StartGame.
Modifier Cache
  • CHANGE Updated IModifierCache to optionally allow a list of IModifier objects to exclude when ApplyModifiers() is called.
Modifier Manager
  • CHANGE Updated ModifierManager to optionally allow a list of IModifier objects to exclude when ApplyModifiers() is called.
Offline Activity Tracker
  • FEATURE Added logic that will calculate future Milestone completion times periodically, moves between content and when a player backgrounds the app. These times are then used when calculating which milestones were completed after an event has been finished and rewards are being claimed. This will allow a user to leave an event content and not return to it while the event is active, yet still claim all of the milestones they completed while being away from the app.
  • CHANGE Now listens to IdleKitInitialized event rather than StageInitializedEvent to perform catch-up logic. This ensures that all Entities have been initialized prior to the catch-up.
Timer Service
  • CHANGE Added TimerService.timestampInMilliseconds.

idlekit-tools

UI
  • REMOVE Moved all event related UI code from idlekit-showcase and deleted original class.
  • ShowcaseCanvasEventView.cs to CanvasEventView
  • ShowcaseCanvasReturnToMainContentView.cs to CanvasReturnToMainContentView
  • ShowcaseCanvasStageView.cs to CanvasStageView

idlekit-examples

  • N/A

idlekit-showcase

Events
  • REMOVE Removed ShowcaseEventStartedEvent and ShowcaseEventEndedEvent.
Event Settings
  • REMOVE Removed all classes that extended EventSettings and related classes.
  • IShowcaseEventSettings.cs
  • IShowcaseEventSettingsData.cs
  • IShowcaseEventSettingsSavedData.cs
  • IShowcaseEventSettingsDataAsset.cs
  • ShowcaseEventSettings.cs
  • ShowcaseEventSettingsData.cs
  • ShowcaseEventSettingsSavedData.cs
  • ShowcaseEventSettingsDataAsset.cs
  • ShowcaseEventSettingsDataAssetHeader.cs
  • ShowcaseEventSettingsDataAssetCreator.cs
UI
  • REMOVE Removed Event related canvas extensions.
  • ShowcaseCanvasEventView.cs
  • ShowcaseCanvasReturnToMainContentView.cs
  • ShowcaseCanvasStageView.cs
  • CHANGE Updated ShowcaseUI to work without the removed classes.

Version 0.20.4, 2019-11-04

idlekit-framework

  • N/A

idlekit-implementation

Content
  • BUGFIX Fix a bug that IContentSavedData.currentStageId is not being serialized until the first ascension.
Event Content
  • BUGFIX The next Milestone is no longer initialized with the previous Milestone's progress if they are not tracking the same currencyId.
Events
  • FEATURE Introduce OfflineProgressEndEvent to mark that the Offline Activity Tracker catch-up process is complete.
Goal
  • BUGFIX GetGeneratorUnitsForGeneratorTypeGoal no longer incorrectly caches the first Generator in the stage, as it may be of the wrong type.
  • BUGFIX GoalData.isContentSpecific is now set to true by default. See UPGRADENOTES.md for more detail.
Offline Activity Tracker
  • FEATURE Once the offline catch-up process is complete, an OfflineProgressEndEvent will be broadcast.

idlekit-tools

Welcome Back Dialog
  • BUGFIX Now only unsubscribes from CollectFromGeneratorPlayerEvent when the OfflineProgressEndEvent is recieved. This resolves an issue where currency earned via collections after TimedBoost expiry were not being displayed correctly.

idlekit-examples

  • N/A

idlekit-showcase

  • N/A

Version 0.20.3, 2019-09-16

idlekit-framework

Milestones
  • BUGFIX The GuidReferenceable attribute used with MilestoneRewardPair._milestoneId and MilestoneRewardPair._rewardId have been changed to GuidReference.

idlekit-implementation

Logger
  • BUGFIX The DebugLogger now correctly copes with formatting of filepaths that are outside of the Unity project.
Upgradeable Currency
  • BUGFIX When a UpgradeableCurrency is obtained, a ModifierIndexChangedEvent will now be fired to denote that the modifier is active and will effect any related IModifiable.

idlekit-tools

  • N/A

idlekit-examples

  • N/A

idlekit-showcase

  • N/A

Version 0.20.2, 2019-09-03

idlekit-framework

Generator
  • BUGFIX Introduced GeneratorEntity.payoutCurrencyPerMilliSecond as a replacement for payoutCurrencyPerSecond. See UPGRADENOTES.md for more details.

idlekit-implementation

Debug Logger
  • BUGFIX Removed an erroneous using statement which could result in compile errors.
Generator
  • BUGFIX Introduced GeneratorEntity.payoutCurrencyPerMilliSecond as a replacement for payoutCurrencyPerSecond which was actually returning values in milliseconds. See UPGRADENOTES.md for more details.
ToggleTimedBoostPlayerEvent
  • BUGFIX Resolved an issue where the ToggleTimedBoostPlayerEvent would cache the first TimedBoost it was passed, see UPGRADENOTES.md for more details.

idlekit-tools

Asset Importer
  • BUGFIX Fixed a number of issues to allow the MakeAnyTradeGoal and MakeTradeTypeGoal assets to be correctly generated and included in the Entities Database.
Canvas View
  • CHANGE The CanvasBoostView has been updated to account for changes to the ToggleTimedBoostPlayerEvent.
Debug Tools
  • CHANGE The CanvasDebugTimeSkipTool has been updated to work with Generator.payoutCurrencyPerMilliSecond.

idlekit-examples

  • N/A

idlekit-showcase

  • N/A

Version 0.20.1, 2019-07-18

idlekit-framework

  • N/A

idlekit-implementation

Saved Data
  • BUGFIX Fixed the bug where content specific ICurrency is being saved as a global ICurrency, which means the progress is not specific to the IContent(event).

idlekit-tools

  • N/A

idlekit-examples

  • N/A

idlekit-showcase

  • N/A

Version 0.20.0, 2019-07-08

idlekit-framework

Content
  • CHANGE The ascension flow has been revamped to enable an optional gameplay segment during the ascension. See the UPGRADENOTES.md or docs.idlekit.io for more details.
Currency
  • REMOVE ICurrency.ContainsTag(string) and ICurrency.ContainsTagIn(string[]) have been moved to the newly created ITagService. See UPGRADENOTES.md for details.
  • CHANGE ICurrency and ICurrencyData now implement ITaggedEntity and ITaggedEntityData.
Currency Management
  • REMOVE GetAllCurrenciesOfTagOrRarity has deprecated. See UPGRADENOTES.md for details.
Gacha
  • CHANGE Introduced IGachaSlot and IGachaItem interfaces to replace the previous GachaSlot and GachaItem struct. To keep concrete implementation in idlekit-implementation.

Event Content

  • FEATURE Introduced Event Contents with Milestone progress support to IdleKit. This will allow for alternate Content that tracks player progress via Milestones with rewards. See UPGRADENOTES.md for details.

Modifiers

  • CHANGE Refactored the ModifierCache to work more like the IEntityCache. Now an IModifierCache exists and is integrated into the dependency binding system. This allows for much more extensibility and the implementation of custom IModifierCache objects.
  • CHANGE Added IModifierCategoryData.targetModifiableTypes to allow IModifierCache to organize and return IModifiable objects and provide verification that given IModifierCategoryData filters only IModifiable objects that can actually be affected by that IModifierCategoryData.
  • CHANGE Added IModifier.modifierId to provide a single identifier to use when retrieving IModifier objects.
  • CHANGE Added checkCanBeApplied parameter to IModifierCache.SearchModifiersAffectingModifiable<TModifierCategoryData>(string modifiableId, bool checkCanBeApplied = true) that defaults to true. This will maintain previous behaviour, but allow searches for IModifier objects that can't be applied yet.
  • CHANGE Added IModifierManager.GetModifiable(), IModifierManager.GetAllModifiablesOfType<T>(), IModifierManager.GetModifiablesAffectedByModifier(string modifierId) and IModifierManager.GetModifiablesAffectedByModifier<TModifierCategoryData>(string modifierId) to make IModifierManager provide more data access.
  • CHANGE Moved ModifierSearchResult from idlekit-implementation to it's own class file in idlekit-framework

Plot Points

  • FEATURE Added IPlotpointController.canPlay { get; }. This can be used to help manage PlotPoint playback.
Saved Data
  • FEATURE Added long timeCreated and long timeModified to all ISavedData and its override. We are now able to track the time the ISavedData was created and last modified. All classes that implement ISavedData have had their constructor changed. See UPGRADENOTES.md for details.
Static Data
  • CHANGE Due to the ISavedData refactor all classes that implement ISavedDataProvider have had their signatures changed. See UPGRADENOTES.md for details.
Tag
Tagged
  • FEATURE Introduced ITaggedEntity, and ITaggedEntityData for the Entity classes that contain ITagData[]. ITagConsumerData has also been added as a utility interface for Entities that target multiple ITaggedEntity.
Tag Consumer Data
  • FEATURE ITagConsumerData which contains an array of targetTagIds and a targetAll flag to represent whether the Entity targeting these tags requires all or any of them to be present on the target ITaggedEntity.
Tag Service
  • FEATURE Introduced ITagService and its implementation TagService that deal with all ITagData related logic between the ITaggedEntity and ITagConsumerData.
Trade
  • FEATURE ITrade interface has been added to allow for Trade to become a full Entity with a Controller class.
  • FEATURE ITradeService interface has been added to allow for creation of a Trade Service to manage ITrade Entities.
  • CHANGE ITradeData now inherits from IEntityData. See UPGRADENOTES.md for more details.
  • CHANGE ICurrencyManager.GetAllCurrenciesOfTagOrRarity has been deprecated. See UPGRADENOTES.md for more details.

idlekit-implementation

Currency Manager

  • CHANGE The arguments for the CurrencyManager constructor now require ITagService.

Event Content

  • FEATURE Added implementations for all aspects of the new Event Content feature.
Events
  • FEATURE Added AscensionStartEvent that signals the start of the ascension gameplay has been triggered by the player.
  • FEATURE Added long timeOffline { get; set;} to OfflineProgressEvent to keep track of the time that the user is offline for.
  • CHANGE AscendPlayerEvent has been renamed to AscensionCompletePlayerEvent. See UPGRADENOTES.md for details.
  • CHANGE AscensionCompleteEvent has been renamed to AdvanceStageEvent. See UPGRADENOTES.md for details.
Generators
  • CHANGE Internal logic uses milliseconds. Data imports seconds and converts to milliseconds when read.
  • CHANGE GeneratorSavedEntityData has gone through massive change due to the ISavedData refactor and code cleanup. See UPGRADENOTES.md for details.
Goals
  • Feature The following new Goals have been added for use with ITrade entities:
  • MakeAnyTradeGoal - satisfied when a certain number of Trades have been made by the player (not specific to the Trade Id).
  • MakeTradeTypeGoal - satisfied when a certain number of the specified Trades have been made.
  • CHANGE Internal logic for dynamic goals uses milliseconds. Data imports seconds and converts to milliseconds when read.
  • CHANGE Due to the introduction of ITagConsumerEntity and ITagConsumerEntityData the following IGoal and IGoalData have been refactored to implement the new interfaces:
    • CollectCurrenciesWithTagsGoal
    • DynamicCollectCurrenciesWithTagsGoal
    • SpendCurrenciesWithTagsGoal
    • UpgradeCurrenciesWithTagsGoal.
Modifiers
  • CHANGE Refactored ModifierManager so it is no longer a partial class. It now behaves like the other IService objects and can be extended in the same manner.
  • FEATURE Moved ModifierCache out of ModifierManager and into it's own class that implements IModifierCache. This allows it to be full extensible since it is now included in the dependency system.
  • BUGFIX Fixed issue where ModifierCache.GetModifiersAffectingModifiable methods would not return any IModifier objects that affected the IModifiable via IModifierData.affectAll.
  • CHANGE Added checkCanBeApplied parameter to ModifierCache.SearchModifiersAffectingModifiable<TModifierCategoryData>(string modifiableId, bool checkCanBeApplied = true) to allow for optionally getting IModifier objects that cannot currently apply their modification. Previous behaviour remains unchanged.
  • FEATURE Added additional methods to ModifierManager and ModifierCache to allow for the retrieval of IModifiable objects affected by specific IModifier objects.
    • Modifiermanager.GetModifiable<T>(string id)
    • Modifiermanager.GetAllModifiablesOfType<T>()
    • Modifiermanager.GetModifiablesAffectedByModifier(string modifierId)
    • Modifiermanager.GetModifiablesAffectedByModifier<TModifierCategoryData>(string modifierId)
    • ModifierCache.modifiables
    • ModifierCache.GetModifiable(string modifiableId)
    • ModifierCache.RegisterModifiable(IModifiable modifiable)
    • ModifierCache.UnregisterModifiable(IModifiable modifiable)
    • ModifierCache.GetModifiablesAffectedByModifier(string modifierId)
    • ModifierCache.GetModifiablesAffectedByModifier<TModifierCategoryData>(string modifierId)
Random Reward
  • CHANGE RandomTagCurrencyReward and the corresponding file has been renamed to RandomTagsCurrencyReward as it supports multiple tagsId.
  • CHANGE RandomTagsCurrencyReward and RandomTagsCurrencyRewardData now implement ITagConsumerEntity and ITagConsumerEntityData.
Plot Points
  • CHANGE All types of ActivationConditionData and ActionData now have public constructors.
  • FEATURE Added the ability to disable and enable PlotPoint playback. This will be useful when working with UI and PlotPoint flow. This is done via the these new PlotPoint Events:
    • PlotPointSetPlaybackAvailabilityEvent allows PlotPoint playback to be enabled or disabled by setting the PlotPointSetPlaybackAvailabilityEvent.canPlay property.
    • PlotPointPlaybackAvailabilityChangedEvent is dispatched by the PlotpointController when playback is enabled or disabled. PlotPointPlaybackAvailabilityChangedEvent.canPlay will reflect the current status.
Saved Data
  • FEATURE Added BaseSavedData that most classes that implement ISavedData extend to deal with the new ISavedData.timeCreated and ISavedData.timeModified functionality.
Tag
  • FEATURE All implementation of ITagConsumerData have the field bool targetAll added so if we can specify we want to match all or any in the target ITaggedEntity (e.g: ICurrency). The following Entities are effected:
  • CollectCurrenciesWithTagsGoalData
  • DynamicCollectCurrenciesWithTagsGoalData
  • SpendCurrenciesWithTagsGoalData
  • UpgradeCurrenciesWithTagsGoalData
  • RandomTagsCurrencyReward
  • FEATURE TagException and TagNotFoundException have been added.
Trade
  • FEATURE Trade Entity controller has been added, implementing ITrade and containing all encapsulated logic required by a trade.
  • FEATURE TradeException and TradeNotFoundException have been added.
  • CHANGE TradeData holds arrays for input and output Tag Ids. See upgradenotes.md for more detail.
Plot Points
  • BUGFIX Fixed an issue where the AutomationAvailableActivationCondition and GeneratorAvailableActivationCondition would not fire if their conditions were achieved during Stage initialization.
Time Management
  • BUGFIX Fixed an issue where subscriptions to the TimerService made prior to the initial Unity update would receive an invalid timestamp.
  • CHANGE All time related logic is now done with milliseconds.
  • CHANGE All TimerSubscription constructors that took time in seconds have been deprecated:
  • TimerSubscription(float durationSeconds, bool loop = false)
  • TimerSubscription(float durationSeconds, long initialTimestamp, bool loop = false)
Timed Rewards
  • CHANGE Internal logic uses milliseconds. Data imports seconds and converts to milliseconds when read.
Timer Service
  • BUGFIX Zero duration looping subscriptions no longer result in divide by zero exceptions in TimerService.EvaluateListeners.
  • CHANGE TimerSubscription.duration will now throw an exception if set to less than zero.
Saved Data
  • FEATURE Added BaseSavedData that most classes that implement ISavedData extend to deal with the new ISavedData.timeCreated and ISavedData.timeModified functionality.
Upgradeable Currency
  • CHANGE bool UpgradeableCurrency.canBeApplied { get; } no longer considers the availability of the UpgradeableCurrency.
Upgradeable Currency Manager
  • CHANGE The arguments for the UpgradeableCurrencyManager constructor now require ITagService.

idlekit-tools

Asset Importer
  • CHANGE TradeDataAssetCreator now imports and fills out arrays for input and output currency tag Ids.
  • CHANGE Due to the addition of ITagConsumerData, Asset Creators for the following Static Data have been updated:
  • CollectCurrenciesWithTagsGoalData
  • DynamicCollectCurrenciesWithTagsGoalData
  • SpendCurrenciesWithTagsGoalData
  • UpgradeCurrenciesWithTagsGoalData
  • RandomTagsCurrencyReward
Goals
  • CHANGE Due to the refactoring of all ITagConsumerEntity IGoalss, the corresponding unit tests have been updated.
Modifier
  • CHANGE IModifier related tests have been moved into GeneratorTest, TimedBoostTest, and UpgradeableCurrencyTest.
  • REMOVE ModifierTest has been removed.
Plot Points
  • FEATURE The Plot Point Editor will now automatically updated the associated PlotPointDatabase scriptable object when a PlotPointSequence is created, modified or deleted.
  • REMOVE PlotPointDatabaseEditor has been deprecated. It is no longer required due to Plot Point Editor changes.
Rewards
  • FEATURE Added new individual unit test for each rewards testing specific functions:
    • AscensionRewardTest, CurrencyRewardTest, GachaRewardTest, and RandomTagsCurrencyRewardTest
  • REMOVE The RewardTest was removed due to the addition of individual tests above.
TradeSet
  • REMOVE Due to the refactor of trades, TradeSet has been removed. See UPGRADENOTES.md for more details.
Welcome Back
  • FEATURE Added the time the user is away for in the welcome back message.

idlekit-examples

Examples
  • CHANGE The examples_trade_tradedata asset now includes a tagConsumerData field.
  • CHANGE The Trade example UI prefab now holds a cooldownDuration to denote the time between each trade being offered.
  • CHANGE TradeUI has been updated to account for changes to CanvasTradeView.

idlekit-showcase

Ascension
  • FEATURE Added an ascension battle after the user click the Ascend button. That will serve as an example on how to handle the ascension transition.
Asset Importer
  • CHANGE ShowcaseContentDataAssetCreator now imports the tradeCooldownDuration field.
Content
  • FEATURE Added a new field to ShowcaseContentData that allows the user to set the base ascension power of that IContent.
  • FEATURE ShowcaseContentData and ShowcaseContent now have a tradeCooldownDuration property.
  • CHANGE ShocaseContent properties have been made virtual for extensibility.
  • CHANGE ShowcaseContentParameters now takes a Trade array rather than the deprecated TradeSet.
Event Content
  • FEATURE Added extended classes to showcase the new Event Content system as well as one potential way to extend the implementation to add a limited time to Event Content.
  • FEATURE Extended EventContent (ShowcaseEventContent) to add Event functionality to the showcase project. See UPGRADENOTES.md for more details.
  • FEATURE Extended EventSettings (ShowcaseEventSettings) to showcase one potential way to implement limited time functionality in Events.
  • FEATURE Added a global EntitiesDatabase to show how to manage and access data across multiple Contents.
Events
  • FEATURE Added ShowcaseEventEndedEvent and ShowcaseEventStartedEvent to provide support for limited time Events in the showcase project.
Plot Points
  • CHANGE Added PlotPointUI component to manage the UI / PlotPoint flow. Now dialogs must be closed before PlotPoint playback will happen.
Showcase Upgradeable Currency Manager
  • CHANGE The arguments for the ShowcaseUpgradeableCurrencyManager constructor now require ITagService.
UI
  • CHANGE CanvasTradeView.Initialize now takes an array of Trade Entities and a trade cooldown value along with a IDependencyContainer.
  • CHANGE CanvasTradeView.OnCurrencyChanged now only sets the _acceptButton.interactable field rather than re-generating the amounts within the trade.
  • CHANGE CanvasTradeView.SelectTrade has been renamed to RefreshTrade.
  • CHANGE CanvasTradeView.RefreshTrade is now nly called in CanvasTradeView.OnTimerEnded (whenever the trade timer ends).
  • CHANGE MakeExchangePlayerEvent is now sent via Trade.MakeTrade rather than from UI code in CanvasTradeView.HandleAcceptButtonClick.

Version 0.19.1, 2019-05-30

idlekit-framework

  • N/A

idlekit-implementation

Rewards
  • BUGFIX Fixed an issue with the AscensionReward where only one reward would ever be granted.

idlekit-tools

  • N/A

idlekit-examples

  • N/A

idlekit-showcase

  • N/A

Version 0.19.0, 2019-05-27

idlekit-framework

Goals

  • FEATURE Introduced IDynamicGoalData for IEntityData that are associated with a IDynamicGoal.
  • CHANGE IDynamicGoal now requires an IDynamicGoalData in the interface.
Events
  • REMOVE Removed deprecated IActionManager class.
  • REMOVE Removed deprecated IEventInvoker class.

idlekit-implementation

Currency
  • REMOVE Removed CurrencyData.isActive as it was not used.
Generator
  • BUGFIX The bug that any action which would cause a ModifierIndexChangedEvent would not immediate affect the Generator until the next time the Generator's payout is recalculated has been fixed.
Events
  • REMOVE Removed deprecated EventInvoker class.
  • REMOVE Removed deprecated LoadContentPlayerEvent.
  • REMOVE Removed deprecated LoadStagePlayerEvent.
  • REMOVE AscendPlayerEvent.GetRewardIds has been deprecated. Equivalent functionality now exists in the new AscensionReward Entity controller.
  • CHANGE GrantRewardPlayerEvent constructor now requires a IEventManager to be passed as an argument. This also effects the following derived classes:
  • ClaimGoalPlayerEvent
  • CheckGeneratorUnitTargetHit
  • ClaimTimedRewardPlayerEvent
  • OpenTimerTrunkPlayerEvent
  • REMOVE GrantRewardPlayerEvent.CalculateRewards has been deprecated. Currency amounts for individual rewards are now calculated via GrantRewardPlayerEvent.CalculateReward.
  • CHANGE CheckGeneratorUnitTargetHit.CheckGeneratorUnitTargetHit will now only call CheckGeneratorUnitTargetHit.GrantRewards if there is least one IReward to be granted.
  • CHANGE GrantRewardPlayerEvent now emits a RewardGrantedEvent whenever a IReward is granted to the player.
  • FEATURE RewardGrantedEvent has been added to signal when a IReward has been received by the player.
Goals
  • FEATURE Added new CollectRewardTypeGoal completes when the player is granted one or more specified IRewards, such as a GachaReward. Equivalent Data and DataAsset classes have also been added.
  • FEATURE Added new DynamicCollectCurrenciesWithTagsGoal progresses or completes when the player collects from automated IGenerators that are producing ICurrencies that are associated with certain ITagDatas.
  • FEATURE Added new SpendCurrenciesWithTagsGoal progresses or completes when the player spend ICurrencies that are associated with certain ITagDatas.
  • FEATURE Added new UpgradeCurrenciesWithTagsGoal progresses or completes when the player upgrade IUpgradeableCurrencies that are associated with certain ITagDatas.
  • CHANGE All DynamicGoal now have the fallback logic that if no automated IGenerator producing the required ICurrency is found, it will calculate the dynamic IGoal.targetProgression based on the average purchased IGenerators.payoutCurrencyPerSecond that are producing the correct ICurrency.
  • CHANGE Introduce base abstract implementation for different IGoal archetypes: CollectGoal, DynamicCollectGoal, SpendGoal, and UpgradeGoal. Existing IGoals have been retrofitted to implement the abstract classes if applicable.
  • CHANGE All Goals no longer have the Serializable tag.
Rewards
  • FEATURE AscensionReward has been implemented to make it into a full Entity, inheriting from IReward. Some functionality from AscendPlayerEvent now lives within the AscensionReward controller.
  • CHANGE AscensionRewardData now inherits from IRewardData and has the requisite Create method implemented.

idlekit-tools

CanvasView
  • BUGFIX Fixed issue in CanvasGeneratorView where the buy max units button would attempt to purchase an invalid number of units after the final Unit Target had been reached.
  • BUGFIX Having any CanvasBoostView objects in CanvasContentView should be optional.
Data Importer
  • FEATURE A new CollectRewardTypeGoalDataAssetCreator has been added to generate the CollectRewardTypeGoalDataAsset.
  • FEATURE A new CollectRewardTypeGoalDataAssetHeader has been added.
Debug Tools
  • BUGFIX The debug ascend tool now purchases all Generators within a Stage to allow for their related Upgradeable Currencies to be granted via gacha rewards.
  • FEATURE The debug ascend tool now grants rewards based on Unit Targets as well as the previously supported Goal rewards.
  • CHANGE The debug reward tool now uses the IRewardManager to get rewards instead of directly creating them.
  • CHANGE The debug reward tool now emits a RewardGrantedEvent to emulate the behavior of the GrantRewardPlayerEvent.
Main
  • CHANGE OnAscensionComplete now calls LoadStage instead of duplicating its functionality.
Plot Points
  • BUGFIX PlotPointBaseActor.OnValidate will now only update Actor Static Data when not dealing with a prefab.
  • CHANGE Speech Bubble Actor font, color, style and alignment can now be set via the Plot Point editor tool.
  • CHANGE Text Actor text color can now be set via the Plot Point editor tool.
  • CHANGE PlotPointSpeechBubbleActorData now supports fields for text font, color, style and alignment.
  • CHANGE PlotPointTextActorData now supports a field for text color.
  • FEATURE Added "Delete" menu to the "Sequence" top dropdown. This will give you a dropdown to a chosen Sequence to delete, which includes deleting all of its Frames and removing its id from the SequenceCollection.activators that it was originally added to.

idlekit-examples

Examples
  • FEATURE A PlotPoint Example has been added that is designed to be used in conjunction with a tutorial in the documentation.
  • CHANGE The GrantRewardFromRewardGeneratorPlayerEvent has been updated to account for changes to GrantRewardPlayerEvent.

idlekit-showcase

  • N/A

Version 0.18.1, 2019-04-18

idlekit-framework

  • N/A

idlekit-implementation

  • N/A

idlekit-tools

Plot Points
  • BUGFIX Fixed a compile error when building PlotPoint code in device builds.
  • BUGFIX Fixed an issue where PlotPoint scenery wouldn't be reactivated correctly.

idlekit-examples

  • N/A

idlekit-showcase

  • N/A

Version 0.18.0, 2019-04-15

idlekit-framework

Content
  • FEATURE Added long lastActiveTimestamp { get; set; } to IContentSavedData that tracks the last time the player interacted with the app.
Dependency Container
  • CHANGE Added void UnBind<T>() to IDependencyContainer to make it more comprehensive and prepare the class further for the 1.0 IoC container update.
Events & Actions
  • REMOVE All IActions have had non ISavedData altering logic removed. Those logic has been moved to the callers and other listening classes, please refer to the changes to the IActions in the idlekit-implementation section of the CHANGELOG.md.
  • CHANGE IAction has been renamed to IPlayerStateEvent. All occurrences of IAction have been modified to work with the new name.
  • CHANGE IAction.Do has been renamed to IPlayerStateEvent.Apply. All occurrences of IAction.Do have been modified to work with the new name.
Event Management
  • REMOVE IActionManager has been deprecated after the merge.
  • REMOVE IEventInvoker has been deprecated because all IEvents are dispatched immediately.
  • CHANGE IActionManager has been merged into IEventManager and the APIs have been simplified. All occurrences of IActionManager have been changed to use IEventManager.
Generator
  • REMOVE void RefreshCache() removed from IGeneratorEntity from the interface but not in the implementation, please refer to the UPGRADENOTES.md for details.
Services
  • REMOVE IEntity register and de-registering methods have been removed from ICurrencyManager, IModifierManager, and IRewardManager, please refer to the UPGRADENOTES.md for details.
Time Management
  • FEATURE Added ITimerSubscription class that contains all the information in interchangeable time formats to be used with the ITimerService. This class is contained in an ITimerListener.
  • CHANGE ITimerService interface has been changed significantly to work exclusively with ITimerListener for clarity. The (ref int id) parameter has been removed in all occurrences.
Timed Reward
  • CHANGE Renamed void Begin() to void Initialize() to stay consistent with the naming scheme in IdleKit.
Unity Event
  • REMOVE Remove IService from IUnityEventListener as it is usually meant to be used with or as a MonoBehaviour class and it is not doing anything in IService.Load and IService.Cleanup.
User Data
  • CHANGE IUserSavedData is no longer contained by the ISavedDataManager it is a stand alone object that can be injected with the IEntityCache.
Naming
  • CHANGE Cleanup all timestamp related name to just use timestamp or Timestamp as the name implies that it is in milliseconds.

idlekit-implementation

Events & Actions
  • All Action have been renamed to PlayerEvent. The former name would be displayed in brackets:
  • AscendPlayerEvent (AscendAction)
    • CHANGE IStage ending logic in the class has been moved to Content after the call to dispatch the AscendAction.
    • CHANGE IGenerator unregistering from IModifierManager logic is moved to the ModifierManager that listens to the EntityRemovedEvent.
  • AutomateGeneratorPlayerEvent (AutomateGeneratorAction)
    • CHANGE IGenerator processing logic in the class has been moved to GeneratorEntity after the call to dispatch the events.
  • BuyGeneratorPlayerEvent (BuyGeneratorAction)
    • CHANGE IGenerator processing logic in the class has been moved to GeneratorEntity after the call to dispatch the events.
  • CollectFromGeneratorPlayerEvent (CollectFromGeneratorAction)
    • CHANGE IGenerator processing logic in the class has been moved to GeneratorEntity after the call to dispatch the events.
  • IncrementGeneratorUnitPlayerEvent (IncrementGeneratorUnitAction)
    • CHANGE IGenerator processing logic in the class has been moved to GeneratorEntity after the call to dispatch the events.
  • ClaimTimedRewardPlayerEvent
    • FEATURE This event has been added to retain the previous behavior of OpenTimerTrunkPlayerEvent.
  • ClaimGoalPlayerEvent (ClaimGoalAction)
    • CHANGE StageSavedData.ClaimGoal(int) call that deals with goal track has been moved from Stage to ClaimGoalAction because it alters ISavedData
  • ClearContenPlayerEvent (ClearContentAction)
    • REMOVE Removed the void Initialize(IUserSavedData) from the class as it is injected in the constructor.
    • CHANGE IContent clean up logic in the class has been moved to the Main class after the call to dispatch the ClearContentAction.
  • LoadContentAction
    • REMOVE The class has been deprecated and remove because it doesn't handle any ISaveData alterations.
    • REMOVE ICurrency loading logic has been moved to the CurrencyManager listening to the SetContentAction.
    • REMOVE IReward loading logic has been moved to the RewardManager listening to the SetContentAction.
    • REMOVE IBoost loading logic has been moved to the ModifierManager listening to the SetContentAction.
    • REMOVE IContent loading logic has been moved to Main after the IContent is set.
  • LoadStageAction
    • REMOVE The class has been deprecated and removed because it doesn't handle any ISaveData alterations.
    • REMOVE IStage loading logic has been moved to Main after the IContent is loaded.
  • LogLastActiveTimePlayerEvent
    • FEATURE Added LogLastActiveTimePlayerEvent to log the last active time of the player when the user save or pause the app.
  • NewUserPlayerEvent (NewUserAction)
    • REMOVE Removed the void Initialize(IUserSavedData) from the class as it is injected in the constructor.
  • OpenTimerTrunkPlayerEvent (OpenTimerTrunkPlayerAction)
    • CHANGE ITimedReward re-initialization logic has been moved to TimerTrunkInitializePlayerEvent.
  • SerializationEvent
    • FEATURE Added PreSerializationEvent and PostSerializationEvent which contains the ISavedData that will be or were serialized.
  • SetContentPlayerEvent (SetContentPlayerAction)
    • REMOVE Removed the void Initialize(IUserSavedData) from the class as it is injected in the constructor.
  • TimerTrunkInitializePlayerEvent
    • FEATURE Added to handle the re-initialization of the ITimedReward.
  • TimerTrunkStartEvent
    • FEATURE An event that denotes that the ITimedReward has begun.
Event Manager
  • REMOVE The event/action queue has been removed from ActionManager, please refer to the UPGRADENOTES.md for details.
  • REMOVE onActionQueueEmpty has been deprecated due to the removal of the action queue. All IEvent call is now dispatched instantly.
  • CHANGE ActionManager has been renamed to EventManager.
Content
  • FEATURE Added AscensionCompleteEvent that gets dispatched when the ascension sequence has been completed.
  • FEATURE Added ContentInitializedEvent that gets dispatched when the Content.Initialize() call has ended.
Context
  • CHANGE Context.cs has been refactored to separate the creation of IServices from the binding of IServices to allow for easier method overriding in its derived classes.
Entity Event
  • FEATURE Added EntityAddedEvent and EntityRemovedEvent events which are triggered when the IEntityController is added to or removed from the IEntityCache.
Goals
  • CHANGE GoalSavedData.normaizedProgress will now return 1 rather than 0 when targetProgress is 0.
  • CHANGE CollectCurrencyGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to CollectCurrencyTypeGoal see UPGRADENOTES.md for details.
  • CHANGE CollectUpgradeableCurrencyGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to CollectUpgradeableCurrencyTypeGoal see UPGRADENOTES.md for details.
  • CHANGE DynamicCollectCurrencyGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to DynamicCollectCurrencyTypeGoal see UPGRADENOTES.md for details.
  • CHANGE SpendCurrencyGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to SpendCurrencyTypeGoal see UPGRADENOTES.md for details.
Modifier Management
  • CHANGE ModifierManager now loads all the IBoost on SetContentEvent.
Offline Activity
  • FEATURE Added OfflineActivityTracker to handle the logic of keep track of all the time related activities that should occured while the app is in the background or terminated.
  • FEATURE Added OfflineProgressEvent that gets dispatched if any time related activity occurred while the app is in the background.
Time Management
  • CHANGE TimerService has gone through major rework to work with the new interface format.
  • CHANGE TimerService.now no longer always return DateTime.UtcNow, the current time is now being tracked and updated using the OfflineActivityTracker and IUnityEventHandler.Update.
  • CHANGE All time stamp related variables have had their names changed to timestamp in milliseconds format for consistency.
  • FEATURE Introduced TimerUtil to centralize all conversion between different time format.
Services
  • CHANGE The IServices, CurrencyManager, UpgradeableCurrencyManager, ModifierManager, RewardManager, SavedDataManager, StaticDataManager have their caches converted from lazy-initialization to initialization on void Load() and termination on Cleanup().
Saved Data Serialization
  • CHANGE Timer based serialization has been moved from the JSONSerializer to the SavedDataManager.
  • FEATURE Added PreSerializationEvent and PostSerializationEvent that get dispatched before and after ISavedData have been serialized.
Timer Trunk
  • CHANGE The TimerTrunk implementation has been refactored to better support resuming the game and switching content without forcing the trunk to restart, see UPGRADENOTES for more details.
  • CHANGE The unlock functionality of the TimerTrunk implementation has been moved to the new ShowcaseTimerTrunk class, see UPGRADENOTES for more details.
  • CHANGE An initialDuration field now allows for the initial subscription duration to vary from subsequent subscription durations.
  • CHANGE As the duration of the trunk can now change, a new targetDuration property has been added. The timeRemaining field is now calculated from this property.
  • CHANGE The Static and Saved data field types are now TimerTrunkData and TimerTrunkSavedData respectively, rather than the base interface types. The types of the accessor fields are unchanged.

idlekit-tools

CanvasViews
  • FEATURE CanvasContentView has been added to contain UI elements for entities that are non-stage specific. This allows these elements to be initialized seperately from the stage specific elements. All non-stage specific elements have been moved from CanvasStageView to CanvasContentView.
  • CHANGE ReorderUpgradeableCurrencies is now only subscribed to the event manager at the point that the content has been initialized to prevent content re-initialization forcing a re-ordering of the upgradeable currency UI elements.
  • BUGFIX CanvasTradeView now activates trades only once the StageInitializedEvent has been received.
  • BUGFIX CanvasTradeView now re-initializes trade list if a currency changes while the timer subscription is complete.
  • CHANGE All CanvasView and its derivatives have had their Initialize(...) methods changed into either Initialize(IDependencyContainer) and Initialize(IEntity, IDependencyContainer) to reduce the dependency and pave way for the IoC Container.
Debug UI Tools
  • CHANGE CanvasDebugContentTool no longer calls CleanupUI(). The UI is now cleaned up from main.cs on the start of a stage so this is not required.
Dummy Unity Event
  • FEATURE Added DummyUnityEventListener in the DummyContext so all unit tests can listen to IUnityEventListener event.
Offline Activity
  • FEATURE Added OfflineActivityTrackerTest to test the newly implemented OfflineActivityTracker.
Plot Points
  • CHANGE SaveSequenceDialog now only allows pre-defined PlotPointDatabases and SequenceCollections. Please use the Create -> IdleKit -> Plot Points menu to create and setup the required assets.
  • CHANGE Saving a sequence no longer clobbers an entire folder it thinks the frames are on, it will now only find the old frames and remove them before saving new ones.
  • CHANGE The Plot Point Editor now saves Frame objects in the same directory as the Sequence objects.
  • CHANGE If the id of a plot point already exists in the file system, you will only be able to save to that file.
Welcome Back
  • CHANGED CanvasWelcomeBackDialog has been moved from idlekit-showcase into idlekit-tools as it is also used by other examples. It has also been modified to work with the new OfflineActivityTracker.

idlekit-examples

Boost Example
  • CHANGE The Boost example now uses the standard Context rather than ExampleContext so that boost data persists between sessions.
Instance Example
  • CHANGE The InstanceContext now recreates services that depend on the LoaderService to ensure that the InstanceLoaderService implementation is injected correctly.
Prefabs
  • CHANGE All example UI prefabs and scenes have been updated to take account of the addition of the CanvasContentView.

idlekit-showcase

Timer Trunk
  • FEATURE The ShowcaseTimerTrunk has been added to contain logic specific to the showcase game, including the ability for the trunk to be unlocked at a specific stage.
UI
  • CHANGE The ShowcaseUI has been rationalized to follow the method naming convension of other UI elements.

Version 0.17.0, 2019-03-15

idlekit-framework

Difficulty
  • REMOVE IDifficultyManager has been removed from the project, see UPGRADENOTES.md for details..
Entity
  • CHANGE Added IEntityCache to handle the caching, lookup, and removal of all the IEntityController created in the project.
  • CHANGE void Cleanup(ILoaderService loaderService); in IEntityController has been changed to void Cleanup(IEntityCache entityCache);, see UPGRADENOTES.md for details.
Generator
  • REMOVE GeneratorRequirementIncrementData requirementIncrements { get; } in IGeneratorData has been removed, see UPGRADENOTES.md for details.
Goal
  • REMOVE ICurrencyGoal has been deprecated in the project, see UPGRADENOTES.md for details.
  • REMOVE IGeneratorGoal has been deprecated in the project, see UPGRADENOTES.md for details.
  • REMOVE float[] difficultyIncrement { get; } in IGoalData has been removed from the project, see UPGRADENOTES.md for details.
  • FEATURE Added bool canClaim{get;} and float normalizedProgress {get;} to IGoalSavedData.
Loader
  • CHANGE Added override version of TReturn LoadEntity<TReturn, TData>(string dataId) that allows the user to not specify any instance id and creating a global unique instance per static data.
  • REMOVE IEntityController caching has been moved to the newly created IEventCache class, see UPGRADENOTES.md for details.
Logging
  • FEATURE The IPriorityLogger has been added as an interface to allow logging out of information, warnings, errors and exceptions. The IPriorityLogger should be invoked via the IdleKitLog which now exists, along with various logger implementations, in in idlekit-implementation.
  • REMOVE IExceptionEvent has been deprecated, use IdleKitLog instead to log exceptions.

idlekit-implementation

Entity
  • CHANGE All EntityController's void Cleanup(); method have been updated to reflect the interface change.
Event
  • REMOVE ErrorEvent and ExceptionEvent have been removed. Code that used these previously has been switched over to using the IdleKitLog.
  • REMOVE GoalEvent has been replaced with ProgressGoalAction and SetGoalProgressAction. See UPGRADENOTES.md for details.
  • CHANGE Introduced EntityEvent to reduce redundancy in all the IEvent implementations. This can be used to make common IEntityController related IEvent in the future.
Goals
  • CHANGE All Goals now take an IEventCache in the constructor. This eliminates the need to inject IEntityController via the interface ICurrencyGoal and IGeneratorGoal.
  • CHANGE Introduced base implementations of IGoal and IGoalData - Goal and GoalData to abstract the common functionality in all IGoal.
  • CHANGE AutomateSpecificGeneratorGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to AutomateGeneratorTypeGoal see UPGRADENOTES.md for details.
  • CHANGE BuySpecificGeneratorGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to BuyGeneratorTypeGoal see UPGRADENOTES.md for details.
  • CHANGE CollectCurrenciesOfRarityGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to CollectCurrenciesWithTagsGoal see UPGRADENOTES.md for details.
  • CHANGE CollectFromSpecificGeneratorGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to CollectFromGeneratorTypeGoal see UPGRADENOTES.md for details.
  • CHANGE GetGeneratorUnitsForSpecificGeneratorGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to GetGeneratorUnitsForGeneratorTypeGoal see UPGRADENOTES.md for details.
  • CHANGE GetUpgradesForSpecificCurrencyGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to GetUpgradesForCurrencyTypeGoal see UPGRADENOTES.md for details.
  • FEATURE Created ProgressGoalAction and moved all IGoal's savedData alterations into the IAction.
  • FEATURE Created SetGoalProgressAction and moved all IGoal's savedData alterations into the IAction
Logging
  • FEATURE The IdleKitLog has been added to allow for the logging of information from within IdleKit. IdleKitLog is a static class accessible globally within the framework. It wraps a IPriorityLogger implementation which can be changed via IdleKitLog.RegisterLogger(). Functionality is provided for logging information, warnings, errors and exceptions to the Unity console/log via the default IPriorityLogger implementations; DebugLogger, DevelopmentLogger, ExceptionLogger and NullLogger.
  • CHANGE The LoaderService.LoadEntity will now log an exception when the StaticDataManager returns null rather than causing a NullReferenceException.
Plot Points
  • BUGFIX Fixed an issue where the PlotpointSequences wouldn't clean up data between ClearContentActions
Static Data
  • CHANGE The StaticDataManager will now output a log message rather than hard failing if a requested Entity or type does not exist in the Entities Database. See UPGRADENOTES.md for more details.
  • CHANGE The StaticDataManager will now return empty arrays rather than null/defaults from methods that get collections of Entities when the requested Entity types do not exist. See UPGRADENOTES.md for more details.
  • CHANGE StaticDataManager.GetDataForIds no longer returns an empty array whenever any of the requested Entity Ids are invalid. See UPGRADENOTES.md for more details.
  • CHANGE GetData<T>(Predicate<T>) an array rather than a IEnumerable. See UPGRADENOTES.md for more details.

idlekit-tools

Context
  • CHANGE Split out service loading calls in Context into a new LoadServices() method and updated PlotPointContext to implement this.
  • CHANGE Introduced ExampleContext which overrides SavedDataManager for Example scenes.
  • BUGFIX Example scenes now use ExampleContext to avoid loading incorrect Saved Data when switching between scenes.
UI
  • BUGFIX CanvasUpgradeableCurrencyView now correctly unsets currency related data on Clear().
  • BUGFIX CanvasStageView now only subscribes to HandleCurrencyChangedEvent after initializing Currency views.
  • REMOVE Removed CanvasHeaderView.cs as it is no longer required in Showcase or Examples.
  • CHANGE Renamed the CanvasDebugGachaTool to CanvasDebugRewardTool and modified it to allow the granting of all IReward rewards not just IGachaReward rewards.

idlekit-example

Context
  • CHANGE RewardGeneratorContext has been renamed RewardGeneratorExampleContext and now inherits from ExampleContext.
  • CHANGE Introduced PlotPointExampleContext which inherits from PlotPointContext and overrides SavedDataManager in the same way as ExampleContext.
  • CHANGE Updated all Example scenes to use example specific contexts rather than Context.
Example
  • FEATURE Added a new instance example utilizing the instancing of IEntityController that allows the usage of multiple IEntityControllers with the same IEntityData.id
UI
  • CHANGE Updated GachaUI to inherit from CanvasDebugRewardTool rather than CanvasDebugGachaTool.

idlekit-showcase

Plot Points
  • CHANGE Sample Plot Point assets using Trailer Park Boys assets have been replaced with new Idle Kit assets.
  • CHANGE The example_ascension_available Plot Point has been added. This is intended to act as a sample for how Plot Points are authored.
UI
  • BUGFIX Removed Back button from Showcase UI as it is no longer used.
Misc
  • BUGFIX ShowcaseContentDataAsset now correctly references ITradeData rather than TradeData as a GuidReference tag.

Version 0.16.0, 2019-02-19

idlekit-framework

GeneratorStageData
  • REMOVE No longer required as the IStage now just takes an array of IGeneratorEntityDatas.
IBoost
  • CHANGE Moved IBoostSavedData.isActive to IBoost.isActive, since not all IBoostSavedData would store its activation status.
IContext
  • FEATURE Moved over to the framework instead of the implementation layer. Defines a class that provides an IDependencyContainer and can both bind and release dependencies from it.
ICurrency
  • FEATURE ICurrency, ICurrencyData, and ICurrencySavedData now extend the IUnlockable, IUnlockableData, and IUnlockableSavedData interfaces.
ICurrencyManager
  • FEATURE Introduced T[] GetAllCurrencies<T>(Predicate<T> predicate) that allows querying of ICurrency with customized predicate.
  • FEATURE Added ICurrency[] GetAllCurrenciesWithAvailability(bool availability) to get ICurrency with availability.
IEntityController
  • FEATURE Defines an object that is a controller in the MVC pattern, see UpgradeNotes for more details on converting your objects to use this interface.
IEntityData
  • FEATURE Defines an object that is the model to the IEntityController. This object will create its controller through the required methods. Extends and functions like a IStaticData otherwise.
IGenerator
  • CHANGE Added MeetsAutomationCost for checking whether or not the user has reached the currency cost required for CanAutomate. Does not check upgrade requirements like CanAutomate.
  • CHANGE Added MeetsBuyCost for checking whether or not the user has reached the currency cost required for CanBuy. Does not check upgrade requirements like CanBuy.
  • REMOVE No longer uses the DateTime struct. Only requires the timestampMs.
  • CHANGE Added IsBought to the generator.
  • CHANGE Now holds a IGeneratorEntityData as the IEntityData. Still holds a IGeneratorData as it's "defining" data.
IGeneratorBalanceData
  • CHANGE This IStaticData is now wrapped by the IGeneratorEntityData.
IGeneratorData
  • CHANGE No longer requires isContentSpecific. This data is now wrapped by the actual IEntityData called IGeneratorEntityData.
IGeneratorEntityData
  • CHANGE The IEntityData to the IGenerator controller. Handles all the necessary required functions, but holds no raw data and instead wraps the IStaticDatas: IGeneratorData, IGeneratorUnitTargetSequenceData, and IGeneratorBalanceData.
IGeneratorUnitTarget
  • REMOVE Controller was removed as it did nothing but hold data. This IStaticData is now wrapped by the IGeneratorEntityData.
IGeneratorSavedData
  • REMOVE _startProductionTotalMs is removed as IGeneratorSavedData implements ITimedSavedData.
IGoal
  • CHANGE Added Ascend() and Reset() calls for handling their own logic instead of the IStage.
IGoalSavedData (IGoalSequenceSavedData)
  • FEATURE This saved data is now owned by the IGoal instead of the IStage.
ILoaderService
  • CHANGE All specific load methods have been removed from ILoaderService and the derived LoaderService. Loading is now performed by a generic loading methods using the IEntityController's static data's IEntityData.Create method. See ILoaderService for new interface functions and LoaderService in idlekit-implementation for examples.
IStage
  • FEATURE Now supports both GetGoal(string id) and GetActiveGoal(int index), where GetGoal allows the fetching of completed or inactive goals.
  • CHANGE Due to the above feature, GetGoal will now return the goal regardless of activity or completely.
IStageData
  • CHANGE No longer requires GeneratorStageDatas as they are not encompassed by a single static data IGeneratorEntityData. A list of guid strings is used instead.
IStageSavedData
  • CHANGE No longer handles goal saved data.
  • CHANGE Now handles goalIndex and slotIndex directly.
IStaticData
  • INFO While the idea that static data is serialized data has not changed, the addition of IEntityData means that static data can now be used as data 'chunks' that don't necessarily create an IEntityController, but are loaded to feed information to a system or loaded as a wrapper to a particular piece of an IEntityData's model.
ITimedRewardSavedData
  • REMOVE startTimestampMs is removed as ITimedRewardSaveddata implements ITimedSavedData.
ITimedSavedData
  • CHANGE Add ITimedSavedData interface for ISavedData that is going to be store a timestamp in milliseconds.
IUnlockable
  • FEATURE Introduced IUnlockable which marks an IEntity as available and obtained to allow it to be enabled or disabled during certain in-game functions such as RandomTagCurrencyReward.
  • FEATURE Introduced IUnlockableData and IUnlockableSavedData to accompany the addition of IUnlockable.
IUpgradeableCurrency
  • FEATURE IUpgradeableCurrency, IUpgradeableCurrencyData, and IUpgradeableCurrencySavedData now extend the IUnlockable, IUnlockableData, and IUnlockableSavedData interfaces.
  • CHANGE Removed isOwned and isUnlocked as they are now covered by the IUnlockable interface.
IUpgradeLevelData
  • CHANGE IUpgradeLevelData and IUpgradeRequirement have been added to the interfaces.
Miscellaneous
  • All instances of Load, Begin, and End that existed in Entities or Actions have been converted to Initialize and Cleanup calls. This is only a naming consistency refactor. All uses of the previous naming should be clearly marked in your compiler errors via System.Obsolete.
  • The GuidReferenceable tag on all DataAssets now correctly references derived rather than interface types.

idlekit-implementation

ActionManager
  • BUGFIX Fixed an issue with DispatchEventImmediate() where an exception event would not be fired if a non-IAction was passed as an argument.
BoostData
  • CHANGE Now implements a IniitalizeModifierData method which initializes any modifier data on a boost.
CollectFromGeneratorAction

CHANGE The constructor now only requires ICurrencyManager and ITimerService to be passed as dependencies.

Content
  • CHANGE On Cleanup the Content will now end the current stage, deregistering it from the LoaderService before then deregistering itself.
  • CHANGE rarity (previously rarityData) is now optionally null.
GachaReward
  • CHANGE allowAsRandomReward is removed and moved to RandomTagCurrencyReward.allowUnobtained. Their respective IStaticData and ISavedData have also been changed to reflect this move.
  • CHANGE CanClaim now returns false if any of its GachaSlots returns false for HasClaimableItem.
GachaSlot
  • FEATURE Added HasClaimableItem which returns whether or not it has at least one GachaItem within it that CanClaim.
Generator
  • CHANGE The controller class has been renamed to GeneratorEntity, see UPGRADENOTES.md for more details.
  • CHANGE Now caches values retrieved by the DifficultyManager.
  • CHANGE Implements IsBought.
Goal
  • CHANGE GoalSequenceSavedData has been replaced by GoalSavedData. Each Goal now has it's own GoalSavedData. Member variables related to slots and goal indicies have been removed. See UPGRADENOTES.md for more details.
  • CHANGE GoalSavedData now implements Load, Save, Delete and Reset methods. The Reset method is now called from the Claim and Ascend methods.
  • CHANGE All Goal implementations now implement Ascend and Reset methods which call the equivalent methods on their GoalSavedData.
GuidReferenceHelper
  • CHANGE Added a sanity check to prevent empty and null ids from getting into the cache.
LoadContentAction
  • CHANGE The LoadContentAction now contains specific methods for loading of IRewards, IBoosts and ICurrencies which are invoked prior to loading the IContent.
LoaderService
  • CHANGE The constructor now requires that only the IDependencyContainer is passed as a dependency.
RandomTagCurrencyReward
  • BUGFIX Fixed issue where CanClaim threw an exception if it was ever false
  • CHANGE Now holds a list variable instead of creating a new one each RefreshValidCurrencies call. Will still clear and repopulate the reference List each validation step.
StaticDataManager
  • CHANGE Remove the usage of System.Linq in StaticDataManager.
TimedBoost
  • CHANGE Add property duration to TimedBoost to have it calculated dynamically.
TimedBoostSavedData
  • CHANGE No longer extends BoostSavedData and now extends ITimedSavedData.
ToggleAvailableAction
  • FEATURE Added ToggleAvailableAction to toggle IUnlockable.available.
ToggleBoostAction & ToggleTimedBoostAction
  • CHANGE ToggleTimedBoostAction is no longer called in place of a ToggleBoostAction. It is now a stand alone extension of ToggleBoostAction that needs to be fired explicitly. It remains polymorphic, so global listeners to ToggleBoostAction continue to receive events from ToggleTimedBoostAction dispatches.
UpgradeableCurrency
  • CHANGE The UpgradeableCurrencyData now contains a InitializeModifierData method which will initialize the modifier data that it owns.
  • CHANGE Due to the addition of IUnlockable, IUnlockableData, and IUnlockableSavedData interfaces, some functionality of this class has changed. Code that previousily utilized UpgradeableCurrency.isOwned and UpgradeableCurrency.isUnlocked have been updated.
UpgradeLevelData
  • CHANGE UpgradeLevelData and UpgradeRequirement now inherit from IUpgradeLevelData and IUpgradeRequirement respectively. See UPGRADENOTES.md for more detail.
Miscellaneous
  • CHANGE All Entitiy DataAssets have had their GuideReferenceable tags updated to register with their concrete rather than interface types.
  • CHANGE Many getter methods have been replaced with expression bodied members.

idlekit-tools

AssetImporter
  • CHANGE DataAssetImporter has been split out into framework vs showcase specific implementations. See UPGRADENOTES.md for more details.
  • CHANGE TagDataAssetCreator and RarityDataAssetCreator no longer share a base class.
  • CHANGE BaseAssetCreator, CurrencyAssetCreator and UpgradeableCurrencyAssetCreator now supports importing of Tag data.
  • CHANGE Improved feedback in Data Asset Importer Window when CSV path is invalid.
  • CHANGE BaseDataAssetCreator now implements the path to which constant data headers are output instead of BaseDataAssetImporter. This allows for each implementation of IDataAssetCreator to override this path if required.
  • CHANGE GeneratorEntityDataAssetCreator and GeneratorEntityDataAssetHeader have been added to support changes to Generator data structures. See UPGRADENOTES.md for more details.
  • CHANGE The isContentSpecific flag has been removed from GeneratorDataAssetHeader.
  • CHANGE Sparse arrays are no longer allowed in data structures. See UPGRADENOTES.md for more details.

idlekit-example

LoopingContent
  • CHANGE As they are no longer required due to Framework changes, LoopingContext and LoopingContentLoaderService have been removed.
TimerTrunk
  • CHANGE Removed unrequired Enable() and Disable() methods from CanvasTimerTrunkView.

idlekit-showcase

AssetImporter
  • CHANGE DataAssetImporter has been split out into framework vs showcase specific implementations. See UPGRADENOTES.md for more details.
  • CHANGE ExampleContent has been renamed ShowcaseContent. See UPGRADENOTES.md for more details.
  • CHANGE The showcase asset importer now outputs showcase specific constant data headers into a folder within the showcase project rather than tools.
ExchangeRates
  • CHANGE mg01_missingresources_exchangerate_ExchangeRateDataAsset asset has been renamed to mg01_exchangerate_missingresources_ExchangeRateDataAsset.
  • CHANGE Exchange rates for rare and common trades have been added.
ShowcaseContentLoaderService
  • CHANGE As this class is no longer required due to Framework changes, it has been removed.
ShowcaseContext
  • CHANGE No longer overrides _loaderService.
Trades
  • CHANGE The default Trade example has been replaced with three seperate trades which allow for trading of common character and generator cards along with rare character cards for soft currency.
Miscellaneous
  • CHANGE A number of UI elements now take IDependencyContainer as an argument rather than DependencyContainer.
  • CHANGE A number of getter methods have been replaced with expression bodied members.

Version 0.15.0, 2019-01-07

PlotPointManager
  • BUGFIX PlotPoint Sequence Collections are now correctly cleaned up when a stage ends to prevent caching of invalid data.
AscendAction
  • BUGFIX When granting a RandomRarityCurrencyReward the AscendAction now correctly sets whether the reward can be granted when locked based on the AscensionRewardData's allowAsRewardWhenUnowned flag.
GrantRewardAction
  • CHANGE Now has a specific exception thrown when no valid reward can be found: InvalidRewardClaimException.
ICurrency
  • CHANGE ICurrency now requires that a ContainsTagOrRarity() method is implemented. See UPGRADENOTES.md for more details.
ICurrencyManager
  • CHANGE ICurrencyManager now requires that a GetAllCurrenciesOfTagOrRarity() method is implemented. See UPGRADENOTES.md for more details.
IGlobalUpdateManager -> IUnityEventListener
  • CHANGE IGlobalUpdateManager has been replaced with IUnityEventListener which uses C# events instead of holding on to IList of interface delegates (i.e: IUpdateable). Please see UPGRADENOTES.MD for more details.
ITimedRewards
  • CHANGE Added these entity interfaces to dictate the implementation of a reward that is dependent on a timer
ITimerService
  • CHANGE The specific implementation of the TimerSubscription has been moved to another file TimerSubscription.cs
  • CHANGE TimerService now uses a Dictionary for ITimerListener subscriber lookup for better performance
Example Project
  • FEATURE Trade functionality has been implemented in the Example Project via the TradeSet, Trade and TradeData classes. See CanvasTradeView.cs for an example.
  • FEATURE Extended the Content (ExampleContent) to provide more "game like" elements to the example without dirtying up the core IdleKit code. See UPGRADENOTES.md for details.
  • FEATURE Extended the Context to support Example specific extensions of services.
  • FEATURE ITimedReward is used for a simple implementation of the TimerTrunk concept is now in the example main game. It is works like a Reward Id that is retrieved through a button, of which is disabled until a certain TimerService listener reaches the end of its timer. Extends ITimedReward.
  • CHANGE Improved error handling in Main.cs to output a stack trace of ExceptionEvents where available.
  • CHANGE A BaseContentDataAssetCreator has been implemented in the importer. See UPGRADENOTES.md for more detail.

Version 0.14.1, 2018-11-26

IModifierManager
  • CHANGE The specific implementation of the ModifierCache has been moved into another file.
  • CHANGE ModifierCache.SearchModifierAffectingId now returns an IEnumerable instead of a SortedSet.
  • BUGFIX Fix a bug where multiple IModifiers with the same modifiableId and same ModifierCategoryData.priority would only count once in Modifier related calculations.

Version 0.14.0, 2018-11-23

IContent
  • CHANGE Content now uses a simple sequential Stage list in ContentData to determine the Stage transition. See UPGRADENOTES.md for more details.
  • CHANGE IContext and Dependency Container have been moved from the idlekit-example into idlekit.
  • CHANGE Extracted the looping and index based stage transition logic from Content and created the LoopingContent subclass in the example project.
ICurrency
  • FEATURE Rarity and Tag functionality has been implemented via IRarityData and ITagData. RarityData is now an extended ITagData See UPGRADENOTES.md for more details.
ICurrencyManager
  • CHANGE Add unit test coverage for all public methods of ICurrencyManager and IUpgradeableCurrencyManager.
  • CHANGE Deprecated Currency.Get, see UPGRADENOTES.md for details.
  • CHANGE ICurrencyManager no longer loads ICurrency, instead ICurrency is loaded and registered with the ICurrencyManager in LoadContentAction
IEconomy
  • CHANGE Economy methods related to generator units have been refactored. See UPGRADENOTES.md for more details.
IExchangeRate & IExchangeables
  • FEATURE IExchangeRate now allows for a rate to be calculated when trading IExchangeables, such as Currency. See UPGRADENOTES.md and Content.cs for more details.
IEvent
  • CHANGE Added ExchangeEvent and TradeMissingResourcesAction to support missing resources exchange rate functionality.
IGenerator
  • CHANGE Added ExceptionEvent to the IGenerator in case functions are called to the IGenerator while the GeneratorState is null
  • CHANGE IGenerator no longer register and unregister itself with the IModifierManager
ILoaderService
  • FEATURE Added the ability to load ICurrency, and IReward (by id, ids, and load all in IContent) to the ILoaderService
  • CHANGE ILoaderServices has been updated to work with string ids instead of specific concrete class.
IModifierManager
  • CHANGE IModifiers no longer register directly with the IModifierManager. They are being registered to IModifierManager in LoadContentAction and LoadStageAction
IReward
  • CHANGE Removed RewardResult class as it is no longer useful
  • CHANGE Removed ICurrencyAmount as it was boxing the struct concrete implementation
IRewardManager
  • CHANGE IRewardManager no longer loads IReward, instead IRewardManager is loaded and registered with the IRewardManager in LoadContentAction
IUpgradeableCurrency
  • CHANGE IUpgradeableCurrency no longer register and unregister itself with the IModifierManager
  • CHANGE Now fires a new action, CurrencyUnlockedEvent whenever isUnlocked flips from false to true
Example Project
  • FEATURE A "Welcome Back" dialog now spawns to inform the user of how much has been generated since the app's last pause/exist.
  • BUGFIX Importer no longer crashes Unity on exceptions.
  • FEATURE Added functionality to allow the player to exchange for missing resources when they do not have enough resources to upgrade an upgradeable currency.

Version 0.13.1, 2018-10-30

HOTFIX
  • CHANGE EventInvoker is now a class instead of a struct to avoid boxing allocation.
  • CHANGE Added unit test for the interface methods of IActionManager and IEventManager.
  • CHANGE Added exception when passing an IAction into DispatchEventImmediate and updated the documentation for that method.
  • BUGFIX Fixed ActionManager.cs DispatchEventImmediate not firing target specific event dispatch.

Version 0.13.0, 2018-10-26

  • FEATURE Introduced TestDataBuilder that can help with creating IStaticData quickly in unit tests.
  • FEATURE Added new error checking for more possible points of error when creating the IGoal and IGoalData.
  • FEATURE Can now fire events from the ActionManager immediately, instead of adding them to the queue. This does not include actions.
  • FEATURE Introduced IEventPools so that all IEvent and IAction are no longer being instantiated everytime they are dispatched. This requires any asynchronous listener to cache an event's members as they will be cleared once the event re-enters the pools.
  • FEATURE To allow for more performant practices, event management now has instance specific subscription/dispatching. Each listener can listen to a single specific object's dispatching of that event. This does require the listener to have that object's reference.
  • CHANGE DynamicCollectCurrencyGoal has been changed from using only the automated IGenerators' payoutPerSecond to using all the purchased IGenerators' payoutPerSecond when calculating its dynamic target.
  • CHANGE Modified all existing unit tests to adopt to the TestDataBuilder pattern to get rid of long-winded test setup code.
  • CHANGE Performed unit test passes on all the Goals to ensure coverage of all the newly added error-checkings and exceptions.
  • CHANGE Changed JsonSerializer to not serializeDirty every LateUpdate but instead with an constant interval defined in the JsonSerializer class.
  • CHANGE Removed unused technical requirements such as IStaticData.Create, IGuidReferenceableAsset.dataType, and IGuidReferenceableAsset.ResetId.
  • CHANGE IGenerators in the AutoCollectState will batch collect calls within a time frame together if the speed of the IGenerator is too fast to prevent from rapid calling of CollectFromGeneratorAction.
  • CHANGE Cleaned up the dependencies in all IGeneratorState and remove the Automate() method from IGeneratorState to have it done in AutomateGeneratorAction.
  • CHANGE Removed id argument from IStaticDataManager.AddData and removed overloaded implementation to simplify API.
  • CHANGE Altered the ActionManager to encompass any events into InvokerObjects. Internally, this allows the events to be queued while still being strongly typed, therefore removing a dynamic invokation. This was a very large performance improvement in stress tests.
  • CHANGE Polymorphic dispatching is no longer enforced. Instead, each IEvent has a Type[] dispatchAs property that allows each class to inform the EventManager which type of listeners it wishes to invoke. View the code documentation for additional details.
  • CHANGE IdleKit uses, internally, the instance specific dispatching and subscribing as described in the Features.
  • CHANGE Generators now cache their payouts and speeds, re-caching whenever something could cause them to be altered. See ModifierIndexChangedEvent and IncrementGeneratorUnitAction.
  • CHANGE Upgraded the targeted .NET framework version to 4.x
  • BUGFIX Solved an issue where AutoCollectState, when entered from the WaitToCollectState, could collect based on the last time the ProductionState was entered. AutoCollectState has more strict checks on enter.
  • BUGFIX GetGeneratorUnitsForAllGeneratorsGoal now keeps a list of IGenerators that have been reached to prevent double counting towards the goal progress.

Version 0.12.2, 2018-10-03

  • BUGFIX Fix device build error by removing AssetDatabase.FindAssets in runtime PlotPointDataProvider.
  • BUGFIX Fix starting with an automated IGenerator on a new playsession would not collect the currency gained since the previous playsession.
  • BUGFIX Fix warnings that were previously suppressed by the UnityEditor by removing non-numeric characters in #pragma warning disable.

Version 0.12.1, 2018-10-01

  • BUGFIX Fixed issue where AutoCollectState would automate all time between last start production and the time that it was entered. It no longer fires collection events on entry and will continue where other states, like the ProduceState, left off.
  • CHANGE IGeneratorState now takes the previous IGeneratorState in the Enter method and the next IGeneratorState in the Exit method.

Version 0.12.0, 2018-09-28

  • FEATURE Added Plot Points to IdleKit.
  • FEATURE Introduced IEvent and the derived ContentEvent, CurrencyEvent, GeneratorEvent, GoalEvent, ModifierEvent, StageEvent that can be sent and listened to across different Entities, Services, and Actions.
  • FEATURE Introduced IEventManager that allows the subscription, un-subscription, and dispatching of IEvents.
  • FEATURE IdleKit now uses the Event system for communication instead of relying on directly referencing the object of interests.
  • FEATURE Introduced an action queue system to be used inside the IActionManager for IAction management and dispatch. IActions triggered on the same frame will now be treated as a proper queue instead of a stack.
  • FEATURE Introduced the ILoaderService to create and preload the Entity classes with the proper dependencies.
  • FEATURE Introduced the IActionPrototypeFactory to register and clone all IActions to reduce the dependency and allow inheritance and overloading.
  • FEATURE Introduced CollectUpgradeableCurrencyGoal with an "any" field to allow the goal to track any UpgradeableCurrency obtained.
  • FEATURE Added a ToggleBoostEvent for turning IBoosts on or off.
  • FEATURE Added ErrorEvent and ExceptionEvent which get sent instead of Exceptions being thrown that may soft-lock the game. We plan to do an error handling pass in the future sprint this is only a temporary solution.
  • CHANGE IAction is now an IEvent. Upon completion of the IAction, the IAction event will be dispatched, which can be subscribed to any listener.
  • CHANGE Modified the entity classes such as Content, Currency, Generator, Goal, and Stage classes to adapt to the new Event and Loader system.
  • CHANGE Modified the service classes to adapt to the new Event system.
  • CHANGE Changed the Generator unit cost's mathematical formula to reflect the Customer cost in TPB.
  • CHANGE Moved the DataAssetImporter from IdleKit into Example #3.
  • CHANGE Trimmed down IRewardManager to remove confusing Claim() methods.
  • CHANGE Introduced IValidatableReward, an reward that requires validation before it can be granted. For example, the GrantGachaRewardAction can validate the IValidatableReward before adding it to the reward pool.
  • CHANGE GrantCurrencyReward and GrantRandomRarityCurrencyReward actions now grant the IReward without checking the whether the user has unlocked the UpgradeableCurrency or not. The validity check has been moved to IValidatableReward.
  • CHANGE Goals now support being reused within the same Stage asset.
  • CHANGE Generators now fire GeneratorPayoutChangedEvents and GeneratorSpeedChanged events.

Version 0.11.0, 2018-08-17

  • FEATURE Introduced IBoost that represents modifiers that should not be tied to other entities and instead have their own internal logic.
  • FEATURE Introduced simple implementations of IGlobalUpdateManager and ITimerService into IdleKit.
  • FEATURE Introduced ISavedData.Reset as a more optimal way to reset a saved data than previously Delete followed by a Load.
  • CHANGE Refactored all Services/Managers to get rid of loading dependency chain on the start-up script.
  • CHANGE Added ICurrency accessor to CollectCurrencyGoal.
  • BUGFIX Fixed a bug where the DataImporter would not import item indexed more than 10 due to faulty regex.

Version 0.10.0, 2018-08-17

  • FEATURE Introduced ISavedData interface for all EntitySavedData, which allows the user to implement their own saved data.
  • FEATURE Introduced ISerializer and injected it in all EntitySavedData to handle Save, Load, and Delete operations.
  • CHANGE Replaced IKeyValueSave with ISerializer so the users can specify their own way of serialization.
  • CHANGE Split IUserData into IUserSavedData to store user data and ISavedDataManager to manage loading of ISavedData.
  • CHANGE Renamed IDataManager to IStaticDataManager for clarification.

Version 0.9.1, 2018-08-14

  • FEATURE Added onRewardGranted event to IRewardManager when a reward is granted.
  • FEATURE Introduced ICurrencyReward for IRewards that grant ICurrency.
  • FEATURE Introduced IRewardResult to pass the IReward granted information to the view.
  • FEATURE Added onCurrencyRewardGranted event to be fired in the GrantRewardAction when ICurrencyReward is granted.
  • BUGFIX Fixed a bug that GachaReward is granting the IReard even if AllowAsRandom is turned off.
  • CHANGE Moved all IReward claiming logic into GrantRewardAction instead of it being in the IReward.

Version 0.9.0, 2018-08-02

  • CHANGE Extracted Modifier related logic from IEconomy into IModifierManager.
  • CHANGE Removed IEconomy dependency from IDataManager and IUserData.
  • CHANGE Moved GeneratorUnitTarget related ModifierData into GeneratorBalanceData.
  • CHANGE Introduced IModiferData interface and IModifierCategory entity to process ModifierLogic.

Version 0.8.0, 2018-07-25

  • CHANGE Major refactor of the following names to make IdleKit more general:
    • IBusiness -> IGenerator
    • BusinessSaveData.progression -> GeneratorSaveData.generatorUnitTarget
      • All usages of the words like progression or customer for describing an IBusiness have been changed.
    • IBreakpoint -> IGeneratorUnitTarget
    • IBreakpointSequence -> IGeneratorUnitTargetSequence
    • ISeason -> IStage
    • IGacha -> IGachaReward
    • IModifierData -> IModifierDataCollection
    • IContentData.PlaythroughDatas -> IContentData.StageSequenceDatas
  • CHANGE DataAssetImporter contains hooks when the DataAssets are created now.

Version 0.7.15, 2018-07-16

  • FEATURE DataAssetImporter that creates EntityDataAssets from CSVs.
  • FEATURE OpenGachaAction implemented so GachaReward can be properly granted in the frontend.
  • FEATURE Comments improved and updated throughout the entire codebase.
  • BUGFIX Fix the issue that CurrencyReward only grants the minimum currency amount.
  • BUGFIX Fix the issue that DynamicCollectCurrencyGoal includes Businesses that do not generate the target currencyId in the calculation of targetProgression. Also, add a unit test to test it.

Version 0.7.14, 2018-07-05

  • BUGFIX Sets the target amount of HitBreakpointsGoal to be the remaining breakpoints in that season if there are less breakpoints remaining than the initial target amount.

Version 0.7.13, 2018-06-28

  • BUGFIX Fixed SpendCurrencyGoal to check for a negative difference value.

Version 0.7.12, 2018-06-27

  • CHANGE New AddData method in DataManager that allows passing explicit types as parameter in order to suppot IL2CPP.

Version 0.7.11, 2018-06-26

  • CHANGE OnCurrencyChangedHandler now also has "double difference" as part of the handle.
  • BUGFIX Above fixes issue where changing currency in an amount 15 digits lower than the current amount would not increment any goals.

Version 0.7.10, 2018-06-21

  • BUGFIX Separated business state initialization and activation in order to activate goals after business state is initialized but before they get activated.
  • BUGFIX Fixed all unit tests.

Version 0.7.9, 2018-06-20

  • BUGFIX Create and activate goals before businesses so goals can track business collection.

Version 0.7.8, 2018-06-19

  • BUGFIX Pass a count when firing business onCollect so the correct number of collects are tracked in goals.

Version 0.7.7, 2018-06-18

  • CHANGE Refactor ITimerService and ServerTime offset.

Version 0.7.6, 2018-06-15

  • CHANGE Removed isActive field from static data that won't use it.

Version 0.7.5, 2018-06-07

  • CHANGE Added isActive field in static data.

Version 0.7.4, 2018-06-06

  • CHANGE Synced IdleKit changes into Fenwick Repo which resolves some Core Dependencies to DateTimeExtensions and removes unused variables to remove warnings.

Version 0.7.3, 2018-06-06

  • CHANGE Caching ModifierDatas array outside for loop to avoid constant calls in il2cpp.

Version 0.7.2, 2018-06-05

  • CHANGE Added a cached dictionary of unique modifiers affecting a modifiable.

Version 0.7.1, 2018-06-04

  • CHANGE [Refactor] SavedData objects now have the ability to choose game states (if any) that they will allow deletion of their local saved data.
  • CHANGE CurrencyManager further virtualized.
  • CHANGE SavedDatas further virtualized.
  • CHANGE IBusiness now has "MeetsBuyUnlockRequirement" and "MeetsAutomationUnlockRequirements" to separate requirements from costs.
  • BUGFIX Default values that were missing in Saved Datas have been added.
  • BUGFIX All saved datas were not persisting, they will now unless they explicitly set to do so (as per the first CHANGE described).
  • BUGFIX Season now checks for unlock state as it loads.

Version 0.7.0, 2018-06-01

  • BUGFIX Fixed GetCustomersForAllBusinessesGoal and GetCustomersForBusinessGoal having incorrect targetProgressions.

Version 0.6.41, 2018-06-29

  • BUGFIX Fixed a bug where IUpgradeableCurrencyData are not showing in GetUpgradesForSpecificCurrencyGoalDataAsset.
  • CHANGE Added a parameterized constructor for CurrencyAmount, which is needed for the DataImporter .

Version 0.6.40, 2018-06-27

  • BUGFIX Fix all of the Unit tests.
  • CHANGE Add TODOs to classes that require revisit.

Version 0.6.39, 2018-06-01

  • CHANGE Removed dependency to DateTimeExtensions from AutoCollectState and ProduceState.
  • CHANGE Fixed compiler warnings in BuyBusinessAction, CollectFromBusinessAction and OpenGachaAction.

Version 0.6.38, 2018-05-29

  • BUGFIX Second fix for GetUpgradeForSpecificCurrencyGoal to trigger goal completion when the goal is already met.

Version 0.6.37, 2018-05-24

  • BUGFIX Fixed GetUpgradeForSpecificCurrencyGoal not setting current progression on activate.

Version 0.6.36, 2018-05-23

  • BUGFIX Fixed issue where unrelated modifiers could be applied to the wrong modifiable.
  • CHANGE ^RELATED: The logic for this fix is hacked into Economy.GetModifierDatasAffectingId(string modifiableId, string category). Modifiers will likely be refactored in the future and this issue should definitely be addressed.

Version 0.6.35, 2018-05-23

  • BUGFIX Fixed getter that returned itself in GetCustomersForBusinessesGoalData.

Version 0.6.34, 2018-05-22

  • BUGFIX Fixed issue Businesses would enter state prematurely and crash when Modifiers were queried.

Version 0.6.33, 2018-05-22

  • BUGFIX Fixed issue where goals wouldn't fetch saved data when initialized.
  • BUGFIX Fixed issue where modifiers could be applied regardless of modifierCategory.

Version 0.6.31, 2018-05-22

  • BUGFIX Fixed issue where season modifier datas would be copied with null data and skip application to modifiables.
  • CHANGE ^RELATED: SeasonData object not longer caches modifier datas from its business season datas. Not ideal and should be updated in the future, but was integral to the above bugfix.
  • CHANGE GoalSequenceSavedData cannot go past its target progression.

Version 0.6.30, 2018-05-20

  • CHANGE Made DifficultyManager increment Season starting currency.

Version 0.6.29, 2018-05-20

  • BUGFIX Fixed DifficultyManager issue in UpdateGlobalModifier.
  • BUGFIX Additives now cause business speed to go lower not higher.
  • BUGFIX Fixed divide by 0 in multiplicative business speeds.

Version 0.6.28, 2018-05-18

  • BUGFIX Fixed non virtual methods in Content.

Version 0.6.27, 2018-05-16

  • BUGFIX Typo fixed missed in requirement naming.

Version 0.6.26, 2018-05-16

  • BUGFIX Fixed the ordering of the Modifiers so that additive always comes first.
  • BUGFIX Fixed issue where locked currencies could apply modifiers.

Version 0.6.25, 2018-05-16

  • BUGFIX Fixed the normalizedProgression for AutomateSpecificBusinessGoal and BuySpecificBusinessGoal.

Version 0.6.24, 2018-05-16

  • BUGFIX Rename business difficulty variables to match BE implementation.

Version 0.6.23, 2018-05-15

  • BUGFIX Fixed a bad conditional in automation character requirements.

Version 0.6.22, 2018-05-14

  • CHANGE Made ModifierDatas that affect Business speed apply their changes with division rather than multiplication if they are multiplicative.

Version 0.6.21, 2018-05-14

  • BUGFIX Fixed issue where GuidReferenceHelper would infinitely refresh guids if they were imported on the same frame as a refresh. Fix was simply a removal of auto refreshing during new asset import .

Version 0.6.20, 2018-05-12

  • CHANGE Made public methods in Content and RewardManager virtual.

Version 0.6.19, 2018-05-12

  • CHANGE Removed all timer gacha references.

Version 0.6.18, 2018-05-12

  • ADDED Introduce difficulty manager to handle playthroughs scaling difficulty.
  • CHANGE Pre-Process business cost data before feeding it to the views.

Version 0.6.17, 2018-05-11

  • BUGFIX Fixed CollectFromBusiness actions not logging correct time.

Version 0.6.16, 2018-05-10

  • BUGFIX Fixed Ascension and looping episodes unit tests.

Version 0.6.15, 2018-05-09

  • CHANGE Optional UpgradeableCurrencyRequirements for buying a business added to BusinessBalanceData.

Version 0.6.14, 2018-05-09

  • CHANGE Business saved data now saves in Unix milliseconds, not 'ticks' which could vary between frontend/backend.
  • ADDED "TimeUtils.unixZero".

Version 0.6.13, 2018-05-08

  • FIX Resolved potential collision between GuidReferenceHelper and CoreGuidReferenceHelper due to outdated reflection.
  • CHANGE Added GuidReferenceUtility support for GetName overload that only takes an Id with no Type.

Version 0.6.12, 2018-05-08

  • CHANGE Added logic to check character requirements when automating a Business.
  • CHANGE Created UpgradeableCurrencyRequirement to track Upgradeablecurrency level requirements.

Version 0.6.11, 2018-05-07

  • CHANGE Added isUnlocked to UpgradeableCurrencySavedData which gets flagged upon the first time setting the saved data amount.

Version 0.6.10, 2018-05-04

  • FIX Gacha save key content specific.

Version 0.6.9, 2018-05-04

  • FIX Gacha save key spelled correctly.

Version 0.6.8, 2018-05-03

  • FIX Fixed DynamicCollectCurrencyTests, which broke due to the GoalCreateAction never being called.
  • FIX Fixed BusinessTests, which broke due to our DummyTimerService not having any functionality.

Version 0.6.7, 2018-05-03

  • CHANGE Looping episodes.

Version 0.6.6, 2018-05-02

  • FIX _timerGachaLastOpenedTime now has saved data.
  • CHANGE All acitons now utilize milliseconds timestamp instead of seconds (previously had too little granularity for validation).

Version 0.6.5, 2018-05-01

  • FIX _isContentSpecific was missing a [SerializeField] on GachaRewardData.cs.
  • FIX Fixed all Currency unit tests, which also allowed the logic for Currencies being able to add/remove negative values.

Version 0.6.4, 2018-05-01

  • CHANGE Added isUnlocked to BusinessSavedData and implemented it in BuyBusinessAction.

Version 0.6.3, 2018-05-01

  • CHANGE Removed dependencies that were accidentally reintroduced.

Version 0.6.2, 2018-05-01

  • CHANGE Updated tests to use new Contentdata constructor.

Version 0.6.1, 2018-05-01

  • CHANGE Added hasStarted flag to ContentSavedData to help award starting currencies when a Content is started.
  • CHANGE Added CurrencyAmount class to wrap simple currencyId / amount pairs.
  • CHANGE Added startingCurrencyAmounts to ContentData.
  • CHANGE Changed BeginContentAction to make use of the new startingCurrencyAmounts.

Version 0.6.0, 2018-04-23

  • CHANGE Changed BusinessSavedData ascension behaviour to delete keys instead of resetting to default values.
  • CHANGE Added next level GetPayout and GetSpeed functionality to Economy.
  • CHANGE Added functionality to Business State classes to react to upgrading the business.

Version 0.5.6, 2018-04-11

  • CHANGE Removed dependency to "EastSideGames.Core".

Version 0.5.5, 2018-04-11

  • CHANGE Removed dependency to "EastSideGames.Services.Time".
  • FIX Renamed incorrect Create Asset menu entry for CurrencyReward.

Version 0.5.4, 2018-04-10

  • CHANGE Added GetModifiersAffectingModifiable and other getters to Economy.

Version 0.5.3, 2018-04-10

  • CHANGE Updated all IKeyValueGameSave objects to include a GetIterator and GetSortedIterator for key/value save pairs.

Version 0.5.2, 2018-03-29

  • CHANGE Removing actions/static data that require backend. Added Gacha.

Version 0.5.1, 2018-03-27

  • CHANGE Removed dependency to "EastSideGames.Services.GameSave".

Version 0.5.0, 2018-03-23

  • Initial version.