IdleKit Changelog
Version 2.1.1 2022-05-04
- CHANGE Changed
MilestoneClaimableAction
toMilestoneClaimableStateAction
. Now all calls to this action requires theMilestone
entity. - CHANGE Improvements to the
IPayoutEntity
interface to be able to pay out more than just currencies. - CHANGE Improvements to decrease strain on the backend, generator saved data is not sent with every automated generator collection.
- BUFIX Fixes related to load phases being unable to complete if Beamable hasn't loaded.
- BUGFIX Deserializing in beamable will only return true when returning valid save data.
- FEATURE A user description string has been added to the
IProgressable
interface which can be used to display information about what is currently happening in load phases.
Version 2.1 2022-03-16
- BUGFIX Fixes issue saving analytics events to json.
- CHANGE Kraang Analytics package has been split into its own package, and is now pulled in as a dependency of IdleKit.
- CHANGE Kraang Analytics classes have been refactored to be less dependent on IdleKit.
- CHANGE Story Sequence Tool has been split into its own pacakge, and is now pulled in as a dependency of IdleKit.
- BUGFIX Fixed a bug where random rewards for sometimes unevenly weighted to omit the lowest and the highest values in the rewards list.
- CHANGE Refactored the
ActivityTrackingService
to make use of theProjectionService
instead of using its own logic for calculations. This change also introduced a newOfflineProgressAction
which replaced the previousOfflineProgressActionStart
andOfflineProgressActionEnd
. - CHANGE The
Startup
class now has 2 separate methods for switching to main game content and to event content:SwitchToMainGame
andSwitchToEvent
. Both methods have clearer signatures. - FEATURE Added
CheckVersionLoadPhase
as well asVersionMismatchAction
andVersionService
for reacting to client's version mismatch. The data about current client version is stored inside of theVersionData
class. - CHANGE
UserSavedData
now has a clear separation betweenContentId
andEventSettingsId
. - BUGFIX A bunch of bugfixes for the Story Sequence Tool.
- CHANGE Added an
IsForceShowed
property to theIPromoSavedData
so the promo system can now tell whether a force shown promo has already been shown to the player.
Version 2.0.0, 2021-12-13
- FEATURE Beamable backend framework has been integrated into IdleKit to handle saving player data.
- FEATURE Added
PromoPurchasedStateAction
for savingPromoSaveData
when a promo is purchased. - CHANGE Added
RankRewardsSpritePath
property intoEventSettingsData
for adding unique sprites for event rewards on rewarded leaderboards. - CHANGE
Promo
now inherits fromStoreReward
so it can be bought by in-game currency. - CHANGE Rename CurrencyUnlockReward to CurrencyAvailableReward
List of features added to IdleKit since 1.4.1
- App Review Request Service
- Handles opening the app review native dialogue for ios/android
- Avatar Service for Manager Avatars
- Handles retrieving avatars available to the player, unlocking new avatars
- Beamable Backend
- Game server for syncing player/game state to the cloud
- Data Pipeline
- Designer-friendly game data management
- Gacha Odds Calculation Service
- Generates odds for gacha rewards in game
- IAP Purchase Service with Receipt Validation
- Real money purchases integrated with backend validation
- Kraang Analytics V2
- Updated standard game analytic events within IdleKit
- Leaderboard Service with Rewards
- Handles event and main game leaderboards and gives out rewards based on leaderboard rankings and points
- Localization Service
- Localization service for accessing translation dictionaries for multiple languages
- Local Notification Service
- Show local notifications on device at a specific time in the future
- Navigation Service for Android Inputs
- Android back button navigation mapping with view layering
- Network Connection Status Service
- Service which detects when the game loses connection to the backend servers
- New events structure based on phases
- Introduces an announcement phase and a main phase to alert players about upcoming events
- Plot Points deprecated in place of the Story Sequence Tool
- Replaced by the new narrative engine for authoring story moments - Story Sequence Tool
- Presentation Service
- A service for queueing several visual elements in the game one after the other
- Promos with Timed Durations and Triggers
- Provide promos to the player for in-app purchases which can be triggered based on a varity of rules
- Single Unified Repository
- Idlekit repositories have been consolidated into easy to manage repository
- Story Sequence Tool Integration
- Story Sequence tool is now integrated into IdleKit for narrative moments.
- User Stats Service for saving simple player data remotely
- Simple player data can be stored in the server and used between sessions
- Views Service
- Optional service for controlling the lifecycle of UI views in IdleKit
- Activity Tracking Service
- Automatically detect and account for a player’s break from the game.
Version 1.4.1, 2021-01-13
idlekit-implementation
- BUGFIX
ClaimTimedRewardStateAction
andGrantGoalRewardStateAction
now dispatch as their base ActionGrantRewardStateAction
.
idlekit-tools
- BUGFIX
DebugGrantRewardStateAction
now dispatches as their base ActionGrantRewardStateAction
.
idlekit-examples
- FEATURE Added a new example to demonstrate extension of an
IEntity
. The new example is located in theEquippableCurrency
scene, and corresponds to the newEntities/Customizing Entities
page in the documentation. The example adds ability to equip/unequip a currency to apply its effects to a generator in the scene.
Version 1.4.0, 2020-10-16
idlekit-logging
- N/A
idlekit-ioc
- N/A
idlekit-framework
Base Collector Entity
- FEATURE Introduced
IPayoutEntity
, which is implemented byIEntity
that can be paid out by any implementation ofIBaseCollectorEntity
. At the moment, onlyICurrency
andIReward
implement the interface. - CHANGE
IBaseCollectorBalanceData's
double basePayout
andstring payoutCurrencyId
getters have been renamed tobasePayoutAmount
andpayoutEntityId
. SeeUPGRADENOTES.md
for details. - CHANGE
IBaseCollectorEntity's
double payout
getter andvoid GetPayout(bool, IModifier[])
method have been renamed. SeeUPGRADENOTES.md
for details.
Currency
- CHANGE
ICurrency
andICurrencyData
implementIPayoutEntity
andIPayoutEntityData
so it can be output by anIBaseCollectorEntity
.
Reward
- CHANGE
IReward
andIRewardData
implementIPayoutEntity
andIPayoutEntityData
so it can be output by anIBaseCollectorEntity
.
Time Service
- FEATURE Introduced
Pause
andResume
to theITimerService
to preventgametime
from automatically updated.
idlekit-implementation
Activity Tracking Service
- CHANGE The service now pauses the
ITimerService
to prevent automatic timed updates between theSetContentStateAction
andIdleKitInitializedAction
during the initialization of aIContent
. This makes sure that the catchup logic can be performed afterIdleKitInitializedAction
after anIContent
initialization.
Goal
- CHANGE
DynamicGoal.targetProgress
estimation has been changed to only targetIGeneratorEntities
that are producingICurrencies
since anIGeneratorEntity
can also produceIReward
due to the introduction ofIPayoutEntity
. - FEATURE Added
CollectFromCollectorTypeGoal
, which progresses when the player collects from any or a specifiedICollectorEntity
. - CHANGE Added
CollectFromGeneratorTypeGoalData.any
, so whenany
is set to true the goal targets anyIGeneratorEntity
s in the Stage. - CHANGE
GeneratorGoal
has been renamed toBaseCollectorGoal
.
Projection Service
- CHANGE
GetPayoutProjections()
calculation has been changed to only targetIGeneratorEntities
that are producingICurrencies
since anIGeneratorEntity
can also produceIReward
due to the introduction ofIPayoutEntity
.
State Action
- CHANGE Due to
ICurrency
andIReward
changed to implement the commonIPayoutEntity
interface,GrantRewardStateAction
andCollectFromBaseCollectorStateAction
also changed to share the same base codeGrantPayoutStateAction
.
idlekit-tools
UI
- CHANGE
Collector
andGenerator
UI info buttons now also display theIPayoutEntity
id, type, and amount.
PlotPoint Editor
- CHANGE
PlotPointEditor.SaveSequence
has been simplified and refactored into a number of methods to improve readability and extensibility.
idlekit-examples
Generator Example
- CHANGE The Generator example has been retrofitted to work with a regular
IGeneratorEntity
to produce anIReward
. All the custom scripts have been removed as the baseIBaseCollectorEntity
now supports outputting anIReward
.
idlekit-showcase
- N/A
Version 1.3.0, 2020-09-02
idlekit-logging
- N/A
idlekit-ioc
- N/A
idlekit-framework
Base Collector Entity
- FEATURE Added a new
IBaseCollectorEntity
that contains the properties shared betweenIGeneratorEntity
andICollectorEntity
. The following interfaces have been similarly added: IBaseCollectorBalanceData
IBaseCollectorData
IBaseCollectorEntityData
IBaseCollectorEntitySavedData
Collector Entity
- FEATURE Added a new
ICollectorEntity
which extendsIBaseCollectorEntity
. Similarly toIGeneratorEntity
, the following interfaces have also been added: ICollectorBalanceData
ICollectorData
ICollectorEntityData
ICollectorEntitySavedData
- FEATURE The following Actions have been added:
CollectorInitializedAction
CollectorPayoutChangedAction
CollectorStateChangedAction
CollectorSpeedChangedAction
- FEATURE The following StateActions have been added:
BuyCollectorStateAction
CollectFromCollectorStateAction
Economy Service
- CHANGE
IEconomyService.GetPayout(IBaseCollectorEntity baseCollectorEntity)
has been deprecated, useIBaseCollectorEntity.GetPayout()
instead. - CHANGE
IEconomyService.GetPayout(IBaseCollectorEntity baseCollectorEntity, bool applyModifiers, IModifier[] excludedModifiers = null)
has been deprecated, useIBaseCollectorEntity.GetPayout(bool applyModifiers, IModifier[] excludedModifiers = null)
instead. - CHANGE
IEconomyService.GetDuration(IBaseCollectorEntity baseCollectorEntity)
has been deprecated, useIBaseCollectorEntity.GetDuration()
instead. - CHANGE
IEconomyService.GetDuration(IBaseCollectorEntity baseCollectorEntity, bool applyModifiers, IModifier[] excludedModifiers = null)
has been deprecated, useIBaseCollectorEntity.GetDuration(bool applyModifiers, IModifier[] excludedModifiers = null)
instead. - CHANGE
IEconomyService.GetAffordableUnitsToNextTarget(IGeneratorEntity generatorEntity, bool applyModifiers, IModifier[] excludedModifiers = null)
has been deprecated, useIGeneratorEntity.GetAffordableUnitsToNextTarget(bool applyModifiers, IModifier[] excludedModifiers = null)
instead. - CHANGE
IEconomyService.GetMaxAffordableUnits(IGeneratorEntity generatorEntity, bool applyModifiers, int maxCap = -1, IModifier[] excludedModifiers = null)
has been deprecated, useIGeneratorEntity.GetMaxAffordableUnits(bool applyModifiers, int maxCap = -1, IModifier[] excludedModifiers = null)
instead. - CHANGE
IEconomyService.GetIncrementGeneratorUnitCost(int unitsToIncrease, IGeneratorEntity generatorEntity, bool applyModifiers, IModifier[] excludedModifiers = null)
has been deprecated, useIGeneratorEntity.GetIncrementGeneratorUnitCost(int unitsToIncrease, bool applyModifiers, IModifier[] excludedModifiers = null)
instead.
Event Content
- REMOVE
IEventContentSavedData
andIStandardEventContentSavedData
have been removed as we no longer track the index of the activeIMilestone
. SeeUPGRADENOTES.md
for details. - CHANGE
IEventContent.activeMilestone
has been renamed toIEventContent.GetCurrentMilestone()
. - FEATURE Added
IEventContent.GetCurrentMilestoneIndex()
to return the index of the currentIMilestone
. This is useful for UI display purpose.
Event Settings
- FEATURE Added
bool MilestoneCompletionInfo.complete
that indicates theIMilestone
associated with theMilestoneCompletionInfo
has been actually completed instead of having a projected completion time (see below). - CHANGE
MilestoneCompletionInfo.completionTime
has been renamed toMilestoneCompletionInfo.projectedCompletionTime
. This is a saved data breaking change and aFormerlySerializedAs
attribute is added to theMilestoneCompletionInfo.projectedCompletionTime
. SeeUPGRADENOTES.md
for details. - CHANGE
IEventSettings.CanCompleteMilestone(string);
has been changed toIEventSettings.CanCompleteMilestone(IMilestone);
. SeeUPGRADENOTES.md
for details. - CHANGE
IEventSettings.SetMilestoneCompletionTime(string, long);
has been changed toIEventSettings.SetMilestoneCompletionTime(IMilestone, long);
. SeeUPGRADENOTES.md
for details.
Generator
- CHANGE
IGeneratorStates
now implementsIInjectable
that allows them to be injected from theIContainer
. See theGeneratorEntity
inidlekit-implementation
to see how it is utilized. - FEATURE Introduced specific
IGeneratorState
interfaces so the existingIGeneratorState
interfaces can be injected:IAutoCollectState
,IProduceState
,IWaitToBuyState
, andIWaitToCollectState
.
- CHANGE
GeneratorStateType
enum has been changed to a static class that contains constantstrings
as state types, seeUPGRADENOTES.md
for more details. The affectedIGeneratorState
andIGeneratorEntity
interfaces have been updated. - CHANGE In order to support the
ICollectorEntity
feature, the following interfaces have changed: IGeneratorBalanceData
now extendsIBaseCollectorBalanceData
and has some of its fields moved into itIGeneratorData
now extendsIBaseCollectorData
and has some of its fields moved into itIGeneratorEntity
now extendsIBaseCollectorEntity
and has some of its fields and methods moved into itIGeneratorEntityData
now extendsIBaseCollectorEntityData
and has some of its fields moved into itIGeneratorEntitySavedData
now extendsIBaseCollectorEntitySavedData
and has some of its fields and methods moved into it- CHANGE
IGeneratorEntity.Collect(long count=1)
now returnsbool
instead ofvoid
to indicate whether or not the collection was successful
Standard Content
- FEATURE Added a
IStandardContent.collectorEntities
andIStandardContentData.collectorEntityIds
to support the addition ofCollectorEntity
Listener Priority
- FEATURE Abstracted the class
ListenerPriority
with constant int valuespriorities
fromIActionService
to also provide listener priority toITimerListener
in addition toIAction
.- The constant priorities included are:
LOWEST
,LOW
,MEDIUM
,HIGH
, andHIGHEST
.
- The constant priorities included are:
Timed Reward
- FEATURE Added
float ITimedReward.progress {get;}
that shows a 0 to 1 progression whether theITimedReward
can be claimed or not.
Timer Service
- FEATURE Added the ability to specify the order
ITimerListeners
are evaluated inITimerService
. AllITimerListener
now can optionally provide theint priority
in itsITimerSubscription
. The higher thepriority
the earlier theITimerListener
would get evaluated.
idlekit-implementation
Action
- REMOVE
CompleteMilestoneStateAction
has been deprecated, seeUPGRADENOTES.md
for details. - CHANGE
SetProjectedMilestoneCompletionStateAction
has been renamed toSetMilestoneCompletionInfoStateAction
, seeUPGRADENOTES.md
for details. - FEATURE A
ClearContentAction
has been added. This signifies the point at which the currently loadedIContent
entity is unloaded when restarting the app or switching content. - CHANGE The
ClearContentStateAction
has been renamedClearContentIdStateAction
to more specifically express the behavior of the action. SeeUPGRADENOTES.md
for details.
Collector Entity
- FEATURE Added a new
CollectorEntity
which extendsBaseCollectorEntity
. Similarly toGeneratorEntity
, the following classes have also been added: CollectorBalanceData
CollectorData
CollectorEntityData
CollectorEntitySavedData
Economy Service
- CHANGE
EconomyService.GetPayout(IBaseCollectorEntity baseCollectorEntity)
has been deprecated, useBaseCollectorEntity.GetPayout()
instead. - CHANGE
EconomyService.GetPayout(IBaseCollectorEntity baseCollectorEntity, bool applyModifiers, IModifier[] excludedModifiers = null)
has been deprecated, useBaseCollectorEntity.GetPayout(bool applyModifiers, IModifier[] excludedModifiers = null)
instead. - CHANGE
EconomyService.GetDuration(IBaseCollectorEntity baseCollectorEntity)
has been deprecated, useBaseCollectorEntity.GetDuration()
instead. - CHANGE
EconomyService.GetDuration(IBaseCollectorEntity baseCollectorEntity, bool applyModifiers, IModifier[] excludedModifiers = null)
has been deprecated, useBaseCollectorEntity.GetDuration(bool applyModifiers, IModifier[] excludedModifiers = null)
instead.
Event Content
- FEATURE Added a
string[] collectorEntityIds
property to support the addition ofCollectorEntity
- CHANGE Due to the removal of
IEventContentSavedData
, theEventContent
implementation now determines theIEventContent.GetCurrentMilestone()
dynamically based on theIMilestone.canClaim
status of all the loadedIMilestones
.- This eliminates the potential risk that the removed
IEventContentSaveData.milestoneIndex
be out of sync with the completion status of theIMilestones
(it may point to aIMilestone
that is completed if the they are tracked separately). - Use
IMilestone.isActive
on theIEventContent.GetCurrentMilestone()
to see if the currentIMilestone
is active or not.
- This eliminates the potential risk that the removed
Event Settings
- CHANGE
IEventSettingsSavedData.SetMilestoneCompletionTime(string, long, bool)
has been updated to only update theMilestoneCompletionInfo
for theIMilestone
whenMilestoneCompletionInfo.complete
isfalse
.
Generator
- CHANGE The existing
AutoCollectState
,ProduceState
,WaitToBuyState
, andWaitToCollectState
have been retrofitted to work with the new interface and the container. - CHANGE Due to the change of
GeneratorStateType
enum to a static class, affected functions that originally use the enum are now using the type of theIGeneratorState
object instead. - CHANGE The
IGeneratorStates
are now injected in theGeneratorEntity
implementation. - CHANGE
AutotCollectState.minimumUpdateInterval { set; }
has been moved toTestAutoCollectState
in idlekit-tools the{ get; }
functionality is retained. - CHANGE In order to support the
CollectorEntity
feature, the following classes have changed: GeneratorBalanceData
now extendsBaseCollectorBalanceData
and has some of its fields moved into itGeneratorData
now extendsBaseCollectorData
and has some of its fields moved into itGeneratorEntity
now extendsBaseCollectorEntity
and has some of its fields and methods moved into itGeneratorEntityData
now extendsBaseCollectorEntityData
and has some of its fields moved into itGeneratorEntitySavedData
now extendsBaseCollectorEntitySavedData
and has some of its fields and methods moved into it- CHANGE
CollectorEntity.Collect(long count=1)
now returnsbool
instead ofvoid
to indicate whether or not the collection was successful - CHANGE Removed the
GeneratorAction
. The Actions that previously extendedGeneratorAction
have not been removed. - CHANGE
GeneratorBalanceData
will now log an error ifbaseGeneratorUnitCost
is equal to 0. - CHANGE
GeneratorEntitySavedData.Buy()
no longer increments the generator unit by 1. The functionality has been moved into theBuyGeneratorStateAction
instead.
Listener Priority
- CHANGE
EventService
now subscribes toITimerService
with priority ofLOWEST
. - CHANGE
TimedBoost
now subscribes toITimerService
with priority ofLOW
. - CHANGE
SerializationService
now subscribes toITimerService
with priority ofLOWEST
.
Modifier Formula
- FEATURE Added
CollectorPayoutModifierFormula
to support Modifiers forCollectorEntity
- FEATURE Added
CollectorSpeedModifierFormula
to support Modifiers forCollectorEntity
Standard Content
- FEATURE Added a
StandardContent.collectorEntities
andStandardContentData.collectorEntityIds
to support the addition ofCollectorEntity
Startup
- CHANGE
Startup.ResetGame
will no longer reset the content Id stored within theIUserSavedData
. The effect of this is that when restarting the app viaResetGame
, it will boot back into theIContent
the player had loaded previously. This mirrors the behavior of quitting/restarting the app. SeeUPGRADENOTES.md
for details.
Upgradeable Currency
- BUGFIX Fixed an issue where
upgradeLevel
wasn't reset when resettingUpgradeableCurrencySavedData
.
idlekit-tools
AssemblyUtil
- CHANGE
AssemblyUtil
now filters out all system / Unity assemblies and returns IdleKit or custom types.
Data Asset Importer
- FEATURE Importing a single data sheet now updates the entities database if it can be found in the output folder.
Class Generation Tool
- CHANGE The generation of extended
IEventContent
andIGeneratorEntity
classes has been disabled.
Guid Reference
- CHANGE The Guid Ref helper now supports display of nested assets that share a single path.
UI
- BUGFIX Fix an issue that the
MilestonePanel
scroll kept getting reset when there is an UI update in the game such as when an ICurrency is collected.
idlekit-examples
Reward Generator Entity
- CHANGE Updated the
RewardGeneratorEntity
andRewardGeneratorEntityData
to support the addition ofBaseCollectorEntity
.
Boost
- CHANGE Updated the
Boost
example to show how Additive and Multiplicative modifiers can be applied forIGenerator
speed, payout and unit cost.
idlekit-showcase
- N/A
Version 1.2.0, 2020-07-02
idlekit-logging
- N/A
idlekit-ioc
- N/A
idlekit-framework
Activatable
- FEATURE Added
IActivatable
andIActivatableData
, which are entities that can be activated, deactivated and reset, such asITrack
orIGoal
.
Event Settings
- FEATURE Added
IEventSettings.timeRemaining
to get the time remaining of an event in milliseconds. - FEATURE Added
IEventSettings.SetEventEndTime(long timestamp)
to set the end time (and duration effectively) of an event. - CHANGE
IEventSettingsData.eventDuration
has been deprecated. See UPGRADENOTES.md for details. - FEATURE Added
IEventSettingsSavedData.SetEventEndTime(long timestamp)
to set theIEventSettingsSavedData.timeCompletedTimestamp
. - CHANGE
IEventSettingsSavedData.EndEvent(long eventEndTimestamp)
has been deprecated. UseIEventSettingsSavedData.EndEvent()
instead.
Goal
- CHANGE
IGoal
now extendsIActivatable
andIGoalData
extendsIActivatableData
Milestone
- CHANGE
IMilestone
now extendsIActivatable
andIMilestoneData
extendsIActivatableData
Projection Service
- FEATURE Added
IProjectionService.RefreshPayoutProjections()
to re-calculate the currentIPayoutProjection
s.
Random Service
- FEATURE Added
IRandomService
that handles all random number generation. - CHANGE
IRandomWeightedExtensions.GetRandomWeightedElement()
has been deprecated. Please useIRandomService.GetRandomWeightedElement
instead.
Standard Content
- FEATURE Added the
IStandardContentFeatures
interface component which extracts the trade, timedboost, and timertrunk logic from theIStandardContent
.
Timed Activatable
- FEATURE Introduced interfaces for the Timed Activatable:
ITimedActivatable
,ITimedActivatableData
,ITimedActivatableDataAsset
andITimedActivatableSavedData
. A Timed Activatable contains anIActivatable
and provides timer functionality to activate and deactivate this activatable. - FEATURE Introduced interfaces for the Timed Track:
ITimedTrack
,ITimedTrackData
,ITimedTrackSavedData
.
Track
- FEATURE Introduced interfaces for the Track Entity:
ITrack
,ITrackData
,ITrackSavedData
,ITrackDataAsset
IGoalTrack
,IGoalTrackData
IMilestoneTrack
,IMilestoneTrackData
,IMilestoneTrackSavedData
- FEATURE Added
ITrackService
that handles loading ofITrack
s andTimedTrack
s.
idlekit-implementation
Action
- FEATURE Added the
ResetEntitySavedDataStateAction
to reset anIEntity
's saved data. - FEATURE Added the
TrackCompletedAction
as part of the Track feature. - FEATURE Added the
TimedEntityCompletedAction
as part of the TimedEntity feature. - FEATURE Added the following state actions as part of the Track feature:
ClaimTrackGoalStateAction
,ClaimMilestoneTrackRewardsStateAction
,CompleteMilestoneTrackStateAction
,CompleteTrackMilestoneStateAction
- FEATURE Added the following state actions for activating and deactivating certain Activatables:
ToggleTimedEntityStateAction
,ToggleMilestoneStateAction
,ToggleTrackStateAction
- CHANGE
StaticDataAddedAction
andStaticDataRemovedAction
now store a dictionary of types and data Ids instead of an array of data, so listeners can iterate through the types instead of type checking each individual data. - CHANGE
EventStartedStateAction
andEventEndedStateAction
now extendEventStateAction
. - CHANGE
eventContentId
anduniqueEventContentId
has been removed fromEventStartedStateAction
andEventEndedStateAction
. This can be taken fromeventSettings.eventSettingsData
instead. - FEATURE
SetEventDurationStateAction
has been added to change an event's duration. - CHANGE All calls using
System.Random
in reward related actions have been replaced to calls to theRandomService
. - CHANGE
NewStageStateAction
no longer sets available currencies for the new stage. This functionality has been moved toContent.SetAvailableCurrencies()
, which dispatchesSetAvailableCurrenciesStateAction
. - FEATURE
SetAvailableCurrenciesStateAction
has been added to set a list of currencies' available status.
Currency
- FEATURE
CurrencyService
now supports loading and unloading of Global currencies and Content specific currencies. Currency entities are also loaded by the service whenICurrencyData
are loaded. - CHANGE
CurrencyService
now subscribes toStaticDataAddedAction
andStaticDataRemovedAction
instead ofContentDataAddedAction
andContentDataRemovedAction
. This ensures that global currencies are not unloaded when switching content.
Economy Service
- CHANGE Add a
double
overflow check forIEconomyService.GetIncrementGeneratorUnitCost(int, IGeneratorEntity, bool, IModifier[])
in case the generator unit cost becomes too large and returns infinity.
Event Settings
- FEATURE Added
EventSettings.timeRemaining
to get the time remaining of an event in milliseconds. - FEATURE Added
EventSettings.SetEventDuration(long eventDuration)
to set the duration of an event. - CHANGE
EventSettingsData.eventDuration
has been deprecated. See UPGRADENOTES.md for details. - FEATURE Added
EventSettingsSavedData.eventDuration
andEventSettingsSavedData.SetEventDuration(long eventDuration)
to save the duration of an event.
Content
- FEATURE
BeginStage()
now callsSetAvailableCurrencies()
to make all currencies inStageData.availableCurrencyIds
of the current and previous stages toavailable
.
Goal
- FEATURE Added
IActivatable
interface memberactivatableData
andisActive
flag to abstractGoal
class - CHANGE
GoalSavedData.canClaim
now checks iftargetProgression
has been set so that un-activated goals cannot be claimed - CHANGE
Goal.Deactivate()
no longer resets the saved data of aIGoal
, the state of theIGoal
will be preserved. See UPGRADENOTES.md for more details. - FEATURE
Goal.Reset()
has been added. This method will deactivate aIGoal
and reset it's saved data. - FEATURE
ResetGoalStateAction
has been added to ensure that manipulation of saved data occurs within aIStateAction
. - CHANGE Goals now resolve entities on
Activate()
instead of onInitialize()
to support global loading of Goals.
Loading
- REMOVE Removed
ContentDataAddedAction
andContentDataRemovedAction
fromClearContentDataLoadPhase
andLoadContentDataLoadPhase
respectively. Services now listen toStaticDataAddedAction
andStaticDataRemovedAction
instead.
Milestone
- FEATURE Added
IActivatable
interface memberactivatableData
toMilestone
class - FEATURE Added
isActive
flag toMilestone
andMilestoneSavedData
- FEATURE Added
Reset
method toIMilestone
in order to denote resetting (wipe saved data). - FEATURE
ModifierService
now supports loading and unloading of Global modifier formulas and Content specific modifier formulas. Modifier formula entities are also loaded by the service whenIModifierFormulaData
are loaded. - CHANGE
ModifierService
now subscribes toStaticDataAddedAction
andStaticDataRemovedAction
instead ofContentDataAddedAction
andContentDataRemovedAction
. This ensures that global modifier formulas are not unloaded when switching content.
PlotPoint Runtime
- CHANGE If
Pause()
is invoke on thePlotPointController
in the middle of playing a plotpoint, it would finish playing the current plotpoint and then pause.
Projection Service
- FEATURE Added
ProjectionService.RefreshPayoutProjections()
to re-calculate the currentIPayoutProjection
s.
Random Service
- FEATURE Added
RandomService
that handles all random number generation. The functionality can be overriden to generate these values from the backend. - CHANGE All calls using
System.Random
in entities, services, and actions have been replaced to calls to theRandomService
.
Reward
- FEATURE
RewardService
now supports loading and unloading of Global rewards and Content specific rewards. Reward entities are also loaded by the service whenIRewardData
are loaded. - CHANGE
RewardService
now subscribes toStaticDataAddedAction
andStaticDataRemovedAction
instead ofContentDataAddedAction
andContentDataRemovedAction
. This ensures that global rewards are not unloaded when switching content. - FEATURE
CurrencyReward
,BaseRandomCurrencyReward
now supports reward values (almost) up tomax.double
, seeRandomService
forRandom.NextDouble()
limitations. - CHANGE All calls using
System.Random
have been replaced to calls to theRandomService
.
Standard Content
- CHANGE Duplicate functionality of trade, timerTrunk, and timedBoost has been abstracted into the
StandardContentFeatures
component inside theStandardContent
, andStandardEventContent
.
Timed Activatable
- FEATURE Introduced Timed Activatable related classes that inherit from the new
ITimedActivatable
interfaces. - FEATURE Introduced the abstract
TimedTrack
entity, which is aTimedEntity
with anITrack
as its activatable, as well as concreteTimedGoalTrack
andTimedMilestoneTrack
entities.
Timer Service
- CHANGE
ITimerListener.UpdateProgression(1f)
is called by theTimerService
beforeITimerListener.OnTimerEnded(long)
in theITimerListener
evaluation logic. All implementations ofITimerListener
will receiveUpdateProgression(1f)
beforeOnTimerEnded(long)
is called. - CHANGE Non-looping
ITimerListeners
are automatically unsubscribed by theITimerService
beforeITimerListener.OnTimerEnded(long)
is called.ITimerListener
no longer needs to unsubscribe itself from theITimerService
onOnTimerEnded(long)
.
Track
- FEATURE Introduced Track Entity related classes that inherit from the new ITrack interfaces.
- FEATURE Added new Track Entity Types:
- Track: Provides base functionality for all concrete Track implementations
- Goal Track: A Track that contains only
IGoal
s, the track progresses when the activeGoal
is claimed. - Passive Goal Track: A Track that contains only
IGoal
s, the track progresses when the activeGoal
can be claimed. - MilestoneTrack: A Track that contains only
IMilestone
s
Trade
- CHANGE All calls using
System.Random
have been replaced to calls to theRandomService
.
idlekit-tools
Data Asset Importer
- FEATURE Added functionality to import Track and Timed Entity data.
Debug Tools
- BUGFIX Fixed clicking
Ascend
in the debug ascend tool inev-FB_content
would hang the game.
Events
- CHANGE
CanvasEventView
andCanvasReturnToMainContentView
has been updated to support the newIEventSettings.SetEventDuration()
functionality.
Goal
- FEATURE Added
CanvasGoalView.SetActiveGoalView
to change the progress bar fill color of active / inactive goals - FEATURE Goal UI now shows the current progression and target progression of each Goal.
Guid Reference
- CHANGE
GuidReference
dropdowns in all the Unity Inspector views have been updated to show theIStaticData.id
instead of the filename of theIGuidReferenceableAsset
.
Timed Entity
- FEATURE Added TimedEntityPanel which contains the Track panels.
Track
- FEATURE Added GoalTrackPanel and MilestoneTrackPanel for the track feature.
- FEATURE Added track data field in
SimpleEntitiesDatabase
for the track feature - FEATURE Added
CanvasGoalTrackPanel
andCanvasMilestoneTrackPanel
to display a Goal Track or Milestone Track
UI
- FEATURE Information on whether the user has seen an
EventEnd
popup is being reset inIStartup.ResetGame(bool)
.
idlekit-examples
Synchronous Loading
- FEATURE The Synchronous Loading example has been repurposed into a First Scene tutorial. See the tutorials section http://docs.idlekit.io for more information.
Track
- FEATURE Added a Track example which shows how the Timed Entity and Tracks could be used.
idlekit-showcase
Events
- CHANGE Showcase Event UI has been updated to support the new
IEventSettings.SetEventDuration()
functionality.
Version 1.1.1, 2020-06-01
idlekit-logging
- N/A
idlekit-ioc
- N/A
idlekit-framework
- N/A
idlekit-implementation
- N/A
idlekit-tools
Unit Tests
- Small fixes to unit tests to resolve issues in Unity 2019
idlekit-examples
- N/A
idlekit-showcase
Balance Data
- CHANGE Data changes to resolve a bug where
TimedBoost
s were not being applied in maingameContent
. See DATACHANGELOG.md for details.
Version 1.1.0, 2020-05-25
idlekit-logging
Test Logger
- CHANGE
TestLogger.LogError
now callsDebug.LogError
to break the execution of tests in Unity unlessignoreFailingMessages
is set to true. This is to ensure error logs are properly tested in unit tests.
idlekit-ioc
- N/A
idlekit-framework
Action
- FEATURE Added the ability to specify the priority the listeners(subscribers) get called, in the
IActionService.Subscribe<T>(Action<T> listener, object instance, int priority)
method. The listener with the higher priority will get called first when anIAction
is dispatched. - CHANGE The delegate type
ActionHandler<T>
has been removed, use C#'sAction<T>
instead. All functions that requireActionHandler<T>
have been updated to useAction<T>
. Since the signatures ofActionHandler<T>
andAction<T>
are the same, no client code change is required. - CHANGE
IAction.dispatchAs
has been renamed toIAction.typesToDispatchAs
for consistency and to fix a class generation tool issue.
Container
- FEATURE Added
UnbindIKInstaller
to theIIKMonoInstaller
to cleanup theIIKInstaller
component in theIIKMonoInstaller
. - FEATURE Added
IActionResolver
which is anITypedResolver
similar toIEntityResolver
to limit the access to provide resolution ofIActions
.
Currency
- FEATURE Added
void Cleanup()
toCurrencyAmount
struct for cleanup purpose.
Data Loader
- FEATURE Added
void ClearData(IStaticData)
andvoid ClearData(IStaticData[])
for unloadingIStaticData
from theIContainer
. All implementations ofIDataLoaderService
have been updated. - CHANGE
void LoadData(IStaticData,bool)
andvoid LoadData(IStaticData[], bool)
have been changed tovoid LoadData(IStaticData)
andvoid LoadData(IStaticData[])
. See UPGRADENOTES.md for details.
Event Settings
- REMOVE Removed
IEventSettings.CompleteMilestone
as this functionality should be performed via aCompleteMilestoneStateAction
. - FEATURE Added convenience method
MilestoneCompletionInfo GetMilestoneCompletionInfo(string)
toIEventSettings
.
Generator
- CHANGE
void Collect(int)
has been changed tovoid Collect(long)
to support a larger number of collections.
Loading
- FEATURE Added new
IAdvanceStageLoadPhase
ILoadPhase
that is responsible for moving the player to the next availableIStage
. It can also be used to loadStage
specific assets. - FEATURE Added new
IClearContentDataLoadPhase
ILoadPhase
that is responsible for clearing allIStaticData
associated with anIContent
. - FEATURE Added new
IClearGlobalDataLoadPhase
ILoadPhase
that is responsible for clearing all globalIStaticData
. - FEATURE Added new
IClearContentIdLoadPhase
ILoadPhase
that is responsible for clearing theIUserSavedData.contentInstanceId
. - FEATURE Added new
ISetContentIdLoadPhase
ILoadPhase
that is responsible for determining and setting up theIUserSavedData.contentInstanceId
that the game is going to load.
Projection Service
- FEATURE Added
IProjectionService
andIProjectionCalculator
to get projections ofCurrencyAmount
earned over a period of time or completion timestamp to reached a certainCurrencyAmount
without player input. - FEATURE Added
IPayoutProjection
model class that represents theICurrency
generation rate of the game before an expiration timestamp. This is useful to calculate currency earnings before anITimedBoost
expires.
Serializer
- FEATURE Added
void DeleteAll()
to theISerializer
to delete allISavedData
at runtime. All implementations ofISerializer
have been updated.
Startup
- FEATURE Added
void ResetGame(bool)
feature to allow in app reset. - CHANGE
void StartGame(IContext)
has been changed tovoid StartGame()
. All implementations ofIStartup
have been updated. - FEATURE If the player was going to start the game in an expired/complete
EventContent
, the game would now start the player in theMainGame
.
Timer Listener
- CHANGE
void OnTimerEnd(int count)
has been changed tovoid OnTimerEnd(long count)
to support a larger number of collections. See UPGRADENOTES.md for details.
idlekit-implementation
Action
- CHANGE Performed a cleanup pass on all
IAction
andIStateAction
to prevent memory leak using the following guidelines:- All injected protected variables should be set to null on
void ResetEvent()
- All cached properties should be
Clear()
and set to null onvoid Cleanup()
- All injected protected variables should be set to null on
- REMOVE
StaticDataAddedAction
andStaticDataRemovedAction
have had thebool contentSpecific { get; set; }
flag removed. See UPGRADENOTES.md for details. - CHANGE
IAction.dispatchAs
has been renamed toIAction.typesToDispatchAs
for consistency and to fix a class generation tool issue, which impacts all actions and state actions. - FEATURE Added
SetProjectedMilestoneCompletionStateAction
which should be dispatched when settingIMilestone
projected completion timestamps inIEventSettingsSavedData
. - CHANGE The
CompleteMilestoneStateAction
now validates that theIMilestone
can be completed prior to changing saved data. - CHANGE Passing a null instance to
ActionService.Unsubscribe
now generates a warning. See UPGRADENOTES.md for details.
Activity Tracking
- REMOVE
Milestone
projection logic has been moved toEventService
. SeeMilestone Projection
section below for details.
Data Loader
- CHANGE
DataLoaderService
no longer automatically unloadIStaticData
onClearContentStateAction
andvoid Cleanup()
. They are now unloaded inIClearGlobalDataLoadPhase
andIClearContentDataLoadPhase
. - FEATURE Added
ContentDataAddedAction
andContentDataRemovedAction
which are being listend to byCurrencyService
,ModifierService
, andRewardService
to loadICurrencies
,IModifierFormulas
, andIRewards
. The services no longer listen toSetContentStateAction
andClearContentStateAction
.
Economy Service
- CHANGE EconomyService.GetDuration now logs an error instead of a warning when generator duration is too high or too low.
Entity
- CHANGE Perform a cleanup pass on all
IEntity
to prevent memory leak using the following guidelines:- All injected protected variables should be null and loaded
IEntity
should be unloaded onvoid Cleanup()
- All cached collections should be
Clear()
and set to null onvoid Cleanup()
- All injected protected variables should be null and loaded
Event Settings
- REMOVE Removed
EventSettings.CompleteMilestone
as this functionality should be performed via aCompleteMilestoneStateAction
. - CHANGE
EventSettings.SetMilestoneCompletionTime
now broadcasts aSetProjectedMilestoneCompletionStateAction
rather than directly manipulating saved data. - CHANGE
EventSettingsSavedData.CompleteMilestone
will now log an error if an invalidmilestoneId
is passed.
Generator
- FEATURE Added
long minimumUpdateInterval { get; set; }
toAutoCollectState
so the user can set the minimum collection interval for testing instead of using a constant 500 milliseconds.
Milestone Projection
- CHANGE
Milestone
projection logic has been moved fromActivityTrackingService
intoEventService
utilizing the newProjectService
to calculate the completion time of theMilestones
without any player input.
Plot Point
- CHANGE
PlotPointService
now implementsBindingService
so it can bind and unbindPlotPoint
related entities with their base types.
SerializationService
- FEATURE Added
void ResetUser()
to facilitate in app reset.
Service
- CHANGE Performed a cleanup pass on all
IService
to prevent memory leak using the following guidelines:- All injected protected variables should be null and loaded
IEntity
should be unloaded onvoid Cleanup()
- All cached collections should be
Clear()
and/or set to null onvoid Cleanup()
- All injected protected variables should be null and loaded
Timer
- BUGFIX Fixed a bug where recursively calling
TimerService.EvaluateListener
would throw an index or null exception if thelisteners
inTimerService
have been modified.
idlekit-tools
Action
- CHANGE An issue with the class generation tool extending actions and state actions has been fixed by renaming
IAction.dispatchAs
toIAction.typesToDispatchAs
for consistency
Data Asset Importer
- FEATURE Added an input folder and
Generate Paths
option, which matches each data asset with its corresponding csv files.- This functionality only supports the default IdleKit csv naming format, e.g. !!!AscensionReward!!!.
- To change the csv file name recognition, please change
SimpleDataAssetImporterEditorWindow.GetFormattedTypeName()
Plot Point
- BUGFIX Solved a bug that the ascension completion plotpoint would not be played if an event ends while during the ascension gameplay.
UI
- CHANGE Perform a cleanup pass on all UI code to prevent memory leak using the following guidelines:
- All injected protected variables should be null and loaded
IEntity
should be unloaded on its cleanup method. - All cached collections should be
Clear()
and set to null on its cleanup method.
- All injected protected variables should be null and loaded
- FEATURE Added
CanvasDebugResetGameTool
and the UI reset game debug tool, which has the option to reset all theISavedData
.
idlekit-examples
- CHANGE Updated
SynchronousLoading
example to overrideSwitchStage()
now the base method uses async loadphases.
idlekit-showcase
- N/A
Version 1.0.1, 2020-04-20
idlekit-logging
- N/A
idlekit-ioc
- N/A
idlekit-framework
- N/A
idlekit-implementation
Activity Tracking Service
- CHANGE Changed the interval at which
IMilestone
projection logic runs to once every 15 seconds.
Economy
- BUGFIX Removed
Economy.MIN_GENERATOR_DURATION
,Economy.GetDuration()
will useGeneratorBalanceData.MIN_DURATION
instead. - BUGFIX
Economy.GetDuration()
will returnlong.MaxValue
if generator duration is too large.
Event Content
- BUGFIX
CleanupActiveMilestone()
is now called when the Event ends to prevent further invalid progress.
Generator
- BUGFIX
AutoCollecState.collectDuration()
now properly returns a collect duration which is the closest multiple ofIGeneratorEntity.duration
. - BUGFIX
CollectFromGeneratorPlayerEvent.Apply()
now accounts for collections that aren't at current timestamp. This resolves a bug where resuming back into the app would not result in the correct production start timestamp for Generators that collected while offline.
PlotPoint
- BUGFIX Fixed an issue where the PlotPointController sequenceQueue was not properly cleared on Cleanup().
idlekit-tools
Class Generation Tool
- BUGFIX Resolved an issue where it was possible to extend test Entities in the
Tools.Editor.Tests
namespace. - BUGFIX Resolved a number of issues in the
EntityBuilder
andServiceBuilder
where incorrect base interfaces were being calculated.
idlekit-examples
- N/A
idlekit-showcase
- N/A
Version 1.0.0, 2020-03-10
idlekit-logging
- FEATURE This repo has been added to contain any functionality related to
IdleKitLog
,IPriorityLogger
and it's implementations. This repo has no dependencies and is used by all other idlekit repos.
idlekit-ioc
- FEATURE This repo has been added to contain any functionality related to dependency container (
IContainer
and it's implementations). This repo depends onidlekit-logging
and is used by all other idlekit repos.
idlekit-framework
Action Service
- CHANGE
IEventService
has been renamed toIActionService
. - CHANGE
IActionService.Subscribe<T>(ActionHandler<T> listener, object instance)
no longer has anull
default value forinstance
. - CHANGE Added
IActionService.Subscribe<T>(ActionHandler<T> listener)
to allow implementations to subscribe globally. - FEATURE Added
IActionService.Dispatch<T>(object instance = null)
to allow dispatchingIAction
without theIAction
object. This should not be used withIAction
s that need to have their parameters initialized. Calls toIActionService.Dispatch<T>(T actionTrigger, object instance =null)
that do not need theIAction
to be initialized are now using this new method.
Boost
- FEATURE Introduced interfaces for the Timed Boost Entity;
ITimedBoost
,ITimedBoostData
,ITimedBoostSavedData
,ITimedBoostDataAsset
.
Character
- REMOVE Removed
ICharacter
,ICharacterData
,ICharacterSavedData
andICharacterDataAsset
. This functionality will return in the form of a more generic association data in the future. Please refer to theUPGRADENOTES.md
for more details.
Content
- FEATURE
IShowcaseContent
has been moved to framework and renamedIStandardContent
. - FEATURE
IShowcaseEventContent
has been moved to framework and renamedIStandardEventContent
- CHANGE
IStandardContent.missingResourcesExchangeRateMultiplier
has been split intosoftCurrencyMissingResourcesMultiplier
andupgradeableCurrencyMissingResourcesMultiplier
- CHANGE
IStandardContentData.missingResourcesExchangeRateMultiplierId
has been split intosoftCurrencyMissingResourcesMultiplierId
andupgradeableCurrencyMissingResourcesMultiplierId
Continuous Integration
- FEATURE Added a continuous integration script under
Builder/Jenkinsfile
that serves as an example on how to setup a Jenkins Multi-branch Pipeline with IdleKit.
Currency
- CHANGE A
setAvailable
bool has been added toCurrencyAmount
to signal that theCurrency.available
flag should be set when theCurrencyAmount
is processed.
Currency Service
- REMOVE Removed
ICurrencyService.ValidateAddCurrencyAmount(string id, double amount)
andICurrencyService.ValidateRemoveCurrencyAmount(string id, double amount)
. Refer to theUPGRADENOTES.md
for more details. - FEATURE Utility methods
ICurrencyService.RemoveCurrencyAmount(CurrencyAmount amount)
,ICurrencyService.AddCurrencyAmount(CurrencyAmount amount)
andICurrencyService.SetCurrencyAmount(CurrencyAmount amount)
have been added.
Dependency Container
- FEATURE Introduced IdleKit's own dependency solution that allows the user to bind a type, instance, or method to different types of dependency with an optional Id and various scopes. When the dependency is required, an instance of the dependency will be provided by the container and it's dependencies will be injected if it implements the
IInjectable
. - FEATURE All the dependency container code is located in a separate repository at
git@github.com/Idlekit/idlekit-ioc.git
in its own name spaceIdleKit.IoC
. - CHANGE The entire IdleKit codebase - the
IEntity
,IAction
,IService
, and UI code have been refactored to work with the container. - CHANGE Please refer to the documentation
http://docs.idlekit.io
for the various components of the dependency container and the details of the integration. - REMOVE The previous
IDependencyContainer
class has been deprecated.
Entity
- FEATURE
IEntity
initialization flow has been refactored. Please refer to theUPGRADENOTES.md
for more details. - FEATURE Introduce
void Initialize()
to the lifecycle of allIEntity
to perform any setup logic including the subscription toIAction
s. - CHANGE
IEntity.Cleanup(IEntity)
method on allIEntity
is now responsible for cleaning up all its childIEntities
and other object references it may receive during its lifetime (i.e:IServices
,IEntityData
...etc). - CHANGE Changed all
IEntityDataAsset
interfaces to pass through a generic Type that must implementIStaticData
. This allows Data Assets to be much more specific about the data they contain while also allowing them to extend other Data Assets. This also means extended Data Assets are forced to pass data that has also extended a base which means things are more consistent.
Event
- FEATURE Introduced
string uniqueContentId { get; }
forIEventSettingsData
so differentIEventSettings
can have an unique id for theIEventContent
that is associated with theIEventSettings
. Consequently, eachIEventSettings
is now working withIEventContent.instanceId
so itsIStaticData
can be reused for another event (IEventSettings
). - FEATURE Introduced
void CompleteEvent()
forIEventSettings
andIEventSettingsSavedData
, which marks the event (IEventSettings
) as completed. - CHANGE Renamed
OfflineProgressAction
toOfflineProgressStartAction
to mark the beginning of the Offline Activity Tracker process. - FEATURE Introduced
OfflineProgressEndAction
to mark that the Offline Activity Tracker catch-up process is complete.
Event Content
- BUGFIX The next
Milestone
is no longer initialized with the previousMilestone
's progress if they are not tracking the samecurrencyId
.
Event Content Service
- CHANGE
IEventContentService
has been renamed toIEventService
. The previousIEventService
has been renamed toIActionService
.
Event Service
- CHANGE
IEventService
has been renamed toIActionService
. - REMOVE
bool CanClaimRewards(string)
andvoid ClaimRewards(string)
have been removed from theIEventContentService
. Refer to theUPGRADENOTES.md
for more details.
Generator
- CHANGE Removed references to
ICharacter
andICharacterData
inIGeneratorEntity
andIGeneratorData
.
Goal
- FEATURE
IGoalSavedData
now stores whether it has been claimed or not. - CHANGE
GoalDataSequence
is no longer astruct
. It is aclass
now because it contains mutable property instring[] goalIds { get; }
. - CHANGE
IGoal.normalizedProgress
andIGoalSavedData.normalizedProgress
now return a double instead of a float
Offline Activity Tracker
- FEATURE Once the offline catch-up process is complete, an
OfflineProgressEndAction
will be broadcast.
Loading
- FEATURE Added
IAsyncLoadable
andIAsyncLoader
interfaces. These will help consolidate loading operations into more manageable processes with more feedback.
Logging
- CHANGE All Logging related code has been moved into a new repository at
git@github.com/Idlekit/idlekit-logging.git
. Refer to theUPGRADENOTES.md
for more details.
Milestone
- REMOVE
IMilestoneData.rewardId
has been removed as it served no purpose. SeeUPGRADENOTES.md
for details. - FEATURE Added
double currentProgress { get; }
andbool canClaim { get; }
toIMilestone
, anddouble progression { get; }
andvoid SetProgressiong(double)
toIMilestoneSavedData
so they function more similarly toIGoal
andIGoalSavedData
. - CHANGE
IMilestone.normalizedProgress
now returns a double instead of a float
Modifier
- REMOVE
IModifier
no longer implementsIEntity
. - CHANGE
IModifierData
is no longerIComparable
. - REMOVE
IModifierData.Initialize(IModifierCategoryData modifierCategoryData)
has been removed. - REMOVE
IModifierData
no longer keeps a reference to aModifierCategoryData
. - REMOVE
IModifierData.priority
has been removed. The newIModifierFormula
handles priority implicitly. - CHANGE
IModifierCategoryData
andIModifierCategoryDataAsset
have been renamed toIModifierGroupData
andIModifierGroupDataAsset
. - FEATURE Added
IModifierFormula
,IModifierFormulaData
andIModifierFormulaDataAsset
. - FEATURE Added
IModifierFormulaParser
. - CHANGE Methods in
IModifierCache
that used to useIModifierCategoryData
types now useIModifierFormula
types. - REMOVE
IModifierCache
no longer holds a list of all registeredIModifiers
andIModifiables
- REMOVE
IEnumerable<ModifierSearchResult> SearchModifiersAffectingModifiable<TModifierCategoryData>(string modifiableId, bool checkCanBeApplied = true)
,IModifierCache.GetModifier(string modifierId)
andIModifierCache.GetModifiable(string modifiableId)
have been removed - CHANGE Added
IEnumerable<IModifiable> IModifierCache.GetModifiablesAffectedByModifier(Type modifierFormulaType, string modifierId)
andIEnumerable<IModifierGroupData> IModifierCache.GetModifierGroupDatasByModifierFormula(Type modifierFormulaType)
. - CHANGE Methods in
IModifierService
that used to useIModifierCategoryData
types now useIModifierFormula
types. - CHANGE Added
IModifier[] IModifierService.GetModifiersAffectingModifiable(Type modifierFormulaType, string modifiableId)
andIModifiable[] IModifierService.GetModifiablesAffectedByModifier(Type modifierFormulaType, string modifierId)
. - REMOVE Deleted
ModifierSearchResult
. This functionality is now handled byIModifierGroupData
andIModifierFormula
.
Namespaces
- CHANGE The following namespaces have been renamed as follows:
IdleKit
toIdleKit.Framework
IdleKit.PlotPoint
toIdleKit.Framework
PlotPoint
Data
- FEATURE Introduce generic typed version of
IPlotPointDataAsset
that allows implementations to have a strongly typedata
variable. - REMOVE
IPlotPointSequenceCollectionData.StartActivators
andIPlotPointSequenceCollectionData.Cleanup
have been removed as it is now a pure data class. The functionality is moved intoIPlotPointService
.
Activation
- CHANGE
IPlotPointActivationCondition
has been incorporated into theIContainer
and becameIInjectable
therefore the previousIPlotPointActivationCondition.Start
method has been eliminated. - FEATURE Added
Subscribe
andUnsubscribe
toIPlotPointActivationCondition
to deal with subscribing and un-subscribing to theIActionService
. - REMOVE
IPlotPointActivatorData.Start
andIPlotPointActivatorData.Cleanup
have been removed as theIPlotPointService
is now in charge of creating and injecting theIPlotPointActivationCondition
. - CHANGE All the implementing classes have been updated accordingly with the above changes.
Runtime
- CHANGE
IPlotPointService
interface has been refactored. It is now in charge of managing all plot point related features during runtime and cleanup of the activatedIPlotPointSequenceCollectionData
for the currentIStage
. - CHANGE
IPlotPointDataProvider.Clear
has been renamed toIPlotPointDataProvider.Cleanup
. - REMOVE
IPlotPointDataProvider.SendDataAddedAction
has been removed.LoadPlotPointsDataLoadPhase
inidlekit-tools
is now in charged of firing the actionPlotPointsLoadedAction
. - CHANGE All the implementing classes have been updated accordingly with the above changes.
- CHANGE
IPlotPointController
interface has been refactored to remove unnecessary functionality and added more C# event callbacks. Visit theUPGRADENOTES.md
for details.
Reward
- FEATURE Added new
IReward
types:ICurrencyUnlockReward
IRandomUnobtainedCurrencyReward
- FEATURE Added new
IRewardData
types:ICurrencyUnlockRewardData
IRandomUnobtainedCurrencyRewardData
IFallbackRewardData
ITagRewardData
- CHANGE Changed the name of
IRandomTagsCurrencyReward
toIRandomObtainedCurrencyReward
and removed allallowUnobtained
references from it.IRandomTagsCurrencyRewardData
was changed toIRandomObtainedCurrencyRewardData
. - CHANGE Moved
AscensionRewardGroup
fromidlekit-implementation
toidlekit-framework
since an interface references it. - CHANGE
ITimedRewardSavedData
and related classes have been converted due to the replacement oflong timeStarted {get; }
, andbool neverClaimed { get; }
withlong timeComplete { get; }
andbool hasStarted { get; }
. It is done so the class can be more consistent with the other timer related classes. - CHANGE
IGachaReward.GetValidItems
now takes an optionalignoreFallback
flag. - CHANGE
IReward.CanClaim
now takes an optionalignoreFallback
flag. - FEATURE
IShowcaseTimerTrunk
has been moved toidlekit-framework
and renamedITimerTrunk
.
Serializer
- FEATURE Added
bool hasDirtyData { get; }
so it can be more efficient in determining if on-disc serialization needs to take place.
Services
- CHANGE Renamed the following Service interfaces to better fit naming conventions.
ICurrencyManager
was renamed toICurrencyService
IEconomy
was renamed toIEconomyService
IEntityLoader
was renamed toIEntityLoaderService
IEventManager
was renamed toIActionService
IEventContentManager
was renamed toIEventService
IModifierManager
was renamed toIModifierService
IPlotpointManager
was renamed toIPlotpointService
IRewardManager
was renamed toIRewardService
IStaticDataLoader
was renamed toIDataLoaderService
Stage
- REMOVE Removed
IStageData.startCurrencyId
andIStageData.startCurrencyAmount
. - CHANGE Added
IStageData.startingCurrencyAmounts
.
Startup
- FEATURE Added
IStartup
interface to help manage the game boot flow. - FEATURE Added
IPhaseLoader
interface. This can be implemented to help manage the game boot flow. - FEATURE Added
ILoadPhase
interface. This interface will allow you to split game initialization into multiple load phases. - FEATURE Added the following
ILoadPhase
extensions that define typical game boot and content switch sequences:IInitializeUserLoadPhase
ILoadGlobalDataLoadPhase
IProcessEventsSavedDataLoadPhase
ILoadContentDataLoadPhase
ILoadContentLoadPhase
IClearContentLoadPhase
Static Data
- CHANGE
IDataLoaderService
is now able to load global data that do not get cleared betweenIContent
usingIDataLoaderService.LoadData(IStaticData, bool)
.
Time Service
- FEATURE Add
DateTime systemTime { get; }
, andlong systemTimestamp { get; }
to allow setting of the current UTC time used in non-game specific functionality such as calculating the time the user is offline. - CHANGE The previous timestamp related functionality has been renamed to
DateTime gameTime { get; }
,long gameTimestamp { get; }
andvoid SetGameTimestamp(long)
. Please theUPGRADENOTES.md
for more details.
Trade
- CHANGE
GetRandomValidTrade
has now been added to theITradeService
to get a valid trade from a random pool ofITrade
s. - CHANGE
ITrade.MakeTrade()
now returns a boolean value depending on whether or not the trade was successfully made. - CHANGE
ITrade
now dispatchesTradeAcceptedAction
s andTradeDeclinedAction
s based on player actions.
Trade Service
- FEATURE Added a
GetRandomValidTradeFromPool
method toITradeService
to get a validITrade
from a given pool ofITrade
s.
Unity
- CHANGE Upgraded Unity support to 2018.4.18f1.
Unlockable
- CHANGE
IUnlockable
now requiresSetAvailability
andSetObtained
methods to be implemented, seeUPGRADENOTES.md
for details. - CHANGE
IUnlockableSavedData
now requires aSetObtained
method to be implemented. - REMOVE
IUnlockableData
has been removed. SeeUPGRADENOTES.md
for details.
User
- FEATURE
long GetLastActivityTime
is added to theIUserSavedData
to get the timestamp of the last user activity in the currentIContent
- FEATURE
void SetLastActivityTime(long)
is added to theIUserSavedData
to set the timestamp of the last user activity in the currentIContent
idlekit-implementation
Action
- CHANGE
IEvent
and related classes have now been renamed toIAction
. - CHANGE
IPlayerEvent
and related classes have now been renamed toIStateAction
. - CHANGE
NewContentStateAction
now sets theContentSavedData.currentStageId
. - CHANGE
LogLastActiveTimeStateAction
no longer requires the currentIContent
. Instead, it requires aIUserSavedData
to store the user's last active time. - CHANGE Added
ModifierChangedAction
which denotes whenever aIModifier
state has changed (activation, index change, etc). - CHANGE Added
ModifierToggledAction
which indicates when aIModifier
has been activated/deactivated. - CHANGE
ToggleTimedBoostStateAction
andToggleBoostStateAction
now inherit directly fromModifierToggledAction
. - CHANGE
CurrencyObtainedAction
now stores a flag denotes whether theobtained
flag was set to true or false. - CHANGE Added
CurrencyAvailableAction
to denote when theavailable
flag on anICurrency
has been set. - REMOVE
StageSelectedAction
has been removed. See theUPGRADENOTES.md
for details. - BUGFIX The dispatch types of
ToggleTimedBoostStateAction
have had the incorrect type ofToggleBoostStateAction
removed. - REMOVE
OpenTimerTrunkStateAction
has been removed. Please see theUPGRADENOTE.md
for details. - CHANGE Renamed
GeneratorUnitTargetHitAction
toGeneratorModifierIndexChangedAction
. - CHANGE
IncrementGeneratorUnitStateAction
no longer extendsGrantRewardStateAction
. All reward logic is now handled inGeneratorUnitTargetHitStateAction
. - FEATURE Added new
GeneratorUnitTargetHitStateAction
which extendsGrantRewardStateAction
. - CHANGE Moved all ascension related save data changes, aside from rewards, from
AscensionCompleteStateAction
toAdvanceStageStateAction
. See theUPGRADENOTES.md
for details. - CHANGE Added a
IContent
field toIdleKitInitializedAction
. - CHANGE The
EventStartedAction
andEventEndedAction
have are nowIStateAction
s and have been renamedEventStartedStateAction
andEventEndedStateAction
. - CHANGE The
GrantRewardStateAction.Apply
method will now set the availability of a currency as specified via aIReward.CalculateRewards
method. - CHANGE Rewards that have been claimed by the
GrantRewardStateAction
will now be output to the Unity log. - CHANGE The protected
GrantRewardStateAction.CalculateReward
andAscensionCompleteStateAction.CalculateReward
methods have been removed. - CHANGE
TimerTrunkUnlockedPlayerAction
has been moved fromidlekit-showcase
intoidlekit-implementation
. - FEATURE Added the following new
TradeAction
s:TradeActivatedAction
is broadcast when anITrade
is successfully activatedTradeDeactivatedAction
is not currently broadcast but can be sent if anITrade
should be automatically deactivatedTradeAcceptedAction
is broadcast when a player has successfully completed the activeITrade
TradeDeclinedAction
is broadcast when a player declines the activeITrade
ToggleActiveTradeStateAction
is broadcast when anITrade
is activated or deactivated in anIStandardContent
.
- CHANGE
AdvanceStageStateAction
now checks thatContent.nextStageId
is not null or empty before settingContentSavedData.currentStageId
. See UPGRADENOTES for more information on this.
Action Service
- CHANGE The
EventService
has been renamed toActionService
. - CHANGE
ActionService.Subscribe<T>(ActionHandler<T> listener, object instance)
will log an error ifinstance
is null. Previously it would add a global subscription in this case. - CHANGE
ActionService.Subscribe<T>(ActionHandler<T> listener)
has been added to subscribe globally to actions.
Activity Tacking Service
- CHANGE Due to the refactor of the
IEntity
initialization flow, the service now sets the timestamp of theITimerService
onSetContentPlayerAction
instead of theContentInitializedAction
. - CHANGE Due to the refactor of the
IEntity
initialization flow, the service now evaluates the expiredTimerSubscriptions
of theITimerService
onContentInitializedAction
instead of theStageInitializedAction
.
Boost
- CHANGE Various fields in
Boost
andTimedBoost
static data have been updated as a result of the addition of asset creators for Boosts and TimedBoosts. See UPGRADENOTES.md for more details. - CHANGE Timed Boost Entity related classes now inherit from the new interfaces in idlekit-framework (
ITimedBoost
,ITimedBoostData
,ITimedBoostSavedData
ITimedBoostDataAsset
). - CHANGE
TimedBoost.isActive
no longer overridesBoost.isActive
for consistency. TheisActive
flag is set via theToggleTimedBoostPlayerAction
in the same way as in theToogleBoostPlayerAction
. - BUGFIX
TimedBoostSavedData
now correctly inherits fromBoostSavedData
.
Currency Service
- FEATURE Utility methods
CurrencyService.RemoveCurrencyAmount(CurrencyAmount amount)
,CurrencyService.AddCurrencyAmount(CurrencyAmount amount)
andCurrencyService.SetCurrencyAmount(CurrencyAmount amount)
have been added.
Character
- REMOVED
Character
,CharacterData
,CharacterSavedData
andCharacterDataAsset
. This functionality will return in the form of a more generic association data in the future.
Core
- FEATURE Added an extension method in
CoreExtensions
to get all interfaces and base classes that a class implements and extends. - FEATURE Added an extension method in
CoreExtensions
to help recursively inject dependencies into a rootGameObject
.
Content
- FEATURE
ShowcaseContent
has been moved to implementation and renamedStandardContent
- REMOVED IdleKit no longer uses
IContentSavedData.timeModified
to store user's last activity time as it is done now inIUserSavedData.SetLastActivityTime(long)
. - CHANGE
ShowcaseContent
and all its related classes have been renamed toStandardContent
and moved intoidlekit-implementation
. - CHANGE
StandardContent
andStandardContentData
now requirevideoAdBoostId
properties. - CHANGE
StandardContent
andStandardContentData
now hold and load a reference of anBoost
. - FEATURE
StandardContent
andStandardEventContent
now subscribe to allTradeAction
s to track the status of a player's activeTrade
. - FEATURE Added
IStandardContentSavedData
andIStandardEventContentSavedData
which track the status of a player's activeTrade
in a givenStandardContent
. - CHANGE
StandardContent.missingResourcesExchangeRateMultiplier
has been split intosoftCurrencyMissingResourcesMultiplier
andupgradeableCurrencyMissingResourcesMultiplier
- CHANGE
StandardContentData.missingResourcesExchangeRateMultiplierId
has been split intosoftCurrencyMissingResourcesMultiplierId
andupgradeableCurrencyMissingResourcesMultiplierId
- CHANGE
StandardEventContent.missingResourcesExchangeRateMultiplier
has been split intosoftCurrencyMissingResourcesMultiplier
andupgradeableCurrencyMissingResourcesMultiplier
- CHANGE
StandardEventContentData.missingResourcesExchangeRateMultiplierId
has been split intosoftCurrencyMissingResourcesMultiplierId
andupgradeableCurrencyMissingResourcesMultiplierId
Continuous Integration
- FEATURE Added a continuous integration script under
Builder/Jenkinsfile
that serves as an example on how to setup a Jenkins Multi-branch Pipeline with IdleKit.
Dependency Container
- FEATURE Introduced
IKMonoInstaller
andIKInstaller
to handle the registration and de-registration of all the dependency specific to IdleKit.
Entities Database
- CHANGE
EntitiesDatabase
has been renamed toSimpleEntitiesDatabase
. See UPGRADENOTES.md for details.
Entity
- CHANGE
IEntity.Initialize()
is now implicitly called when theIEntity
is created in theIEntityLoader
right afterIEntity.Inject(IResolver)
is performed to ensure the dependency is available. - CHANGE All
EntityDataAsset
s have been changed to work with the interface changes outlined above inidlekit-framework
. - CHANGE Missing interfaces have been added to keep the extended Entities consistent and extensible.
IStandardEventContent
IStandardEventContentData
IStandardEventContentDataAsset
IStandardContentDataAsset
IStandardUpgradeableCurrencyData
IStandardUpgradeableCurrencyDataAsset
IStandardEventSettingsDataAsset
ITimerTrunk
ITimerTrunkData
ITimerTrunkSavedData
Entity Loader
- CHANGE In
UnbindDerived
the call toIEntity.Cleanup
is moved to after theEntityRemoveAction
is dispatched to stay consistent with theEntityAddedAction
. So the listener ofEntityRemovedAction
can perform the logic before the entity gets cleaned up. - CHANGE
EntityLoader
now tracks theIEntity
it has loaded or unloaded. It will add or remove it to theIContainer
accordingly when theIEntity
is first referenced or have its last reference removed. - CHANGE
EntityAddedAction
is now only called when the first reference to theIEntity
is created. - CHANGE
EntityRemovedAction
is now only called when the last reference to theIEntity
is removed.
Event
- CHANGE
IEvent
and related classes have now been renamed toIAction
. See theAction
section above for related changes. - CHANGE
IPlayerEvent
and related classes have now been renamed toIStateAction
.
Event Service
- CHANGE The
EventService
has been renamed toActionService
.
Event Settings
- CHANGE The
EventStartedStateAction
is now broadcast after subscription to the TimerService. - CHANGE The
EventStartedStateAction
,EventEndedStateAction
andClaimEventRewardsStateAction
are now broadcast with theEventSettings
object as their associated instance.
Event Content
- BUGFIX The next
Milestone
is no longer initialized with the previousMilestone
's progress if they are not tracking the samecurrencyId
. - CHANGE
ShowcaseEventContent
and related classes have been moved toidlekit-implementation
and renamedStandardEventContent
.
Generator
- CHANGE The
GeneratorEntity.OnModifierIndexChanged
method has been renamed toOnModifierAction
and is now called whenever anyModifier
type action is broadcast. - CHANGE Removed references to
Character
andCharacterData
fromGeneratorEntity
andGeneratorData
. - CHANGE When a unit target is reached
GeneratorEntity
will now dispatch both aGeneratorModifierIndexChangedAction
and aGeneratorUnitTargetHitStateAction
. - CHANGE
BuyGeneratorStateAction
now makes theICurrencies
specified in theGeneratorData.associatedUpgradeableCurrencyIds
available
andobtained
. - CHANGE
IGeneratorEntity.modifierDataIndex
has been set fromgeneratorUnitTargetHit - 1
togeneratorUnitTargetHit
. Hence, index 0 of themodifierData.amounts
would be used when the user has achieved 0generatorUnitTarget
.
Goal
- FEATURE Introduced a common base class (
GeneratorGoal
) for allIGeneratorEntity
related goals. The following goals have been refactored to work with the base class.AutomateGeneratorsGoal
BuyGeneratorTypeGoal
CollectFromGeneratorTypeGoal
GetGeneratorUnitsForAllGeneratorsGoal
GetGeneratorUnitsForGeneratorTypeGoal
GetGeneratorUnitsForGeneratorsGoal
GetTotalGeneratorUnitsGoal
HitGeneratorUnitTargetsGoal
- FEATURE Introduce a common base class (
UpgradeGoal
) for all goals that deal withIUpgradeable
. The following goals have been refactored to work with the base class.GetUpgradesForCurrencyTypeGoal
UpgradeAnyCurrencyGoal
- FEATURE Added new action
GoalActivatedAction
that gets send when anIGoal
is newly activated in theIStage
. - CHANGE
HitGeneratorUnitTargetsGoal
now listens toGeneratorUnitTargetHitStateAction
instead ofGeneratorUnitTargetHitAction
. - BUGFIX
GetGeneratorUnitsForGeneratorTypeGoal
no longer incorrectly caches the firstGenerator
in the stage, as it may be of the wrong type. - CHANGE The following goals now subscribe to
TradeActivatedAction
instead ofMakeExchangeAction
:MakeAnyTradeGoal
MakeTradeTypeGoal
- CHANGE
Goal.normalizedProgress
andGoalSavedData.normalizedProgress
now return a double instead of a float
JsonSerializer
- CHANGE
JsonSerializer
has been renamed toSimpleJsonSerializer
.
Loading
- FEATURE Added
AsyncContext
to allow the application initialization process to take place over multiple frames. - FEATURE Added
AsyncLoader
utility that can load a group ofIAsyncLoadable
s over multiple frames.
Main
- CHANGE Refactored completely to use the new
IStartup
andILoadPhase
system. - REMOVE
IStage
is now being loaded inContent
it has been removed fromMain.cs
. - CHANGE Moved
Main
toidlekit-tools
.
Milestone
- REMOVE
MilestoneData.rewardId
has been removed as it served no purpose. SeeUPGRADENOTES.md
for details. - REMOVE
MilestoneProgressAction
has been removed due to the introduction ofProgressMilestoneStateAction
andSetMilestoneProgressStateAction
. - FEATURE Added
ProgressMilestoneStateAction
andSetMilestoneProgressStateAction
as previously theIMilestoneSavedData
is altered in theIMilestone
which is against the IdleKit convention. - CHANGE
MilestoneCompletedStateAction
has been renamedCompleteMilestoneStateAction
for clarity. - CHANGE
normalizedProgress
now returns a double instead of a float
Modifier Cache
- CHANGE
IModifiers
,IModifiables
, andIModifierFormula
are now stored in hash sets. - CHANGE
_specificModifierLookup
,_globalModifierLookup
,_specificModifiableLookup
, and_globalModifiableLookup
have been consolidated into_modifierLookup
and_modifiableLookup
. - CHANGE Methods have been updated to use the new lookup structure.
- REMOVE
GetModifier(string modifierId)
andGetModifiable(string modifiableId)
have been removed.
Modifier Service
- CHANGE This Service now listens to
EntityRemovedAction
to unregisterIModifiers
andIModifiables
. - REMOVE The
ModifierService
no longer loads allIBoost
Entities in the Entities Database when theContent
is loaded, see UPGRADENOTES.md for more details. - REMOVE Removed all implementations of
IModifierCategoryData
:AscensionPowerModifierCategoryData
GeneratorPayoutModifierCategoryData
GeneratorSpeedModifierCategoryData
GeneratorUnitCostModifierCategoryData
ModifierCategoryDataAsset
- CHANGE
ModifierData.modifierCategoryId
was renamed toModifierData.modifierGroupId
. - REMOVE
ModifierData.modifierCategoryData
,ModifierData.Initialize()
andModifierData.CompareTo()
have been removed. - FEATURE Added
IModifierFormula
andIModifierFormulaData
implementations to replace the oldModifierCategoryData
implementations:AscensionPowerModifierFormula
AscensionPowerModifierFormulaData
AscensionPowerModifierFormulaDataAsset
GeneratorPayoutModifierFormula
GeneratorPayoutModifierFormulaData
GeneratorPayoutModifierFormulaDataAsset
GeneratorSpeedModifierFormula
GeneratorSpeedModifierFormulaData
GeneratorSpeedModifierFormulaDataAsset
GeneratorUnitCostModifierFormula
GeneratorUnitCostModifierFormulaData
GeneratorUnitCostModifierFormulaDataAsset
ModifierFormula
ModifierFormulaData
ModifierFormulaDataAsset
- FEATURE Added
ModifierFormulaParser
to parse human readable formulas that now drive theModifier
system. - CHANGE Renamed
ModifierCategoryData
andModifierCategoryDataAsset
toModifierGroupData
andModifierGroupDataAsset
. - CHANGE All methods in
EconomyService
,ModifierService
andModifierCache
that usedModifierCategoryData
types to filter results now useModifierFormula
types instead. - CHANGE Implemented additional
IModifierService
andIModifierCache
methods. - CHANGE
ModifierService
now pipes all modifier logic throughModifierFormula
objects instead of handling the logic internally.
Namespaces
- CHANGE The following namespaces have been changed:
IdleKit
toIdleKit.Implementation
IdleKit.PlotPoint
toIdleKit.Implementation
Offline Activity Tracker
- FEATURE Once the offline catch-up process is complete, an
OfflineProgressEndAction
will be broadcast.
PlotPoint
- FEATURE Added a number of new
ActivationCondition
s:CurrencyObtained
,CurrencyAvailable
,NumTradesMade
, PlotPointSequenceEnded`. - CHANGE Renamed
AscensionActivationCondition
toAscensionCompleteActivationCondition
. - CHANGE Improved logic for deciding whether a
PlotPointImageActor
can be reused or not. - CHANGE The runtime implementation of the
PlotPointDataProvider
has been updated to utilize theIContainer
. - REMOVE Removed the concept of state machine from the
PlotPointController
as it was not a proper state machine - CHANGE PlotPoint related
IAction
, andIService
Reward
- CHANGE
TimerTrunk
and its related classes have been renamed to use the new suffixTimedReward
. - CHANGE Due to the refactor to
ITimedRewardSavedData
, the implementations of theTimedReward
,ClaimTimedRewardStateAction
, andTimedRewardInitializationAction
have been altered to support the changes. - FEATURE Added new
CurrencyUnlockReward
that sets the rewardedCurrency
sICurrencySavedData.available
to true. - CHANGE Changed the name of
RandomTagsCurrencyReward
toBaseRandomCurrencyReward
and removed allallowUnobtained
logic from it. - FEATURE Added new
RandomObtainedCurrencyReward
extendingBaseRandomCurrencyReward
that pulls a reward fromICurrency
s that match theITagConsumerData
and are obtained. If it is unable to reward a currency it will fall back to a different reward if set. - FEATURE Added new
RandomUnobtainedCurrencyReward
extendingBaseRandomCurrencyReward
that pulls a reward fromICurrency
s that match theITagConsumerData
and are not yet obtained. If it is unable to reward a currency it will fall back to a different reward if set. - CHANGE The
CurrencyRewardData
constructor will now throw an exception if invalid min/max values are passed. - CHANGE Moved
AscensionRewardGroup
toidlekit-framework
since an interface there references it. - CHANGE The
CanClaim
methods of the following reward types have been updated to include an optionalignoreFallback
flag:AscensionReward
CurrencyReward
CurrencyUnlockReward
GachaReward
TimedReward
- CHANGE The
ICurrency
used byCurrencyReward
is now assigned on initialization and cached. - CHANGE
TimerTrunk.CanClaim
now implements an optionalignoreFallback
flag. - CHANGE
ShowcaseTimerTrunk
has been moved toidlekit-implementation
and renamedTimerTrunk
.
Saved Data
- FEATURE Introduced
SerializedDataCache
to keep track of all the content specificISavedData
based on theIContent.instanceId
they are associated with. This object is serialized by the default IdleKit implementation. - BUGFIX Fixed the bug where content specific
ICurrency
is being saved as a globalICurrency
, which means the progress is not specific to theIContent
(event).
Serialization Service
- CHANGE Due to the refactor to store the last activity time using
IUserSavedData.SetLastActivityTime(long)
, theSerializationService
does not need to subscribe toContentInitializedAction
andClearContentStateAction
. - CHANGE
SerializationService
is now responsible for maintaining theSerializedDataCache
. This enables the tracking and deleting of content specificISavedData
of a differentIContent
. - CHANGE Introduced
SerializationService.GenerateContentSpecificSavedId(string savedId)
, which consolidates all content specificsavedId
generation logic.
Services
- CHANGE All
IServices
no longer contain cached lookups. They have been converted to retrieve theIEntity
using theIResolver
orIEntityResolver
. - CHANGE Renamed the following Services to better fit naming conventions.
CurrencyManager
was renamed toCurrencyService
Economy
was renamed toEconomyService
EntityLoader
was renamed toEntityLoaderService
EventManager
was renamed toActionService
EventContentManager
was renamed toEventService
ModifierManager
was renamed toModifierService
PlotpointManager
was renamed toPlotpointService
RewardManager
was renamed toRewardService
StaticDataLoader
was renamed toDataLoaderService
Startup
- FEATURE Added abstract
Startup
class that handles typical IdleKit load and content/stage switching load sequences. - FEATURE Added abstract
PhaseLoader
class that manages loading sequences ofILoadPhase
objects.Startup
currently extends this class. - FEATURE Added implementations for all specific
ILoadPhase
interfaces defined inidlekit-framework
:InjectDependenciesLoadPhase
InitializeUserLoadPhase
LoadGlobalDataLoadPhase
ProcessEventsSavedDataLoadPhase
LoadContentDataLoadPhase
LoadContentLoadPhase
ClearContentLoadPhase
Static Data
- CHANGE
DataLoaderService
is now able to load global data that do not get cleared betweenIContent
. - CHANGE A
StaticDataRemovedAction
is now sent when data is removed from theDataLoaderService
.
Trade
- CHANGE
MakeTrade()
now returns abool
depending on whether or not the Trade was successful. - FEATURE The input and output currency amounts for an
ITrade
can now be set viaSetInputCurrencyAmount(CurrencyAmount currencyAmount)
andSetOutputCurrencyAmount(CurrencyAmount currencyAmount)
.
Timer Subscription
- CHANGE* The overloaded constructor for
TimerSubscription
no longer accepts aDateTime
endTime without an initial timestamp.
Timer Trunk
- CHANGE The
TimerTrunk
implementation has been renamed toTimedReward
. RelatedIAction
s andIStateAction
s have been renamed accordingly. SeeUPGRADENOTES.md
for more information. - CHANGE Subscription to the
TimerService
is now made before, rather than after, theTimedRewardStartAction
is sent.
Unity
- CHANGE Upgraded Unity support to 2018.4.18f1.
idlekit-tools
Asset Importer
- CHANGE
ShowcaseDataAssetImporter
has been moved intoidlekit-tools
and merged withBaseDataAssetImporter
. - CHANGE
BaseDataAssetImporter
has been renamedSimpleDataAssetImporter
. Related classes such asBaseDataAssetImporterEditorWindow
andDataAssetImporterLogger
have also been prefixed withSimple
. - CHANGE
BaseEntitiesDatabaseHelper
has been renamedSimpleEntitiesDatabaseHelper
- CHANGE The following
DataAssetHeaders
andDataAssetCreators
have been moved fromidlekit-showcase
intoidlekit-tools
and renamed:ShowcaseContentDataAssetHeader
toStandardContentDataAssetHeader
ShowcaseEventContentDataAssetHeader
toStandardEventContentDataAssetHeader
ShowcaseTimerTrunkDataAssetHeader
toTimerTrunkDataAssetHeader
ShowcaseContentDataAssetCreator
toStandardContentDataAssetCreator
ShowcaseEventContentDataAssetCreator
toStandardEventContentDataAssetCreator
ShowcaseTimerTrunkDataAssetCreator
toTimerTrunkDataAssetCreator
- CHANGE The Data Asset Creators for
StandardEventContent
andStandardContent
have been updated to import thevideoAdBoostId
field. - FEATURE Added
TimedBoostDataAssetCreator
andBoostDataAssetCreator
to allow for importing of Boosts and TimedBoosts
Continuous Integration
- FEATURE Added a continuous integration script under
Builder/Jenkinsfile
that serves as an example on how to setup a Jenkins Multi-branch Pipeline with IdleKit.
Debug Tools
- CHANGE All debug tools that were initalized on
ContentInitializedAction
now listen toIdleKitInitializedAction
instead. - CHANGE
DebugCurrencyTool
UI is able to take in negative number now, which is helpful for completing negative-income goals likeSpendCurrencyGoal
. - CHANGE The
DebugAscendStageTool
andDebugRewardTool
now both use the newly implementedDebugGrantRewardStateAction
in order to grant rewards.
Dependency Container
- FEATURE Added
SimpleInstaller
to handlePlotPoint
relatedIActions
andIServices
dependency registrations.
Entity Loader
- CHANGE Added unit test to test the
IEntity
reference tracking ability introduced toEntityLoader
.
Namespaces
- CHANGE The following namespaces have changed:
IdleKit.Tools.Editor.GuidReference
toIdleKit.Tools.Editor
IdleKit.Tools.Editor.PlotPoint
toIdleKit.Tools.Editor
IdleKit.Tools.Editor.DataAssetImporter
toIdleKit.Tools.Editor
IdleKit.Tools.Common
toIdleKit.Tools
IdleKit.Tools.Test
toIdleKit.Tools.Tests
Number Formatter
- CHANGE
FormatDouble
will now also round values of less than 1000 as specified via theroundDown
argument. See UPGRADENOTES.md for details.
Plot Points
- BUGFIX The inspector updating of
GameObject
data forPlotPointActor
types that was previously directly invoked fromPlotPointBaseActor.OnValidate
is now called inLateUpdate
to resolve Unity warnings. - CHANGE Updated all prefabs to nested prefabs after migration to 2018 LTS.
- FEATURE Added
MilestoneCompletedActivationCondition
.
Prefabs
- CHANGE Added Prefab Unity scene that is now used by nested prefabs.
- CHANGE Updated all UI prefabs to nested prefabs after migration to 2018 LTS.
Static Data
- FEATURE Added unit test for
IStaticDataLoader
due to the addition of globalIStaticData
loading.
Startup
- CHANGE Moved
Main
fromidlekit-implementation
. Main now extendsStartup
. - CHANGE Adjusted
CanvasMain
to work with startup flow changes. The static links to PlotPoint specific components have been moved intoSimpleStartup
. - REMOVE Removed
PlotPointMain
and moved it's functionality intoSimpleInstaller
,SimpleStartup
, andLoadPlotPointsDataLoadPhase
. - FEATURE Added UI specific load phases:
CanvasInitializeLoadingViewLoadPhase
CanvasInitializeUILoadPhase
CanvasCleanupUILoadPhase
CanvasToggleDebugUILoadPhase
- FEATURE Added PlotPoint specific load phases:
LoadPlotPointsDataLoadPhase
UI
- FEATURE Introduced
CanvasEntityView<TEntity>
that serves as the base class and handle the dependency for allCanvasView
that showcases a singleIEntity
. - CHANGE Moved all UI specific code out of
Context
and intoCanvasContext
. - CHANGE All
CanvasView
are now being properly injected on creation or own startup. - CHANGE
CanvasUI
now displays aCanvasGenericDialog
when aTimerTrunk
is claimed. - CHANGE All
IAction
related code has been moved intoCanvasUI
fromShowcaseCanvasUI
. - CHANGE Consolidated all the
CanvasEntityView
creation, initialization and cleanup code intoCreateEntityViews
andCleanupEntityViews
methods onCanvasEntityPanel
. All the codes related to populating and cleaning up owningCanvasEntityView
have been refactored to use this method. (e.g:CanvasStageView
now callsCanvasGeneratorPanel.CreateEntityViews
to populate the generator views.) - CHANGE
CanvasContentView
is now responsible for populatingCanvasStageView
,CanvasEventView
,CanvasMilestoneView
,CanvasReturnToMainContentView
,CanvasTradeViews
, andCanvasTimedRewardViews
. It is the point of entry for recursively creating all theCanvasEntityViews
in the UI. The following classes have been changed due to the implementation:CanvasMain
CanvasUI
CanvasContentView
CanvasStageView
- CHANGE Introduced
CanvasModifierEntityView
soCanvasBoostView
andCanvasUpgradeableCurrencyView
can share code that displays theModifierData
information in a popupCanvasDialog
. - CHANGE
CanvasTimedBoostView
has been implemented, extracting theTimedBoost
specific functionality fromCanvasBoostView
. - CHANGE
CanvasBoostView
no longer listens forToggleBoostStateAction
to activate itself. Instead the view is always active so that Boosts which are not currently active are still displayed, and can be activated by, the UI. - REMOVE
CanvasModifierDataView
and its UI prefab have been removed as the information is now shown in aCanvasDialog
popup. - CHANGE
CanvasUI
now listens toGeneratorUnitTargetHitStateAction
instead ofIncrementGeneratorUnitStateAction
to show Generator unit target rewards. - CHANGE Added
CanvasContentView canvasContentView { get; }
toCanvasUI
. This is used by the newCanvasInitializeUILoadPhase
. - FEATURE Added
CanvasLoadingView
that tracks load progress that is dispatched fromIStartup
. - CHANGE Moved
CanvasDebugToggle
fromidlekit-showcase
to here. - CHANGE Refactored
CanvasMain
to work with the newIStartup
load flow. - CHANGE Any display of double values are now rounded consistently. All payouts and amounts the player has are now floor, targets and costs are ceiling.
- CHANGE
CanvasMilestoneView
now displays rewardId based on data in theIEventSettings
. - BUGFIX Fix a bug where
CanvasTradeViews
are not being cleared up betweenIContent
soTrades
in a differentIContent
are causing null references. - BUGFIX Fix a bug where
CanvasUpgradeableCurrencyViews
display the wrong background colours when theIUpgradeableCurrencies
are made available onIStage
start. - CHANGE A number of
CanvasView
classes have moved fromidlekit-showcase
intoidlekit-tools
:CanvasAscensionGameplay
CanvasMissingResourcesDialog
CanvasTimerTrunkView
- CHANGE
PlotPointUI
has been renamedStandardUI
. SeeUPGRADENOTES
for more. - FEATURE Added a
CanvasModifiableEntityView
which is the equivalent of theCanvasModifierEntityView
but displays information about allIModifiers
that affect theIModifiable
.
Unity
- CHANGE Upgraded Unity support to 2018.4.18f1.
- CHANGE All the IdleKit UI has been retrofitted to work with Unity's nested prefabs system. The prefabs components that built up all the nested prefabs are located in
idlekit-tools/Common/Prefabs
.
Test
- FEATURE Due to the introduction of
IEntity.Initialize()
and the changes made toIEntity.Cleanup(IEntityLoader)
allIEntity
unit tests also now testInitialize()
andCleanup(IEntityLoader)
methods for allIEntity
.
Welcome Back Dialog
- BUGFIX Now only unsubscribes from
CollectFromGeneratorStateAction
when theOfflineProgressEndAction
is recieved. This resolves an issue where currency earned via collections afterTimedBoost
expiry were not being displayed correctly.
idlekit-examples
Continuous Integration
- FEATURE Added a continuous integration script under
Builder/Jenkinsfile
that serves as an example on how to setup a Jenkins Multi-branch Pipeline with IdleKit.
Examples
- CHANGE The Boost Example now shows how both
IBoost
andITimedBoost
Entities function. - CHANGE The
LoopingContentSavedData
implementation no longer overridescurrentStageId
as it is required by theLoadPlotPointDataLoadPhase
. - REMOVE Removed the
ContentSwitch
example as it wasn't demonstrating useful functionality.
Loading
- FEATURE* Added new "AsyncLoading" and "SynchronousLoading" examples to demonstrate the two approaches to loading.
PlotPoint
- CHANGE The previous
PlotPoint
tutorial example has been moved into(REPO)/Runtime/Tutorials/PlotPoint
- FEATURE Add a new
PlotPoint
example that has built in plotpoints for all theIPlotPointActivationCondition
offered in IdleKit.
Prefabs
- CHANGE Updated all UI prefabs to nested prefabs after migration to 2018 LTS.
- CHANGE All prefabs previously in
idlekit-showcase
have been moved intoidlekit-tools
.
UI
- CHANGE Due to the update to
CanvasContentView
, the following classes have been modified or removed (replaced with their parent classes in Unity):BoostMain
- modifiedBoostUI
- removedContentSwitchUI
- removedCurrencyUI
- removedGachaUI
- removedSynchronousLoadingContext
- removedTimedRewardMain
- modifiedTimedRewardUI
- removedTradeMain
- removedTradeUI
- removed
Unity
- CHANGE Upgraded Unity support to 2018.4.18f1.
- CHANGE The examples scenes are now composed of nested prefabs (with variants) built from the prefab components located in
idlekit-tools
.
idlekit-showcase
General
- CHANGE All
idlekit-showcase
classes have been moved intoidlekit-framework
,idlekit-implementation
, andidlekit-tools
.
Asset Importer
- CHANGE All asset importers and headers in
idlekit-showcase
have been moved intoidlekit-tools
.
CanvasView
- CHANGE The following
CanvasViews
have been moved toidlekit-tools
:CanvasAscensionGameplay
CanvasMissingResourcesDialog
CanvasTimerTrunkView
- REMOVE
CanvasShowcaseUpgradeableCurrencyView
has been merged withCanvasUpgradeableCurrencyView
and it's cs file removed.
Content
- CHANGE The previous
idlekit-showcase
content entities have been renamed and moved intoidlekit-implementation
.IShowcaseContent
,ShowcaseContent
and related classes toIStandardContent
andStandardContent
IShowcaseEventContent
,ShowcaseEventContent
and related classes toIStandardEventContent
andStandardEventContent
Continuous Integration
- FEATURE Added continuous integration scripts under
Builder/
folder that serve as examples on how to setup a Jenkins Multi-branch Pipelines with IdleKit.
Services
- CHANGE
ShowcaseUpgradeableCurrencyManager
was renamedStandardCurrencyService
and move intoidlekit-implementation
.
Settings
- CHANGE Added the editor settings file to Showcase project as it contains nested prefab editing environment settings.
- CHANGE Added the project version file to the Showcase project as it contains Unity version information.
- CHANGE Added the Unity manifest file to the Showcase project as it contains dependency information.
UI
- CHANGE Due to the update to
CanvasContentView
, the following classes have been modified or removed:ShowcaseUI
- removed, replaced the usage with its baseStandardUI
andCanvasUI
.ShowcaseContentView
- modified, moved intoidlekit-tools
and renamed toStandardCanvasContentView
- CHANGE Moved
CanvasDebugToggle
toidlekit-tools
. - CHANGE Any display of double values are now rounded consistently. All payouts and amounts the player has are now floor, targets and costs are ceiling.
Unity
- CHANGE Upgraded Unity support to 2018.4.18f1.
- CHANGE The
Showcase
scene is now composed of nested prefabs (with variants) built from the prefab components located inidlekit-tools
.
UpgradeableCurrency
- REMOVE
ShowcaseUpgradeableCurrency
has been removed. SeeUPGRADENOTES
for detail. - REMOVE
ShowcaseUpgradeableCurrencyManager
has been removed. SeeUPGRADENOTES
for detail.
TimerTrunk
- CHANGE The
IShowcaseTimerTrunk
interface andShowcaseTimerTrunk
implementation has been moved toidlekit-framework
`idlekit-implementationand renamed
ITimerTrunkand
TimerTrunk`.
Version 0.20.7, 2020-01-28
idlekit-framework
- N/A
idlekit-examples
- N/A
idlekit-implementation
- BUGFIX
Stage.Cleanup()
now correctly callsCleanup()
on each active goal rather thanDeactivate()
, which would previously cause the goal progress to reset on content switch. - BUGFIX The
Milestone
tracking code inOfflineActivityTracker
now fails gracefully when completion times overflow.
idlekit-showcase
- N/A
idlekit-tools
Plot Points
- FEATURE Added
MilestoneCompletedActivationCondition
.
Version 0.20.6, 2019-12-11
idlekit-framework
- N/A
idlekit-examples
- N/A
idlekit-implementation
Event Settings
- BUGFIX
EventSettingsSavedData
now correctly serializes the nextIMilestone
completion time. - BUGFIX
EventSettings
now subscribes to theITimerService
after aContentInitializedEvent
is triggered. This prevents theITimerService
from evaluating anyIEventSettings
that are subscribed to it before the initialization phase has completed. It was previously possible for anEventEndedEvent
to be triggered before all theIEntities
were loaded.
idlekit-showcase
- N/A
idlekit-tools
- N/A
Version 0.20.5, 2019-11-20
idlekit-framework
Economy
- CHANGE Added optional
IModifier[]
exclusion list parameter to several methods inIEconomy
. GetPayout(IGeneratorEntity generatorEntity, bool applyModifiers, IModifier[] excludedModifiers = null)
GetDuration(IGeneratorEntity generatorEntity, bool applyModifiers, IModifier[] excludedModifiers = null)
GetAffordableUnitsToNextTarget(IGeneratorEntity generatorEntity, bool applyModifiers, IModifier[] excludedModifiers = null);
GetMaxAffordableUnits(IGeneratorEntity generatorEntity, bool applyModifiers, int maxCap = -1, IModifier[] excludedModifiers = null)
GetIncrementGeneratorUnitCost(int unitsToIncrease, IGeneratorEntity generatorEntity, bool applyModifiers, IModifier[] excludedModifiers = null)
GetAscensionPower(IStage stage, bool applyModifiers = true, double ascensionPower = 1d, IModifier[] excludedModifiers = null)
Event Settings
- CHANGE Moved time related functionality from
idlekit-showcase
. Doing this allows for the prediction of milestone completion times for use when events are finished while players are offline. - Added
IEventSettings.isActive
- Added
IEventSettings.SetMilestoneCompletionTime(string milestoneId, long timestampInMilliseconds)
- Added
IEventSettings.StartEvent(long timestampInMilliseconds)
- Added
IEventSettings.EndEvent(long timestampInMilliseconds)
- Added
IEventSettingsData.eventDurationInMilliseconds { get; }
- Deprecated
IEventSettingsSavedData.completedMilestoneIds { get; }
. SeeUPGRADENOTES
for details. - Added
IEventSettingsSavedData.milestoneCompletionInfo { get; }
- Added
IEventSettingsSavedData.timeStartedInMilliseconds { get; }
- Added
IEventSettingsSavedData.timeCompletedInMilliseconds { get; }
- Added
IEventSettingsSavedData.isComplete { get; }
- Deprecated
IEventSettingsSavedData.CompleteMilestone(string milestoneId)
. SeeUPGRADENOTES
for details. - Added
IEventSettingsSavedData.CompleteMilestone(string milestoneId, long timestampInMilliseconds)
- Added
IEventSettingsSavedData.StartEvent(long eventStartTimeInMilliseconds)
- Added
IEventSettingsSavedData.EndEvent(long eventEndTimeInMilliseconds)
Modifier Cache
- CHANGE Added optional
IModifier[]
exclusion list parameter toIModifierCache.SearchModifiersAffectingModifiable<TModifierCategoryData>(string modifiableId, bool checkCanBeApplied = true, IModifier[] excludedModifiers = null)
.
Modifier Manager
- CHANGE Changed
IModifierManager
andIModifierCache
method signatures that involve applying modifiers to take an optional list ofIModifier
objects to exclude from calculations. IModifierManager.ApplyModifiers<TModifierCategoryData>(IModifiable modifiable, ref double modifiedValue, IModifier[] excludedModifiers = null)
IModifierManager.ApplyModifiers<TModifierCategoryData>(IModifiable modifiable, ref double modifiedValue, int additionalLevels, IModifier[] excludedModifiers = null)
Timer Service
- CHANGE Added
ITimerService.timestampInMilliseconds
.
idlekit-implementation
Economy
- CHANGE
Economy
implemented all changes made inIEconomy
.
Event Settings
- CHANGE
EventSettings
implemented all added interface properties and methods inIEventSettings.
- CHANGE
EventSettings
implementedITimerListener
and based on the Event duration will automatically end the event after the duration has passed. - FEATURE Added
EventStartedEvent
andEventEndedEvent
events that are dispatched byEventSettings
when an event starts or ends. - CHANGE
EventSettings.CanClaimRewards(string contentId)
now also checks that the Event is complete. - CHANGE
EventSettings.GetRewardIds()
now checks milestone completion times before adding rewards to the list. - CHANGE Added serialized date
EventSettingsData._eventDurationInSeconds
which is converted to milliseconds at runtime and accessible viaEventSettingsData.eventDurationInMilliseconds
. - CHANGE
EventSettingsSavedData
implemented all changes made inIEventSettingsSavedData
. - FEATURE Added
IdleKitInitialized
event to signify when all IdleKit Entities have been initialized.
Main
- CHANGE Now broadcasts the
IdleKitInitialized
at the end ofMain.StartGame
.
Modifier Cache
- CHANGE Updated
IModifierCache
to optionally allow a list ofIModifier
objects to exclude whenApplyModifiers()
is called.
Modifier Manager
- CHANGE Updated
ModifierManager
to optionally allow a list ofIModifier
objects to exclude whenApplyModifiers()
is called.
Offline Activity Tracker
- FEATURE Added logic that will calculate future
Milestone
completion times periodically, moves between content and when a player backgrounds the app. These times are then used when calculating which milestones were completed after an event has been finished and rewards are being claimed. This will allow a user to leave an event content and not return to it while the event is active, yet still claim all of the milestones they completed while being away from the app. - CHANGE Now listens to
IdleKitInitialized
event rather thanStageInitializedEvent
to perform catch-up logic. This ensures that all Entities have been initialized prior to the catch-up.
Timer Service
- CHANGE Added
TimerService.timestampInMilliseconds
.
idlekit-tools
UI
- REMOVE Moved all event related UI code from
idlekit-showcase
and deleted original class. ShowcaseCanvasEventView.cs
toCanvasEventView
ShowcaseCanvasReturnToMainContentView.cs
toCanvasReturnToMainContentView
ShowcaseCanvasStageView.cs
toCanvasStageView
idlekit-examples
- N/A
idlekit-showcase
Events
- REMOVE Removed
ShowcaseEventStartedEvent
andShowcaseEventEndedEvent
.
Event Settings
- REMOVE Removed all classes that extended
EventSettings
and related classes. IShowcaseEventSettings.cs
IShowcaseEventSettingsData.cs
IShowcaseEventSettingsSavedData.cs
IShowcaseEventSettingsDataAsset.cs
ShowcaseEventSettings.cs
ShowcaseEventSettingsData.cs
ShowcaseEventSettingsSavedData.cs
ShowcaseEventSettingsDataAsset.cs
ShowcaseEventSettingsDataAssetHeader.cs
ShowcaseEventSettingsDataAssetCreator.cs
UI
- REMOVE Removed Event related canvas extensions.
ShowcaseCanvasEventView.cs
ShowcaseCanvasReturnToMainContentView.cs
ShowcaseCanvasStageView.cs
- CHANGE Updated
ShowcaseUI
to work without the removed classes.
Version 0.20.4, 2019-11-04
idlekit-framework
- N/A
idlekit-implementation
Content
- BUGFIX Fix a bug that
IContentSavedData.currentStageId
is not being serialized until the first ascension.
Event Content
- BUGFIX The next
Milestone
is no longer initialized with the previousMilestone
's progress if they are not tracking the samecurrencyId
.
Events
- FEATURE Introduce
OfflineProgressEndEvent
to mark that the Offline Activity Tracker catch-up process is complete.
Goal
- BUGFIX
GetGeneratorUnitsForGeneratorTypeGoal
no longer incorrectly caches the firstGenerator
in the stage, as it may be of the wrong type. - BUGFIX
GoalData.isContentSpecific
is now set to true by default. See UPGRADENOTES.md for more detail.
Offline Activity Tracker
- FEATURE Once the offline catch-up process is complete, an
OfflineProgressEndEvent
will be broadcast.
idlekit-tools
Welcome Back Dialog
- BUGFIX Now only unsubscribes from
CollectFromGeneratorPlayerEvent
when theOfflineProgressEndEvent
is recieved. This resolves an issue where currency earned via collections afterTimedBoost
expiry were not being displayed correctly.
idlekit-examples
- N/A
idlekit-showcase
- N/A
Version 0.20.3, 2019-09-16
idlekit-framework
Milestones
- BUGFIX The
GuidReferenceable
attribute used withMilestoneRewardPair._milestoneId
andMilestoneRewardPair._rewardId
have been changed toGuidReference
.
idlekit-implementation
Logger
- BUGFIX The
DebugLogger
now correctly copes with formatting of filepaths that are outside of the Unity project.
Upgradeable Currency
- BUGFIX When a
UpgradeableCurrency
is obtained, aModifierIndexChangedEvent
will now be fired to denote that the modifier is active and will effect any relatedIModifiable
.
idlekit-tools
- N/A
idlekit-examples
- N/A
idlekit-showcase
- N/A
Version 0.20.2, 2019-09-03
idlekit-framework
Generator
- BUGFIX Introduced
GeneratorEntity.payoutCurrencyPerMilliSecond
as a replacement forpayoutCurrencyPerSecond
. See UPGRADENOTES.md for more details.
idlekit-implementation
Debug Logger
- BUGFIX Removed an erroneous using statement which could result in compile errors.
Generator
- BUGFIX Introduced
GeneratorEntity.payoutCurrencyPerMilliSecond
as a replacement forpayoutCurrencyPerSecond
which was actually returning values in milliseconds. See UPGRADENOTES.md for more details.
ToggleTimedBoostPlayerEvent
- BUGFIX Resolved an issue where the
ToggleTimedBoostPlayerEvent
would cache the firstTimedBoost
it was passed, see UPGRADENOTES.md for more details.
idlekit-tools
Asset Importer
- BUGFIX Fixed a number of issues to allow the MakeAnyTradeGoal and MakeTradeTypeGoal assets to be correctly generated and included in the Entities Database.
Canvas View
- CHANGE The
CanvasBoostView
has been updated to account for changes to theToggleTimedBoostPlayerEvent
.
Debug Tools
- CHANGE The
CanvasDebugTimeSkipTool
has been updated to work withGenerator.payoutCurrencyPerMilliSecond
.
idlekit-examples
- N/A
idlekit-showcase
- N/A
Version 0.20.1, 2019-07-18
idlekit-framework
- N/A
idlekit-implementation
Saved Data
- BUGFIX Fixed the bug where content specific
ICurrency
is being saved as a globalICurrency
, which means the progress is not specific to theIContent
(event).
idlekit-tools
- N/A
idlekit-examples
- N/A
idlekit-showcase
- N/A
Version 0.20.0, 2019-07-08
idlekit-framework
Content
- CHANGE The ascension flow has been revamped to enable an optional gameplay segment during the ascension. See the
UPGRADENOTES.md
ordocs.idlekit.io
for more details.
Currency
- REMOVE
ICurrency.ContainsTag(string)
andICurrency.ContainsTagIn(string[])
have been moved to the newly createdITagService
. SeeUPGRADENOTES.md
for details. - CHANGE
ICurrency
andICurrencyData
now implementITaggedEntity
andITaggedEntityData
.
Currency Management
- REMOVE
GetAllCurrenciesOfTagOrRarity
has deprecated. SeeUPGRADENOTES.md
for details.
Gacha
- CHANGE Introduced
IGachaSlot
andIGachaItem
interfaces to replace the previousGachaSlot
andGachaItem
struct. To keep concrete implementation inidlekit-implementation
.
Event Content
- FEATURE Introduced Event Contents with Milestone progress support to IdleKit. This will allow for alternate Content that tracks player progress via Milestones with rewards. See UPGRADENOTES.md for details.
Modifiers
- CHANGE Refactored the
ModifierCache
to work more like theIEntityCache
. Now anIModifierCache
exists and is integrated into the dependency binding system. This allows for much more extensibility and the implementation of customIModifierCache
objects. - CHANGE Added
IModifierCategoryData.targetModifiableTypes
to allowIModifierCache
to organize and returnIModifiable
objects and provide verification that givenIModifierCategoryData
filters onlyIModifiable
objects that can actually be affected by thatIModifierCategoryData
. - CHANGE Added
IModifier.modifierId
to provide a single identifier to use when retrievingIModifier
objects. - CHANGE Added
checkCanBeApplied
parameter toIModifierCache.SearchModifiersAffectingModifiable<TModifierCategoryData>(string modifiableId, bool checkCanBeApplied = true)
that defaults totrue
. This will maintain previous behaviour, but allow searches forIModifier
objects that can't be applied yet. - CHANGE Added
IModifierManager.GetModifiable()
,IModifierManager.GetAllModifiablesOfType<T>()
,IModifierManager.GetModifiablesAffectedByModifier(string modifierId)
andIModifierManager.GetModifiablesAffectedByModifier<TModifierCategoryData>(string modifierId)
to makeIModifierManager
provide more data access. - CHANGE Moved
ModifierSearchResult
fromidlekit-implementation
to it's own class file inidlekit-framework
Plot Points
- FEATURE Added
IPlotpointController.canPlay { get; }
. This can be used to help manage PlotPoint playback.
Saved Data
- FEATURE Added
long timeCreated
andlong timeModified
to allISavedData
and its override. We are now able to track the time theISavedData
was created and last modified. All classes that implementISavedData
have had their constructor changed. SeeUPGRADENOTES.md
for details.
Static Data
- CHANGE Due to the
ISavedData
refactor all classes that implementISavedDataProvider
have had their signatures changed. SeeUPGRADENOTES.md
for details.
Tag
Tagged
- FEATURE Introduced
ITaggedEntity
, andITaggedEntityData
for the Entity classes that containITagData[]
.ITagConsumerData
has also been added as a utility interface for Entities that target multipleITaggedEntity
.
Tag Consumer Data
- FEATURE
ITagConsumerData
which contains an array oftargetTagIds
and atargetAll
flag to represent whether the Entity targeting these tags requires all or any of them to be present on the targetITaggedEntity
.
Tag Service
- FEATURE Introduced
ITagService
and its implementationTagService
that deal with allITagData
related logic between theITaggedEntity
andITagConsumerData
.
Trade
- FEATURE
ITrade
interface has been added to allow for Trade to become a full Entity with a Controller class. - FEATURE
ITradeService
interface has been added to allow for creation of a Trade Service to manageITrade
Entities. - CHANGE
ITradeData
now inherits fromIEntityData
. SeeUPGRADENOTES.md
for more details. - CHANGE
ICurrencyManager.GetAllCurrenciesOfTagOrRarity
has been deprecated. SeeUPGRADENOTES.md
for more details.
idlekit-implementation
Currency Manager
- CHANGE The arguments for the
CurrencyManager
constructor now requireITagService
.
Event Content
- FEATURE Added implementations for all aspects of the new Event Content feature.
Events
- FEATURE Added
AscensionStartEvent
that signals the start of the ascension gameplay has been triggered by the player. - FEATURE Added
long timeOffline { get; set;}
toOfflineProgressEvent
to keep track of the time that the user is offline for. - CHANGE
AscendPlayerEvent
has been renamed toAscensionCompletePlayerEvent
. SeeUPGRADENOTES.md
for details. - CHANGE
AscensionCompleteEvent
has been renamed toAdvanceStageEvent
. SeeUPGRADENOTES.md
for details.
Generators
- CHANGE Internal logic uses milliseconds. Data imports seconds and converts to milliseconds when read.
- CHANGE
GeneratorSavedEntityData
has gone through massive change due to theISavedData
refactor and code cleanup. SeeUPGRADENOTES.md
for details.
Goals
- Feature The following new Goals have been added for use with
ITrade
entities: MakeAnyTradeGoal
- satisfied when a certain number of Trades have been made by the player (not specific to the Trade Id).MakeTradeTypeGoal
- satisfied when a certain number of the specified Trades have been made.- CHANGE Internal logic for dynamic goals uses milliseconds. Data imports seconds and converts to milliseconds when read.
- CHANGE Due to the introduction of
ITagConsumerEntity
andITagConsumerEntityData
the followingIGoal
andIGoalData
have been refactored to implement the new interfaces:CollectCurrenciesWithTagsGoal
DynamicCollectCurrenciesWithTagsGoal
SpendCurrenciesWithTagsGoal
UpgradeCurrenciesWithTagsGoal
.
Modifiers
- CHANGE Refactored
ModifierManager
so it is no longer a partial class. It now behaves like the otherIService
objects and can be extended in the same manner. - FEATURE Moved
ModifierCache
out ofModifierManager
and into it's own class that implementsIModifierCache
. This allows it to be full extensible since it is now included in the dependency system. - BUGFIX Fixed issue where
ModifierCache.GetModifiersAffectingModifiable
methods would not return anyIModifier
objects that affected theIModifiable
viaIModifierData.affectAll
. - CHANGE Added
checkCanBeApplied
parameter toModifierCache.SearchModifiersAffectingModifiable<TModifierCategoryData>(string modifiableId, bool checkCanBeApplied = true)
to allow for optionally gettingIModifier
objects that cannot currently apply their modification. Previous behaviour remains unchanged. - FEATURE Added additional methods to
ModifierManager
andModifierCache
to allow for the retrieval ofIModifiable
objects affected by specificIModifier
objects.Modifiermanager.GetModifiable<T>(string id)
Modifiermanager.GetAllModifiablesOfType<T>()
Modifiermanager.GetModifiablesAffectedByModifier(string modifierId)
Modifiermanager.GetModifiablesAffectedByModifier<TModifierCategoryData>(string modifierId)
ModifierCache.modifiables
ModifierCache.GetModifiable(string modifiableId)
ModifierCache.RegisterModifiable(IModifiable modifiable)
ModifierCache.UnregisterModifiable(IModifiable modifiable)
ModifierCache.GetModifiablesAffectedByModifier(string modifierId)
ModifierCache.GetModifiablesAffectedByModifier<TModifierCategoryData>(string modifierId)
Random Reward
- CHANGE
RandomTagCurrencyReward
and the corresponding file has been renamed toRandomTagsCurrencyReward
as it supports multipletagsId
. - CHANGE
RandomTagsCurrencyReward
andRandomTagsCurrencyRewardData
now implementITagConsumerEntity
andITagConsumerEntityData
.
Plot Points
- CHANGE All types of ActivationConditionData and ActionData now have public constructors.
- FEATURE Added the ability to disable and enable PlotPoint playback. This will be useful when working with UI and PlotPoint flow. This is done via the these new PlotPoint Events:
PlotPointSetPlaybackAvailabilityEvent
allows PlotPoint playback to be enabled or disabled by setting thePlotPointSetPlaybackAvailabilityEvent.canPlay
property.PlotPointPlaybackAvailabilityChangedEvent
is dispatched by thePlotpointController
when playback is enabled or disabled.PlotPointPlaybackAvailabilityChangedEvent.canPlay
will reflect the current status.
Saved Data
- FEATURE Added
BaseSavedData
that most classes that implementISavedData
extend to deal with the newISavedData.timeCreated
andISavedData.timeModified
functionality.
Tag
- FEATURE All implementation of
ITagConsumerData
have the fieldbool targetAll
added so if we can specify we want to matchall
orany
in the targetITaggedEntity
(e.g:ICurrency
). The following Entities are effected: CollectCurrenciesWithTagsGoalData
DynamicCollectCurrenciesWithTagsGoalData
SpendCurrenciesWithTagsGoalData
UpgradeCurrenciesWithTagsGoalData
RandomTagsCurrencyReward
- FEATURE
TagException
andTagNotFoundException
have been added.
Trade
- FEATURE
Trade
Entity controller has been added, implementingITrade
and containing all encapsulated logic required by a trade. - FEATURE
TradeException
andTradeNotFoundException
have been added. - CHANGE
TradeData
holds arrays for input and output Tag Ids. Seeupgradenotes.md
for more detail.
Plot Points
- BUGFIX Fixed an issue where the
AutomationAvailableActivationCondition
andGeneratorAvailableActivationCondition
would not fire if their conditions were achieved duringStage
initialization.
Time Management
- BUGFIX Fixed an issue where subscriptions to the
TimerService
made prior to the initial Unity update would receive an invalid timestamp. - CHANGE All time related logic is now done with milliseconds.
- CHANGE All
TimerSubscription
constructors that took time in seconds have been deprecated: TimerSubscription(float durationSeconds, bool loop = false)
TimerSubscription(float durationSeconds, long initialTimestamp, bool loop = false)
Timed Rewards
- CHANGE Internal logic uses milliseconds. Data imports seconds and converts to milliseconds when read.
Timer Service
- BUGFIX Zero duration looping subscriptions no longer result in divide by zero exceptions in
TimerService.EvaluateListeners
. - CHANGE
TimerSubscription.duration
will now throw an exception if set to less than zero.
Saved Data
- FEATURE Added
BaseSavedData
that most classes that implementISavedData
extend to deal with the newISavedData.timeCreated
andISavedData.timeModified
functionality.
Upgradeable Currency
- CHANGE
bool UpgradeableCurrency.canBeApplied { get; }
no longer considers the availability of theUpgradeableCurrency
.
Upgradeable Currency Manager
- CHANGE The arguments for the
UpgradeableCurrencyManager
constructor now requireITagService
.
idlekit-tools
Asset Importer
- CHANGE
TradeDataAssetCreator
now imports and fills out arrays for input and output currency tag Ids. - CHANGE Due to the addition of
ITagConsumerData
, Asset Creators for the following Static Data have been updated: CollectCurrenciesWithTagsGoalData
DynamicCollectCurrenciesWithTagsGoalData
SpendCurrenciesWithTagsGoalData
UpgradeCurrenciesWithTagsGoalData
RandomTagsCurrencyReward
Goals
- CHANGE Due to the refactoring of all
ITagConsumerEntity
IGoals
s, the corresponding unit tests have been updated.
Modifier
- CHANGE
IModifier
related tests have been moved intoGeneratorTest
,TimedBoostTest
, andUpgradeableCurrencyTest
. - REMOVE
ModifierTest
has been removed.
Plot Points
- FEATURE The Plot Point Editor will now automatically updated the associated
PlotPointDatabase
scriptable object when aPlotPointSequence
is created, modified or deleted. - REMOVE
PlotPointDatabaseEditor
has been deprecated. It is no longer required due to Plot Point Editor changes.
Rewards
- FEATURE Added new individual unit test for each rewards testing specific functions:
AscensionRewardTest
,CurrencyRewardTest
,GachaRewardTest
, andRandomTagsCurrencyRewardTest
- REMOVE The
RewardTest
was removed due to the addition of individual tests above.
TradeSet
- REMOVE Due to the refactor of trades,
TradeSet
has been removed. SeeUPGRADENOTES.md
for more details.
Welcome Back
- FEATURE Added the time the user is away for in the welcome back message.
idlekit-examples
Examples
- CHANGE The
examples_trade_tradedata
asset now includes atagConsumerData
field. - CHANGE The Trade example UI prefab now holds a
cooldownDuration
to denote the time between each trade being offered. - CHANGE
TradeUI
has been updated to account for changes toCanvasTradeView
.
idlekit-showcase
Ascension
- FEATURE Added an ascension battle after the user click the
Ascend
button. That will serve as an example on how to handle the ascension transition.
Asset Importer
- CHANGE
ShowcaseContentDataAssetCreator
now imports thetradeCooldownDuration
field.
Content
- FEATURE Added a new field to
ShowcaseContentData
that allows the user to set the base ascension power of thatIContent
. - FEATURE
ShowcaseContentData
andShowcaseContent
now have atradeCooldownDuration
property. - CHANGE
ShocaseContent
properties have been made virtual for extensibility. - CHANGE
ShowcaseContentParameters
now takes aTrade
array rather than the deprecatedTradeSet
.
Event Content
- FEATURE Added extended classes to showcase the new Event Content system as well as one potential way to extend the implementation to add a limited time to Event Content.
- FEATURE Extended EventContent (ShowcaseEventContent) to add Event functionality to the showcase project. See UPGRADENOTES.md for more details.
- FEATURE Extended EventSettings (ShowcaseEventSettings) to showcase one potential way to implement limited time functionality in Events.
- FEATURE Added a global EntitiesDatabase to show how to manage and access data across multiple Contents.
Events
- FEATURE Added ShowcaseEventEndedEvent and ShowcaseEventStartedEvent to provide support for limited time Events in the showcase project.
Plot Points
- CHANGE Added
PlotPointUI
component to manage the UI / PlotPoint flow. Now dialogs must be closed before PlotPoint playback will happen.
Showcase Upgradeable Currency Manager
- CHANGE The arguments for the
ShowcaseUpgradeableCurrencyManager
constructor now requireITagService
.
UI
- CHANGE
CanvasTradeView.Initialize
now takes an array of Trade Entities and a trade cooldown value along with aIDependencyContainer
. - CHANGE
CanvasTradeView.OnCurrencyChanged
now only sets the_acceptButton.interactable
field rather than re-generating the amounts within the trade. - CHANGE
CanvasTradeView.SelectTrade
has been renamed toRefreshTrade
. - CHANGE
CanvasTradeView.RefreshTrade
is now nly called inCanvasTradeView.OnTimerEnded
(whenever the trade timer ends). - CHANGE
MakeExchangePlayerEvent
is now sent viaTrade.MakeTrade
rather than from UI code inCanvasTradeView.HandleAcceptButtonClick
.
Version 0.19.1, 2019-05-30
idlekit-framework
- N/A
idlekit-implementation
Rewards
- BUGFIX Fixed an issue with the
AscensionReward
where only one reward would ever be granted.
idlekit-tools
- N/A
idlekit-examples
- N/A
idlekit-showcase
- N/A
Version 0.19.0, 2019-05-27
idlekit-framework
Goals
- FEATURE Introduced
IDynamicGoalData
forIEntityData
that are associated with aIDynamicGoal
. - CHANGE
IDynamicGoal
now requires anIDynamicGoalData
in the interface.
Events
- REMOVE Removed deprecated
IActionManager
class. - REMOVE Removed deprecated
IEventInvoker
class.
idlekit-implementation
Currency
- REMOVE Removed
CurrencyData.isActive
as it was not used.
Generator
- BUGFIX The bug that any action which would cause a
ModifierIndexChangedEvent
would not immediate affect theGenerator
until the next time the Generator's payout is recalculated has been fixed.
Events
- REMOVE Removed deprecated
EventInvoker
class. - REMOVE Removed deprecated
LoadContentPlayerEvent
. - REMOVE Removed deprecated
LoadStagePlayerEvent
. - REMOVE
AscendPlayerEvent.GetRewardIds
has been deprecated. Equivalent functionality now exists in the newAscensionReward
Entity controller. - CHANGE
GrantRewardPlayerEvent
constructor now requires aIEventManager
to be passed as an argument. This also effects the following derived classes: ClaimGoalPlayerEvent
CheckGeneratorUnitTargetHit
ClaimTimedRewardPlayerEvent
OpenTimerTrunkPlayerEvent
- REMOVE
GrantRewardPlayerEvent.CalculateRewards
has been deprecated. Currency amounts for individual rewards are now calculated viaGrantRewardPlayerEvent.CalculateReward
. - CHANGE
CheckGeneratorUnitTargetHit.CheckGeneratorUnitTargetHit
will now only callCheckGeneratorUnitTargetHit.GrantRewards
if there is least oneIReward
to be granted. - CHANGE
GrantRewardPlayerEvent
now emits aRewardGrantedEvent
whenever aIReward
is granted to the player. - FEATURE
RewardGrantedEvent
has been added to signal when aIReward
has been received by the player.
Goals
- FEATURE Added new
CollectRewardTypeGoal
completes when the player is granted one or more specifiedIReward
s, such as aGachaReward
. EquivalentData
andDataAsset
classes have also been added. - FEATURE Added new
DynamicCollectCurrenciesWithTagsGoal
progresses or completes when the player collects from automatedIGenerators
that are producingICurrencies
that are associated with certainITagDatas
. - FEATURE Added new
SpendCurrenciesWithTagsGoal
progresses or completes when the player spendICurrencies
that are associated with certainITagDatas
. - FEATURE Added new
UpgradeCurrenciesWithTagsGoal
progresses or completes when the player upgradeIUpgradeableCurrencies
that are associated with certainITagDatas
. - CHANGE All
DynamicGoal
now have the fallback logic that if no automatedIGenerator
producing the requiredICurrency
is found, it will calculate the dynamicIGoal.targetProgression
based on the average purchasedIGenerators.payoutCurrencyPerSecond
that are producing the correctICurrency
. - CHANGE Introduce base abstract implementation for different
IGoal
archetypes:CollectGoal
,DynamicCollectGoal
,SpendGoal
, andUpgradeGoal
. ExistingIGoals
have been retrofitted to implement the abstract classes if applicable. - CHANGE All
Goal
s no longer have theSerializable
tag.
Rewards
- FEATURE
AscensionReward
has been implemented to make it into a full Entity, inheriting fromIReward
. Some functionality from AscendPlayerEvent now lives within theAscensionReward
controller. - CHANGE
AscensionRewardData
now inherits fromIRewardData
and has the requisiteCreate
method implemented.
idlekit-tools
CanvasView
- BUGFIX Fixed issue in
CanvasGeneratorView
where the buy max units button would attempt to purchase an invalid number of units after the final Unit Target had been reached. - BUGFIX Having any
CanvasBoostView
objects inCanvasContentView
should be optional.
Data Importer
- FEATURE A new
CollectRewardTypeGoalDataAssetCreator
has been added to generate theCollectRewardTypeGoalDataAsset
. - FEATURE A new
CollectRewardTypeGoalDataAssetHeader
has been added.
Debug Tools
- BUGFIX The debug ascend tool now purchases all Generators within a
Stage
to allow for their related Upgradeable Currencies to be granted via gacha rewards. - FEATURE The debug ascend tool now grants rewards based on Unit Targets as well as the previously supported Goal rewards.
- CHANGE The debug reward tool now uses the
IRewardManager
to get rewards instead of directly creating them. - CHANGE The debug reward tool now emits a
RewardGrantedEvent
to emulate the behavior of theGrantRewardPlayerEvent
.
Main
- CHANGE
OnAscensionComplete
now callsLoadStage
instead of duplicating its functionality.
Plot Points
- BUGFIX
PlotPointBaseActor.OnValidate
will now only update Actor Static Data when not dealing with a prefab. - CHANGE Speech Bubble Actor font, color, style and alignment can now be set via the Plot Point editor tool.
- CHANGE Text Actor text color can now be set via the Plot Point editor tool.
- CHANGE
PlotPointSpeechBubbleActorData
now supports fields for text font, color, style and alignment. - CHANGE
PlotPointTextActorData
now supports a field for text color. - FEATURE Added "Delete" menu to the "Sequence" top dropdown. This will give you a dropdown to a chosen Sequence to delete, which includes deleting all of its Frames and removing its id from the
SequenceCollection.activators
that it was originally added to.
idlekit-examples
Examples
- FEATURE A PlotPoint Example has been added that is designed to be used in conjunction with a tutorial in the documentation.
- CHANGE The
GrantRewardFromRewardGeneratorPlayerEvent
has been updated to account for changes toGrantRewardPlayerEvent
.
idlekit-showcase
- N/A
Version 0.18.1, 2019-04-18
idlekit-framework
- N/A
idlekit-implementation
- N/A
idlekit-tools
Plot Points
- BUGFIX Fixed a compile error when building PlotPoint code in device builds.
- BUGFIX Fixed an issue where PlotPoint scenery wouldn't be reactivated correctly.
idlekit-examples
- N/A
idlekit-showcase
- N/A
Version 0.18.0, 2019-04-15
idlekit-framework
Content
- FEATURE Added
long lastActiveTimestamp { get; set; }
toIContentSavedData
that tracks the last time the player interacted with the app.
Dependency Container
- CHANGE Added
void UnBind<T>()
toIDependencyContainer
to make it more comprehensive and prepare the class further for the 1.0 IoC container update.
Events & Actions
- REMOVE All
IActions
have had nonISavedData
altering logic removed. Those logic has been moved to the callers and other listening classes, please refer to the changes to theIActions
in theidlekit-implementation
section of theCHANGELOG.md
. - CHANGE
IAction
has been renamed toIPlayerStateEvent
. All occurrences ofIAction
have been modified to work with the new name. - CHANGE
IAction.Do
has been renamed toIPlayerStateEvent.Apply
. All occurrences ofIAction.Do
have been modified to work with the new name.
Event Management
- REMOVE
IActionManager
has been deprecated after the merge. - REMOVE
IEventInvoker
has been deprecated because allIEvents
are dispatched immediately. - CHANGE
IActionManager
has been merged intoIEventManager
and the APIs have been simplified. All occurrences ofIActionManager
have been changed to useIEventManager
.
Generator
- REMOVE
void RefreshCache()
removed fromIGeneratorEntity
from the interface but not in the implementation, please refer to theUPGRADENOTES.md
for details.
Services
- REMOVE
IEntity
register and de-registering methods have been removed fromICurrencyManager
,IModifierManager
, andIRewardManager
, please refer to theUPGRADENOTES.md
for details.
Time Management
- FEATURE Added
ITimerSubscription
class that contains all the information in interchangeable time formats to be used with theITimerService
. This class is contained in anITimerListener
. - CHANGE
ITimerService
interface has been changed significantly to work exclusively withITimerListener
for clarity. The(ref int id)
parameter has been removed in all occurrences.
Timed Reward
- CHANGE Renamed
void Begin()
tovoid Initialize()
to stay consistent with the naming scheme in IdleKit.
Unity Event
- REMOVE Remove
IService
fromIUnityEventListener
as it is usually meant to be used with or as aMonoBehaviour
class and it is not doing anything inIService.Load
andIService.Cleanup
.
User Data
- CHANGE
IUserSavedData
is no longer contained by theISavedDataManager
it is a stand alone object that can be injected with theIEntityCache
.
Naming
- CHANGE Cleanup all timestamp related name to just use
timestamp
orTimestamp
as the name implies that it is in milliseconds.
idlekit-implementation
Events & Actions
- All
Action
have been renamed toPlayerEvent
. The former name would be displayed in brackets: - AscendPlayerEvent (AscendAction)
- CHANGE
IStage
ending logic in the class has been moved toContent
after the call to dispatch theAscendAction
. - CHANGE
IGenerator
unregistering fromIModifierManager
logic is moved to theModifierManager
that listens to theEntityRemovedEvent
.
- CHANGE
- AutomateGeneratorPlayerEvent (AutomateGeneratorAction)
- CHANGE
IGenerator
processing logic in the class has been moved toGeneratorEntity
after the call to dispatch the events.
- CHANGE
- BuyGeneratorPlayerEvent (BuyGeneratorAction)
- CHANGE
IGenerator
processing logic in the class has been moved toGeneratorEntity
after the call to dispatch the events.
- CHANGE
- CollectFromGeneratorPlayerEvent (CollectFromGeneratorAction)
- CHANGE
IGenerator
processing logic in the class has been moved toGeneratorEntity
after the call to dispatch the events.
- CHANGE
- IncrementGeneratorUnitPlayerEvent (IncrementGeneratorUnitAction)
- CHANGE
IGenerator
processing logic in the class has been moved toGeneratorEntity
after the call to dispatch the events.
- CHANGE
- ClaimTimedRewardPlayerEvent
- FEATURE This event has been added to retain the previous behavior of
OpenTimerTrunkPlayerEvent
.
- FEATURE This event has been added to retain the previous behavior of
- ClaimGoalPlayerEvent (ClaimGoalAction)
- CHANGE
StageSavedData.ClaimGoal(int)
call that deals with goal track has been moved fromStage
toClaimGoalAction
because it altersISavedData
- CHANGE
- ClearContenPlayerEvent (ClearContentAction)
- REMOVE Removed the
void Initialize(IUserSavedData)
from the class as it is injected in the constructor. - CHANGE
IContent
clean up logic in the class has been moved to theMain
class after the call to dispatch theClearContentAction
.
- REMOVE Removed the
- LoadContentAction
- REMOVE The class has been deprecated and remove because it doesn't handle any
ISaveData
alterations. - REMOVE
ICurrency
loading logic has been moved to theCurrencyManager
listening to theSetContentAction
. - REMOVE
IReward
loading logic has been moved to theRewardManager
listening to theSetContentAction
. - REMOVE
IBoost
loading logic has been moved to theModifierManager
listening to theSetContentAction
. - REMOVE
IContent
loading logic has been moved toMain
after theIContent
is set.
- REMOVE The class has been deprecated and remove because it doesn't handle any
- LoadStageAction
- REMOVE The class has been deprecated and removed because it doesn't handle any
ISaveData
alterations. - REMOVE
IStage
loading logic has been moved toMain
after theIContent
is loaded.
- REMOVE The class has been deprecated and removed because it doesn't handle any
- LogLastActiveTimePlayerEvent
- FEATURE Added
LogLastActiveTimePlayerEvent
to log the last active time of the player when the user save or pause the app.
- FEATURE Added
- NewUserPlayerEvent (NewUserAction)
- REMOVE Removed the
void Initialize(IUserSavedData)
from the class as it is injected in the constructor.
- REMOVE Removed the
- OpenTimerTrunkPlayerEvent (OpenTimerTrunkPlayerAction)
- CHANGE
ITimedReward
re-initialization logic has been moved toTimerTrunkInitializePlayerEvent
.
- CHANGE
- SerializationEvent
- FEATURE Added
PreSerializationEvent
andPostSerializationEvent
which contains theISavedData
that will be or were serialized.
- FEATURE Added
- SetContentPlayerEvent (SetContentPlayerAction)
- REMOVE Removed the
void Initialize(IUserSavedData)
from the class as it is injected in the constructor.
- REMOVE Removed the
- TimerTrunkInitializePlayerEvent
- FEATURE Added to handle the re-initialization of the
ITimedReward
.
- FEATURE Added to handle the re-initialization of the
- TimerTrunkStartEvent
- FEATURE An event that denotes that the
ITimedReward
has begun.
- FEATURE An event that denotes that the
Event Manager
- REMOVE The event/action queue has been removed from
ActionManager
, please refer to theUPGRADENOTES.md
for details. - REMOVE
onActionQueueEmpty
has been deprecated due to the removal of the action queue. AllIEvent
call is now dispatched instantly. - CHANGE
ActionManager
has been renamed toEventManager
.
Content
- FEATURE Added
AscensionCompleteEvent
that gets dispatched when the ascension sequence has been completed. - FEATURE Added
ContentInitializedEvent
that gets dispatched when theContent.Initialize()
call has ended.
Context
- CHANGE
Context.cs
has been refactored to separate the creation ofIServices
from the binding ofIServices
to allow for easier method overriding in its derived classes.
Entity Event
- FEATURE Added
EntityAddedEvent
andEntityRemovedEvent
events which are triggered when theIEntityController
is added to or removed from theIEntityCache
.
Goals
- CHANGE
GoalSavedData.normaizedProgress
will now return 1 rather than 0 whentargetProgress
is 0. - CHANGE
CollectCurrencyGoal
and its correspondingIGoalData
andIGoalDataAsset
have been renamed toCollectCurrencyTypeGoal
seeUPGRADENOTES.md
for details. - CHANGE
CollectUpgradeableCurrencyGoal
and its correspondingIGoalData
andIGoalDataAsset
have been renamed toCollectUpgradeableCurrencyTypeGoal
seeUPGRADENOTES.md
for details. - CHANGE
DynamicCollectCurrencyGoal
and its correspondingIGoalData
andIGoalDataAsset
have been renamed toDynamicCollectCurrencyTypeGoal
seeUPGRADENOTES.md
for details. - CHANGE
SpendCurrencyGoal
and its correspondingIGoalData
andIGoalDataAsset
have been renamed toSpendCurrencyTypeGoal
seeUPGRADENOTES.md
for details.
Modifier Management
- CHANGE
ModifierManager
now loads all theIBoost
onSetContentEvent
.
Offline Activity
- FEATURE Added
OfflineActivityTracker
to handle the logic of keep track of all the time related activities that should occured while the app is in the background or terminated. - FEATURE Added
OfflineProgressEvent
that gets dispatched if any time related activity occurred while the app is in the background.
Time Management
- CHANGE
TimerService
has gone through major rework to work with the new interface format. - CHANGE
TimerService.now
no longer always returnDateTime.UtcNow
, the current time is now being tracked and updated using theOfflineActivityTracker
andIUnityEventHandler.Update
. - CHANGE All time stamp related variables have had their names changed to
timestamp
in milliseconds format for consistency. - FEATURE Introduced
TimerUtil
to centralize all conversion between different time format.
Services
- CHANGE The
IServices
,CurrencyManager
,UpgradeableCurrencyManager
,ModifierManager
,RewardManager
,SavedDataManager
,StaticDataManager
have their caches converted from lazy-initialization to initialization onvoid Load()
and termination onCleanup()
.
Saved Data Serialization
- CHANGE Timer based serialization has been moved from the
JSONSerializer
to theSavedDataManager
. - FEATURE Added
PreSerializationEvent
andPostSerializationEvent
that get dispatched before and afterISavedData
have been serialized.
Timer Trunk
- CHANGE The
TimerTrunk
implementation has been refactored to better support resuming the game and switching content without forcing the trunk to restart, see UPGRADENOTES for more details. - CHANGE The unlock functionality of the
TimerTrunk
implementation has been moved to the newShowcaseTimerTrunk
class, see UPGRADENOTES for more details. - CHANGE An
initialDuration
field now allows for the initial subscription duration to vary from subsequent subscription durations. - CHANGE As the duration of the trunk can now change, a new
targetDuration
property has been added. ThetimeRemaining
field is now calculated from this property. - CHANGE The Static and Saved data field types are now
TimerTrunkData
andTimerTrunkSavedData
respectively, rather than the base interface types. The types of the accessor fields are unchanged.
idlekit-tools
CanvasViews
- FEATURE
CanvasContentView
has been added to contain UI elements for entities that are non-stage specific. This allows these elements to be initialized seperately from the stage specific elements. All non-stage specific elements have been moved fromCanvasStageView
toCanvasContentView
. - CHANGE
ReorderUpgradeableCurrencies
is now only subscribed to the event manager at the point that the content has been initialized to prevent content re-initialization forcing a re-ordering of the upgradeable currency UI elements. - BUGFIX
CanvasTradeView
now activates trades only once theStageInitializedEvent
has been received. - BUGFIX
CanvasTradeView
now re-initializes trade list if a currency changes while the timer subscription is complete. - CHANGE All
CanvasView
and its derivatives have had theirInitialize(...)
methods changed into eitherInitialize(IDependencyContainer)
andInitialize(IEntity, IDependencyContainer)
to reduce the dependency and pave way for the IoC Container.
Debug UI Tools
- CHANGE
CanvasDebugContentTool
no longer callsCleanupUI()
. The UI is now cleaned up frommain.cs
on the start of a stage so this is not required.
Dummy Unity Event
- FEATURE Added
DummyUnityEventListener
in theDummyContext
so all unit tests can listen toIUnityEventListener
event.
Offline Activity
- FEATURE Added
OfflineActivityTrackerTest
to test the newly implementedOfflineActivityTracker
.
Plot Points
- CHANGE
SaveSequenceDialog
now only allows pre-definedPlotPointDatabases
andSequenceCollections
. Please use theCreate
->IdleKit
->Plot Points
menu to create and setup the required assets. - CHANGE Saving a sequence no longer clobbers an entire folder it thinks the frames are on, it will now only find the old frames and remove them before saving new ones.
- CHANGE The Plot Point Editor now saves Frame objects in the same directory as the Sequence objects.
- CHANGE If the id of a plot point already exists in the file system, you will only be able to save to that file.
Welcome Back
- CHANGED
CanvasWelcomeBackDialog
has been moved fromidlekit-showcase
intoidlekit-tools
as it is also used by other examples. It has also been modified to work with the newOfflineActivityTracker
.
idlekit-examples
Boost Example
- CHANGE The Boost example now uses the standard
Context
rather thanExampleContext
so that boost data persists between sessions.
Instance Example
- CHANGE The
InstanceContext
now recreates services that depend on theLoaderService
to ensure that theInstanceLoaderService
implementation is injected correctly.
Prefabs
- CHANGE All example UI prefabs and scenes have been updated to take account of the addition of the
CanvasContentView
.
idlekit-showcase
Timer Trunk
- FEATURE The
ShowcaseTimerTrunk
has been added to contain logic specific to the showcase game, including the ability for the trunk to be unlocked at a specific stage.
UI
- CHANGE The
ShowcaseUI
has been rationalized to follow the method naming convension of other UI elements.
Version 0.17.0, 2019-03-15
idlekit-framework
Difficulty
- REMOVE
IDifficultyManager
has been removed from the project, seeUPGRADENOTES.md
for details..
Entity
- CHANGE Added
IEntityCache
to handle the caching, lookup, and removal of all theIEntityController
created in the project. - CHANGE
void Cleanup(ILoaderService loaderService);
inIEntityController
has been changed tovoid Cleanup(IEntityCache entityCache);
, seeUPGRADENOTES.md
for details.
Generator
- REMOVE
GeneratorRequirementIncrementData requirementIncrements { get; }
inIGeneratorData
has been removed, seeUPGRADENOTES.md
for details.
Goal
- REMOVE
ICurrencyGoal
has been deprecated in the project, seeUPGRADENOTES.md
for details. - REMOVE
IGeneratorGoal
has been deprecated in the project, seeUPGRADENOTES.md
for details. - REMOVE
float[] difficultyIncrement { get; }
inIGoalData
has been removed from the project, seeUPGRADENOTES.md
for details. - FEATURE Added
bool canClaim{get;}
andfloat normalizedProgress {get;}
toIGoalSavedData
.
Loader
- CHANGE Added override version of
TReturn LoadEntity<TReturn, TData>(string dataId)
that allows the user to not specify any instance id and creating a global unique instance per static data. - REMOVE
IEntityController
caching has been moved to the newly createdIEventCache
class, seeUPGRADENOTES.md
for details.
Logging
- FEATURE The
IPriorityLogger
has been added as an interface to allow logging out of information, warnings, errors and exceptions. TheIPriorityLogger
should be invoked via theIdleKitLog
which now exists, along with various logger implementations, in in idlekit-implementation. - REMOVE
IExceptionEvent
has been deprecated, useIdleKitLog
instead to log exceptions.
idlekit-implementation
Entity
- CHANGE All
EntityController
'svoid Cleanup();
method have been updated to reflect the interface change.
Event
- REMOVE
ErrorEvent
andExceptionEvent
have been removed. Code that used these previously has been switched over to using theIdleKitLog
. - REMOVE
GoalEvent
has been replaced withProgressGoalAction
andSetGoalProgressAction
. SeeUPGRADENOTES.md
for details. - CHANGE Introduced
EntityEvent
to reduce redundancy in all theIEvent
implementations. This can be used to make commonIEntityController
relatedIEvent
in the future.
Goals
- CHANGE All
Goals
now take anIEventCache
in the constructor. This eliminates the need to injectIEntityController
via the interfaceICurrencyGoal
andIGeneratorGoal
. - CHANGE Introduced base implementations of
IGoal
andIGoalData
-Goal
andGoalData
to abstract the common functionality in allIGoal
. - CHANGE
AutomateSpecificGeneratorGoal
and its correspondingIGoalData
andIGoalDataAsset
have been renamed toAutomateGeneratorTypeGoal
seeUPGRADENOTES.md
for details. - CHANGE
BuySpecificGeneratorGoal
and its correspondingIGoalData
andIGoalDataAsset
have been renamed toBuyGeneratorTypeGoal
seeUPGRADENOTES.md
for details. - CHANGE
CollectCurrenciesOfRarityGoal
and its correspondingIGoalData
andIGoalDataAsset
have been renamed toCollectCurrenciesWithTagsGoal
seeUPGRADENOTES.md
for details. - CHANGE
CollectFromSpecificGeneratorGoal
and its correspondingIGoalData
andIGoalDataAsset
have been renamed toCollectFromGeneratorTypeGoal
seeUPGRADENOTES.md
for details. - CHANGE
GetGeneratorUnitsForSpecificGeneratorGoal
and its correspondingIGoalData
andIGoalDataAsset
have been renamed toGetGeneratorUnitsForGeneratorTypeGoal
seeUPGRADENOTES.md
for details. - CHANGE
GetUpgradesForSpecificCurrencyGoal
and its correspondingIGoalData
andIGoalDataAsset
have been renamed toGetUpgradesForCurrencyTypeGoal
seeUPGRADENOTES.md
for details. - FEATURE Created
ProgressGoalAction
and moved allIGoal
's savedData alterations into theIAction
. - FEATURE Created
SetGoalProgressAction
and moved allIGoal
's savedData alterations into theIAction
Logging
- FEATURE The
IdleKitLog
has been added to allow for the logging of information from within IdleKit.IdleKitLog
is a static class accessible globally within the framework. It wraps aIPriorityLogger
implementation which can be changed viaIdleKitLog.RegisterLogger()
. Functionality is provided for logging information, warnings, errors and exceptions to the Unity console/log via the defaultIPriorityLogger
implementations;DebugLogger
,DevelopmentLogger
,ExceptionLogger
andNullLogger
. - CHANGE The
LoaderService.LoadEntity
will now log an exception when theStaticDataManager
returns null rather than causing aNullReferenceException
.
Plot Points
- BUGFIX Fixed an issue where the
PlotpointSequence
s wouldn't clean up data betweenClearContentAction
s
Static Data
- CHANGE The
StaticDataManager
will now output a log message rather than hard failing if a requested Entity or type does not exist in the Entities Database. See UPGRADENOTES.md for more details. - CHANGE The
StaticDataManager
will now return empty arrays rather than null/defaults from methods that get collections of Entities when the requested Entity types do not exist. See UPGRADENOTES.md for more details. - CHANGE
StaticDataManager.GetDataForIds
no longer returns an empty array whenever any of the requested Entity Ids are invalid. See UPGRADENOTES.md for more details. - CHANGE
GetData<T>(Predicate<T>)
an array rather than aIEnumerable
. See UPGRADENOTES.md for more details.
idlekit-tools
Context
- CHANGE Split out service loading calls in
Context
into a newLoadServices()
method and updatedPlotPointContext
to implement this. - CHANGE Introduced
ExampleContext
which overridesSavedDataManager
for Example scenes. - BUGFIX Example scenes now use
ExampleContext
to avoid loading incorrect Saved Data when switching between scenes.
UI
- BUGFIX
CanvasUpgradeableCurrencyView
now correctly unsets currency related data onClear()
. - BUGFIX
CanvasStageView
now only subscribes toHandleCurrencyChangedEvent
after initializing Currency views. - REMOVE Removed
CanvasHeaderView.cs
as it is no longer required in Showcase or Examples. - CHANGE Renamed the
CanvasDebugGachaTool
toCanvasDebugRewardTool
and modified it to allow the granting of allIReward
rewards not justIGachaReward
rewards.
idlekit-example
Context
- CHANGE
RewardGeneratorContext
has been renamedRewardGeneratorExampleContext
and now inherits fromExampleContext
. - CHANGE Introduced
PlotPointExampleContext
which inherits fromPlotPointContext
and overridesSavedDataManager
in the same way asExampleContext
. - CHANGE Updated all Example scenes to use example specific contexts rather than
Context
.
Example
- FEATURE Added a new instance example utilizing the instancing of
IEntityController
that allows the usage of multipleIEntityControllers
with the sameIEntityData.id
UI
- CHANGE Updated
GachaUI
to inherit fromCanvasDebugRewardTool
rather thanCanvasDebugGachaTool
.
idlekit-showcase
Plot Points
- CHANGE Sample Plot Point assets using Trailer Park Boys assets have been replaced with new Idle Kit assets.
- CHANGE The example_ascension_available Plot Point has been added. This is intended to act as a sample for how Plot Points are authored.
UI
- BUGFIX Removed Back button from Showcase UI as it is no longer used.
Misc
- BUGFIX
ShowcaseContentDataAsset
now correctly referencesITradeData
rather thanTradeData
as aGuidReference
tag.
Version 0.16.0, 2019-02-19
idlekit-framework
GeneratorStageData
- REMOVE No longer required as the
IStage
now just takes an array ofIGeneratorEntityData
s.
IBoost
- CHANGE Moved
IBoostSavedData.isActive
toIBoost.isActive
, since not allIBoostSavedData
would store its activation status.
IContext
- FEATURE Moved over to the framework instead of the implementation layer. Defines a class that provides an
IDependencyContainer
and can both bind and release dependencies from it.
ICurrency
- FEATURE
ICurrency
,ICurrencyData
, andICurrencySavedData
now extend theIUnlockable
,IUnlockableData
, andIUnlockableSavedData
interfaces.
ICurrencyManager
- FEATURE Introduced
T[] GetAllCurrencies<T>(Predicate<T> predicate)
that allows querying ofICurrency
with customized predicate. - FEATURE Added
ICurrency[] GetAllCurrenciesWithAvailability(bool availability)
to getICurrency
withavailability
.
IEntityController
- FEATURE Defines an object that is a controller in the MVC pattern, see UpgradeNotes for more details on converting your objects to use this interface.
IEntityData
- FEATURE Defines an object that is the model to the IEntityController. This object will create its controller through the required methods. Extends and functions like a IStaticData otherwise.
IGenerator
- CHANGE Added
MeetsAutomationCost
for checking whether or not the user has reached the currency cost required forCanAutomate
. Does not check upgrade requirements likeCanAutomate
. - CHANGE Added
MeetsBuyCost
for checking whether or not the user has reached the currency cost required forCanBuy
. Does not check upgrade requirements likeCanBuy
. - REMOVE No longer uses the DateTime struct. Only requires the
timestampMs
. - CHANGE Added
IsBought
to the generator. - CHANGE Now holds a
IGeneratorEntityData
as theIEntityData
. Still holds aIGeneratorData
as it's "defining" data.
IGeneratorBalanceData
- CHANGE This
IStaticData
is now wrapped by theIGeneratorEntityData
.
IGeneratorData
- CHANGE No longer requires
isContentSpecific
. This data is now wrapped by the actualIEntityData
calledIGeneratorEntityData
.
IGeneratorEntityData
- CHANGE The
IEntityData
to theIGenerator
controller. Handles all the necessary required functions, but holds no raw data and instead wraps theIStaticData
s:IGeneratorData
,IGeneratorUnitTargetSequenceData
, andIGeneratorBalanceData
.
IGeneratorUnitTarget
- REMOVE Controller was removed as it did nothing but hold data. This
IStaticData
is now wrapped by theIGeneratorEntityData
.
IGeneratorSavedData
- REMOVE
_startProductionTotalMs
is removed asIGeneratorSavedData
implementsITimedSavedData
.
IGoal
- CHANGE Added
Ascend()
andReset()
calls for handling their own logic instead of theIStage
.
IGoalSavedData (IGoalSequenceSavedData)
- FEATURE This saved data is now owned by the
IGoal
instead of theIStage
.
ILoaderService
- CHANGE All specific load methods have been removed from ILoaderService and the derived
LoaderService
. Loading is now performed by a generic loading methods using theIEntityController
's static data'sIEntityData.Create
method. SeeILoaderService
for new interface functions andLoaderService
in idlekit-implementation for examples.
IStage
- FEATURE Now supports both
GetGoal(string id)
andGetActiveGoal(int index)
, whereGetGoal
allows the fetching of completed or inactive goals. - CHANGE Due to the above feature,
GetGoal
will now return the goal regardless of activity or completely.
IStageData
- CHANGE No longer requires
GeneratorStageData
s as they are not encompassed by a single static dataIGeneratorEntityData
. A list of guid strings is used instead.
IStageSavedData
- CHANGE No longer handles goal saved data.
- CHANGE Now handles
goalIndex
andslotIndex
directly.
IStaticData
- INFO While the idea that static data is serialized data has not changed, the addition of
IEntityData
means that static data can now be used as data 'chunks' that don't necessarily create anIEntityController
, but are loaded to feed information to a system or loaded as a wrapper to a particular piece of anIEntityData
's model.
ITimedRewardSavedData
- REMOVE
startTimestampMs
is removed asITimedRewardSaveddata
implementsITimedSavedData
.
ITimedSavedData
- CHANGE Add
ITimedSavedData
interface forISavedData
that is going to be store a timestamp in milliseconds.
IUnlockable
- FEATURE Introduced
IUnlockable
which marks an IEntity asavailable
andobtained
to allow it to be enabled or disabled during certain in-game functions such asRandomTagCurrencyReward
. - FEATURE Introduced
IUnlockableData
andIUnlockableSavedData
to accompany the addition ofIUnlockable
.
IUpgradeableCurrency
- FEATURE
IUpgradeableCurrency
,IUpgradeableCurrencyData
, andIUpgradeableCurrencySavedData
now extend theIUnlockable
,IUnlockableData
, andIUnlockableSavedData
interfaces. - CHANGE Removed
isOwned
andisUnlocked
as they are now covered by theIUnlockable
interface.
IUpgradeLevelData
- CHANGE
IUpgradeLevelData
andIUpgradeRequirement
have been added to the interfaces.
Miscellaneous
- All instances of
Load
,Begin
, andEnd
that existed in Entities or Actions have been converted toInitialize
andCleanup
calls. This is only a naming consistency refactor. All uses of the previous naming should be clearly marked in your compiler errors viaSystem.Obsolete
. - The GuidReferenceable tag on all DataAssets now correctly references derived rather than interface types.
idlekit-implementation
ActionManager
- BUGFIX Fixed an issue with
DispatchEventImmediate()
where an exception event would not be fired if a non-IAction was passed as an argument.
BoostData
- CHANGE Now implements a
IniitalizeModifierData
method which initializes any modifier data on a boost.
CollectFromGeneratorAction
CHANGE The constructor now only requires ICurrencyManager
and ITimerService
to be passed as dependencies.
Content
- CHANGE On
Cleanup
theContent
will now end the current stage, deregistering it from theLoaderService
before then deregistering itself. - CHANGE
rarity
(previouslyrarityData
) is now optionally null.
GachaReward
- CHANGE
allowAsRandomReward
is removed and moved toRandomTagCurrencyReward.allowUnobtained
. Their respectiveIStaticData
andISavedData
have also been changed to reflect this move. - CHANGE
CanClaim
now returns false if any of itsGachaSlot
s returns false forHasClaimableItem
.
GachaSlot
- FEATURE Added
HasClaimableItem
which returns whether or not it has at least oneGachaItem
within it thatCanClaim
.
Generator
- CHANGE The controller class has been renamed to
GeneratorEntity
, see UPGRADENOTES.md for more details. - CHANGE Now caches values retrieved by the
DifficultyManager
. - CHANGE Implements
IsBought
.
Goal
- CHANGE
GoalSequenceSavedData
has been replaced byGoalSavedData
. EachGoal
now has it's ownGoalSavedData
. Member variables related to slots and goal indicies have been removed. See UPGRADENOTES.md for more details. - CHANGE
GoalSavedData
now implementsLoad
,Save
,Delete
andReset
methods. TheReset
method is now called from theClaim
andAscend
methods. - CHANGE All
Goal
implementations now implementAscend
andReset
methods which call the equivalent methods on theirGoalSavedData
.
GuidReferenceHelper
- CHANGE Added a sanity check to prevent empty and null ids from getting into the cache.
LoadContentAction
- CHANGE The LoadContentAction now contains specific methods for loading of
IRewards
,IBoosts
andICurrencies
which are invoked prior to loading theIContent
.
LoaderService
- CHANGE The constructor now requires that only the
IDependencyContainer
is passed as a dependency.
RandomTagCurrencyReward
- BUGFIX Fixed issue where
CanClaim
threw an exception if it was ever false - CHANGE Now holds a list variable instead of creating a new one each
RefreshValidCurrencies
call. Will still clear and repopulate the reference List each validation step.
StaticDataManager
- CHANGE Remove the usage of
System.Linq
inStaticDataManager
.
TimedBoost
- CHANGE Add property duration to
TimedBoost
to have it calculated dynamically.
TimedBoostSavedData
- CHANGE No longer extends
BoostSavedData
and now extendsITimedSavedData
.
ToggleAvailableAction
- FEATURE Added
ToggleAvailableAction
to toggleIUnlockable.available
.
ToggleBoostAction & ToggleTimedBoostAction
- CHANGE
ToggleTimedBoostAction
is no longer called in place of aToggleBoostAction
. It is now a stand alone extension ofToggleBoostAction
that needs to be fired explicitly. It remains polymorphic, so global listeners toToggleBoostAction
continue to receive events fromToggleTimedBoostAction
dispatches.
UpgradeableCurrency
- CHANGE The
UpgradeableCurrencyData
now contains aInitializeModifierData
method which will initialize the modifier data that it owns. - CHANGE Due to the addition of
IUnlockable
,IUnlockableData
, andIUnlockableSavedData
interfaces, some functionality of this class has changed. Code that previousily utilizedUpgradeableCurrency.isOwned
andUpgradeableCurrency.isUnlocked
have been updated.
UpgradeLevelData
- CHANGE
UpgradeLevelData
andUpgradeRequirement
now inherit fromIUpgradeLevelData
andIUpgradeRequirement
respectively. See UPGRADENOTES.md for more detail.
Miscellaneous
- CHANGE All Entitiy
DataAssets
have had theirGuideReferenceable
tags updated to register with their concrete rather than interface types. - CHANGE Many getter methods have been replaced with expression bodied members.
idlekit-tools
AssetImporter
- CHANGE
DataAssetImporter
has been split out into framework vs showcase specific implementations. See UPGRADENOTES.md for more details. - CHANGE
TagDataAssetCreator
andRarityDataAssetCreator
no longer share a base class. - CHANGE
BaseAssetCreator
,CurrencyAssetCreator
andUpgradeableCurrencyAssetCreator
now supports importing ofTag
data. - CHANGE Improved feedback in Data Asset Importer Window when CSV path is invalid.
- CHANGE
BaseDataAssetCreator
now implements the path to which constant data headers are output instead ofBaseDataAssetImporter
. This allows for each implementation ofIDataAssetCreator
to override this path if required. - CHANGE
GeneratorEntityDataAssetCreator
andGeneratorEntityDataAssetHeader
have been added to support changes toGenerator
data structures. See UPGRADENOTES.md for more details. - CHANGE The
isContentSpecific
flag has been removed fromGeneratorDataAssetHeader
. - CHANGE Sparse arrays are no longer allowed in data structures. See UPGRADENOTES.md for more details.
idlekit-example
LoopingContent
- CHANGE As they are no longer required due to Framework changes,
LoopingContext
andLoopingContentLoaderService
have been removed.
TimerTrunk
- CHANGE Removed unrequired
Enable()
andDisable()
methods fromCanvasTimerTrunkView
.
idlekit-showcase
AssetImporter
- CHANGE
DataAssetImporter
has been split out into framework vs showcase specific implementations. See UPGRADENOTES.md for more details. - CHANGE
ExampleContent
has been renamedShowcaseContent
. See UPGRADENOTES.md for more details. - CHANGE The showcase asset importer now outputs showcase specific constant data headers into a folder within the showcase project rather than tools.
ExchangeRates
- CHANGE
mg01_missingresources_exchangerate_ExchangeRateDataAsset
asset has been renamed tomg01_exchangerate_missingresources_ExchangeRateDataAsset
. - CHANGE Exchange rates for rare and common trades have been added.
ShowcaseContentLoaderService
- CHANGE As this class is no longer required due to Framework changes, it has been removed.
ShowcaseContext
- CHANGE No longer overrides
_loaderService
.
Trades
- CHANGE The default Trade example has been replaced with three seperate trades which allow for trading of common character and generator cards along with rare character cards for soft currency.
Miscellaneous
- CHANGE A number of UI elements now take
IDependencyContainer
as an argument rather thanDependencyContainer
. - CHANGE A number of getter methods have been replaced with expression bodied members.
Version 0.15.0, 2019-01-07
PlotPointManager
- BUGFIX PlotPoint Sequence Collections are now correctly cleaned up when a stage ends to prevent caching of invalid data.
AscendAction
- BUGFIX When granting a RandomRarityCurrencyReward the AscendAction now correctly sets whether the reward can be granted when locked based on the AscensionRewardData's allowAsRewardWhenUnowned flag.
GrantRewardAction
- CHANGE Now has a specific exception thrown when no valid reward can be found: InvalidRewardClaimException.
ICurrency
- CHANGE ICurrency now requires that a ContainsTagOrRarity() method is implemented. See UPGRADENOTES.md for more details.
ICurrencyManager
- CHANGE ICurrencyManager now requires that a GetAllCurrenciesOfTagOrRarity() method is implemented. See UPGRADENOTES.md for more details.
IGlobalUpdateManager -> IUnityEventListener
- CHANGE IGlobalUpdateManager has been replaced with IUnityEventListener which uses C# events instead of holding on to IList of interface delegates (i.e: IUpdateable). Please see UPGRADENOTES.MD for more details.
ITimedRewards
- CHANGE Added these entity interfaces to dictate the implementation of a reward that is dependent on a timer
ITimerService
- CHANGE The specific implementation of the TimerSubscription has been moved to another file TimerSubscription.cs
- CHANGE TimerService now uses a Dictionary for ITimerListener subscriber lookup for better performance
Example Project
- FEATURE Trade functionality has been implemented in the Example Project via the TradeSet, Trade and TradeData classes. See CanvasTradeView.cs for an example.
- FEATURE Extended the Content (ExampleContent) to provide more "game like" elements to the example without dirtying up the core IdleKit code. See UPGRADENOTES.md for details.
- FEATURE Extended the Context to support Example specific extensions of services.
- FEATURE ITimedReward is used for a simple implementation of the TimerTrunk concept is now in the example main game. It is works like a Reward Id that is retrieved through a button, of which is disabled until a certain TimerService listener reaches the end of its timer. Extends ITimedReward.
- CHANGE Improved error handling in Main.cs to output a stack trace of ExceptionEvents where available.
- CHANGE A BaseContentDataAssetCreator has been implemented in the importer. See UPGRADENOTES.md for more detail.
Version 0.14.1, 2018-11-26
IModifierManager
- CHANGE The specific implementation of the ModifierCache has been moved into another file.
- CHANGE ModifierCache.SearchModifierAffectingId
now returns an IEnumerable instead of a SortedSet. - BUGFIX Fix a bug where multiple IModifiers with the same modifiableId and same ModifierCategoryData.priority would only count once in Modifier related calculations.
Version 0.14.0, 2018-11-23
IContent
- CHANGE Content now uses a simple sequential Stage list in ContentData to determine the Stage transition. See UPGRADENOTES.md for more details.
- CHANGE IContext and Dependency Container have been moved from the idlekit-example into idlekit.
- CHANGE Extracted the looping and index based stage transition logic from Content and created the LoopingContent subclass in the example project.
ICurrency
- FEATURE Rarity and Tag functionality has been implemented via IRarityData and ITagData. RarityData is now an extended ITagData See UPGRADENOTES.md for more details.
ICurrencyManager
- CHANGE Add unit test coverage for all public methods of ICurrencyManager and IUpgradeableCurrencyManager.
- CHANGE Deprecated Currency.Get, see UPGRADENOTES.md for details.
- CHANGE ICurrencyManager no longer loads ICurrency, instead ICurrency is loaded and registered with the ICurrencyManager in LoadContentAction
IEconomy
- CHANGE Economy methods related to generator units have been refactored. See UPGRADENOTES.md for more details.
IExchangeRate & IExchangeables
- FEATURE IExchangeRate now allows for a rate to be calculated when trading IExchangeables, such as Currency. See UPGRADENOTES.md and Content.cs for more details.
IEvent
- CHANGE Added ExchangeEvent and TradeMissingResourcesAction to support missing resources exchange rate functionality.
IGenerator
- CHANGE Added ExceptionEvent to the IGenerator in case functions are called to the IGenerator while the GeneratorState is null
- CHANGE IGenerator no longer register and unregister itself with the IModifierManager
ILoaderService
- FEATURE Added the ability to load ICurrency, and IReward (by id, ids, and load all in IContent) to the ILoaderService
- CHANGE ILoaderServices has been updated to work with string ids instead of specific concrete class.
IModifierManager
- CHANGE IModifiers no longer register directly with the IModifierManager. They are being registered to IModifierManager in LoadContentAction and LoadStageAction
IReward
- CHANGE Removed RewardResult class as it is no longer useful
- CHANGE Removed ICurrencyAmount as it was boxing the struct concrete implementation
IRewardManager
- CHANGE IRewardManager no longer loads IReward, instead IRewardManager is loaded and registered with the IRewardManager in LoadContentAction
IUpgradeableCurrency
- CHANGE IUpgradeableCurrency no longer register and unregister itself with the IModifierManager
- CHANGE Now fires a new action, CurrencyUnlockedEvent whenever isUnlocked flips from false to true
Example Project
- FEATURE A "Welcome Back" dialog now spawns to inform the user of how much has been generated since the app's last pause/exist.
- BUGFIX Importer no longer crashes Unity on exceptions.
- FEATURE Added functionality to allow the player to exchange for missing resources when they do not have enough resources to upgrade an upgradeable currency.
Version 0.13.1, 2018-10-30
HOTFIX
- CHANGE EventInvoker is now a class instead of a struct to avoid boxing allocation.
- CHANGE Added unit test for the interface methods of IActionManager and IEventManager.
- CHANGE Added exception when passing an IAction into DispatchEventImmediate and updated the documentation for that method.
- BUGFIX Fixed ActionManager.cs DispatchEventImmediate not firing target specific event dispatch.
Version 0.13.0, 2018-10-26
- FEATURE Introduced TestDataBuilder
that can help with creating IStaticData quickly in unit tests. - FEATURE Added new error checking for more possible points of error when creating the IGoal and IGoalData.
- FEATURE Can now fire events from the ActionManager immediately, instead of adding them to the queue. This does not include actions.
- FEATURE Introduced IEventPools so that all IEvent and IAction are no longer being instantiated everytime they are dispatched. This requires any asynchronous listener to cache an event's members as they will be cleared once the event re-enters the pools.
- FEATURE To allow for more performant practices, event management now has instance specific subscription/dispatching. Each listener can listen to a single specific object's dispatching of that event. This does require the listener to have that object's reference.
- CHANGE DynamicCollectCurrencyGoal has been changed from using only the automated IGenerators' payoutPerSecond to using all the purchased IGenerators' payoutPerSecond when calculating its dynamic target.
- CHANGE Modified all existing unit tests to adopt to the TestDataBuilder pattern to get rid of long-winded test setup code.
- CHANGE Performed unit test passes on all the Goals to ensure coverage of all the newly added error-checkings and exceptions.
- CHANGE Changed JsonSerializer to not serializeDirty every LateUpdate but instead with an constant interval defined in the JsonSerializer class.
- CHANGE Removed unused technical requirements such as IStaticData.Create, IGuidReferenceableAsset.dataType, and IGuidReferenceableAsset.ResetId.
- CHANGE IGenerators in the AutoCollectState will batch collect calls within a time frame together if the speed of the IGenerator is too fast to prevent from rapid calling of CollectFromGeneratorAction.
- CHANGE Cleaned up the dependencies in all IGeneratorState and remove the Automate() method from IGeneratorState to have it done in AutomateGeneratorAction.
- CHANGE Removed id argument from IStaticDataManager.AddData and removed overloaded implementation to simplify API.
- CHANGE Altered the ActionManager to encompass any events into InvokerObjects. Internally, this allows the events to be queued while still being strongly typed, therefore removing a dynamic invokation. This was a very large performance improvement in stress tests.
- CHANGE Polymorphic dispatching is no longer enforced. Instead, each IEvent has a Type[] dispatchAs property that allows each class to inform the EventManager which type of listeners it wishes to invoke. View the code documentation for additional details.
- CHANGE IdleKit uses, internally, the instance specific dispatching and subscribing as described in the Features.
- CHANGE Generators now cache their payouts and speeds, re-caching whenever something could cause them to be altered. See ModifierIndexChangedEvent and IncrementGeneratorUnitAction.
- CHANGE Upgraded the targeted .NET framework version to 4.x
- BUGFIX Solved an issue where AutoCollectState, when entered from the WaitToCollectState, could collect based on the last time the ProductionState was entered. AutoCollectState has more strict checks on enter.
- BUGFIX GetGeneratorUnitsForAllGeneratorsGoal now keeps a list of IGenerators that have been reached to prevent double counting towards the goal progress.
Version 0.12.2, 2018-10-03
- BUGFIX Fix device build error by removing AssetDatabase.FindAssets in runtime PlotPointDataProvider.
- BUGFIX Fix starting with an automated IGenerator on a new playsession would not collect the currency gained since the previous playsession.
- BUGFIX Fix warnings that were previously suppressed by the UnityEditor by removing non-numeric characters in #pragma warning disable.
Version 0.12.1, 2018-10-01
- BUGFIX Fixed issue where AutoCollectState would automate all time between last start production and the time that it was entered. It no longer fires collection events on entry and will continue where other states, like the ProduceState, left off.
- CHANGE IGeneratorState now takes the previous IGeneratorState in the Enter method and the next IGeneratorState in the Exit method.
Version 0.12.0, 2018-09-28
- FEATURE Added Plot Points to IdleKit.
- FEATURE Introduced IEvent and the derived ContentEvent, CurrencyEvent, GeneratorEvent, GoalEvent, ModifierEvent, StageEvent that can be sent and listened to across different Entities, Services, and Actions.
- FEATURE Introduced IEventManager that allows the subscription, un-subscription, and dispatching of IEvents.
- FEATURE IdleKit now uses the Event system for communication instead of relying on directly referencing the object of interests.
- FEATURE Introduced an action queue system to be used inside the IActionManager for IAction management and dispatch. IActions triggered on the same frame will now be treated as a proper queue instead of a stack.
- FEATURE Introduced the ILoaderService to create and preload the Entity classes with the proper dependencies.
- FEATURE Introduced the IActionPrototypeFactory to register and clone all IActions to reduce the dependency and allow inheritance and overloading.
- FEATURE Introduced CollectUpgradeableCurrencyGoal with an "any" field to allow the goal to track any UpgradeableCurrency obtained.
- FEATURE Added a ToggleBoostEvent for turning IBoosts on or off.
- FEATURE Added ErrorEvent and ExceptionEvent which get sent instead of Exceptions being thrown that may soft-lock the game. We plan to do an error handling pass in the future sprint this is only a temporary solution.
- CHANGE IAction is now an IEvent. Upon completion of the IAction, the IAction event will be dispatched, which can be subscribed to any listener.
- CHANGE Modified the entity classes such as Content, Currency, Generator, Goal, and Stage classes to adapt to the new Event and Loader system.
- CHANGE Modified the service classes to adapt to the new Event system.
- CHANGE Changed the Generator unit cost's mathematical formula to reflect the Customer cost in TPB.
- CHANGE Moved the DataAssetImporter from IdleKit into Example #3.
- CHANGE Trimmed down IRewardManager to remove confusing Claim() methods.
- CHANGE Introduced IValidatableReward, an reward that requires validation before it can be granted. For example, the GrantGachaRewardAction can validate the IValidatableReward before adding it to the reward pool.
- CHANGE GrantCurrencyReward and GrantRandomRarityCurrencyReward actions now grant the IReward without checking the whether the user has unlocked the UpgradeableCurrency or not. The validity check has been moved to IValidatableReward.
- CHANGE Goals now support being reused within the same Stage asset.
- CHANGE Generators now fire GeneratorPayoutChangedEvents and GeneratorSpeedChanged events.
Version 0.11.0, 2018-08-17
- FEATURE Introduced IBoost that represents modifiers that should not be tied to other entities and instead have their own internal logic.
- FEATURE Introduced simple implementations of IGlobalUpdateManager and ITimerService into IdleKit.
- FEATURE Introduced ISavedData.Reset as a more optimal way to reset a saved data than previously Delete followed by a Load.
- CHANGE Refactored all Services/Managers to get rid of loading dependency chain on the start-up script.
- CHANGE Added ICurrency accessor to CollectCurrencyGoal.
- BUGFIX Fixed a bug where the DataImporter would not import item indexed more than 10 due to faulty regex.
Version 0.10.0, 2018-08-17
- FEATURE Introduced ISavedData interface for all EntitySavedData, which allows the user to implement their own saved data.
- FEATURE Introduced ISerializer and injected it in all EntitySavedData to handle Save, Load, and Delete operations.
- CHANGE Replaced IKeyValueSave with ISerializer so the users can specify their own way of serialization.
- CHANGE Split IUserData into IUserSavedData to store user data and ISavedDataManager to manage loading of ISavedData.
- CHANGE Renamed IDataManager to IStaticDataManager for clarification.
Version 0.9.1, 2018-08-14
- FEATURE Added onRewardGranted event to IRewardManager when a reward is granted.
- FEATURE Introduced ICurrencyReward for IRewards that grant ICurrency.
- FEATURE Introduced IRewardResult to pass the IReward granted information to the view.
- FEATURE Added onCurrencyRewardGranted event to be fired in the GrantRewardAction when ICurrencyReward is granted.
- BUGFIX Fixed a bug that GachaReward is granting the IReard even if AllowAsRandom is turned off.
- CHANGE Moved all IReward claiming logic into GrantRewardAction instead of it being in the IReward.
Version 0.9.0, 2018-08-02
- CHANGE Extracted Modifier related logic from IEconomy into IModifierManager.
- CHANGE Removed IEconomy dependency from IDataManager and IUserData.
- CHANGE Moved GeneratorUnitTarget related ModifierData into GeneratorBalanceData.
- CHANGE Introduced IModiferData interface and IModifierCategory entity to process ModifierLogic.
Version 0.8.0, 2018-07-25
- CHANGE Major refactor of the following names to make IdleKit more general:
- IBusiness -> IGenerator
- BusinessSaveData.progression -> GeneratorSaveData.generatorUnitTarget
- All usages of the words like progression or customer for describing an IBusiness have been changed.
- IBreakpoint -> IGeneratorUnitTarget
- IBreakpointSequence -> IGeneratorUnitTargetSequence
- ISeason -> IStage
- IGacha -> IGachaReward
- IModifierData -> IModifierDataCollection
- IContentData.PlaythroughDatas -> IContentData.StageSequenceDatas
- CHANGE DataAssetImporter contains hooks when the DataAssets are created now.
Version 0.7.15, 2018-07-16
- FEATURE DataAssetImporter that creates EntityDataAssets from CSVs.
- FEATURE OpenGachaAction implemented so GachaReward can be properly granted in the frontend.
- FEATURE Comments improved and updated throughout the entire codebase.
- BUGFIX Fix the issue that CurrencyReward only grants the minimum currency amount.
- BUGFIX Fix the issue that DynamicCollectCurrencyGoal includes Businesses that do not generate the target currencyId in the calculation of targetProgression. Also, add a unit test to test it.
Version 0.7.14, 2018-07-05
- BUGFIX Sets the target amount of HitBreakpointsGoal to be the remaining breakpoints in that season if there are less breakpoints remaining than the initial target amount.
Version 0.7.13, 2018-06-28
- BUGFIX Fixed SpendCurrencyGoal to check for a negative difference value.
Version 0.7.12, 2018-06-27
- CHANGE New AddData method in DataManager that allows passing explicit types as parameter in order to suppot IL2CPP.
Version 0.7.11, 2018-06-26
- CHANGE OnCurrencyChangedHandler now also has "double difference" as part of the handle.
- BUGFIX Above fixes issue where changing currency in an amount 15 digits lower than the current amount would not increment any goals.
Version 0.7.10, 2018-06-21
- BUGFIX Separated business state initialization and activation in order to activate goals after business state is initialized but before they get activated.
- BUGFIX Fixed all unit tests.
Version 0.7.9, 2018-06-20
- BUGFIX Create and activate goals before businesses so goals can track business collection.
Version 0.7.8, 2018-06-19
- BUGFIX Pass a count when firing business onCollect so the correct number of collects are tracked in goals.
Version 0.7.7, 2018-06-18
- CHANGE Refactor ITimerService and ServerTime offset.
Version 0.7.6, 2018-06-15
- CHANGE Removed isActive field from static data that won't use it.
Version 0.7.5, 2018-06-07
- CHANGE Added isActive field in static data.
Version 0.7.4, 2018-06-06
- CHANGE Synced IdleKit changes into Fenwick Repo which resolves some Core Dependencies to DateTimeExtensions and removes unused variables to remove warnings.
Version 0.7.3, 2018-06-06
- CHANGE Caching ModifierDatas array outside for loop to avoid constant calls in il2cpp.
Version 0.7.2, 2018-06-05
- CHANGE Added a cached dictionary of unique modifiers affecting a modifiable.
Version 0.7.1, 2018-06-04
- CHANGE [Refactor] SavedData objects now have the ability to choose game states (if any) that they will allow deletion of their local saved data.
- CHANGE CurrencyManager further virtualized.
- CHANGE SavedDatas further virtualized.
- CHANGE IBusiness now has "MeetsBuyUnlockRequirement" and "MeetsAutomationUnlockRequirements" to separate requirements from costs.
- BUGFIX Default values that were missing in Saved Datas have been added.
- BUGFIX All saved datas were not persisting, they will now unless they explicitly set to do so (as per the first CHANGE described).
- BUGFIX Season now checks for unlock state as it loads.
Version 0.7.0, 2018-06-01
- BUGFIX Fixed GetCustomersForAllBusinessesGoal and GetCustomersForBusinessGoal having incorrect targetProgressions.
Version 0.6.41, 2018-06-29
- BUGFIX Fixed a bug where IUpgradeableCurrencyData are not showing in GetUpgradesForSpecificCurrencyGoalDataAsset.
- CHANGE Added a parameterized constructor for CurrencyAmount, which is needed for the DataImporter .
Version 0.6.40, 2018-06-27
- BUGFIX Fix all of the Unit tests.
- CHANGE Add TODOs to classes that require revisit.
Version 0.6.39, 2018-06-01
- CHANGE Removed dependency to DateTimeExtensions from AutoCollectState and ProduceState.
- CHANGE Fixed compiler warnings in BuyBusinessAction, CollectFromBusinessAction and OpenGachaAction.
Version 0.6.38, 2018-05-29
- BUGFIX Second fix for GetUpgradeForSpecificCurrencyGoal to trigger goal completion when the goal is already met.
Version 0.6.37, 2018-05-24
- BUGFIX Fixed GetUpgradeForSpecificCurrencyGoal not setting current progression on activate.
Version 0.6.36, 2018-05-23
- BUGFIX Fixed issue where unrelated modifiers could be applied to the wrong modifiable.
- CHANGE ^RELATED: The logic for this fix is hacked into Economy.GetModifierDatasAffectingId(string modifiableId, string category). Modifiers will likely be refactored in the future and this issue should definitely be addressed.
Version 0.6.35, 2018-05-23
- BUGFIX Fixed getter that returned itself in GetCustomersForBusinessesGoalData.
Version 0.6.34, 2018-05-22
- BUGFIX Fixed issue Businesses would enter state prematurely and crash when Modifiers were queried.
Version 0.6.33, 2018-05-22
- BUGFIX Fixed issue where goals wouldn't fetch saved data when initialized.
- BUGFIX Fixed issue where modifiers could be applied regardless of modifierCategory.
Version 0.6.31, 2018-05-22
- BUGFIX Fixed issue where season modifier datas would be copied with null data and skip application to modifiables.
- CHANGE ^RELATED: SeasonData object not longer caches modifier datas from its business season datas. Not ideal and should be updated in the future, but was integral to the above bugfix.
- CHANGE GoalSequenceSavedData cannot go past its target progression.
Version 0.6.30, 2018-05-20
- CHANGE Made DifficultyManager increment Season starting currency.
Version 0.6.29, 2018-05-20
- BUGFIX Fixed DifficultyManager issue in UpdateGlobalModifier.
- BUGFIX Additives now cause business speed to go lower not higher.
- BUGFIX Fixed divide by 0 in multiplicative business speeds.
Version 0.6.28, 2018-05-18
- BUGFIX Fixed non virtual methods in Content.
Version 0.6.27, 2018-05-16
- BUGFIX Typo fixed missed in requirement naming.
Version 0.6.26, 2018-05-16
- BUGFIX Fixed the ordering of the Modifiers so that additive always comes first.
- BUGFIX Fixed issue where locked currencies could apply modifiers.
Version 0.6.25, 2018-05-16
- BUGFIX Fixed the normalizedProgression for AutomateSpecificBusinessGoal and BuySpecificBusinessGoal.
Version 0.6.24, 2018-05-16
- BUGFIX Rename business difficulty variables to match BE implementation.
Version 0.6.23, 2018-05-15
- BUGFIX Fixed a bad conditional in automation character requirements.
Version 0.6.22, 2018-05-14
- CHANGE Made ModifierDatas that affect Business speed apply their changes with division rather than multiplication if they are multiplicative.
Version 0.6.21, 2018-05-14
- BUGFIX Fixed issue where GuidReferenceHelper would infinitely refresh guids if they were imported on the same frame as a refresh. Fix was simply a removal of auto refreshing during new asset import .
Version 0.6.20, 2018-05-12
- CHANGE Made public methods in Content and RewardManager virtual.
Version 0.6.19, 2018-05-12
- CHANGE Removed all timer gacha references.
Version 0.6.18, 2018-05-12
- ADDED Introduce difficulty manager to handle playthroughs scaling difficulty.
- CHANGE Pre-Process business cost data before feeding it to the views.
Version 0.6.17, 2018-05-11
- BUGFIX Fixed CollectFromBusiness actions not logging correct time.
Version 0.6.16, 2018-05-10
- BUGFIX Fixed Ascension and looping episodes unit tests.
Version 0.6.15, 2018-05-09
- CHANGE Optional UpgradeableCurrencyRequirements for buying a business added to BusinessBalanceData.
Version 0.6.14, 2018-05-09
- CHANGE Business saved data now saves in Unix milliseconds, not 'ticks' which could vary between frontend/backend.
- ADDED "TimeUtils.unixZero".
Version 0.6.13, 2018-05-08
- FIX Resolved potential collision between GuidReferenceHelper and CoreGuidReferenceHelper due to outdated reflection.
- CHANGE Added GuidReferenceUtility support for GetName overload that only takes an Id with no Type.
Version 0.6.12, 2018-05-08
- CHANGE Added logic to check character requirements when automating a Business.
- CHANGE Created UpgradeableCurrencyRequirement to track Upgradeablecurrency level requirements.
Version 0.6.11, 2018-05-07
- CHANGE Added isUnlocked to UpgradeableCurrencySavedData which gets flagged upon the first time setting the saved data amount.
Version 0.6.10, 2018-05-04
- FIX Gacha save key content specific.
Version 0.6.9, 2018-05-04
- FIX Gacha save key spelled correctly.
Version 0.6.8, 2018-05-03
- FIX Fixed DynamicCollectCurrencyTests, which broke due to the GoalCreateAction never being called.
- FIX Fixed BusinessTests, which broke due to our DummyTimerService not having any functionality.
Version 0.6.7, 2018-05-03
- CHANGE Looping episodes.
Version 0.6.6, 2018-05-02
- FIX _timerGachaLastOpenedTime now has saved data.
- CHANGE All acitons now utilize milliseconds timestamp instead of seconds (previously had too little granularity for validation).
Version 0.6.5, 2018-05-01
- FIX _isContentSpecific was missing a [SerializeField] on GachaRewardData.cs.
- FIX Fixed all Currency unit tests, which also allowed the logic for Currencies being able to add/remove negative values.
Version 0.6.4, 2018-05-01
- CHANGE Added isUnlocked to BusinessSavedData and implemented it in BuyBusinessAction.
Version 0.6.3, 2018-05-01
- CHANGE Removed dependencies that were accidentally reintroduced.
Version 0.6.2, 2018-05-01
- CHANGE Updated tests to use new Contentdata constructor.
Version 0.6.1, 2018-05-01
- CHANGE Added hasStarted flag to ContentSavedData to help award starting currencies when a Content is started.
- CHANGE Added CurrencyAmount class to wrap simple currencyId / amount pairs.
- CHANGE Added startingCurrencyAmounts to ContentData.
- CHANGE Changed BeginContentAction to make use of the new startingCurrencyAmounts.
Version 0.6.0, 2018-04-23
- CHANGE Changed BusinessSavedData ascension behaviour to delete keys instead of resetting to default values.
- CHANGE Added next level GetPayout and GetSpeed functionality to Economy.
- CHANGE Added functionality to Business State classes to react to upgrading the business.
Version 0.5.6, 2018-04-11
- CHANGE Removed dependency to "EastSideGames.Core".
Version 0.5.5, 2018-04-11
- CHANGE Removed dependency to "EastSideGames.Services.Time".
- FIX Renamed incorrect Create Asset menu entry for CurrencyReward.
Version 0.5.4, 2018-04-10
- CHANGE Added GetModifiersAffectingModifiable and other getters to Economy.
Version 0.5.3, 2018-04-10
- CHANGE Updated all IKeyValueGameSave objects to include a GetIterator and GetSortedIterator for key/value save pairs.
Version 0.5.2, 2018-03-29
- CHANGE Removing actions/static data that require backend. Added Gacha.
Version 0.5.1, 2018-03-27
- CHANGE Removed dependency to "EastSideGames.Services.GameSave".
Version 0.5.0, 2018-03-23
- Initial version.