Skip to content

Upgrade Notes

Version 2.1.0, 2022-03-16

  • Please check the CHANGELOG file for further notes on what's changed in this release.

Version 2.0.0, 2021-12-13

Version 1.4.1 to 2.0.0

  • Please contact the IdleKit support team, as this upgrade is much more involved than can be explained in this document.

Version L.5.X to 2.0.0

  • The upgrade should be simple as there are minimal code changes between those version.

Version 1.4.0 to 1.4.1, 2021-01-13

  • No special steps required

Version 1.3.0 to 1.4.0, 2020-10-16

idlekit-framework

Base Collector
  • IBaseCollectorBalanceData.basePayout has been changed to basePayoutAmount due to the introduction of IPayoutEntity.
  • IBaseCollectorBalanceData.payoutCurrencyId has been changed to payoutEntityId due to the introduction of IPayoutEntity.
  • IBaseCollectorEntity.payout has been renamed to IBaseCollectorEntity.payoutAmount due to the rename of IBaseCollectorBalanceData.payoutCurrencyId.
  • IBaseCollectorEntity.GetPayout(bool, IModifier[]) has been renamed to IBaseCollectorEntity.GetPayoutAmount(bool, IModifier[]) due to the rename of IBaseCollectorBalanceData.payoutCurrencyId.
Generator
  • IGeneratorEntity.payoutCurrencyPerMillisecond has been changed to IGeneratorEntity.payoutAmountPerMillisecond due to the introduction of IPayoutEntity.
Random
  • IRandomService.InitializeRandom has been deprecated use InitializeRandom(int) with int GetRandomSeed() to obtain a random seed.
Reward
  • IReward.CalculateRewards(int) has been changed to IPayoutEntity.CalculatePayouts() since now IRewards implements IPayoutEntity.
  • User should set the seed using the IRandomService.InitializeRandom(int) first before calling CalculatePayout().

idlekit-implementation

State Action
  • GrantRewardStateAction.rewardResults has been renamed to GrantPayoutsStateAction.payoutResults due to the introduction of IPayoutEntity.

Version 1.2.0 to 1.3.0, 2020-08-31

idlekit-logging

  • N/A

idlekit-ioc

  • N/A

idlekit-framework

Economy Service
  • IEconomyService.GetPayout(IBaseCollectorEntity baseCollectorEntity) has been deprecated, use IBaseCollectorEntity.GetPayout() instead.
  • IEconomyService.GetPayout(IBaseCollectorEntity baseCollectorEntity, bool applyModifiers, IModifier[] excludedModifiers = null) has been deprecated, use IBaseCollectorEntity.GetPayout(bool applyModifiers, IModifier[] excludedModifiers = null) instead.
  • IEconomyService.GetDuration(IBaseCollectorEntity baseCollectorEntity) has been deprecated, use IBaseCollectorEntity.GetDuration() instead.
  • IEconomyService.GetDuration(IBaseCollectorEntity baseCollectorEntity, bool applyModifiers, IModifier[] excludedModifiers = null) has been deprecated, use IBaseCollectorEntity.GetDuration(bool applyModifiers, IModifier[] excludedModifiers = null) instead.
  • IEconomyService.GetAffordableUnitsToNextTarget(IGeneratorEntity generatorEntity, bool applyModifiers, IModifier[] excludedModifiers = null) has been deprecated, use IGeneratorEntity.GetAffordableUnitsToNextTarget(bool applyModifiers, IModifier[] excludedModifiers = null) instead.
  • 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.
  • 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
  • IEventContentSavedData and IStandardEventContentSavedData have been removed along its tracking of milestoneIndex.
    • Use the IContent.contentSavedData to access content saved data information on IEventContent.
    • Use the IEventContent.GetCurrentMilestone() to access the current IMilestone.
    • Use the newly added IEventContent.GetCurrentMilestoneIndex() to replicate the previous milestoneIndex functionality.
Event Settings
  • IEventSettings.CanCompleteMilestone(string); has been changed to IEventSettings.CanCompleteMilestone(IMilestone); as the method implicates that the IMilestone in parameter should be loaded.
  • IEventSettings.SetMilestoneCompletionTime(string, long); has been changed to IEventSettings.SetMilestoneCompletionTime(IMilestone, long); as the method implicates that the IMilestone in parameter should be loaded.
  • IEventSettingsSavedData.CompleteMilestone(string,long); has been changed to IEventSettingsSavedData.SetMilestoneCompletionTime(string, long, bool);.
Generator Entity
  • GeneratorStateType enum has been converted into a static class that contains constant state string. This is done so new string state type can be added easily.
  • GeneratorStateType generatorStateType { get; } has been changed to string generatorStateType { get; } due to the change to GeneratorStateType.
  • IGeneratorEntity.ChangeState(GeneratorStateType) has been changed to IGeneratorEntity.ChangeState<TGeneratorState>() using the type of the IGeneratorState has the generic function parameter.
  • IGeneratorEntity.Collect(long count=1) now returns bool instead of void. Any overriding implementations will need to be updated accordingly.
Generator State
  • IGeneratorState.Enter(IGeneratorState) has been changed to IGeneratorState.Enter(IGeneratorEntity, IGeneratorState) to fully implement the state (strategy) pattern and work with the container.
Milestone Completion
  • MilestoneCompletionInfo.completionTime has been changed to MilestoneCompletionInfo.projectedCompletionTime to denote the fact the value can be changed by projection or actual completions.
Timer Subscription
  • bool hasInitialTime has been changed to bool hasStartTime to coincide with the usage of endTime.
  • DateTime initialTime has been changed to DateTime startTime to coincide with the usage of endTime.
  • long initialTimestamp has been changed to long startTimestamp to coincide with the usage of endTime.

idlekit-implementation

Action
  • CompleteMilestoneStateAction has been deprecated as IEventContent no longer keeps track fo the current milestoneIndex. Call IEventSettings.SetMilestoneCompletionTime(IMilestone, long) to set the MilestoneCompletionInfo.
  • SetProjectedMilestoneCompletionStateAction has been renamed to SetMilestoneCompletionInfoStateAction. It is now called from IEventSettings.SetMilestoneCompletionTime(IMilestone, long) to project completion of the IMilestone or actually complete the Milestone.
  • The ClearContentStateAction has been renamed ClearContentIdStateAction and a new ClearContentAction has been added. Any game code listening to the previous ClearContentStateAction will need to be updated to one of these two new actions. Which action to listen to depends on the desired behaviour:
  • ClearContentIdStateAction is called at the end of the process of wiping down IContent and IContentData when switching content. It is not called when Startup.ResetGame is called.
  • ClearContentAction is called when the IContent entity is unloaded. Most game code/UI code that is interested in the IContent should now listen to this event. It is called when switching content and when Startup.ResetGame is called.
Generator Entity
  • The EventContent constructor now takes a string[] collectorEntityIds as a parameter. Any extending implementations will need to have their constructors updated accordingly.
  • GeneratorEntity.Collect(long count=1) now returns bool instead of void. Any overriding implementations will need to be updated accordingly.
  • The GeneratorEvent has been removed. Use any of the following events instead:
  • GeneratorInitializedEvent
  • GeneratorPayoutChangedEvent
  • GeneratorStateChangedEvent
  • GeneratorSpeedChangedEvent
Startup
  • The Startup.ResetGame flow now does not result in the IUserSavedData.contentInstanceId being wiped. This means when the app is restarted via this flow, the player will re-enter the IContent previously loaded. To retain the previous behaviour where ResetGame resulted in always loading into main game Content, the Startup.SetClearContentLoadPhases method can be overridden to always queue the IClearContentIdLoadPhase.
Standard Content
  • The StandardContentData and StandardEventContentData constructors now takes a string[] collectorEntityIds as a parameter. Any extending implementations will need to have their constructors updated accordingly.

idlekit-tools

Simple Entities Database
  • The grouping of data in the SimpleEntitiesDatabase has been updated to reflect how data is grouped in the IdleKit CSVs. Old SimpleEntitiesDatabase assets will have to be updated since references will be lost. The affected fields are as follows:
    • Reward Data has been split into Ascension Reward Data and Currency Reward Data
    • Tag Data and Rarity Data has been combined into Tag Data

idlekit-examples

  • N/A

idlekit-showcase

  • N/A

Version 1.1.0 to 1.2.0, 2020-07-02

idlekit-logging

  • N/A

idlekit-ioc

  • N/A

idlekit-framework

Event Settings
  • eventDuration has been removed from EventSettingsData. Please set event end time (and duration effectively) using EventSettings.SetEventEndTime(long timestamp). It is recommended that this is called via a backend command, similar to EventSettings.StartEvent() and EventSettings.EndEvent(). If this is not preferred, the duration can be set using a default value from a UI prefab - see CanvasEventView.cs for an example.
Goal
  • Any IGoal implementations must now implement a Reset() method. This method should deactivate the IGoal and reset it's saved data.
  • Goal.Deactivate() no longer resets the saved data for a IGoal. If you are calling Deactive() directly from game-code, the previous behaviour can be retained by calling the new Goal.Reset() method.
  • Goal.canClaim now checks if targetProgression has been set, so Goal.canClaim returns false if the goal has not been activated.
Milestone
  • Any IMilestone implementations must now implement a Activate() method, which overloads the existing Activate(double initialProgress) method.
  • IMilestoneSavedData implementations must now implement isActive, Activate(), and Deactivate().
Standard Content
  • IStandardContent.HasValidActiveTrade() has been deprecated, use getter IStandardContent.standardContentFeatures.activeTrade to get the active ITrade to see if it is null.
  • IStandardContent.ActivateTrade() has been deprecated, use IStandardContent.RefreshTrade() to activate a new valid ITrade.
  • IStandardContentSavedData.InitializeTradeTimer(long) has been deprecated, use IStandardContentSavedData.Deactivate(long) to set the IStandardContentSavedData.lastActiveTradeDeactivationTime.

idlekit-implementation

Action
  • TradeActivatedAction and TradeDeactivatedAction have been deprecated, subscribe to ToggleActiveTradeStateAction and use the property bool activated {get;} to see if the ITrade is activated or deactivated.
PlotPoint Runtime
  • IPlotPointSequenceData IPlotPointController.sequence { get; } has been renamed IPlotPointSequenceData activeSequence { get; }.
  • bool IPlotPointController.canPlay has been removed from the interface use bool IPlotPointController.isPlaying or the concrete implementation PlotPointController.canPlay.
PlotPoint Activation
  • MilestoneCompletedActivationCondition.ctor(string, string) has been changed to MilestoneCompletedActivationCondition(string).
