- Added
DestroyandDisposecontext menu options forActor. - Added documentation for
ScriptableSettingsEditor. - Added search option for
ScriptableSettingswindow. - Changed documentation to better group some key elements of the framework and make it easier to read.
- Changed
ScriptableSettingsAPIs to always return a valid instance. - Changed everything from
ScriptableSettingsUtilityto be insideScriptableSettingsdirectly. - Changed Unity callbacks on
ScriptableSettingsto be non-virtual, with alternatives to use for each one. - Changed
ObjectUtility.Disposeto callIDisposable.Disposemethod beforeObject.Destroyto allow cleanup of components that never got awaken. - Changed
GameObjectIDto require aGameObjectin the constructor. - Changed
ScriptablteSettings.IsQuittingtoApplicationUtility.IsQuittingfor more consistency. - Changed
GameObjectUtility.IsActorto accept interfaces and to not initialize a newActorinstance if was about to fail. - Removed
GameObjectUtility.AsActorandGameObjectUtility.GetActorin favor of newGameObjectUtility.GetOrInitializeActorAPI that is more explicit about its behaviour.
- Fixed non-awaken
Actornot having itsOnDestroyedcalled when switching scenes.
- Fixed disabled
Actorin scene not being initialized with enter play mode options enabled.
- Fixed
TypeDropdownnever showing the base type as options, even if compatible.
- Added documentation for
ActorSceneManagerAPIinActordocumentation. - Fixed usage of
UnityEditorAPIs inActorSceneManagerAPI. - Fixed incompatibilities with
EnterPlayModeOptionswithActorandScripttableSettings.
- Added
ApplicationUtility.GetDisplayName(string)as runtime version forEngineUtility.GetDisplayName(string). - Changed
Linting Settingsto come with the default rules set. - Fixed some documentation typos and missing links.
- Fixed edge case on
PlayerLoopSystemthat caused already relevant events to not be registered correctly. - Fixed
SceneSelectorWindowopening scenes with the wrong API.
- Added
Scene Selectorwindow. - Added
EventSettingsin theProject Settingswindow. - Added
Actor.OnStartingto make API more consistent. - Added asserting to
Actor.OnDestroyingto avoid unexpected errors. - Added
IServiceFactory.ShouldSetServiceproperty that defaults to true to keep previous behaviour. - Added more in-depth information for many existing APIs to make their usage clearer.
- Added
Difficulty Settingssample. - Added
ApplicationUtilitywith things previously inCoimbraUtilitybut were actually useful outside the framework scope. - Changed
CoimbraGUIUtilitytoEngineUtilityto not cause confusion with internal framework classes. - Changed
PlayerLoopTimingEventstoPlayerLoopInjectedTimings. - Changed documentation structure to improve its readability.
- Changed
DebugOnlytoDebugOnlyComponentas it is anActorComponentto make API more consistent. - Changed
StartupSceneManagertoEditorStartupSceneSettingsto make API more consistent. - Deprecated
StartListenerin favor of newActor.OnStartingevent. - Fixed runtime issues with
ITimerService. - Fixed static
Actordata not being reset on play mode state changed. - Removed
GameObjectPool.State.Loadingin favor of two new states and a newGameObjectPool.WaitPrefabOnSpawnoption. - Removed
COIMBRA_EVENTS_DISABLE_SAFETY_CHECKSscripting define symbol in favor of newEventSettingsoptions. - Removed
UPMAuthenticatoras it never really worked as it was expected. - Removed
ServiceLocator.GetFactoryoverloads as it shouldn't be possible to retrieve the factories after set. - Removed
IntStringclass asint.ToString()is already optimized. - Removed
TypeStringclass, moving its only method toTypeUtility.GetDisplayString. - Removed
Actor.OnInitializePrefabAPI as it wasn't editor-safe, making it way to hard to use correctly without breaking your prefabs. - Removed
Actor.DestroyandActor.Despawnin favor of newActor.Dispose(bool)API.ObjectUtilityandGameObjectUtilityalso got affected.
- Changed
UPMAuthenticator,LintingSettingsandSceneProcessingSettingsto live withinProjectSettingsfolder. - Fixed
ScriptableSettingsin packages not being loaded properly. - Fixed issue with default generated service factories not having fully qualified name.
- Added
COIMBRA_EVENTS_DISABLE_SAFETY_CHECKSoptional scripting define symbol that stop event invocations from handling exceptions to improve their performance. - Added description for each optional scripting define symbol available for the package.
- Changed
EventSystemto be more safe by default by changing it to check if the listener is not null before attempting to invoke it.
- Added
SerializableTypeDictionary. - Added
FilterTypesByMethodAttribute. - Changed
SerializableTypeto implementIEquatableandGetHashCode. - Changed
AnimatorParameterto support empty input. - Fixed serialization issue between
SerializableDictionaryandManagedField. - Fixed
PropertyPathInfonot being compatible with some types that implementsISerializationCallbackReceiver. - Fixed
ValidateAttributenot working with lists and arrays.
- Added
FilterTypesByAccessibilityAttribute. - Added
FilterTypesBySpecificTypeAttribute. - Added
EventHandleTrackerComponent. - Changed
TypeDropdowndefault value display text to make it clear which is the default value. - Fixed
ScriptableSettingswith preload set to true sometimes not being included in preloaded assets when building. - Fixed
EventSystennot drawing its events properly in some cases. - Fixed unnecessary post-processing of all assets when there is any
AssemblyDefinitionRuleset. - Fixed error caused by
LayerMask.NameToLayerbeing used outside main thread atLayerSelectorDrawer. - Fixed
NullReferenceExceptionwhen unloading additives scenes with non-pooledActor. - Fixed
OnValidadewarning when usingObject.InstantiateinsideActor.OnInitialize. - Fixed not being able to use source generators with types without namespace.
- Fixed source generators not using qualified names for types, which could cause conflict with existing project types.
- Fixed default assembly definition rule assets causing unnecessary warning.
- Fixed default assembly definition rule assets causing unnecessary warning.
- Added analyzer
COIMBRA0108. - Added analyzer
COIMBRA0109. - Added analyzer
COIMBRA0110. - Added
FixDuplicateReferencesAssemblyDefinitionRule.
- Added analyzer
COIMBRA0108. - Added analyzer
COIMBRA0109. - Added analyzer
COIMBRA0110. - Added
FixDuplicateReferencesAssemblyDefinitionRule.
- Added
NotNullWhenon someServiceLocator,ScriptableSettingsandObjectUtilityAPIs.
- Added
ForceRootNamespaceMatchNameAssemblyDefinitionRule. - Added missing info in Index for
RequiredServiceAttribute. - Fixed
ServiceLocator.GetCheckedfailing for destroyed actors instead of falling back to the factory. - Removed dependency on
com.unity.ide.vscodeas it is now officially unsupported.
- Added
ForceRootNamespaceMatchNameAssemblyDefinitionRule. - Added missing info in Index for
RequiredServiceAttribute. - Fixed
ServiceLocator.GetCheckedfailing for destroyed actors instead of falling back to the factory. - Removed dependency on
com.unity.ide.vscodeas it is now officially unsupported.
- Added missing info in Index for
Assembly Definition Rulesadded in the last version. - Added
RequiredServiceAttributeto enable code to assume tha that a service is never null without requiring to be dynamic. - Added assertion for required services inside ServiceLocator.GetChecked.
- Added
[RequiredService]for all default services. - Added
EventHandleListUtility.RemoveListenersAndClearto make easier to clear a list ofEventHandle. - Changed
IServiceFactory.CreatetoIServiceFactory.GetServiceas not always it will be actually creating a new service. - Changed
DefaultServiceActorFactoryto try to useObject.FindObjectOfTypebefore creating a new instance. - Changed RoslynAnalyzers documentation to be more readable and include planned analyzers.
- Changed diagnostics to be split into different classes to match their new ID assignment.
- Added
RequiredServiceAttributeto enable code to assume tha that a service is never null without requiring to be dynamic. - Added assertion for required services inside ServiceLocator.GetChecked.
- Added
[RequiredService]for all default services. - Added
EventHandleListUtility.RemoveListenersAndClearto make easier to clear a list ofEventHandle. - Added
FixEditorOnlyAssemblyDefinitionRule. - Added
FixTestsOnlyAssemblyDefinitionRule. - Added
ForceReferencyByNameAssemblyDefinitionRule. - Added
Delayed<T>wrapper struct. - Added
ISceneProcessorComponentandIScenePostProcessorComponentinterfaces to enable scene-level processing logic in runtime scripts. - Added
DebugOnlycomponent to allow creation of actors that should only exist in the editor or in development builds. - Added
HierarchyFolder, a special kind of actor that re-parent all its children and destroys itself at runtime. - Changed
IServiceFactory.CreatetoIServiceFactory.GetServiceas not always it will be actually creating a new service. - Changed
DefaultServiceActorFactoryto try to useObject.FindObjectOfTypebefore creating a new instance. - Changed RoslynAnalyzers documentation to be more readable and include planned analyzers.
- Changed diagnostics to be split into different classes to match their new ID assignment.
- Changed
Coimbra.Linting.EditortoCoimbra.Editor.Lintingas it is an editor-only feature. - Changed
BannedReferencesAssemblyDefinitionRuleto use paths instead of names. - Changed
LintingSettingsandUPMAuthenticatorto use theAssetsinstead. - Changed
Actor.Initializeto cancel initialization as soon that itsDestroymethod is called (i.e. insideActorComponent.PreInitializeorActorComponent.PostInitialize). - Fixed
RequiredReferencesAssemblyDefinitionRulenot checking the assembly name. - Fixed
SortReferencesByNameAssemblyDefinitionrulenot sorting correctly when not using GUIDs. - Removed
Actor.DeactivateOnInitializePrefabas there was no support for undoing that operation when exiting play mode.
- Added
FixEditorOnlyAssemblyDefinitionRule. - Added
FixTestsOnlyAssemblyDefinitionRule. - Added missing info in Index for
Assembly Definition Rules.
- Added
ForceReferencyByNameAssemblyDefinitionRule. - Changed
Coimbra.Linting.EditortoCoimbra.Editor.Lintingas it is an editor-only feature. - Fixed
RequiredReferencesAssemblyDefinitionRulenot checking the assembly name. - Fixed
SortReferencesByNameAssemblyDefinitionrulenot sorting correctly when not using GUIDs.
- Fixed analyzers running on unwanted assemblies.
- Added missing info in Index for
HierarchyFolderandDebugOnly. - Changed
BannedReferencesAssemblyDefinitionRuleto use paths instead of names.
- Added
Delayed<T>wrapper struct. - Added
ISceneProcessorComponentandIScenePostProcessorComponentinterfaces to enable scene-level processing logic in runtime scripts. - Added
DebugOnlycomponent to allow creation of actors that should only exist in the editor or in development builds. - Added
HierarchyFolder, a special kind of actor that re-parent all its children and destroys itself at runtime. - Changed
COIMBRA0011to be an error. - Changed
COIMBRA0019to be an error. - Changed minimum Unity version to 2021.3.5f1.
- Changed scripts to use the new C# language features.
- Changed Roslyn DLLs version to
3.9.0to match Unity upgrade. - Changed
LintingSettingsandUPMAuthenticatorto use theAssetsinstead. - Changed
Actor.Initializeto cancel initialization as soon that itsDestroymethod is called (i.e. insideActorComponent.PreInitializeorActorComponent.PostInitialize). - Removed dependency on
com.unity.roslyn. - Removed
Actor.DeactivateOnInitializePrefabas there was no support for undoing that operation when exiting play mode.
- Added
HideKeyLabelAttributeandHideValueLabelAttributeto use withSerializableDictionary. - Fixed some incorrect indentation for some fields.
- Fixed nested
SerializeReferencenot working withPropertyPathInfo.
- Added context parameter to
AssemblyDefinitionRuleBase.Applyto make troubleshooting easier. - Changed LICENSE to MIT.
- Fixed some
ScriptableSettingsnot writing to disk correctly when being saved.
- Added assembly definition rules to reorder the references.
- Fixed
AssemblyDefinitionserialization.
- Added
Coimbra.LintingandCoimbra.Linting.Editorto prepare forStyleCop.Analyzerssupport. - Added basic linting support for assembly definition files.
- Changed
AssemblyDefinitionandAssemblyDefinitinoReferencetypes to be public. - Changed listener classes to a new assembly
Coimbra.Listeners. - Changed ui classes to new assembly
Coimbra.UI.
- Fixed events outside the
Coimbranamespace being generated with errors.
- Added online documentation link.
- Added online license link.
- Added online changelog link.
- Added support for dynamic
PropertyPathInfo. Those aren't cached but fully supports inheritance trees. - Added debug information for
EventSystem. - Added debug information for
PoolSystem. - Added Managed Jobs APIs.
- Changed README to only contains some basic information, details were moved to the new documentation.
- Removed support for int fields for
AnimatorParameterAttribute.
- Added missing LICENSE.
- Fixed missing
Systemdirective atCoimbraEditorUserSettingsin Unity 2021.
- Added
SelectableLabelAttributeand its drawer. - Added information about the listeners at the
EventHandleandEventSystemDrawer. - Added information about the callback listeners at the
TimerHandleDrawerandTimerComponentEditor. - Added
IEventServiceAPIs to the listener list for any given event orEventHandle. - Changed new
IsTimerActiveoverload toGetTimerDatato make its behaviour more obvious. - Fixed assembly creator not making the generated editor assembly reference the generated runtime assembly.
- Fixed
SerializableDictionarynot working properly when used as an array or list.
- Added
Active Timersprofiler counter. - Added some debug information to
TimerComponentinspector. - Added drawer for
TimerHandle. - Added
ITimerService.IsTimerActiveoverload that also returns the timer data.
- Added limitations description to
TypeDropdownAttributeandManagedFieldsummaries. - Added
Window/Coimbra Framework/Shared Managed Pools. - Added
ManagedPool<T>.AvailableCountAPI. - Added
COIMBRA0017. - Added
COIMBRA0018. - Changed
ISharedManagedPoolHandlertoIManagedPoolHandler. - Changed
TypeFilterAttributeBasetoFilterTypeAttributeBaseand added support for multiple attributes in the same field. - Changed
TypeFilterAttributetoFilterTypeAByAssignableFromttributeand made it sealed.
- Fixed warning due unnecessary reference to
Unity.Settings.Editor.
- Added helper methods at
ScriptableSettingsEditor.
- Added basic search support for
ScriptableSettings.
- Added
Project Settings/Coimbra Framework/Editorwith option to disable local analyzers.
- Added overlap 2D listeners.
- Changed
FixedUpdateListenerimplementation to internal. - Changed
LateUpdateListenerimplementation to internal. - Changed
UpdateListenerimplementation to internal.
- Added
ActorComponentBaseto easily add initialization logic on components that depends onActor.
- Added listener components for all remaining callbacks.
- Added
HideInServiceLocatorWindowAttributedue test services appearing in the window. - Added
PropertyTypetoPropertyPathInfoand better document what exactlyFieldInforefers to. - Added
SerializableTypewhich is just a serialization wrapper forSystem.Type. - Added
CoimbraEditorGUIUtility.DrawPropertFieldandCoimbraEditorGUIUtility.GetPropertyHeightAPIs that always use the field's type drawer. - Added
EventContextandEventContextHandlertypes, they replace the oldEvent<T>andEvent<T>.Handler. - Added extra debug information for when an exception is thrown when invoking an event.
- Added
IPlayerLoopService.AddListenerto allow registering to anyIPlayerLoopEventby its type. - Added
IDisposableinterface toActorand makeDisposecallDestroy. - Added
ServiceLocator.GetChecked<T>()that both gets and asserts that the value is valid. - Changed
ServiceLocatorto not allow overriding a service value once set. This can be disabled per-service with the newDynamicServiceAttribute. - Changed
COIMBRA0011to refer toActorinstead of the now removedServiceActorBase. - Changed
EventRelevancyChangedHandleto not be a nested type ofIEventService. - Fixed
ValidateDrawernot working with types that had a customPropertyDrawer. - Removed
ServiceActorBaseasActoralready implementsIDisposableproperly now. - Removed
Event<T>type as it got replaced by new APIs.
- Added
AssetReferenceScenefor referencingSceneAssetin runtime code. - Added
AnimatorIKListenerandAnimatorMoveListener. - Added
BecameVisibleListenerandBecameInvisibleListener. - Added Collision/Trigger Enter/Exit/Stay Listeners for 2D and 3D colliders.
- Added
ControllerColliderHitListener. - Added
JointBreakListenerandJointBreak2DListener. - Added
WillRenderObjectListener. - Added
TransformChangedListener. - Changed
ServiceLocatorto be a static class. - Changed codegen for
IEventto match the newServiceLocatorimplementation. - Removed support for multiple
ServiceLocatorinstances.
- Added
Window/Coimbra Framework/Scriptable Settingsto easily view all loadedScriptableSettings. - Added
Window/Coimbra Framework/Service Locatorsto easily view all createdServiceLocator. - Added support for
PreferencesAttributewith anullwindow path. This will make theScriptableSettingshidden in the editor (useful for temporary or internal configurations). - Added components to be used to listen for
MonoBehaviourcallbacks:StartListener,FixedUpdateListener,LateUpdateListener,UpdateListener. - Added
Add/RemoveSetListenerAPIs toServiceLocator. - Added
PlayerLoopSettingsto allow some project-specific optimizations for thePlayerLoopSystem. - Changed COIMBRA0019 to be a warning and improve its analysis to only report if the type is
GameObject, anyActor, or specificallyUnityEngine.Object. - Changed internal implementation of
Clear Console On ReloadandStartup Scene Managerto use theScriptableSettingsAPI to make the code more maintainable. - Changed
ManagedFieldDrawerto hide theClearbutton when being draw inside a disabled scope. - Changed
ServiceActorBaseto not be re-usable across differentServiceLocator. - Changed
ServiceLocator.SetAPI to not allow overriding an existing value with another value (can only set tonullis any other value is set). - Fixed bug with some
ScriptableSettingsnot rendering properly after entering or existing play mode. - Removed
Add/RemoveValueChangedListenerAPIs fromServiceLocator. Those got replaced be the newAdd/RemoveSetListener.
- Changed documentation for
ServieActorBase.OnOwningLocatorChangedto include when it is called and how should be used. - Changed
ServieActorBase.OnDestroyedto be sealed, a new virtualOnDisposemethod was included and should be used instead.
- Added dependency on
com.unity.profiling.core. - Added profile counters for
Actorusage. - Changed generated static
Invokemethod toInvokeDefaultto make its usage more clear.
- Changed
COIMBRA0003to be error instead of warning. - Changed event methods generation to be more intuitive to use. It is a breaking change and requires modifying any code using the previous code generation. I shouldn't touch that logic anymore as this is becoming a never ending stuff.
- Added
AnimatorParameterAttribute. - Added
AssetsOnlyAttribute. - Added
EnumFlagsAttribute. - Added
LayerSelectorAttribute. - Added
NotGreaterThanAttribute. - Added
NotLessThanAttribute. - Added
SortingLayerIDAttribute. - Added
TagSelectorAttribute. - Added
ValidateAttribute.
- Added
AssertAwakeandIsAwakenproperties toActor. - Added analyzer
COIMBRA0008. - Added analyzer
COIMBRA0020and code fix. - Added analyzer
COIMBRA0021and code fix. - Added analyzer
COIMBRA0022and code fix. - Added analyzer
COIMBRA0023and code fix. - Changed
LockDictionarySizeAttributetoDisableResizeAttribute. - Changed
SerializableDictionaryDrawerimplementation to improve its usability and readability. - Fixed assembly creator causing compiler errors when re-opening the project.
- Added
Create Assets Assemblymenu item to generate assemblies for all scripts in theAssetsfolder.
- Added
CopyBaseConstructorsAttributeto allow easy copying of parent constructors into child class.
- Added
AllowEventServiceUsageForAttributeto allow usingIEventServicemethods directly when inside specific types. - Removed analyzer
COIMBRA0008due it being redundant. UsingBaseTypeRequiredAttributeinstead.
- Added
LockDictionarySizeAttributeto be used withSerializableDictionary. - Added analyzer
COIMBRA0010. - Added analyzer
COIMBRA0011. - Added analyzer
COIMBRA0012. - Added analyzer
COIMBRA0013. - Added analyzer
COIMBRA0014. - Added analyzer
COIMBRA0015. - Added analyzer
COIMBRA0016. - Added analyzer
COIMBRA0017. - Added analyzer
COIMBRA0018. - Added analyzer
COIMBRA0019.
- Added
Force Reserialize Assetsmenu item. - Changed
CachedGameObjectto justGameObjectand executes additional logic inside to return the correct value according to the context. - Changed
CachedTransformto justTransformand executes additional logic inside to return the correct value according to the context. - Fixed missing
Initializecall onGameObjectPool.LoadAsync. - Fixed missing dependency on newer IDE packages.
- Added
FormerlySerializedAsBackingFieldOfAttributethat correctly formats the name to match the format<{propertyName}>k__BackingField. - Added
DebuggerStepThroughAttributewhere applicable. - Added
EditorBrowsableAttribute(EditorBrowsableState.Never)where applicable. - Added
DisableDefaultFactoryAttributeto be used withIServiceimplementations. - Added
PreloadServiceAttributeto be used withIServiceimplementations. - Changed
CreateCallbackAPIs to aFactorypattern onServiceLocator. - Changed static
ManagedPoolto require theIDisposableinterface indirectly through theISharedManagedPoolHandlerinterface. - Fixed
Disposable<T>allowing multipleDisposecalls.
- Added
ReferenceDrawerto correctly expose aReference<T>in the inspector. - Added
TypeDropdownAttributeto be used withSerializeReferencefields. - Added
TypeFilterAttributeto filter available types forManagedField<T>dropdown. - Added check for editor-only
ScriptableSettingsin theAssetsfolder. - Added many test cases for
PropertyPathInfoto ensure its stability. - Changed
PropertyPathInfointernal implementation, improving its performance, memory usage, and exposing some new APIs. - Changed
ManagedFieldDrawerimplementation to use a better dropdown menu that supports searching.
- Changed
Startup Scene IndextoStartup Sceneinstead, becoming a hard-reference and allowing disabled scenes too. - Fixed unnecessary warnings on
UPMAuthenticator. - Removed generated
static Invokeoverloads that took the data by ref as all use cases could use the instance methods instead.
- Added
ISharedManagedPoolHandlerand make it required for the default sharedManagedPoolimplementation. - Changed
try/catchblock onEventSystemto first log the the event type that emitted the error then the exception itself. - Fixed
Startup Scene Indexpicking disabled scenes.
- Fixed missing dependency on
com.unity.uguipackage.
- Fixed missing reference to
UnityEngine.UIinCoimbraassembly.
- Added
UPMAuthenticatorto automatically update the.upmconfig.tomlfor all users of a team. - Fixed one of the
ProjectSettingsAttributeandPreferencesAttributeconstructors overload not working as expected.
- Added
PreferencesAttributethat can be applied to anyScriptableSettingsto make it editor-only and show up in thePreferenceswindow. - Fixed
SerializableDictionarynot showing custom structs without aCustomPropertyDrawercorrectly.
- Added option to make a
ScriptableSettingseditor-only through theProjecSettingsAttribute.
- Added back the menu item
Tools/Coimbra Framework/Preferences/Clear Console On Reloadfor Unity 2020.3. - Added
SerializableDictionaryto allow viewing and modifying dictionaries in the inspector (with nesting support). - Added
GeneratedExtensionsclass withInvokeAt,TryInvokeAt, andTryInvokeSharedmethods. - Added
Tryprefix for allSharedmethod versions to better indicate the implicit null-check. - Added
Tryvariant for allAtmethod versions to better indicate the implicit null-check. - Removed
TryInvokeAtandTryInvokeSharedinstance methods asGeneratedExtensionsmade those obsolete.
- Fixed compatibility with 2020.3 by removing duplicated Roslyn assemblies.
- Added easy way to add new shared
ManagedPoolinstances throughSharedManagedPoolAttribute. - Added some specific pool collections:
DictionaryPool,HashSetPool,ListPool,QueuePool,StackPool,StringBuilderPool. - Removed support for
IListandIDictionaryinManagedPoolclass, use the respective specific pool instead (seeCOIMBRA0010).
- Added
Object.Destroyextension method for safely destroy object that could be aGameObjector anActor.
- Added
GameObject.Destroyextension method for safely destroy objects that can be either already destroyed, already an actor or outside play mode. - Added null check inside
IEventgeneratedSharedmethods. - Fixed
IEventgeneratedAtmethods not requiring non-null service. - Fixed
PropertyPathInfocache not being shared between different instances of same type. - Fixed conditional expressions being ignored in the
IEventServiceusage analyzer.
- Added
IApplicationStateService.RemoveAllListenersmethod. - Added
IPlayerLoopService.RemoveAllListenersmethod. - Added
IEventService.AddRelevancyListenerandIEventService.RemoveRelevancyListenermethods. - Changed to not remove all listeners by default during
ApplicationStateSystem.OnDestroyed. - Changed to not remove all listeners by default during
PlayerLoopSystem.OnDestroyed. - Fixed generic events not being correctly generated.
- Removed
IEventService.OnFirstListenerAddedandIEventService.OnLastListenerRemoved.
- Added new diagnostics to identify wrong usage of
IEventService. - Added missing documentation for
AbstractServiceAttribute. - Added
DespawnCancellationTokenandDestroyCancellationTokenproperties toActor. - Added
GetListenerCountto event-related APIs. - Changed back the minimum Unity version to 2020.3.
- Changed for each system to be in its own assembly.
- Removed
HasAnyListenersfrom event-related APIs.
- Added source generator and roslyn analyzers for
IEventto improve API usage and debugging experience. - Added roslyn analyzers for
IServicerelated APIs. - Added
IEventService.IsInvokingAPI to check if an event is currently invoking. - Added throw/catch during
EventSystem.Invoketo make easier to debug issues during invocation. - Added
ServiceLocator.IsCreatedoverloads withoutparameters to receive the service value. - Added globals
Actor.OnSceneInitializedandActor.OnSceneInitializedOnceevent to use for new loaded scenes instead of Start. - Added
IsFocusedandIsPausedproperties inIApplicationService. - Added
IEventService.OnFirstListenerAddedandIEventService.OnLastListenerRemovedevents. - Added
IPlayerLoopServiceto reduce the responsibilities fromIApplicationService. - Added
EventServiceActorBaseclass. - Changed minimum Unity version to 2021.3.
- Changed
EventDatatoEventand added aServicefield on it. - Changed
Actordestruction event to happen before virtual method call, switching their names to match the new behaviour. - Changed
IApplicationServicetoIApplicationStateServiceand reduced its responsibilities. - Changed
ServiceLocator.Getto not set the service value when using the fallback option as it was misleading. - Changed
ServiceLocator.Setto early-out on same service value and to use the fallback option for the value changed event. - Changed
OnDespawnandOnSpawnto callSetActiveby default. - Changed
AsandIsGameObject extensions toAsActorandIsActor. - Changed
ServiceLocator.Disposeto be called in builds too inside during Application.quitting. - Changed all service-related stuff to a new assemblies and namespaces under
Coimbra.Services. - Changed
EventSystem.Invoketo early out if there is no listeners. - Changed
RemoveAllListenersWithoutRestrictiontoRemoveAllListenersAllowed. - Changed
SharedManagedPooltoSharedManagedPoolsto make the name more explicit. - Fixed
ProjectSettingsgenerated windows not updating correctly right after creating or destroying the target instance. - Fixed destroyed actors due scene unload being flagged as explicit call.
- Removed
Actor.InitializeAllActors, now it gets called before the newly added events. - Removed
SceneLoadedEvent, use the newly added globalActorevents instead.
- Added
IPoolingService.LoadingPoolCountproperty to efficiently check the amount of pool currently in theLoadingstate. - Added
IPoolingService.ContainsPool(AssetReferenceT<GameObject>)to efficiently check if any currently added pool is referencing the specified prefab. - Added
Actor.IsPrefabproperty that is initialized property duringActor.Initialize(). - Added automatic resizing options for
GameObjectPoolthrough the newGameObjectPool.ExpandStepandGameObjectPool.ShrinkStepproperties. - Added
AssetReferenceComponentRestrictionattribute to filter any AssetReferenceT by its components. - Added many new methods in
ListUtility. - Added
GameObjectPoolSceneManagerAPIto leverage theGameObjectPoolfunctionalities. - Added
disposeCallbackparameter onManagedPoolto add logic afterOnDeleteis fired (i.e. native object disposing). - Added proper support for IDisposable and UnityEngine.Object (i.e. ScriptableObject) in
SharedManagedPool. - Added option to modify the find behaviour of
ScriptableSettingsinGetOrFindandTryGetOrFind, but preserving the old behaviour if none is specified. - Added
ProjectSettingsAttributeandScriptableSettingsProviderfor easily displaying anyScriptableSettingsin the project settings. - Changed name of
FrameworkXXXclasses toCoimbraXXX. - Changed
DestroyReasonto be a nested enum ofActor. - Changed
GameObjectPoolandActorimplementation quite a bit:- Added public
Actor.Despawn()to be used instead ofGameObjectPool.Despawn(Actor). - Added new
GameObjectPool.DesiredAvailableInstancesRangeproperty. - Changed
GameObjectPool.AutoLoadproperty toGameObjectPool.LoadOnInitializeto make its behaviour more explicit. - Changed
Actor.OnObjectDespawn()toActor.OnDespawn(). - Changed
Actor.OnObjectDestroy()toActor.OnDestroying(). - Changed
Actor.OnObjectInitialize()toActor.OnInitialize(). - Changed
Actor.OnObjectSpawn()toActor.OnSpawn(). - Changed
Actor.OnPrefabInitialize()toActor.OnInitializePrefab(). - Changed
GameObjectPool.OnObjectInstantiatedevent toGameObjectPool.OnInstanceCreated, renaming also its matching delegate. - Changed
GameObjectPool.OnStateChangedevent toGameObjectPool.OnPoolStateChanged, renaming also its matching delegate. - Changed
GameObjectPool.Spawnto assume that all available instances are valid. - Removed protected
Actor.Spawn()andActor.Despawn()methods. - Removed
GameObjectPool.Despawnmethods in favor ofActor.Despawn(). - Removed
GameObjectPool.DespawnResultenum completely as now a despawn will always either return the object to its pool or destroy it. - Removed
GameObjectPool.MaxCapacityproperty in favor ofGameObjectPool.DesiredAvailableInstancesRange.Maxproperty. - Removed
GameObjectPool.PreloadCountproperty, withGameObjectPool.DesiredAvailableInstancesRange.Maxproperty being used for the same purpose now.
- Added public
- Fixed completely broken
PoolingSettings.DefaultPersistentPoolsfeature. - Removed
IPoolingService.Despawnmethods in favor of newActor.Despawn(). - Removed
IPoolingService.PoolsLoadingproperty, if this information is needed it is still possible to useIPoolingService.GetAllPoolsand iterate it to check theGameObjectPool.CurrentState.
- Added
SceneChangedEventthat is also fired byIApplicationService. - Added
IsQuittingonIApplicationService. - Added support for in-scene deactivated
Actorinitialization. - Changed
ServiceBase<>toServiceActorBase<>. - Changed
SpawnAPIs to return anActorinstead ofGameObject. - Changed
GameObjectBehaviourtoActorto make its intention more clear. - Changed
GameObjectUtilityAPIs to match the newActornaming. - Changed
EventListenerHandler<T>toEventRef<T>.Handler. - Changed
EventKeyRestrictionstoEventKey.RestrictionOptions. - Changed
Despawnbeing optional to be called duringDestroy. - Changed
Spawnto be optional to be called duringInitialize. - Changed
DespawnandSpawnto be protected and to not callSetActiveanymore. - Fixed unnecessary logging on
ScriptableSettingswhen quitting. - Removed already unused
IFixedUpdateListener,ILateUpdateListenerandIUpdateListener.
- Changed
ManagedPool<T>.Sharedto a new classSharedManagedPool. - Changed
ManagedPoolBase<T>toManagedPool<T>, alongside many API breaking changes. - Fixed unloading of pools that are not fully loaded being inefficient.
- Added documentation for public editor APIs.
- Added
Editor Startup Scenefeature through the project settings window. - Added parameter to RemovePool to ask if the pool being removed should be unloaded too.
- Added FrameworkUtility.IsReloadingScripts to allow runtime code to check for that safely.
- Added menu item
Tools/Coimbra Framework/Assert Serializable Types. - Added menu item
Tools/Coimbra Framework/Reload Scripts. - Added menu item
Tools/Coimbra Framework/Preferences/Clear Console On Reload. - Added FrameworkEditorUtility.ClearConsoleWindow API.
- Changed
Settings Managerdependency version to 2.0.1. - Changed package display name to
Coimbra Framework. - Changed AddPool to allow non-unloaded pools, loading it in the process if needed.
- Fixed spamming of warnings when reloading scripts while having ScriptableSettings in the project.
- Removed
ProjectUserSettingsRepositoryclass as it is a built-in option in newerSettings Managerpackage.
- Added EventRef and APIs on IEvenService to use it.
- Added call to Dispose inside OnDestroy in MonoBehaviourServiceBase.
- Added GameObjectBehaviour class that works similar to extending GameObject class itself.
- Added GameObjectPool and IPoolingService for pooling of GameObjects.
- Added IsPersistent API for GameObjects.
- Changed ScriptableSettings.Set to receive a bool parameter to define if an existing value can be overriden.
- Changed MonoBehaviourServiceBase to ServiceBase.
- Changed EventListenerHandler to use the new EventRef type.
- Changed GameObjectEventListenerComponent functionality to the new GameObjectBehaviour class.
- Changed back the default services implementations (Systems) to be public.
- Added overload for IEventService.AddListener that accepts a list to add the generated event handle.
- Added RequireDerived attribute to ScriptableSettings.
- Added API to get the current create callback in ServiceLocator.
- Added TryGetValid API for the object extensions.
- Added RemoveAllListenersWithKey, RemoveAllListenersWithoutRestriction and ResetAllEventKeys APIs.
- Added API to reset the key from multiple events with the same key.
- Changed how the event keys work, adding the
EventKeyandEventKeyRestrictionstypes. - Changed IEventService APIs to return a bool indicating if they actually worked.
- Changed EventRefHandler to EventListenerHandler.
- Changed overload for IEventService.Invoke that auto-creates a new instance to use generics instead of System.Type.
- Changed all methods in IEventService to require an IEvent.
- Changed GameObject DestroyEvent to Destroyed.
- Changed IEventService to no longer have a service key, removing also the only API that used it.
- Fixed typo in FirstPostLateUpdateEvent.
- Fixed id not being set when constructing a ServiceLocator.
- Fixed possible stack overflow in case of invoking an event inside its own invoke.
- Fixed indirectly disposing a Shared service when allowing fallback to Shared and calling ServiceLocator.Set.
- Fixed build errors on ScriptableSettings.
- Removed overload for IEventService.AddListener that accepts non-by-ref methods.
- Removed support for non-interface services.
- Removed SetDefaultCreateCallback API as its usage was unclear and caused confusion.
- Added option make ScriptableSettings non-preloaded.
- Fixed ScriptableSettings not working for ScriptableObjects that had their base class changed after being created.
- Fixed lack of validation for ScriptableSettings that requires preloading.
- Added a new event for each PlayerLoopTiming available.
- Added Clear overload for List that also receives a new min capacity.
- Added base IEvent interface to prepare for 2021 LTS update to use default interface methods.
- Added base IPlayerLoopEvent interface to be the base of all PlayerLoop-related events.
- Changed Disposable to be a ref struct.
- Fixed ApplicationSystem being created before BeforeSceneLoad entry point.
- Fixed major performance regression in EventSystem.
- Added optional parameter to dispose the previously set system when setting a new one.
- Fixed ServiceLocator not setting the OwningLocator properly.
- Fixed EventSystem not allowing to remove listeners during the invoke process. The remove call will not take effect for the invoke currently running.
- Changed the ScriptableSettings APIs to require ScriptableSettings objects.
- Fixed code stripping issues with the services.
- Removed obsolete APIs:
- Removed IFixedUpdateService in favor of FixedUpdateEvent.
- Removed ILateUpdateService in favor of LateUpdateEvent.
- Removed IUpdateService in favor of UpdateEvent.
- Removed Coimbra.Systems, moving all systems to Coimbra assembly as internal classes.
- Added ScriptableSettings to allow easy sharing of ScriptableObject data with non-MonoBehaviour objects.
- Added API documentation for GameObjectUtility.
- Added support for PreloadedAsset inside the editor, including cleanup of missing/null references.
- Added missing assert on non-generic APIs of ServiceLocator.
- Changed GameObjectEventListener to be internal.
- Changed GameObjects to send the GameObject instead of the GameObjectEventListener.
- Fixed IApplicationService missing RequireImplementors attribute.
- Added FixedUpdateEvent, LateUpdateEvent, and UpdateServiceEvent to listen to the respective Unity loop callback.
- Added OwningLocator field to IService locator to be able to create services composed of multiple services easily.
- Added overloads that accepts event data by reference in the IEventService to avoid large struct copies.
- Added missing readonly keyword on built-in events.
- Changed ServiceLocator to be Serializable to be able to see which ServiceLocator a MonoBehaviour system belongs to.
- Deprecated IFixedUpdateService, ILateUpdateService, and IUpdateService in favor of new built-in events.
- Added IService and enforce its usage in ServiceLocator APIs
- Added IFixedUpdateService, ILateUpdateService, and IUpdateService to register on the respective Unity loop callback.
- Added object.GetValid() and object.IsValid() APIs to make safer to work with abstractions and Unity Objects.
- Added ApplicationFocusEvent, ApplicationPauseEvent, and ApplicationQuitEvent. They are meant to be listened through the EventService.
- Added proper hide flags for all default implementations.
- Added GetValid call for ManagedField.Value and ServiceLocator.Get APIs to make those compatible with
?.operator. - Changed folder structure to group similar types together.
- Changed all services to implement the Dispose method to allow per-service cleanup.
- Fixed ServiceLocator not being compatible with Enter Play Mode Options.
- Refactored IEventService and its default implementation:
- Added HasAnyListeners and HasListener APIs.
- Added Invoke API that accepts a type and constructs a default event data to be used.
- Added option to ignore the exception when the event key doesn't match.
- Changed AddListener API to return an EventHandle.
- Changed RemoveListener to use an EventHandle, allowing to remove anonymous method too.
- Refactored ITimerService and its default implementation:
- Changed ITimerService to not have ref params to simplify its usage.
- Changed TimerHandle to use System.Guid to better ensure uniqueness and made it a readonly struct.
- Fixed TimerService not working for concurrent timers and added test cases to ensure minimum stability.
- Removed IApplicationService and its default implementation.
- Renamed all default implementations to
Systeminstead ofService. - Renamed Coimbra.Services to Coimbra.Systems.
- Added per-instance option to fallback to the ServiceLocator.Shared on non-shared instances. Enabled by default.
- Added runtime check to ensure that ServiceLocator is only used with interface types. Enabled by default, but can be disabled per-instance (except on the Shared instance).
- Initial release