Releases: friflo/Friflo.Engine.ECS
v3.4.2
- Fixed
Relations<>indexer. E.grelations[n]returned the wrong relation in some cases.
See: Relations [index] operator sometimes returns the wrong TRelation
v3.4.1
- Added the same runtime as in 3.4.0 when deleting the source or target entity of an
ILinkRelationwithDeleteEntity().
v3.4.0
- An
InvalidOperationExceptionis now thrown when accessing outdatedRelations<>
Relations<...> outdated. Added / Removed relations after calling GetRelations<...>().
See: #70 (comment)
v3.3.0
The main focus of this release was to add support for EcGui - an In-Game GUI utilizing ImGui.NET.
The GUI is an optional extension and acts as an overlay over the Game screen.
It provides instant access to entities their components, tags and relations at runtime via Explorer and Inspector window.
Features
To enable sorting and filtering in EcGui the following features were added to the ECS.
- Support sorting an
EntityListwithSortByComponentField<,>()andSortByEntityId(). - Support to filter an
EntityListusingFilter(Func<Entity, bool> filter)with a predicate delegate.
Bugfix
- Added fix for Native AOT - System.NotSupportedException
EcGui
EcGui can be integrated in all environments that support ImGui. This means all desktop platforms: Windows, macOS & Linux.
It supports various graphics backends: Direct3D, Vulkan, Metal, OpenGL, ...
Features
- Requires only a few method calls (3 at minimum) to connect ECS store, queries and systems to EcGui.
// on startup EcGui.AddExplorerStore("Store", store); // in render loop EcGui.ExplorerWindow(); EcGui.InspectorWindow();
- Renders the Explorer & Inspector in ~0.1 - 0.5 ms per frame. Rendering is allocation free.
The time for rendering is independent from entity count. E.g. 1, 10, ..., 1.000 or 1.000.000 entities. - Explore ECS queries added to the Explorer in real time.
- Filter and sort entity components in the explorer table.
- Edit, Cut, Copy or Paste entities and components in the Explorer table.
- Export Explorer table as CSV or Markdown.
- View and edit all entity components, tags and relations in the Inspector window.
Minimal Demos showing how to integrate EcGui in MonoGame, Godot, SDL3 & Silk.NET.
All demos see: EcGui Demo List
v3.2.1
Simplified API
- Added
Entity.CopyEntity(Entity target)
Intended to backup the entities from oneEntityStoreto another.
See: Docs - Clone / Copy entity - Added
Entity.CloneEntity()
v3.2.0
- New feature: added
EntityStore.CopyEntity(Entity source, Entity target)
See v3.2.1 to use the simplified API Entity.CopyEntity(Entity target)
v3.1.0
- Introduced
StructuralChangeExceptionwhich is thrown when executing structural changes within aQuery<>()loop.
Detailed information at Query - StructuralChangeException - Component type
UniqueEntitynow implementsIIndexedComponent<string>to improve performance ofEntityStore.GetUniqueEntity(string uid).
v3.0.4
RelationsEnumerator<>.Current returns entities now by ref. This enables to modify relations in a GetRelations<>() loop.
E.g.
foreach (ref var relation in entity.GetRelations<MyRelation>()) {
relation.Value += 1;
}v3.0.2
-
Implemented
Entity.Equals(object)andEntity.GetHashCode()to enable use inDictionary<Entity,>andHashSet<Entity>.
See FitHub Issue#56 - Entity.Equals() throws "Not implemented to avoid excessive boxing." -
Fixed GitHub Issue#55 - SystemRoot.GetPerfLog() throws ArgumentOutOfRange when system names are too long..
The length of the System name column can now be customized insystem.GetPerfLog(int nameColLen).