Reward
  • IGachaItems and IRandomWeighted items with 0 weight will no longer be chosen as part of a GachaReward.
Standard Content and Standard Event Content
  • StandardContent.timerSubscription, StandardContent.UpgradeProgression and StandardContent,OnTimerEnded have been deprecated. They were moved to StandardContentFeatures.timerSubscription, StandardContentFeatures.UpgradeProgression and StandardContentFeatures.OnTimerEnded. Call IStandardContent.standardContentFeatures to access the functions.
  • StandardEventContent.timerSubscription, StandardEventContent.UpgradeProgression and StandardEventContent,OnTimerEnded also require the same upgrades as StandardContent.

idlekit-tools

LoadPhase
  • CanvasInitializeUILoadPhase.Initialize(CanvasContentView) has been changed to Initialize(CanvasUI) to be consistent with CanvasCleanupUILoadPhase.Initialize(CanvasUI).

idlekit-examples

  • N/A

idlekit-showcase

  • N/A

Version 1.1.0 to 1.1.1, 2020-06-01

idlekit-logging

  • N/A

idlekit-ioc

  • N/A

idlekit-framework

  • N/A

idlekit-implementation

  • N/A

idlekit-tools

  • N/A

idlekit-examples

  • N/A

idlekit-showcase

  • N/A

Version 1.0.1 to 1.1.0, 2020-05-25

idlekit-logging

  • N/A

idlekit-ioc

  • N/A

idlekit-framework

Action
  • dispatchAs is deprecated. Use typesToDispatchAs instead.
Data Loader
  • void LoadData(IStaticData data, bool contentSpecific = true) is deprecated. Use void LoadData(IStaticData data) instead.
  • void LoadData(IStaticData[] data, bool contentSpecific = true) is deprecated. Use void LoadData(IStaticData[] data) instead.
Event Settings
  • IEventSettings.CompleteMilestone has been removed as it manipulated saved data directly. This functionality can be performed via the CompleteMilestoneStateAction instead.
Load Phase
  • IContentDataLoadPhase.Initialize(string, Func<string, IStaticData[]>) is deprecated. Use IContentDataLoadPhase.Initialize(Func<string, IStaticData[]>) instead as the contentInstanceId is loaded from the IUserSavedData instead of being passed in.
  • ILoadContentLoadPhase.Initialize(string) is deprecated. The contentInstanceId is loaded from the IUserSavedData instead of being passed in.
Startup
  • void StartGame(IContext) has been changed to void StartGame().
  • Starting from version 1.1.0, if the player was going to start the game in an expired/complete EventContent, the game would now start the player in the MainGame. Override the implementation in SetContentIdLoadPhase to retain the old behaviour.
Timer Listener
  • void OnTimerEnd(int count) has been changed to void OnTimerEnd(long count) to support a larger number of collections. Any classes that implement ITimerListener.OnTimerEnd will need to be updated accordingly.

idlekit-implementation

Action
  • StaticDataAddedAction and StaticDataRemovedAction have had bool contentSpecific { get; set; } removed as content specific is only a concept related to the ISavedDataProvider. However, you can still get the information from the IStaticData[] data if they can be casted to ISavedDataProviders.
  • dispatchAs is deprecated. Use typesToDispatchAs instead. All actions and state actions will have to be updated to reflect this change.
  • Passing a null instance to ActionService.Unsubscribe will now result in a warning being generated. If you were doing this previously, null check the instance before calling Unsubscribe.
Event Settings
  • EventSettings.CompleteMilestone has been removed as it manipulated saved data directly. This functionality can be performed via the CompleteMilestoneStateAction instead.

idlekit-tools

  • N/A

idlekit-examples

  • N/A

idlekit-showcase

  • N/A

Version 1.0.0 to 1.0.1, 2020-04-20

idlekit-logging

  • N/A

idlekit-ioc

  • N/A

idlekit-framework

  • N/A

idlekit-implementation

  • N/A

idlekit-tools

  • N/A

idlekit-examples

  • N/A

idlekit-showcase

  • N/A

Version 0.20.8 to 1.0.0, 2020-03-10

idlekit-framework

Action
  • All IEvents have been renamed to IActions.
  • All IPlayerEvents have been renamed to IStateActions.
  • IPooledEvent has been removed as pooling is done in the dependency container. Subsequently, IPooledEvent.OnReturnToPool()has been renamed to IAction.ResetEvent().
  • All IActions have been refactored to work with dependency injection and implement IInjectable.
Action Service
  • IEventService has been renamed to IActionService.
  • If you were subscribing with a null instance, using IEventService.Subscribe<T>(handler, instance), the request to subscribe will now fail whereas previously the subscription was unintentionally added to the global list. Use IEventService.Subscribe<T>(handler) to subscribe globally or pass a non-null instance to the original subscription call to subscribe to that instance only.
Character
  • All classes related to ICharacter, ICharacterData, ICharacterSavedData and ICharacterDataAsset have been removed. IGeneratorEntity and IGeneratorData had references to the above interfaces removed. The same functionality can be achieved by using ModifierService.GetModifiersAffectingModifiable() and ModifierService.GetModifiablesAffectedByModifier().
Content
  • IContent.BeginStage() is removed and merged into IContent.Initialize(), which is executed when the IContent gets loaded by the IEntityLoader.
  • IContent.EndStage() is no longer public and an interface method as its functionality is now inside the IContent.AdvanceStage() or IContent.Cleanup(IEntityLoader) methods.
  • IContentData.startingCurrencyAmounts and their overrides have been renamed to IContentData.initialCurrencyAmounts in all places in the codebase.
  • In IStandardContent and IStandardContentData, missingResourcesExchangeRateMultiplier has been split into softCurrencyMissingResourcesMultiplier and upgradeableCurrencyMissingResourcesMultiplier
Currency Service
  • This service was renamed from ICurrencyManager to ICurrencyService.
  • T[] GetAllCurrencies<T>(Predicate<T>) has been removed. Use IResolver.ResolveAll<TContract>(Predicate<TContract>) instead.
  • IUpgradeableCurrencyManager has been removed. Use the generic ICurrencyService.GetAllCurrencies<T>() method instead.
  • ICurrencyService.ValidateAddCurrencyAmount(string id, double amount) and ICurrencyService.ValidateRemoveCurrencyAmount(string id, double amount) have been removed. This was done to remove unused methods from the ICurrencyService interface. If your project used these methods you will need to extend ICurrencyService and re-implement them.
Dependency Container
  • IDependencyContainer and DependencyContainer has been renamed to IContainer and Container that implements the IResolver and IBinder. Refer to the documentation site for more information.
  • IContext and Context have been refitted to contain the new IContaienr and IInstaller, which is now the location of all the binding information.
  • Binding with the new IDependencyContainer is now located in IInstaller and its implementations.
Entity
  • All IEntity have been refactored to work with dependency injection and implement IInjectable.
  • IEntityController has been renamed to IEntity.
  • IEntityData.Create<T>(IDependencyContainer) has been change to IEntityData.CreateEntity(string) so the entity created only takes in instanceId and staticDataId and have its other dependency injected.
  • ISavedDataProvider.CreateSavedData(string, IDependencyContainer) has been changed to ISavedDataProvider.CreateSavedData(string) due to the introduction of the dependency container.
  • IStaticData.isContentSpecific is moved to ISavedDataProvider as it affects the way saved data being saved.
  • IEntity, IEntityData, and ISavedData all have minimal constructors as the dependencies are now injected in Injectable.Inject instead.
  • Now an IEntity is created with the ctor(string, string), Injected(IResolver) with all the dependencies, setup with Initialize(), and cleaned up with Cleanup(IEntityLoader). Please refer to the Understanding Entities page in the manual section of the documentation website.
  • IEntity.Initialize method is introduced that means all implementation would require to implement void Initialize().
  • IEntity.Cleanup is now required to be implement if the IEntity holds any reference - loading any sub IEntities (i.e: IStage loading all IGenerators. Therefore those IGenerators need to be unloaded with loader.UnloadEntity(generators)), or obtain object references (i.e: IStage holding reference of IStageData).
  • IEntityCache is now deprecated and replaced by the dependency container.
  • ILoaderService has been renamed to IEntityLoader as it no longer stores the references of the loaded IEntities.
  • IStaticDataManager has been renamed to IStaticDataLoader as it no longer stores the reference of the loaded IStaticData.
  • All IEntityDataAsset classes now need to pass a generic data Type through to a base IGuidReferencable<T>.
Event
  • IEvents and all related classes have been renamed to IActions.
Event Content Service
  • IEventContentService has been renamed to IEventService. Note that what used to be IEventService is now named IActionService.
Event Service
  • IEventContentService has been renamed to IEventService. Note that what used to be IEventService is now named IActionService.
  • IEventService.RegisterEventSettings(IEventSettings[]) and IEventService.RegisterEventSetting(IEventSetting) have been deprecated as IEventSettings are now cached in the IContainer.
  • bool CanClaimRewards(string) and void ClaimRewards(string) have been removed from the IEventService. Use IEventSettings.CanClaimRewards(string) and IEventSettings.ClaimRewards(string) directly on the associated IEventSettings instead.
Generator
  • The following fields have moved from IGeneratorBalanceData to IGeneratorEntityData. All implementations and references of these fields will need to be updated accordingly, and all IGeneratorBalanceDataAssets and IGeneratorEntityDataAssets will need to be regenerated.
    • costToBuy
    • buyCurrencyId
    • upgradeableCurrencyBuyRequirements
    • costToAutomate
    • automateCurrencyId
    • upgradeableCurrencyAutomationRequirements
Goal
  • IGoal.normalizedProgress and IGoalSavedData.normalizedProgress now return a double instead of a float
Logging
  • All Logging related classes and interfaces including IdleKitLog have been moved into a separate repository at git@github.com/Idlekit/idlekit-logging.git and different namespace under IdleKit.Logging. Users utilizing the Unity Package Manager should include "com.idlekit.idlekit-logging": "ssh://git@github.com/Idlekit/idlekit-logging.git" as part of the dependencies.
Milestone
  • IMilestoneData.rewardId has been removed. The reward Id for a Milestone can instead be found via IEventSettingsData.GetMappedRewardId(IMilestoneData.id). However in a production title, a display name would usually be located in the game's view data for the Milestone.
  • IMilestoneSavedData.progress has been renamed to IMilestoneSavedData.progression for consistency with IGoalSavedData.progression.
  • IMilestone.normalizedProgress now returns a double instead of a float
