All notable changes to this package will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
Changed:
- Updated dependency
com.gamelovers.dataextensionstocom.gamelovers.gamedata - Updated assembly definitions to reference
GameLovers.GameData
New:
- Added AGENTS.md document to help guide AI coding assistants to understand and work with this package library
- Added an entire test suit of unit/integration/performance/smoke tests to cover all the code for all services in this package
Changed:
- Changed VersionServices namespace from GameLovers to GameLovers.Services to maintain consistency with other services in the package.
- Made CallOnSpawned, CallOnSpawned<TData>, and CallOnDespawned methods virtual in ObjectPoolBase<T> to allow derived pool classes to customize lifecycle callback behavior.
Fixed:
- Fixed the README.md file to now follow best practices in OSS standards for Unity's package library projects
- Fixed linter warnings in VersionServices.cs (redundant field initialization, unused lambda parameter, member shadowing)
- Fixed GameObjectPool not invoking IPoolEntitySpawn.OnSpawn() and IPoolEntityDespawn.OnDespawn() on components attached to spawned GameObjects.
New:
- Added protected property for all private fields in CommandService for access to any game specific project inheritance
New:
- Added StartDelayCall method to ICoroutineService to allow deferred methods to be safely executed within the bounds of a Unity Coroutine
- Added the possibility to know the current state of an IAsyncCoroutine
- Added the access to the Sample Entity used to generete new entites within an IObjectPool and destroy it when disposing the object pool
- Added the possibility to reset an IObjectPool to a new state
Fixed:
- Fixed the RngLogic.Range(float, float, bool) method to allow having the same min and max values with maxInclusive set to true
New:
- Added PublishSafe method to IMessageBrokerService to allow publishing messages safely in chase of chain subscriptions during publishing of a message
Changed:
- Subscribe and Unsubscribe throw an InvalidOperationException when being executed during a message being published
Fixed:
- CoroutineTests issues running when building released projects
Fixed:
- Fixed the IInstaller when trying to bind multiple interfaces at the same time
Changed:
- Changed CommandService to now receive the MessageBrokerService in the command and help communication with the game architecture
Fixed:
- Fixed an inssue where IPoolEntityObject.Init() wouldn't be called when spawning entities
Fixed:
- The endless loop when calling RngService.Range()
- The endless loop GameObjectPool when spawning new entities
New:
- Added IRngData to PoolService to suppprt read only data structure and allow abtract injection of data into other objects
Changed:
- Changed RngData to a class in orther to avoid boxing/unboxing performance when injecting IRngData.
New:
- Added Spawn(T data) method to PoolService to allow spawning new objects with defined spawning data
- Added GetPool() && TryGetPool() methods to PoolService to allow requesting the pool object maintained by the pool service.
Changed:
- Removed IsSpawned() method from PoolService because is not a fundamental function and can now be accessed from the Pool requested from GetPool()
- Now Spawn(T data) also invokes OnSpawn() without data so objects that implement IPoolEntitySpawn have the entire behaviour lifecycle
New:
- Updated CommandService to allow non struct type commands to be executed for reference type commands
- Added Spawn(T data) method to pool object to allow spawning new objects with defined spawning data
New:
- Updated interfaces and classes related to data services, enhancing modularity and improving version handling.
- Added classes for Git commands, version management, and random number generation.
Changed:
- Restructured the data service interfaces, consolidating functionality into a single IDataService interface and removing unnecessary interfaces.
- Changed AddData to AddOrReplaceData in the DataService implementation.
- Removed the isLocal state from data handling.
New:
- Added GitEditorProcess class to run Git commands as processes, enabling checks for valid Git repositories, retrieving current branch names, commit hashes, and diffs from given commits.
- Introduced VersionEditorUtils class for managing application versioning. This includes setting and saving the internal version before building, loading version data from disk, and generating an internal version suffix based on Git information and build settings.
Changed:
- Enhanced IInstaller interface with new methods for binding multiple type interfaces to a single instance, improving modularity and code organization.
New:
- Introduced MainInstaller, a singleton class for managing instances in the project.
- Added RngService for generating and managing random numbers.
- Implemented VersionServices to manage application version, including asynchronous loading of version data and comparison of version strings.
Changed:
- Tests have been moved to proper folders, and the package number has been updated.
- An unused namespace import has been removed from the InstallerTest class.
Fixed:
- Compilation errors in various test files and the PoolService class have been fixed.
New:
- Introduced a code review process using GitHub Actions workflow.
- Added IInstaller interface and Installer implementation for binding and resolving instances.
- Updated namespaces, removed unused code, and modified method calls in test classes.
Changed:
- Removed dependency on *ICommandNetworkService *and SendCommand method in CommandService.
- Updated IDataService interface and DataService class to handle local and online data saving.
- Improved readability of MessageBrokerService class by using var for type inference.
- Removed unused network service related interfaces, classes, and methods.
- Modified calculation of overFlow in TickService to check for zero DeltaTime.
Changed:
- Made NetworkService abstract and removed INetworkService to make easier to work with
- Improved Readme documentation
New:
- Added connection between NetworkService & CommandService
- Added integration tests
New:
- Added NetworkService
- Improved Readme documentation
Changed:
- Renamed IDataWriter and it's FlushData methods to IDataSaver & SaveData respectively to match with it's execution logic scope
- Moved the AddData to the IDataService to allow the IDataSaver have the single responsibility of saving data into disk
New:
- Added CommandService
New:
- Added DataService
Fixed:
- Fixed object pool despawn all elements. It was not despawning all the elements
- Fixed issue preventing to stop coroutines and thrown MissingReferenceException
Changed:
- Now the MainInstaller checks the object binding relationship in compile time
- Improved the ObjectPools helper classes with a now static global instatiator for game objects.
- Now the PoolService is only a service container for objects pools and no longer creates/initializes new pools.
- Removed Pool.Clear functionality. Use DespawnAll or delete the pool instead
Fixed:
- The CoroutineService no longer fails on null coroutines
- Added new ObjectPool & GameObjectPool pools to allow to allow to use object pools independent from the PoolService. This allows to have different pools of the same type in the project in different object controllers
- Added new interface IPoolEntityClear that allows a callback method for entities when they are cleared from the pool
- Added new unit tests for the ObjectPool
Changed:
- Now the PoolService.Clear() does not take any action parameters. To have a callback when the entity is cleared, please have the entity implement the IPoolEntityClear interface
New:
- Added License
- Initial submission for package distribution