All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Fixed
Stash.IsEmpty
never being true. - Fixed
Stash.RemoveAll
breaking the stash. - Fixed
World.Dispose
throwing on multiple calls. - Fixed
WorldBrowser
inability to update world view list by @skelitheprogrammer. - Fixed
MigrateTo
broken enumerator. - Fixed
World.CleanupUpdate
small allocation.
- Added
IBoxedAspectFactory
to allow aspects to be created via DI by @vanifatovvlad. - Added
MORPEH_DISABLE_COMPILATION_REPORT
andMORPEH_DISABLE_COMPONENT_DISPOSE
defines. - Added
Length
property toStash
. - Added
Enumerator
forStash
.
- Devirtualize stashes.
- Changed method signature for
GetValueRefByKey
inNativeIntHashMap<TNative>
, addedref
keyword to the first parameter. - Changed methods signatures for
Get
inNativeStash<TNative>
, addedref
keyword to the first parameter.
- Fix
NativeFilter
allocations. - Calling
World.InitializeDefaultWorld()
do not create new Update Loop Runner. - Avoid defines modification by @vanifatovvlad.
- Small bugfix providers, when entity was destroyed.
- Aspects API.
IAspect
,IFilterExtensions
,Filter.Extend()
. - New method for stashes
RemoveAll()
by @SH42913. - Deinitilize method for
EntityProvider
,MonoProvider
. World.JobHandle
.- Metrics for Unity Profiler.
- TriInspector Integration for replacing paid Odin Inspector.
World.IsDisposed
andWorld.IsNullOrDisposed()
MORPEH_DISABLE_SET_ICONS
define for disabling set icons in Project Window.- Safety check for
World.Commit()
inside Filter foreach loop. - New Pinned Collections.
World.DoNotDisableSystemOnException
Filter.IsNotEmpty()
- [Breaking] Filters must be initialized with
Build()
method. - Overrided Entity.ToString() will output ID by @SH42913.
- Rework types warmup for fast start of application.
- All archetypes are reworked. Performance has been significantly improved and RAM consumption has been reduced.
- All Native API changed from internal to public.
Entity
andWorld
now has partial modifier.
- Discover window.
- [Breaking] Removed
ComponentProvider
.
- RemoveEntityOnDestroy doesnt work properly.
- Disable LFS
- Stashes were cleaned incorrectly. #170
- Change visibility of
EntityProvider.map
from private to public.
- Disable warnings for Unity 2021+
- Added
ICleanupSystem
suitable for cleanup logic. Called by the most recent in LateUpdate by default. - Added to
World
methodGetReflectionStash
to get stash not via generic argument, but bySystem.Type
. - Added a
MORPEH_THREAD_SAFETY
define that forces the kernel to validate that all calls come from the same thread the world was created on. The binding to a thread can be changed using theWorld.GetThreadId(), World.SetThreadId()
methods. - Added API for plugins. To use it, you need to implement
IWorldPlugin
. - Unmanaged Collections for Jobs & Burst.
- [Breaking] Minimal Unity version up to 2020.3.*
- [Breaking] Rename namespaces
Morpeh/XCrew.Morpeh
->Scellecs.Morpeh
- [Breaking] Globals placed in a separate package via the link https://github.com/scellecs/morpeh.globals
- [Breaking] Method
World.UpdateFilters()
renamed toWorld.Commit()
. - [Breaking] Class
ComponentsCache<>
renamed toStash<>
. All stash methods lost prefixComponent
, now it'sAdd, Get, Set, Has, Remove
. - [Breaking] Filters validate that there are no duplicate types in them. For example,
Filter.With<A>().With<A>()
will throw an error. - [Breaking] Removed the
Filter
property from systems, useWorld.Filter
instead. - The mechanism for cleaning components has been redesigned. Now the component must implement
IDisposable
, and it is necessary to call theAsDisposable
method of the stash once in order for the cleanup to take place. For example, the shortest version isWorld.GetStash<T>().AsDisposable()
. - For
Installer
propertyBasePair.System
now has public setter. EntityProvider
andMonoProvider
are now optimized in methodsOnEnable(), OnDisable()
GetLengthSlow()
sometimes gave the wrong length.IconsSetter
no longer gives a warning in Unity 2021+- Cannot add validate method for menu item warning.
ComponentsCacheDisposable
doesn't work with AOT fixed by redesign.
- Fix BurstDetector. Domain reload performance has been significantly degraded prior to the patch. Now it is reworked to fastest version.
- Fix MigrateTo() method. Entity archetypes were not changed when the method was called. Fix by @vanifatovvlad.
- Add .meta file for CHANGELOG.MD
- Fix syntax errors for Unity 2019.4
- Basic Jobs/Burst support:
- Changing components data (
ref T nativeCache.GetComponent(EntityID entityId)
/ref T nativeCache.GetComponent(EntityID entityId, out bool exists)
) - Checking if components exist on an entity (
bool nativeCache.HasComponent(EntityID entityId)
)
- Changing components data (
.AsNative()
API for Jobs/Burst:Archetype
(NativeArchetype
)ComponentsCache
(NativeCache
)FastList
(NativeFastList
)IntFastList
(NativeIntFastList
)Filter
(NativeFilter
)IntHashMap
(NativeIntHashMap
)World
(NativeWorld
)
Filter.IsEmpty()
to check if filter has no entitiesIMorpehLogger
interface for custom loggers (Console.WriteLine
for non-Unity environments by default)MORPEH_PROFILING
define for automatic systems profilingWorld.TryGetEntity(EntityId entityId, out Entity entity)
- returns true and entity if it exists, false otherwiseMORPEH_NON_SERIALIZED
define to avoid serialization of Morpeh components- Displaying multiple worlds in World Browser
- Search support in World Browser
MORPEH_BURST
define to determine if Burst is enabledWorld.SetFriendlyName(string name)
/string World.GetFriendlyName()
+ integration with World BrowserEntity.MigrateTo(Entity otherEntity)
to migrate components from one entity to anotherEXTERNAL_IL2CPP_ATTRS
define support for external IL2CPP attributes
- [Breaking] Globals
NextFrame
->Publish
- [Breaking]
int Entity.ID
->EntityID Entity.ID
- [Breaking]
Filter.Length
->Filter.GetLengthSlow()
- [Breaking] Components caches now cleanup after removing components (Reading ref components data is not allowed after removing components)
- [Breaking]
Filter
iteration is not order-deterministic - [Breaking]
FastList
allows removing elements during iteration (current and next elements only) Entity.Dispose()
is now publicInstaller
can be inherited from- License ownership changed to
Oleg Morozov, Igor Boyko
- Internal optimizations and improvements
- Extra filter update #129
- Systems disposed twice #128
- Entity is detected as alive when it's not #123
- World.Default takes 0-th index with null value if initialized outside of UnityRuntimeHelper #138
- Errors in Pure C# projects
- Memory leaks in Collections
- [Breaking]
ComponentsBag
(replaced byComponentsCache
)