Modifiers
  • ModifierSearchResult has been removed and its functionality is now handled by IModifierGroupData and IModifierFormula. All usages of this class must be updated accordingly.
    • Added IModifierFormula, IModifierFormulaData, IModifierFormulaDataAsset, and IModifierFormulaParser
    • IModifierCategoryData and IModifierCategoryDataAsset have been renamed to IModifierGroupData and IModifierGroupDataAsset.
    • Methods in IModifierCache and IModifierService that used to use IModifierCategoryData types now use IModifierFormula types.
    • IModifierData.Initialize(IModifierCategoryData modifierCategoryData) has been removed since it no longer keeps a reference to ModifierCategoryData.IModifierData.priority has also been removed since the new IModifierFormula handles priority implicitly.
Namespaces
  • The following namespaces within idlekit-framework have been changed. Any game code referencing these will need to be updated.
    • IdleKit to IdleKit.Framework
    • IdleKit.PlotPoint to IdleKit.Framework
PlotPoint
  • All classes that implemented IPlotPointDataAsset have been converted to implement IPlotPointDataAsset<T> where T : IPlotPointData instead so their data can be of the derived type instead of the base IPlotPointData.
  • IPlotPointActivationCondition has been incorporated into the IContainer and became IInjectable therefore the previous IPlotPointActivationCondition.Start method has been eliminated.
  • IPlotPointActivatorData.Start and IPlotPointActivatorData.Cleanup have been removed as the IPlotPointService is now in charge of creating and injecting the IPlotPointActivationCondition.
  • IPlotPointSequenceCollectionData.StartActivators and IPlotPointSequenceCollectionData.Cleanup have been removed as it is now a pure data class. The functionality is moved into IPlotPointService.
  • IPlotPointService.QueueSequence has been refactor to. Invoke IPlotPointService.ActivatePlotPoint(IPlotPointActivationCondition) directly instead.
  • IPlotPointService.hasQueuedSequences has been removed. Perform a null check on IPlotPointController.sequence instead.
  • IPlotPointService.GetNextSequence has been removed. As the PlotPointSequenceData can be triggered in arbitrary order.
  • IPlotPointController.frames and IPlotPointController.actions have been removed. You can get the same information from IPlotPointController.sequence to get the IPlotPointSequenceData which contains the frames and actions information.
  • IPlotPointController.currentActionIndex has been removed. However, it is still available in the PlotPointController concrete class.
  • IPlotPointController.isPaused has been removed. Use IPlotPointController.canPlay instead.
Reward
  • ITimedRewardSavedData has been refactored to be consistent with other timed related ISavedData.
    • long timedCompleted { get; } was replaced by long timedStarted { get; }. The start time of the timedReward can still be found by checking ITimedReward.timerSubscription.initialtimestamp.
    • bool neverClaimed { get; } was replaced by bool hasStarted { get; }, which is a a better indication if ITimedRewardData.duration or ITimedRewardData.initialDuration should be used.
  • RandomTagsCurrencyReward has been renamed to RandomObtainedCurrencyReward. The allowUnobtained option in the data has also been removed. This changes the behaviour of this reward. There is now no support to reward from a pool of both obtained and unobtained currencies. Instead you must be explicit about the kind of currency you want to reward. If you need to reward an unobtained currency, use a RandomUnobtainedCurrencyReward, CurrencyUnlockReward or CurrencyReward instead. To reward an obtained currency, you can use RandomObtainedCurrencyReward, CurrencyUnlockReward or CurrencyReward.
  • Any custom implementations of IReward must now support the ignoreFallback argument in their CanClaim method. The same argument must be implemented in any custom implementations of IGachaReward.GetValidItems.
Service
  • IService.Load(Action<IService>) has been renamed to IService.Initialize(Action<IService>) following the new Inject -> Initialize -> Cleanup loading paradigm. Please refer to the documentation site for more information.
  • All IServices have been refactored to work with dependency injection and implement IInjectable.
  • Renamed the following Service interfaces to better fit naming conventions. Any custom implementations of these Services will need to be updated.
    • 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 IStaticDataLoaderService
Stage
  • IStageData.startCurrencyId and IStageData.startCurrencyAmount have been deprecated. Use IStageData.startingCurrencyAmounts instead.
Time Service
  • The following functions have been renamed:
    • DateTime now { get; } was renamed to DateTime gameTime { get; }
    • long timestamp { get; } was renamed to long gameTimestamp { get; }
    • void SetTime(long) was renamed to void SetGameTimestamp(long)
  • All the time related functionality in the game should still interact with gameTime. The newly added DateTime systemTime can be overridden by the user so an official time value can be provided from a backend.
Trade Service
  • The method GetRandomValidTrade has been moved out of the UI and added to the ITradeService. Any UI elements getting a random valid trade should now call ITradeService.GetRandomValidTradeFromPool() and pass in an array of ITrades or an array of ITrade string IDs.
Unlockable
  • The IUnlockable interface now requires that SetAvailability and SetObtained methods now be implemented. These should set the available and obtained flags respectively.
  • The IUnlockableSavedData interface now requires that SetObtained method be implemented. This should set the obtained flag.
  • The IUnlockableData has been removed. To make a Currency available by default when a Content or Stage starts, use the Content.initialCurrencyAmounts or Stage.availableCurrencyIds.

idlekit-implementation

Action
  • Events have been renamed to Actions.
  • PlayerEvents have been renamed to StateActions.
  • EventPools have been removed in IActionManager. It now uses the container to pool and cache the IActions.
  • StageSelectedAction has been removed as it has never been used. Entities should subscribe to StageInitializedAction or ContentInitializedAction instead.
  • The order of firing of ContentInitializedAction >>> StageInitializedAction has been reversed. The current order now is SetContentStateAction >>> StageInitializedAction >>> ContentInitializedAction.
  • Actions surrounding Generator unit targets have been refactored. Saving the final unit target hit and the reward logic was moved from IncrementGeneratorUnitStateAction to the new GeneratorUnitTargetHitStateAction. If you need access to the final unit target in the saved data or the reward information you will need to listen to the new action.
  • OpenTimerTrunkStateAction has been removed. Use ClaimTimedRewardStateAction instead.
  • Goal and Generator data are now cleared at a later point when ascending. This allows for a more flexible UI flow.
  • OfflineProgressAction has been renamed to OfflineProgressStartAction in order to maintain consistency with the new OfflineProgressEndAction. References to this action will need to be updated.
  • IdleKitInitialized event must now be initialized with a valid IContent.
  • EventStartedEvent and EventEndedEvent are now IStateActions and have been renamed EventStartedStateAction and EventEndedStateAction.
  • AdvanceStageStateAction will no longer set the ContentSavedData.currentStageId to null when Content.nextStageId is null. Instead, the previous currentStageId will be retained. This means on ascending the final IStage within the content, the IStage will not change, whereas previously the first IStage of the Content would be loaded. See CanvasAscendView in idlekit-tools as an example of how to present this to the player or the Looping Content example in idlekit-examples if you want Stages to loop.
Boost
  • The _modifierDatas field in BoostData has been renamed to _boostModifierDatas.
  • The _duration & _maxDuration fields in TimedBoostData have been renamed to _durationInSeconds and _maxDurationInSeconds. The TimedBoostData constructor has been updated to match.
  • The duration and maxDuration properties in TimedBoostData now represent milliseconds rather than seconds. Any client code using these values must be updated accordingly.
Content
  • We no longer use IContentSavedData.timeModified to store user's last activity time as it is done now in IUserSavedData.SetLastActivityTime(long)
  • ContentData.isContentSpecific has been set to true from false. This change will result in the filename of the serialized ContentSavedData to be changed.
  • In StandardContent, StandardContentData,StandardEventContent, and StandardEventContentData, missingResourcesExchangeRateMultiplier has been split into softCurrencyMissingResourcesMultiplier and upgradeableCurrencyMissingResourcesMultiplier
  • In StandardContentData and StandardEventContentData constructors, missingResourcesExchangeRateMultiplierId is replaced softCurrencyMissingResourcesMultiplierId and upgradeableCurrencyMissingResourcesMultiplierId
Core
  • All IEntity, IAction, and IService implementations have been refactored to work with dependency injection and implement IInjectable.
Currency Service
  • This service was renamed from CurrencyManager to CurrencyService.
  • All ValidateCurrency logic has been removed as they are just empty. Override CurrencyService if you wish to perform validation logic.
Entity Data
  • All IEntityData have the dependency resolving logic (in method IEntityData.Create<T>) using the previous IDependencyContainer removed. They are now being resolved in IEntity.Resolve(IResolver).
  • All EntityParameters classes that were previously being passed in the constructors of all IEntity have been removed due to the introduction of the dependency container.
Entities Database
  • void AddStaticData<TStaticData>(ScriptableObject[]) has been renamed to TStaticData[] FetchStaticData<TStaticData>(ScriptableObject[]).
  • EntitiesDatabase has been renamed SimpleEntitiesDatabase and moved into idlekit-tools. Reimporting balance data will generate an updated database.
  • PlotPointDatabase has been renamed SimplePlotPointDatabase and moved into idlekit-tools.
Events
  • Events have been renamed to Actions.
  • PlayerEvents have been renamed to StateActions.
Event Service
  • EventContentService has been renamed to EventService. Note that what used to be EventService is now named ActionService.
Goal
  • The abstract class MakeTradeGoal now subscribes to a TradeAcceptedAction instead of a MakeExchangeAction. All implementations will need to be updated accordingly.
  • Goal.normalizedProgress and GoalSavedData.normalizedProgress now return a double instead of a float
JsonSerializer
  • The JsonSerializer has been renamed SimpleJsonSerializer.
Main
  • Main has been completely refactored and moved to idlekit-tools. It is now an abstract class that implements one potential way of providing static data to the new startup flow. Any extensions of Main will need to be changed to work with the new startup flow. Refer to the documentation website for more information.
  • Main.content has been removed as it is now being fetched from the IContainer with _container.Resolve<IContent>(userSavedData.contentId).
Milestone
  • MilestoneData.rewardId has been removed. The reward Id for a Milestone can instead be found via IEventSettingsData.GetMappedRewardId(IMilestoneData.id). However in a production title, a display name would usually be located in the game's view data for the Milestone.
  • All previous subscribers or dispatchers of
    • MilestoneProgressAction should now switch to use ProgressMilestoneStateAction
    • MilestoneCompletedStateAction should now switch to use CompleteMilestoneStateAction
  • normalizedProgress now returns a double instead of a float
Modifier Cache
  • The cache now uses HashSets to store IModifiers, IModifiables, and IModifierFormula.
  • _specificModifierLookup, _globalModifierLookup, _specificModifiableLookup, and _globalModifiableLookup have been consolidated into _modifierLookup and _modifiableLookup. Methods have been updated to use the new lookup structure.
