# IdleKit Core Change Logs

## Version 2.x 2022-xx-xx
* *FEATURE* Added `ProgressDescription` to the `IProgressable` interface to put a user facing message about the current operation

## Version L.3.0 2021-07-26
*FEATURE* Add extension methods for C# Tasks which can be used for awaiting a `Task` with a timeout value.

## Version L.2.1, 2021-04-29
*FEATURE* Update Beamable to 0.9

## Version L.2.0, 2021-04-07

### General
* *CHANGE* Threading completely removed from the project.
* *FIX* Fixed addressables initialization process, which caused addressables playmode unit tests to fail.

### Jenkins
* *CHANGE* Added test failure logging to the Jenkins pipeline.


## Version L.1.0, 2021-02-10

### Async
* *CHANGE* `IAsyncService` and `CoroutineService` have been downgraded from an `IService` and combined into `AsyncHelper`. All implementations using `IAsyncService` have been updated accordingly. See `UPGRADENOTES.md` for details.

### AssemblyUtil
* *CHANGE* Added assemblies which came in with Beamable integration into the standard filter.

### Sequences
* *CHANGE* The previous `ISequencer.Cleanup` has been renamed to `ISequencer.Reset`. All implementations using `ISequencer.Cleanup` have been updated accordingly. See `UPGRADENOTES.md` for details.
* *FEATURE* Added new `ISequencer.Cleanup` that is used to clean up all the dependencies of the `ISequencer`. 

## Version L.0.0, 2020-11-18

### General
* *CHANGE* Formatting cleaned up to follow the IdleKit coding standard: Public properties renamed using upper camel case. Property and methods access levels downgraded to `protected virtual` where possible.
* *FEATURE* Added `IAppInformation` and default implementation `AppInformation` to encapsulate some commonly needed application data.
  
### Actions
* *CHANGE* Moved `IAction`, `IStateAction` and `IActionService` here from `idlekit-gameplay`.
* *CHANGE* Moved `Action`, `StaticDataAction` and `ActionService` here from `idlekit-gameplay`.

### Assets
* *FEATURE* Added `IAssetReference` and `IAssetService` interfaces to help manage assets within IdleKit games.
* *FEATURE* Added `AddressableAssetReference`, `ComponentAssetReference`, `PrefabAssetReference` and `ScriptableObjectAssetReference` as a set of base classes to use to manage various references between data and assets.
* *FEATURE* Added `AddressableAssetService`, `AddressableAssetCache` and `AssetReferences` to integrate assets with Unity's Addressables system.

### Async
* *FEATURE* Added `IAsyncService` to allow for easy running of asynchronous code.
* *FEATURE* Added `CoroutineService` as the default implementation for `IAsyncService`.

### Auth
* *FEATURE* Added `IAuthenticator` interface. This is meant to be used to sign data before transmitting it for security measure.

### Data
* *CHANGE* Consolidated `IStaticData` into `IData` so it could work with the features outlined below.
* *FEATURE* Added `IDataService`, `IDataProvider`, `ISingledataProvider` and `IMultipleDataProvider` interfaces to have a robust data management system within IdleKit.
* *FEATURE* Added `DataService`, `ScriptableObjectBaseDataCollection` and `ScriptableObjectBaseData` as default implementations.

### DataStore
* *FEATURE* Added `IDataStoreService` to provide simple key/value storage.
* *FEATURE* Added `PlayerPrefsDataStoreService` as a default implementation.

### Environment
* *FEATURE* Added `IEnvironmentConfig` to help handle the various environments a game can be run in.
* *FEATURE* Added `EnvironmentConfig` and `EnvironmentConfigAsset` as default implementations.

### Inspector
* *FEATURE* Added some attributes and classes to help with creating more flexible data.
* *FEATURE* Added `ReadOnlyAttribute` to allow fields to be marked as read only in the Unity Inspector.
* *FEATURE* Added `ToggleableSetting` and `ToggleableTransformSetting` to provide more flexible value and Vector types. 
* *FEATURE* Added `TypeConstraintAttribute` to allow a field to be constrained to a specific list of Types.

### IoC
* *CHANGE* Moved entire IoC codebase from `idlekit-framework` and `idlekit-implementation` to `idlekit-core`.

### Logging
* *CHANGE* Moved logging codebase from `idlekit-logging` to `idlekit-core`.
* *CHANGE* Made some major changes to the logging code as we consolidated it with a separate system.
* *CHANGE* `Logs` is the main point of entry for all logging now.
* *FEATURE* Added `ILogCategory`, `LogSeverity` and `StripFromStackTraceAttribute` to help organize and make logs more readable.
* *FEATURE* Added `ILoggingConfig` and `ILoggingEnvironmentConfig` to integrate logging into IdleKit's data pipeline.
* *FEATURE* Added default implementations of the above interfaces as well as integrated logging across the entire IdleKit codebase.

### Sequences
* *FEATURE* Added a collection of code that allows for easy sequencing of events, loading, or other things.
* *FEATURE* Added `ISequencer`, `ISequencable`, `IProgressable` and `IParallelSequenceCollection` interfaces.
* *FEATURE* Added default implementations as base classes for more specific sequencing. These are: `SequencerBase`, `SequencableBase` and `ParallelSequencableCollectionBase`.
* *FEATURE* Added `ILoader` and `ILoadPhase` interfaces to provide loading specific functionality.
* *CHANGE* Consolidated `AsyncLoader` and `AsyncLoadable` into the new format as `Loader`, `LoadPhaseBase` and `ParallelLoadPhaseCollection`.

### Serializable
* *FEATURE* Added `SerializableDateTime`, `SerializableDictionary` and `SerializedType` to serialize the `DateTime`, `Dictionary`, and `Type` objects.

### Threading
* *FEATURE* Added `IMainThreadQueue` and `IMainThreadCommand` to help threaded code communicate with the main thread. This is a common need when using Unity and threads.
* *FEATURE* Added default implementations `MainThreadQueue` and `MainThreadResult` along with the `HandleExceptionCommand` and `LogMessageCommand` to enable logging from threads.

### Unity Events
* *CHANGE* Moved `IUnityEventListener` from `idlekit-framework` into `idlekit-core`.
* *CHANGE* Moved `UnityEventListener` from `idlekit-implementation` into `idlekit-core`.

### Utilities
* *FEATURE* Added `AssemblyUtility`, `NumberUtility`, `ReflectionUtility`, `ServiceUtility`, `TimeUtility` and `VectorUtility` with some helpful methods.