Modifier Service
  • The ModifierService no longer automatically loads all IBoost Entities in the Entities Database. Instead, any IBoost should be loaded by it's owning Entity. For example, the ShowcaseContent is now responsible for loading the IBoost used for video ad bonuses. If required, the previous behaviour can be retained by reinstating the call _entityLoader.LoadAllEntities<IBoost, IBoostData>() when the SetContentStateAction is broadcast.
  • IModifierFormula and IModifierFormulaData are now binded as singletons to their concrete type, which means only one instance of a type of IModifierFormula and IModifierFormulaData is available.
  • Added ModifierService.GetModifierFormula to retrieve the IModifierFormula of a specified type
Namespaces
  • The following namespaces within idlekit-implementation have changed. Game code using classes within these will need to be updated.
    • IdleKit to IdleKit.Implementation
    • IdleKit.PlotPoint to IdleKit.Implementation
NPM
  • The sub-dependencies in package.json have been removed. These should now be specified only at the top level package.json file within your Unity project.
PlotPoint
  • BasePlotPointActivationCondition now requires the staticDataId passed into the constructor ctor(string).
  • BasePlotPointActivationCondition.Initialize has been renamed to BasePlotPointActivationCondition.Subscribe().
  • PlotPointSetPlaybackAvailabilityAction has been renamed to SetPlotPointPlaybackAvailabilityAction.
  • PlotPointPlaybackAvailabilityChangedAction has been removed. Subscribe to SetPlotPointPlaybackAvailabilityAction instead.
  • PlotPointSequenceProgressAction has been renamed to PlotPointFramePlayedAction.
  • Previous implementation of PlotPointDataProvider has been moved to PlotPointEditorDataProvider.
  • AscensionActivationCondition has been renamed to AscensionCompleteActivationCondition.
Reward
  • AscensionReward.Initialize(double score) has now been renamed to AscensionReward.SetAscensionScore(double score) due to the introduction of IEntity.Initialize().
Services
  • Renamed the following Services to better fit naming conventions. Any custom extensions of the below Services will need to be updated.
    • 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 StaticDataLoaderService
Timer Trunk
  • The TimerTrunk implementation has been renamed to TimedReward. Related IActions and IStateActions have been renamed accordingly. Code that previously derived from TimerTrunk should now inherit from TimedReward.
Timer Subscription
  • The overloaded constructor for TimerSubscription no longer accepts a DateTime endTime without an initial timestamp. Any constructors using this parameter will need to be updated appropriately.

idlekit-tools

Actions
  • Events have been renamed to Actions.
  • PlayerEvents have been renamed to StateActions.
  • AutoUnlockBuyGeneratorStateAction has been removed. The functionality has been moved into the base BuyGeneratorStateAction.
Asset Importer
  • The following headers have moved from the GeneratorBalanceData Asset Creator to the GeneratorEntityData Asset Creator. Custom implementations will need to be updated accordingly.
    • costToBuy
    • buyCurrencyId
    • upgradeableCurrencyBuyRequirements
    • costToAutomate
    • automateCurrencyId
    • upgradeableCurrencyAutomationRequirements
Core
  • All IEntity, IAction, IService, and CanvasView have been refactored to work with dependency injection and implement IInjectable.
Namespaces
  • The following namespaces have changed within idlekit-tools. Any code referencing classes within these will need to be updated:
    • 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
  • NumberFormatter.FormatDouble will now round values under 1000 as specified via the roundDown argument. This makes the behaviour consistent with values above 1000, UI using this may need to be updated accordingly.
NPM
  • The sub-dependencies in package.json have been removed. These should now be specified only at the top level package.json file within your Unity project.
Prefabs
  • All prefabs are now nested prefabs which require a minimum Unity version of 2018.3.

idlekit-examples

  • N/A

idlekit-showcase

General
  • All entity interface classes have been moved into idlekit-framework.
  • All entity concrete classes have been moved into idlekit-implementation.
  • All importer classes have been moved into idlekit-tools.
Asset Importer
  • ShowcaseDataAssetImporter has been moved into idlekit-tools and merged, merged with BasicDataAssetImporter and renamed to SimpleDataAssetImporter.
  • All data asset headers and creator files have also been moved to idlekit-tools and renamed as follows:
    • ShowcaseContentDataAssetHeader to StandardContentDataAssetHeader
    • ShowcaseEventContentDataAssetHeader to StandardEventContentDataAssetHeader
    • ShowcaseTimerTrunkDataAssetHeader to TimerTrunkDataAssetHeader
    • ShowcaseContentDataAssetCreator to StandardContentDataAssetCreator
    • ShowcaseEventContentDataAssetCreator to StandardEventContentDataAssetCreator
    • ShowcaseTimerTrunkDataAssetCreator to TimerTrunkDataAssetCreator
Events
  • Events have been renamed to Actions.
  • PlayerEvents have been renamed to StateActions.
Event Content
  • void IShowcaseEventSettingsSavedData.EndEvent() has been removed. Use void IEventSettingsSavedData.CompleteEvent() instead.
NPM
  • The sub-dependencies in package.json have been removed. These should now be specified only at the top level package.json file within your Unity project.
Prefabs
  • All prefabs are now nested prefabs which require a minimum Unity version of 2018.3.
Showcase Content
  • IShowcaseContent now requires a videoAdBoost property. This boost is intended to be used when the player views a video ad.
  • IShowcaseContentData now requires a videoAdBoostId property.
  • IShowcaseContentSavedData and IShowcaseEventContentSavedData have been added, which serialize a CurrencyAmount to the IContentSavedData. Deserialization of the saved data should be updated accordingly.
  • ShowcaseContent and ShowcaseEventContent, along with their interfaces, have been moved to idlekit-implementation and idlekit-framework, and renamed StandardContent and StandardEventContent.
Showcase Upgradeable Currency
  • ShowcaseUpgradeableCurrencyData has been removed. The available flag of a UpgradeableCurrency is now set via StageData.availableCurrencyIds or ContentData.initialCurrencyAmounts, either of which will make a Currency or UpgradeableCurrency available at the start of the Content or Stage.
  • As a result of the above change, ShowcaseUpgradeableCurrencyManager has been removed. It's functionality, of setting the UpgradeableCurrency.available flag is now performed by the NewStageStateAction and NewContentStateAction.
TimerTrunk
  • ShowcaseTimerTrunk and it's interface have been moved to idlekit-framework and idlekit-implementation. The classes have been renamed ITimerTrunk and TimerTrunk.

Version 0.20.7 to 0.20.8, 2020-04-13

idlekit-framework

  • N/A

idlekit-implementation

  • N/A

idlekit-tools

  • N/A

idlekit-examples

  • N/A

idlekit-showcase

  • N/A

Version 0.20.6 to 0.20.7, 2020-01-28

idlekit-framework

  • N/A

idlekit-implementation

  • N/A

idlekit-tools

  • N/A

idlekit-examples

  • N/A

idlekit-showcase

  • N/A

Version 0.20.5 to 0.20.6, 2019-12-11

  • N/A

Version 0.20.4 to 0.20.5, 2019-11-20

idlekit-framework

  • EventSettingsSavedData.completedMilestoneIds { get; } has been deprecated. Instead of string ids, this data now saves a list of more complex MilestoneCompletionInfo objects. These objects allow for the future projection of Milestone completion times that handle players being away from the game when an Event is ended. Update your code to use EventSettingsSavedData.milestoneCompletionInfo { get; } instead. This change will break any existing saved data so it is recommended to either introduce this change between events or migrate existing data to the new format.
  • EventSettingsSavedData.CompleteMilestone(string milestoneId) has been deprecated for the same reasons outline above. Use EventSettingsSavedData.CompleteMilestone(string milestoneId, long timestampInMilliseconds) instead.
  • Since EventSettings, EventSettingsData and EventSettingsSavedData have had time related functionality moved into them, any custom code that added time related functionality should be inspected to ensure there are no conflicts.

idlekit-implementation

  • IdleKitInitializedEvent has been added to signify that all Entities within IdleKit have been initialized. If your integration of IdleKit does not use Main.StartGame this event must be sent after Content.BeginStage has been called.

idlekit-tools

  • N/A

idlekit-examples

    • N/A

idlekit-showcase

    • N/A

Version 0.20.3 to 0.20.4, 2019-11-04

idlekit-framework

  • N/A

idlekit-implementation

Goal
  • GoalData.isContentSpecific is now set to true by default. This allows for GoalData to be shared between different Contents while still ensuring that GoalSavedData is unique. When using the default ISerializer implementation, this will result in a filename change of the serialized JSON.

idlekit-tools

  • N/A

idlekit-examples

    • N/A

idlekit-showcase

    • N/A

Version 0.20.2 to 0.20.3, 2019-09-16

  • N/A

Version 0.20.1 to 0.20.2, 2019-09-03

idlekit-framework

Generator
  • GeneratorEntity.payoutCurrencyPerSecond has been deprecated and replaced by GeneratorEntity.payoutCurrencyPerMilliSecond. This resolves a bug which meant that GeneratorEntity.payoutCurrencyPerSecond was actually reporting back in milliSeconds while also avoiding any precision issues related to converting Payout to a float when reporting back in Seconds. To account for this change, any gameplay logic which requires absolute precision should be converted to work in milliseconds. Any UI code where precision is not required can convert the payout value to seconds.

idlekit-implementation

ToggleTimedBoostPlayerEvent
  • In order to avoid the possibility of a runtime error when passing the incorrect Boost type into the ToggleTimedBoostPlayerEvent, this event no longer derives from the ToggleBoostPlayerEvent. Any code that was previously listening to ToggleBoostPlayerEvent when requiring a TimedBoost should now listen to ToggleTimedBoostPlayerEvent.

idlekit-tools

  • N/A

idlekit-examples

  • N/A

idlekit-showcase

  • N/A

Version 0.20.0 to 0.20.1, 2019-07-18

  • N/A

Version 0.19.1 to 0.20.0, 2019-07-08

idlekit-framework

Content
  • void Ascend() has been deprecated due to the implementation of the new ascension flow.
    • Instead, use void BeginAscension(), which signals the start of the ascension gameplay.
    • Then, usevoid EndAscension(), which concludes the ascension gameplay and grants the rewards.
    • Please refer to docs.idlekit.io for additional information.
  • IContentSavedData.lastActiveTimestamp has been deprecated, use ISavedData.timeModified instead. This is due to the ISavedData refactor that added timeCreated and timeModified to all ISavedData.
  • IContentSavedData.SetLastActiveTimestamp(long) has been deprecated, use ISavedData.Save() instead. This is due to the ISavedData refactor that added timeCreated and timeModified to all ISavedData.
Currency
  • bool ContainsTagIn(string[]) has been moved to the newly added ITagService, use ITagService.ContainsAnyTag(ITagData[], string[]) instead.
  • bool ContainsTag(string) has been moved to ITagService, use ITagService.ContainsTag(ITagData[], string) instead.
CurrencyManager
  • ICurrency[] GetAllCurrenciesOfTagOrRarity(string) has been deprecated. GetCurrenciesWithTag should be used instead. This method is expected to return ICurrency with both the specified tag or rarity Id.
Economy
  • IEconomy.GetSpeed() and it's overloads have been deprecated. Use IEconomy.GetDuration() and it's overloads instead. These methods return values in milliseconds now.
Gacha
  • GachaSlot.cs and GachaItem.cs have been moved to idlekit-implementation due to the introduction of IGachaSlot and IGachaitem.
  • GachaSlot.HasClaimableItem has been moved to GachaReward.CanClaim(IGachaSlot).
  • GachaItem.cachedReward has been removed as IRewardManager already caches the IRewards.
  • IGachaReward.GetValidItems(GachaSlot slot) has been replaced to work with interface RewardGetValidItems(IGachaSlot slot).
  • IGachaRewardData.gachaSlots { get; } has been replaced to work with interface IGachaSlot[] gachaSlots { get; }.
Generator
  • double baseSpeed { get; } has been deprecated in IGeneratorBalanceData. Use long baseDuration { get; } instead. This value is in milliseconds now. Data import is still in seconds.
  • double speed { get; } has been deprecated in IGeneratorEntity. Use long duration { get; } instead. This value is in milliseconds now.
  • IGeneratorEntitySavedData.BuyGenerator(IGeneratorUnitTargetSequence) has been deprecated. Use void Buy(int) and void SetGeneratorUnitTargetHit(int) instead. This is to simplify dependency during the usage of the function.
  • IGeneratorEntitySavedData.IncrementGeneratorUnit(int, IGeneratorUnitTargetSequence) has been deprecated. Use void IncrementGeneratorUnit(int) and void SetGeneratorUnitTargetHit(int) instead. This is to simplified dependency during the usage of the function.
  • IGeneratorEntitySavedData.isUnlocked and IGeneratorEntitySavedData.Unlock() have been removed as they are legacy features and similar functionality is now achieved by using combination of IUnlockable.available and IUnlockable.obtained on the IUpgradeableCurrency associated with the IGeneratorEntity (i.e: the cards representing the IGeneratorEntity).
  • GeneratorUnitTargetProgression has been deprecated please use IGeneratorUnitTargetSequence.GetProgression(int) instead.
  • IGeneratorUnitTargetSequence.GetGeneratorUnitTargetLevel(int, int) has been renamed to IGeneratorUnitTargetSequence.GetGeneratorUnitTargetIndex(int).
  • IGeneratorUnitTargetSequence.GetGeneratorUnitTargetProgression(int) has been renamed to IGeneratorUnitTargetSequence.GetGeneratorUnitTargetAmount(int).
Goals
  • double seconds { get; } has been deprecated in IDynamicGoalData. Use long duration { get; } instead. This value is in milliseconds now. Data import is still in seconds.
Modifiers
  • IModifierCache must now be bound along with other dependencies so the ModifierManager can resolve it.
  • IModifier.modifierId must be implemented on any Entities that implement IModifier. In most cases this should point to the static data id of the IModifier.
  • IModifierCategoryData.targetModifiableTypes needs to be implemented on any custom IModifierCategoryData objects. This should return a list of IModifiable types that are allowed to be affected by this IModifierCategoryData.
Timed Rewards
  • float durationInSeconds { get; } has been deprecated in ITimedRewardData. Use long duration { get; } instead. This value is in milliseconds now. Data import is still in seconds.
  • double timeRemaining { get; } has been deprecated in ITimedReward. Use long durationRemaining { get; } instead. This value is in milliseconds now.
  • ITimedRewardSavedData class has been deprecated. This is due to the ISavedData refactor that added timeCreated and timeModified to all ISavedData.
Trade
  • The behaviour of when a ITrade is valid has changed. Previously the available and obtained flags of the ICurrency would only be checked for input/output IUpgradeableCurrency. These flags will now be checked on ICurrency as well.
  • The implementation of Trades has been extensively refactored. Whereas previously only ITradeData existed in idlekit-framework, trades are now a full entity with an ITrade controller interface. Any trade specific logic should now be encapsulated within implementations of ITrade such as Trade which can be found in idlekit-implementation.
  • As ITradeData is now an IEntityData rather than IStaticData any derived classes must implement a Create method that generates the ITrade Entity controller.
  • Input and output tags for ITradeData are now specified as ITagData arrays to allow for multiple ICurrency tags to be specified.
Saved Data Provider
  • CreateSavedData(string, ISerializer) has been changed to CreateSavedData(string, IDependencyContainer) due to the ISavedData refactor and preparation for the dependency container integration.
  • The classes (and the ones that extend them) listed below have been switched to use the new method CreateSavedData(string, IDependencyContainer) to create the ISavedData.
  • The following classes are affected in idlekit-implementation: BoostData, TimedBoostData, CharacterData, ContentData, CurrencyData, UpgradeableCurrencyData, GeneratorEntityData, GoalData, TimerTrunkData, and StageData.
  • The following classes are affected in idlekit-examples: RewardGeneratorEntityData, and LoopingContentData.
  • The following classes are affected in idlekit-showcase: ShowcaseTimerTrunkData.

idlekit-implementation

  • TimerTrunkData.initialDurationInSeconds has been deprecated. Use TimerTrunkData.initialDuration instead. This value is in milliseconds now.
Events
  • AscensionCompleteEvent has been renamed to AdvanceStageEvent for more clarity.
  • AscendPlayerEvent has been renamed to AscensionCompletePlayerEvent which concludes the ascension gameplay and grants rewards.
  • BuyGeneratorPlayerEvent has had function UpdateGeneratorState() renamed to BeginProduction() for clarity, and UnlockGenerator() deprecated due to the removal of IGeneratorEntitySavedData.Unlock() method.
  • LogLastActiveTimePlayerEvent has had constructor changed from ctor(ITimerService) to ctor() as ITimerService is no longer needed when ISavedData.Save() would modify the timeModified.
Generators
  • AutoCollectState.collectDuration is now a long instead of a float. This value is in milliseconds now.
  • GeneratorUnitTargetSequenceData's default constructor ctor() has been removed but without a System.Obsolete tag because it is still use by the ScriptableObject internally and thus will throw an error.
Goals
  • The following IGoals' constructors have been changed to ctor(string, TGoalData, IGoalSavedData, IEventManager, IEntityCache, ITagService, ITagData[]) due to the tag refactor:

    • CollectCurrenciesWithTagsGoal
    • DynamicCollectCurrenciesWithTagsGoal
    • SpendCurrenciesWithTagsGoal
    • UpgradeCurrenciesWithTagsGoal
  • The following IGoalDatas' constructors have been changed to ctor(string, string, double, string[]) due to the tag refactor:

    • CollectCurrenciesWithTagsGoalData
    • DynamicCollectCurrenciesWithTagsGoalData
    • SpendCurrenciesWithTagsGoalData
    • UpgradeCurrenciesWithTagsGoalData
Main
  • Due to deprecation of AscensionCompleteEvent the Main.cs now listens to AdvanceStageEvent to load the new IStage.
Modifiers
  • If ModifierManager has been extended, or a custom ModifierCache has been implemented, the following applies:
    • ModifierManager has been completely refactored and is no longer a partial class. Any custom solutions that made use of the partial class will now have to be reworked to implement IModifierManager or extend ModifierManager and be bound into the dependency system.
  • ModifierCache.GetModifiersAffectingModifiable(string modifiableId) and ModifierCache.GetModifiersAffectingModifiable<TModifierCategoryData>(string modifiableId) have been changed to return IModifiers that affect the given IModifiable via ModifierData.affectAll. Previously these would not be returned. These methods also have new strict IModifierCategoryData verification that will not return IModifier objects that can not be affected by a given IModifierCategoryData.
Plot Point Manager
  • Constructor ctor(IPlotPointDataProvider, IEventManager, ISerializer) has been changed to ctor(IDependencyContainer) for simplicity.
Saved Data
  • The constructor signature changed from ctor(string, ISerializer) to ctor(string, IDependencyContainer) due to the ISavedData refactor.
  • The classes (and the ones that extend them) listed below have been switched to use the new constructor ctor(string, IDependencyContainer).
  • The following classes are affected in idlekit-implementation: BoostSavedData, TimedBoostSavedData, CharacterSavedData, ContentSavedData, CurrencySavedData, UpgradeableCurrencySavedData, GeneratorEntitySavedData, GoalSavedData, PlotPointSequenceCollectionSavedData, TimerTrunkSavedData, StageSavedData, and UserSavedData.
  • The following classes are affected in idlekit-examples: RewardGeneratorEntitySavedData, and LoopingContentSavedData.
  • The following classes are affected in idlekit-showcase: ShowcaseTimerTrunkSavedData.
Time Management
  • TimerSubscription(float durationSeconds, bool loop = false) has been deprecated. Use TimerSubscription(long duration, bool loop = false) instead.
  • TimerSubscription(float durationSeconds, long initialTimestamp, bool loop = false) has been deprecated. use TimerSubscription(long duration, long initialTimestamp, bool loop = false) instead.
  • TimerTrunkData.durationInSeconds has been deprecated. Use TimerTrunkData.duration instead. This value is in milliseconds now.
Trade
  • With the extensive refactor of the Trade system, a full Trade Entity controller has been added containing much of the logic that used to live in TradeSet. TradeService has also been added, replacing the functionality for accessing different TradeData that was previously available through TradeSet.
  • The functionality of TradeSet.GetValidTrades can now be achieved via TradeService.GetTrade or TradeService.GetTrades and then calling Trade.IsValid. In the same way calls to TradeSet.GetValidTradesWithInputTag and TradeSet.GetValidTradesWithOutputTag should be replaced by TradeService.GetTradesWithInputTag or TradeService.GetTradesWtihOutputTag and then calling Trade.IsValid.
  • The MakeExchangePlayerEvent now longer has to be called directly from UI. Instead Trade.MakeTrade should be used.

idlekit-tools

Asset Importer
  • Asset Creators for the following Entity Datas now require a targetTagIds arrays and a targetAll flag in the input csv data:
  • RandomTagsCurrencyReward
  • CollectCurrenciesWithTagsGoal
  • DynamicCollectCurrenciesWithTagsGoal
  • SpendCurrenciesWithTagsGoal
  • UpgradeCurrenciesWithTagsGoalData
  • RandomTagsCurrencyReward
  • The Asset Creator for TradeData now require inputCurrencyTagIds and outputCurrencyTagIds arrays in the input csv data.
Trade
  • TradeSet has been deprecated, see information above for more detail.

idlekit-examples

  • N/A

idlekit-showcase

Showcase Content
  • The ShowcaseContentDataAssetCreator requires that input csv data now contain a tradeCooldownDuration field.
  • ShowcaseContentParameters now take an array of Trades rather than the deprecated TradeSet.
Event
  • AutoUnlockBuyGeneratorPlayerEvent.UnlockGenerator has been changed to AutoUnlockBuyGeneratorPlayerEvent.Apply due to the BuyGeneratorPlayerEvent change.
Event Content
  • All Content data associated with events has been changed to ShowcaseEventContent which derives from EventContent. This showcases the ability to track Milestone progress while in an event.
  • A new global EntitiesDatabase has been added to Main. The idea behind this data is that it is always loaded no matter what Content is loaded. Only globally required data should be stored here to reduce memory use.
  • A ShowcaseEventSettings class has been added to the project to showcase one potential method for implementing limited time events. Ideally the actual implementation would use a backend to supply the time related data. EventSettings is a nice place to save event related data because it is globally accessible and can be read even when not in the Event Content.

Version 0.18.1 to 0.19.0, 2019-05-27

idlekit-framework

Generator
  • double baseSpeed { get; } has been deprecated in IGeneratorBalanceData. Use long baseDuration { get; } instead. This value is in milliseconds now. Data import is still in seconds.
  • double speed { get; } has been deprecated in IGeneratorEntity. Use long duration { get; } instead. This value is in milliseconds now.
Goals
  • double seconds { get; } has been deprecated in IDynamicGoalData. Use long duration { get; } instead. This value is in milliseconds now. Data import is still in seconds.
Economy
  • IEconomy.GetSpeed() and it's overloads have been deprecated. Use IEconomy.GetDuration() and it's overloads instead. These methods return values in milliseconds now.
Timed Rewards
  • float durationInSeconds { get; } has been deprecated in ITimedRewardData. Use long duration { get; } instead. This value is in milliseconds now. Data import is still in seconds.
  • double timeRemaining { get; } has been deprecated in ITimedReward. Use long durationRemaining { get; } instead. This value is in milliseconds now.

idlekit-implementation

Time Management
  • TimerSubscription(float durationSeconds, bool loop = false) has been deprecated. Use TimerSubscription(long duration, bool loop = false) instead.
  • TimerSubscription(float durationSeconds, long initialTimestamp, bool loop = false) has been deprecated. use TimerSubscription(long duration, long initialTimestamp, bool loop = false) instead.
  • TimerTrunkData.durationInSeconds has been deprecated. Use TimerTrunkData.duration instead. This value is in milliseconds now.
  • TimerTrunkData.initialDurationInSeconds has been deprecated. Use TimerTrunkData.initialDuration instead. This value is in milliseconds now.
Generators
  • AutoCollectState.collectDuration is now a long instead of a float. This value is in milliseconds now.

idlekit-tools

  • N/A

idlekit-examples

  • N/A

idlekit-showcase

  • N/A

Version 0.18.1 to 0.19.0, 2019-05-27

idlekit-framework

Currency
  • ICurrency.ContainsTagOrRarity has been renamed to ICurrency.ContainsTag for simplicity

idlekit-implementation

Goal
  • DynamicCollectCurrencyTypeGoalData's double secondsUntilComplete { get; } has been renamed to double seconds { get; }
Events
  • The constructors for the following IEvents must now be passed an IEventManager:
  • ClaimGoalPlayerEvent
  • CheckGeneratorUnitTargetHit
  • ClaimTimedRewardPlayerEvent
  • OpenTimerTrunkPlayerEvent
Rewards
  • AscendPlayerEvent.GetRewardIds can now be found on the new AscensionReward class.

idlekit-tools

  • N/A

idlekit-examples

  • N/A

idlekit-showcase

  • N/A

Version 0.17.0 to 0.18.0, 2019-04-15

idlekit-framework

Generator
  • void RefreshCache() has been deprecated on IGeneratorEntity but it is still available in the implementation GeneratorEntity. It was removed because the function was too specific.
Managers
  • void RegisterCurrency() and other similar functions have been removed from ICurrencyManager but they are still available in the implementation of the interface CurrencyManager. They were removed because the functions were too specific to the idlekit-implementation.
  • void RegisterModifier(), void UnregisterModifier() and other similar functions have been removed from IModifierManager but they are still available in the implementation of the interface ModifierManager. They were removed because the functions were too specific to the idlekit-implementation.
  • void RegisterReward() and other similar functions have been removed from IRewardManager but they are still available in the implementation of the interface RewardManager. They were removed because the functions were too specific to the idlekit-implementation.
Time
  • All time stamp related fields, properties, or parameters have had their names changed to timestamp in milliseconds format for consistency.
  • ITimerListener's OnUnSubscribe() has been removed because the object should be responsible for its own un-subscribing.
  • All ITimerService methods that previously worked with an (out uint requestId) and other parameters have been refactored to work with an ITimerListener only to clean up the API. While the time subscription (i.e: duration, initialTime, looping) information can be found at ITimerListener.ITimerSubscription.
User Saved Data
  • IUserSavedData has been removed from ISavedDataManager to reduce coupling. Use the IEntityCache.Resolve<IUserSavedData>() to retrieve and use the IUserSavedData.

idlekit-implementation

Event Manager
  • ActionManager has been removed due to the confusion it created as it shared too many similar functionality with EventManager. Please use EventManager in place of ActionManager.
  • ActionManager's action queue system makes it very difficult to debug and would easily introduce execution order dependent bugs. The queue has been removed and all IEvent are dispatched immediately.
Goals
  • The following Goal related name changes include the renaming of all the GoalDataAsset involved. Therefore, all the GoalDataAssets related to the Goals mentioned below need to be re-imported.
  • CollectCurrencyGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to CollectCurrencyTypeGoal due to the introduction of instancing. The IGoal no longer targets just one instance but multiple instances of the same staticDataId.
  • CollectUpgradeableCurrencyGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to CollectUpgradeableCurrencyTypeGoal due to the introduction of instancing. The IGoal no longer targets just one instance but multiple instances of the same staticDataId.
  • DynamicCollectCurrencyGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to DynamicCollectCurrencyTypeGoal due to the introduction of instancing. The IGoal no longer targets just one instance but multiple instances of the same staticDataId.
  • SpendCurrencyGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to SpendCurrencyTypeGoal due to the introduction of instancing. The IGoal no longer targets just one instance but multiple instances of the same staticDataId.
Unity Event Listener
  • UnityEventListener is no longer an IService as it derives from a MonoBehaviour; therefore, it goes through a different create and initialize sequence compare to regular C# IServices.
Timer Trunk
  • As the unlock functionality of the TimerTrunk is specific to the showcase game, it has been moved to a new ShowcaseTimerTrunk implementation that can be found in the Showcase repo.
  • A new initialDuration field has been added to allow the duration of the initial subscription to the timer service to vary from subsequent subscriptions.
  • The TimerTrunk no longer has to be initially claimed before it will be subscribed to the timer service. To retain the previous behavior, where the trunk would be immediately available on the first initialization, set the new initialDuration data field to 0.

idlekit-tools

CanvasView
  • void CanvasStageView.SetStage(IStage) is now protected instead of public as the IStage is set by listening to the StageInitializedEvent.
Plot Points
  • The PlotPointEditor.SaveSequence functionality has changed significantly. If you are utilizing this functionality, re-read the method to make sure you still get the intended results.

idlekit-examples

  • N/A

idlekit-showcase

Data
  • Timed Rewards
  • TimerTrunk header and data types are now ShowcaseTimerTrunk.
  • id and dataName fields changed to mg01_showcase_timer_trunk.
  • initialDurationInSeconds has been added.
  • unlockStageId has been added. Previously this existed in the Content data.
  • Content
  • timerTrunkUnlockStageId has been removed. This now exists in Timed Rewards data.
  • timerTrunkId has changed to mg_01_showcase_timer_trunk.

Version 0.16.0 to 0.17.0, 2019-3-15

idlekit-framework

Entity
  • ICurrencyGoal has been deprecated as IGoal no longer needs to have all the ICurrency injected due to the introduction of IEntityCache
  • IGeneratorGoal has been deprecated as IGoal no longer needs to have all the IGenerator injected due to the introduction of IEntityCache
  • IEntityController's void Cleanup(ILoaderService loaderService); has been changed to void Cleanup(IEntityCache entityCache); to avoid having too much responsibility being injected
  • All IEntityData's T Create<T>(IDependencyContainer dependencyContainer, string instanceId) method shas been moved to idlekit-examples. This is done to avoid confusion since idlekit-implementation does not utilize the instancing feature, please use T Create<T>(IDependencyContainer dependencyContainer) or check out IInstanceEntityData in the Instance example
Goal
  • IGoalData's float[] difficultyIncrement { get; } has been removed from the project due to the removal of IDifficultyManager
Loader
  • TReturn LoadEntity<TReturn,TData>(string dataId, string instanceId) has been moved to idlekit-examples. This is done to avoid confusion since idlekit-implementation does not utilize the instancing feature in idlekit-implementation, please use TReturn LoadEntity<TReturn,TData>(string dataId) or check out IInstanceLoaderService in the Instance example

idlekit-implementation

Exception & Error Events deprecated
  • ExceptionEvent and ErrorEvent have both been deprecated. The new IdleKitLog should be used in place of these, for example:
ExceptionEvent exceptionEvent = eventManager.GetEvent<ExceptionEvent>();
exceptionEvent.caller = this;
exceptionEvent.exception = new InvalidGoalDataException(this, "exception message");
eventManager.DispatchEventImmediate(exceptionEvent);

is replaced by:

IdleKitLog.LogException(new InvalidGoalDataException(this, "exception message"));

If you were previously listening to ExceptionEvent or ErrorEvent, this functionality can be replicated via Unity's Application.logMessageReceived. More information is available in the Unity documentation.

Goals
  • The following Goal related name changes include the renaming of all the GoalDataAsset involved. Therefore, all the GoalDataAssets related to the Goals mentioned below need to be re-imported.
    • IGoalData.amount is no longer an optional field (has to be > 0) for AutomateGeneratorTypeGoal and BuyGeneratorTypeGoal.
  • AutomateSpecificGeneratorGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to AutomateGeneratorTypeGoal due to the introduction of instancing. The IGoal no longer targets just one instance but multiple instances of the same staticDataId.
  • BuySpecificGeneratorGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to BuyGeneratorTypeGoal due to the introduction of instancing. The IGoal no longer targets just one instance but multiple instances of the same staticDataId.
  • CollectCurrenciesOfRarityGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to CollectCurrenciesWithTagsGoal to work with all ITagData instead of IRarityData.
  • CollectFromSpecificGeneratorGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to CollectFromGeneratorTypeGoal due to the introduction of instancing. The IGoal no longer targets just one instance but multiple instances of the same staticDataId.
  • GetGeneratorUnitsForSpecificGeneratorGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to GetGeneratorUnitsForGeneratorTypeGoal due to the introduction of instancing. The IGoal no longer targets just one instance but multiple instances of the same staticDataId.
  • GetUpgradesForSpecificCurrencyGoal and its corresponding IGoalData and IGoalDataAsset have been renamed to GetUpgradesForCurrencyTypeGoal due to the introduction of instancing. The IGoal no longer targets just one instance but multiple instances of the same staticDataId.
  • GoalEvent is removed because the IGoalSavedData alteration should only be in an IAction. Use ProgressGoalAction and SetProgressGoalAction instead.
StaticDataManager and LoaderService errors
  • All varients of the GetData methods in StaticDataManager now adds an entry to the log rather than hard failing when a requested Entity or type does not exist. As a result execution will now continue when a requested Entity or collection of Entities do not exist.

This means that code calling the LoaderService also no longer needs to check for possible invalid entries before calling LoaderService.LoadAllEntities, for example:

ICharacter[] characters = characterIds.Length > 0 ? loaderService.LoadAllEntities<ICharacter, ICharacterData>(characterIds) : new ICharacter[0];

Can be replaced by:

ICharacter[] characters = loaderService.LoadAllEntities<ICharacter, ICharacterData>(characterIds);
* All varients of the GetData methods that can return arrays will now return empty arrays when the requested Entity type does not exist in the Entities Database. Previously the behavior was inconsistent with some methods returning empty arrays and others returning null/default.

  • The GetDataForIds method will now return an array with elements for every valid Id that is passed as an argument. Previously the behavior was for the method to return an empty array if any Id passed was invalid.

  • For consistency GetData<T>(Predicate<T>) an array rather than a IEnumerable.

idlekit-tools

idlekit-examples

idlekit-showcase

ShowcaseContent
  • Data class now requires that you have a "timerTrunkUnlockStageId" which will dictate when the UI should allow the user to interact with the Timer Trunk as well as when the Timer Trunk should activate.

Version 0.15.0 to 0.16.0, 2019-02-19

idlekit-framework

Repository Restructure
  • The Idlekit repositories have been restructured to make the division of code responsibility more obvious. Idlekit now contains the following repositories:
  • Framework: Containing only the interface classes of Idlekit. Previously these classes were found in the Idlekit repository.
  • Implementation: The implementation classes of the interfaces found in Framework. Previously this code was found in the Idlekit repository.
  • Tools: Common and tools code, such as the Data Importer and Plot Point Editor. Previously this code was found in both the Idlekit and Idlekit-Example repositories
  • Examples: A set of small, self contained example scenes that show how core concepts within Idlekit operate. Previously this functionality was found in the Idlekit-Example repository.
  • Showcase: A game implementation that showcases the features of Idlekit. Previously this functionality was found in the IdleKit-Example repository.
  • As part of this restructure, the namespaces within Idlekit have been rationalized. The following changes have been made:
  • Idlekit.Showcase has been added. All code specific to the Showcase project now exists within this namespace.
  • Idlekit.Showcase.Test has been added and holds any tests specifically for the Showcase project.
  • Idlekit.Showcase.DataAssetImporter has been added and contains the Showcase specific importer code.
  • Idlekit.Examples has been renamed from Idlekit.Example and now contains only code that is specific to the examples.
  • Idlekit.Examples.Test has been renamed from Idlekit.Example.Test and now only contains tests specific to the examples.
  • Idlekit.PlotPoint has been renamed from Idlekit.PlotPoints and now contains all runtime code for Plot Points.
  • Idlekit.Tools.PlotPoint has been added. All editor and non-runtime Plot Point code now resides in this namespace including the contents of Idlekit.Example.PlotPoints.Editor which has been removed.
  • Idlekit.Example.PlotPoints has been removed.
  • Idlekit.Editor has been added for general code used only in editor.
  • Idlekit.Tools.Editor has been added for tools specific editor code.
  • Idlekit.Tools.Common has been added. Code shared between the examples and showcase, mostly UI related, now resides here.
  • Idlekit.Tools.Common.Debug has been renamed from Idlekit.Example.Debug.
  • Idlekit.Tools.DataAssetImporter has been renamed from Idlekit.DataAssetImporter.
  • Idlekit.Tools.Test has been renamed from Idlekit.Test. This is now the only namespace for core Idlekit tests.
Entity Refactor
  • The IEntityData interface has been added:
  • All Static Datas that are owned directly by Entity Controllers should inherit from this interface.
  • This interface requires that a Create<T> method be implemented on derived types.
    • This method is responsible for creating the Entity Controller (IEntityController) along with any other dependencies for the Controller such as ISavedData. See StageData.Create<T> for an example.
    • This creation functionality previously lived in the ILoaderService for each Entity type.
  • The IEntityyController interface has been added. Each Entity Controller should now inherit from this interface.
  • The interface requires that getters be implemented for instanceId and staticDataId. Both of these members should be set via the IEntityData.Create<T> method.
    • The staticDataId should be taken from the IEntityData that is creating the Entity Controller
    • The instanceId should be unique if you wish to allow for instancing of your Entity Controller
  • The interface also requires that a Cleanup(ILoaderService) method be implemented. This method is called when the object (and any entities it is the owner of) should be unloaded from the loader service.
  • The following Entity Controllers are now IEntityControllers:
  • IBoost
  • ICharacter
  • IContent
  • ICurrency
  • IExchangeRate
  • IGeneratorUnitTargetSequence
  • IGeneratorEntity
  • IGoal
  • IModifier
  • IReward
  • ITimedReward
  • IStage
  • 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.
Loader Service Refactor
  • As a result of the changes to Entities described above, the ILoaderService interface has been simplified and genericized.
  • All Entity specific load methods have been removed.
  • This functionality is instead now found within each Entities IEntityData.Create<T> method which is invoked directly by the ILoaderService.
  • For example, a call _loaderService.LoadStage(_stageId) would be replaced with _loaderService.LoadEntity<IStage, IStageData>(_stageId, _stageInstanceId).
  • ILoaderService now implements the following methods:
  • UnloadEntity
  • LoadEntity<TReturn, TData>
  • LoadAllEntities<TReturn, TData>
  • LoadAllEntitiesOfType<TReturn, TData>
  • Clear
Generator Refactor
  • IGenerator:
  • Renamed to IGeneratorEntity.
  • IGeneratorEntity requires (and is created by) the IGeneratorEntityData.
  • Be sure to implement the generatorEntityData(all data) and generatorData(defining data) separately as they are.
    • Because the generatorData defines the generator conceptually, it will likely be a constant between many different IGeneratorEntity objects. The balance and the rewards might change, but the idea, relationships, definition, and look of the 'same' generator (GeneratorData) from stage to stage should stay consistent. IE: The idea of a "Gas Station" being a generator in a game needs only one IGeneratorData but will have many IGeneratorEntityData to allow different rewards and/or balances depending on the stage.
    • Because of the above, modiableData should return generatorData so that a single relationship between modifier and modifiable can be made but still persist from stage to stage despite each stage likely having unique GeneratorEntityData references.
  • IGeneratorStageData:
  • The data held within this class now lives in IGeneratorEntityData.
  • As a result, IStage no longer needs a GeneratorStageData array and instead only needs to reference an array of IGeneratorEntityData ids to define which generators will run in the stage.
  • IGeneratorData:
  • Data input where this object is used is now in the IGeneratorEntityData assets instead of the IStageData assets. No longer has an isContentSpecific boolean.
  • Still implements the IModifiableData that will be used by the IModifiable portion of the IGeneratorEntity (instead of passing that responsibility off to IGeneratorEntityData). This is because IGeneratorData is the constant between the same generator concept from stage to stage (IE: "Gas Station", "Pet Store", etc). This way, referencing a GeneratorData as a modifier's target will persist that relationship from stage to stage. See the IGenerator UpgradeNotes for extra details.
  • IGeneratorBalanceData:
  • Is now referenced by IGeneratorEntityData assets instead of the IStageData assets.
  • IGeneratorUnitTarget:
  • This object was doing nothing but holding a reference to its data and is removed. Reference a IGeneratorUnitTargetData instead.
  • IGeneratorUnitTargetSequenceData:
  • Is now referenced by IGeneratorEntityData assets instead of the IStageData assets.
  • IGeneratorSavedData:
  • IGeneratorSavedData.BeginProduction was doing extra calculations due to its param being a DateTime. This param has changed to long timestampMs.
  • Due to the above change, IGeneratorSavedData.startProducingTime has been deprecated. Use timestampMs instead.
  • _startProductionTotalMs is removed as IGeneratorSavedData implements ITimedSavedData.
IUnlockable Implementation
  • This new interface can be used as a way of marking an Entity that can be both available (the player can earn or be rewarded the Entity) and obtained (the player has aquired the Entity).
  • Both ICurrency and IUpgradeableCurrency now inherit from IUnlockable and implement getters for available and obtained.
  • On IUpgradeableCurrency the isOwned flag is now replaced by obtained to reflect the changes to the new available and obtained logic.
  • Also on IUpgradeableCurrency the isUnlocked flag is replaced by available to reflect the changes to the new available and obtained logic.
  • IUpgradeableCurrencySavedData.isUnlocked is replaced by IUnlockable.available to reflect the changes to the new available and obtained logic.
Goal Refactor
  • IGoal has been refactored so that Goals can operate in isolation. They no longer have any reference to sequences or other indicies related to the ordering of goals within a IStage.
  • As a result, IGoalSequenceSavedData has been renamed to IGoalSavedData with each IGoal owning it's own IGoalSavedData.
  • IStageSavedData no longer handles goal saved data as a result.
  • IGoalSequenceSavedData.slotIndex and IGoalSequenceSavedData.goalIndex have been removed and this goal tracking functionality is now handled by IStageSavedData.activeGoalIndicies.
IBoostData
  • As a result of the Entity refactor, IBoost CreateBoost(ISavedDataManager savedDataManager, IActionManager actionManager) has been deprecated please call IEntityData.Create instead.
IBoostSavedData
  • IBoostSavedData.isActive is moved to IBoost.isActive.
IRewardData
  • As a result of the Entity refactor, CreateReward(ICurrencyManager, IRewardManager, IActionManager) has been deprecated, please use CreateReward(ICurrencyManager, IRewardManager).
IUpgradeableCurrency
  • IUpgradeableCurrency.currentLevel is replaced by IUpgradeable.level for consistency.

idlekit-implementation

ClearContentAction
  • The constructor now requires ILoaderService to be passed as a dependency.
CollectFromGeneratorAction
  • The constructor no longer requires IEconomy to be passed as a dependency.
CurrencyUnlockedEvent
  • CurrencyUnlockedEvent is renamed to CurrencyObtainedEvent to reflect the changes to the new available and obtained logic.
GrantRewardAction
  • GrantRewardAction.GrantRewards deprecated all but one signature: GrantRewards(string[] rewardIds, int randomSeed).
LoaderService
  • The constructor now requires that only the IDependencyContainer is passed as a dependency.
RandomRarityCurrencyReward
  • RandomRarityCurrencyReward along with its IStaticData and ISavedData have been renamed to RandomTagCurrencyReward.
TimedBoost
  • duration has been renamed to timeRemaining for consistency with other similar calls.
UpgradeLevelData
  • As UpgradeLevelData now inherits from IUpgradeLevelData the return type of UpgradeLevelData.upgradeRequirements is now IUpgradeRequirement. Functionality which relied on this property returning UpgradeRequirement must now cast the returned object to this type.

idlekit-examples

  • N/A

idlekit-tools

RandomCurrencyRewardDataAssetCreator
  • RandomCurrencyRewardDataAssetCreator is renamed to RandomTagCurrencyRewardDataAssetCreator for consistency.
DataAssetImporter
  • DataAssetImporter and related classes have been renamed to BaseDataAssetImporter. These classes have also been virtualized to allow derived implementations of BaseDataAssetImporter. Constants header scripts have also been moved into Showcase repo.
  • The importer no longer supports the generation of sparse arrays in data structures. If csv data contains empty entries between populated entries (eg. ) these entries must be consolidated (eg. ,currency1, currency2, , ,currency3, should become ,currency1, currency2, currency3,). If this is not done the importer will cease generating data for a given structure on the first empty entry found.
ExampleContent
  • ExampleContent has been renamed ShowcaseContent and moved into Showcase repo.

idlekit-showcase

DataAssetImporter
  • ShowcaseDataAssetImporter and related classes have been implemented based on the base classes in the tools repo. Constants header scripts have been moved into Showcase repo.
ExampleContent
  • ExampleContent has been renamed ShowcaseContent and moved into Showcase repo.

Version 0.14.0 to 0.15.0, 2019-01-07

BuyMissingResourcesAction
  • BuyMissingResourcesAction has been deprecated in v0.15.0, please use MakeExchangeAction instead, which functions identically.
Example Project
  • A new ExampleContent type which derives from Content has been added into the Example Project. Where Content aims to showcase an in-game implementation of each core idlekit concept, the ExampleContent is designed to show extended functionality which may be of use in your game. Extended functionality such as Trades and TimerTrunk has been implemented in the ExampleContent and the Missing Resource ExchangeRate functionality that was previously in Content has been moved to ExampleContent.
ExampleContentDataAssetCreator
  • ExampleContentDataAssetCreator now inherits from a BaseContentDataAssetCreator to allow for shared functionality between it and the ContentDataAssetCreator. If you have implemented a custom ContentDataAssetCreator it should now inherit from BaseContentDataAssetCreator.
GachaItem
  • GachaItem.weight has been deprecated in 0.16.0, use GachaItem.randomWeight instead.
IContent
  • IContent and IContentData had missingResourcesExchangeRate and missingResourcesExchangeRateId removed as they were to specific to the example project. For reference, see ExampleContent in idlekit-example.
  • IContent previously had two constructors where it shouldn't have (one was unused). The removed constructor was one that ignored the stageIds field of IContent.
ICurrencyManager
  • GetAllCurrenciesOfRarity is deprecated in v0.15.0. Please use GetAllCurrenciesOfTagOrRarity instead.
  • ICurrencyManager now requires a GetAllCurrenciesOfTagOrRarity() method. If you have a custom class that derives from ICurrencyManager it must now implement this function. See CurrencyManager.cs for a sample implementation.
ICurrency
  • ICurrencyManager now requires a ContainsTagOrRarity() method. If you have a custom class that derives from ICurrency it must now implement this function. See Currency.cs for a sample implementation.
IGlobalUpdateManager -> IUnityEventListener
  • IGlobalUpdateManager has been replaced with IUnityEventListener.
  • IUpdateable, ILateUpdateable, and IFixedUpdateable have been removed. Listeners for those methods should register with the corresponding events OnUpdate, OnLateUpdate, and OnFixedUpdate on IUnityEventManager.
ITimerService
  • long GetUnixTimeStampInSeconds and long GetUnixTimeStampInMilliseconds have been changed to double timestampInSeconds and double timestampInMilliseconds to avoid casting.
  • Tick(float elapsedTime) has been changed to ProcessSubscriptions().
LoadContentAction
  • No longer begins the content automatically by calling IContent.Load, that responsibility now lies in the class that fired this action. In our case, Main.cs.

Version 0.13.2 to 0.14.0, 2018-11-23

GrantRewardAction
  • rewards is deprecated and renamed to rewardResults for clarity.
IContent
  • CanAscend has been deprecated, please use IStage.CanAscend on the currentStage instead.
IContentData
  • stageSequenceDatas has been deprecated and moved to example specific LoopingContentData. IdleKit now only contains a basic ContentData data class that holds a list of stage ids.
  • stagePlaythroughStyle has been deprecated as we now subclass ContentData with LoopingContentData for different playstyles.
  • GetStageData has been deprecated in, please call IContent.currentStageId instead.
  • GetNextStageData has been deprecated in, please call IContent.nextStageId instead.
  • GetNextStageDataIndex has been deprecated in, please call IContent.nextStageId instead.
IContentSavedData
  • playthroughAmounts has been deprecated since it is too specific for an interface implementation.
  • IncrementPlaythrough has been deprecated since it is too specific for an interface implementation.
  • SetCurrentStageIndex has been deprecated since it is too specific for an interface implementation.
  • The above variables have been moved to the example specific LoopingContentSavedData.
  • currentStageIndex has been deprecated since it is too specific for an interface implementation, please call currentStageId instead.
  • BeginContent has been deprecated, please use setter of hasStarted instead.
ICurrency
  • Has(double amount) has been deprecated since we want to support a gameplay that the user can Add or Remove a positive or negative amount, please call Get() and compare the values instead.
ICurrencyManager
  • HasCurrencyAmount(string id, double amount) has been deprecated since we want to support a gameplay that the user can Add or Remove a positive or negative amount, please call GetCurrencyAmount(string id) and compare the values instead.
  • ICurrencyManager no longer listens to StaticDataAdded event. Instead, ICurrencies are now loaded and registered to ICurrencyManager in LoadContentAction.
IEconomy
  • Some methods related to the cost of generator units have been refactored to improve usability and functionality.
  • IEconomy.GetMaxGeneratorUnit has been renamed to the more accurate GetAffordableUnitsToNextTarget.
  • Economy.GetMaxGeneratorUnit has been moved to IEconomy and renamed GetMaxAffordableUnits. A 'max' argument has been added which allows for a cap on the maximum number of units the be specified, a default of -1 can be passed for no cap. The 'reserve' argument has been removed as the currency reserve is now calculated internally.
  • See CanvasGeneratorView.cs in idlekit-example for an example of how this functionality is used.
  • GetPayout(IGenerator generator, bool applyModifiers, int additionalLevels) has been deprecated in, please use GetPayout(IGenerator generator, bool applyModifiers) instead
  • GetSpeed(IGenerator generator, bool applyModifiers, int additionalLevels) has been deprecated in, please use GetSpeed(IGenerator generator, bool applyModifiers) instead
IExhangeRates
  • IExchangeRate has been added to allow a conversion rate to be calculated between two exchangable items.
  • As ICurrency now inherits from IExchangable all Currency types must implement a GetExchangeValue() method to allow for exchange rates to be calculated. See Currency.GetExchangeValue() as an example implementation.
  • IContent now contains a missing resources ExchangeRate that can be used to calculate an exchange rate. As a result, IContentData now contains an Id for the missing resources exchange rate asset.
ILoaderService
  • LoadStage(IContentData contentData) has been deprecated, please call LoadStage(string stageId) instead.
  • LoadGoals(IStagedata stageData), please call LoadGoal(string goalId, IGoalSequenceSavedData goalSequenceSavedData.
IModifierData
  • Init(string guid, IModifierCategoryData modifierCategoryData) has been deprecated, please call Load(IModifierCategoryData modifierCategoryData)
IModifierManager
  • IModifiables no longer registered to the IModifierManager on StaticDataAdded events.
  • IModifiers no longer registered to the IModifierManager themselves, instead they are now registered to IModifierManager in LoadContentAction and LoadStageAction.
  • constructor ModifierManager(IStaticDataManager staticDataManager, IEventManager eventManager) has been deprecated, please call ModifierManager(IEventManager eventManager) instead
IRarity
  • ICurrency now contains ITagData and IRarityData members to hold tag and rarity information. While tags are optional, all Currency types must have a Rarity. As a result ICurrencyData now requires Ids for both tags and rarity. Sample Rarity assets can be found in the IdleKit-Example Data folder.
  • The EntitiesDatabase now contains functionality to load IRarityData and ITagData in EntitiesDatabase.Load(). If using a custom loader process then ITagData and IRarityData assets must be loaded prior to other Entities as they may depend on them.
IRewardManager
  • IRewardManager no longer listens to StaticDataAdded event. Instead, IRewards are now loaded and registered to IRewardManager in LoadContentAction.
IStaticDataManager
  • AddDataCollection(string[] ids, T[] data) has been deprecated, please call AddDataCollection(T[] data) instead
  • AddDataCollection(string[] ids, object[] data, Type entityType) has been deprecated, please call AddDataCollection(T[] data) instead
  • StaticDataAddedEvent event is not used anymore in the IdleKit framework as IdleKit loads the entities with ILoaderService and registers them with their respective IServices directly.