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.
- Use version ranges for package references in all projects
- Upgrade all NuGet packages
- Restructure project using tests folder
- Use
Version
instead ofPackageVersion
- Add GitHub actions
- Upgrade to bee 1.3.1
- Add
[ThreadStaticAtribute]
at static fields for multi-threaded game servers #919
- Revert "Remove CodeDom" to support reserved C# keywords in component names #1032
- Update jenny standalone checks to test for
Jenny.Generator.Cli
namespace
- Fix entities order in visual debugging #1027
- Create
Entitas.properties
with all required keys #1031 - Set default systemWarningThreshold if
Entitas.properties
doesn't exists #1031
- Prevent #963: Extend generator with adding debug log of exception when registering observers
- See CHANGELOG.md
- Move projects from
Addons
tosrc
folder - Remove top-level folder in projects
- Convert concatenation to interpolation
- Migrate unit tests from nspec to xunit
- Remove travis.yml
- Remove old Tests project
- Remove PerformanceTests
- Move Entitas.VisualDebugging.* to Entitas.Unity solution folder
- Add
Entitas.CodeGeneration.Program
project - Apply formatting and syntax updates to Entitas
- Update Desperate Devs packages
- Update packages
- Upgrade to bee 1.2.0
- Add
entitas::new
- Add
entitas::new_benchmark
- Add
entitas::nuget
- Add
entitas::nuget_local
- Add
entitas::publish
- Rename the repository to Entitas: https://github.com/sschmid/Entitas
- Desperate Devs 1.0 is now open-source. Please find changes and upgrade guides here: CHANGELOG.md
- Started migration to a modern SDK-style project structure using .NET project SDKs
- All projects have been updated to
.NET 6.0
and.NET Standard 2.1
. Entitas.Roslyn.CodeGeneration.Plugins
is now open-source and part of this Entitas repositorymain
is new default branch andmaster
is obsolete
- Rename
CodeGeneratorExtentions
toCodeGeneratorExtensions
- Update
Jenny.properties
and rename toEntitas.CodeGeneration.Plugins.EventListenerInterfaceGenerator
mono Jenny/Jenny.exe
is obsolete. Usedotnet Jenny/Jenny.Generator.Cli.dll
(requires dotnet)- Run
dotnet Jenny/Jenny.Generator.Cli.dll auto-import -s
and follow instructions - Consider using at least these search paths in
Jenny.properties
:
Jenny.SearchPaths = Jenny/Plugins/Entitas, \
Jenny/Plugins/Jenny, \
Assets/Entitas
- Some keys in
Jenny.properties
have changed due to renamed namespaces:
Jenny.SearchPaths
Jenny.Plugins
Jenny.PreProcessors
Jenny.DataProviders
Jenny.CodeGenerators
Jenny.PostProcessors
Jenny.Server.Port
Jenny.Client.Host
Jenny.Plugins.ProjectPath
Jenny.Plugins.TargetDirectory
- For reference, see Match-One Jenny.properties
- Generate using
dotnet Jenny/Jenny.Generator.Cli.dll gen
- Add
systems.Remove()
- Fix typo in
CodeGeneratorExtensions
- Fix typo in
EventListenerInterfaceGenerator
- Remove CodeDom
- Link chat to Entitas Discord
- Use Desperate Devs 1.0.0
- Use nuget and delete dependencies
- Remove docs
- Remove doxygen
- Remove tree
- Migrate to bee 1.1.0
- Remove generated folder from VisualDebugging project
- Update roslyn
- Update hierarchy icons
- Change Preferences minified and doubleQuoteMode api
- Fix hierarchy icon null warning
- Fix EntityLinkHierarchyIcon #843
- Fix Jenny.exe load default
Jenny.properties
when not specified
- Add Preferences require concrete properties path
- Add CodeGeneratorPreferencesWindow
- Add EntitasEntityLinkHierarchyIcon
- Move Jenny Unity Preferences to its own editor window
Tools/Jenny/Preferences...
- Remove EntitasCache
- Jenny has been decoupled from Entitas even more
- Jenny now stores its config in Jenny.properties by default
- Entitas now stores its config in Entitas.properties by default
- Please split Preferences.properties into Entitas.properties and Jenny.properties or delete them to automatically create new default files
- Add support for multiple event attributes with different event target #810
- All listener interfaces with
EventTarget.Any
need to be renamedIPositionListener
->IAnyPositionListener
OnPosition
->OnAnyPosition
- Remove IContext from EntityLink.Link() method signature
- Remove IContext from EntityLink.Link() method signature
- Hotfix for Unity Asset Store missing mono hosted msbuild
- Fix MultiReactive system retaining entities multiple times #818
- Optimize generated code #780
- This increases entity and component creation performance
- Optimize Visual Debugging performance #799
- This increases the performance especially when having thousands of entities
- Generate XML documentation #792
- This will show documentation in the IDE
- Using latest bee
- Context ctor signature changed. Generate to fix compiler errors.
If you don't use the Entitas.Roslyn plugins from the Unity Asset Store,
you have to manually fix the affected generated context classes. E.g.
Generated/Game/GameContext.cs
, add() => new GameEntity()
as a last argument
public sealed partial class GameContext : Entitas.Context<GameEntity> {
public GameContext()
: base(
GameComponentsLookup.TotalComponents,
0,
new Entitas.ContextInfo(
"Game",
GameComponentsLookup.componentNames,
GameComponentsLookup.componentTypes
),
(entity) =>
#if (ENTITAS_FAST_AND_UNSAFE)
new Entitas.UnsafeAERC(),
#else
new Entitas.SafeAERC(entity),
#endif
() => new GameEntity() // <---------- update here
) {
}
}
- Release retained entities when ReactiveSystem.Execute() has an exception #812
- This fixes spamming the Unity console with error messages
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: http://u3d.as/NuJ
⚙️ Add "@" in front of component name if it is a C# keyword #744 #756 @roygear ⚙️ Added convenience ctor to JobSystem to use all available threads on the device ⚙️ JobSystem.Execute() is now virtual
🛠 Fixed delays when running jenny server
🆕 jenny wiz
beta. Running Jenny.exe without args will automatically run jenny wiz
🆕 jenny help
aka man page
Jenny Wizard is wip. If you have feedback or feature request, please add a comment here #778
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
⚙️ Add "@" in front of component name if it is a C# keyword #744 #756 @roygear ⚙️ Added convenience ctor to JobSystem to use all available threads on the device ⚙️ JobSystem.Execute() is now virtual
🛠 Fixed delays when running jenny server
🆕 jenny wiz
beta. Running Jenny.exe without args will automatically run jenny wiz
🆕 jenny help
aka man page
Jenny Wizard is wip. If you have feedback or feature request, please add a comment here #778
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
⚙️ Enabled [Event] for non components #743
CustomComponentNameAttribute
to ComponentNameAttribute
⚙️ Added more logs to gen
command
Generating using /Users/sschmid/Dev/C#/Half-life3/Jenny.properties
Generating done (13220 files in 4 seconds)
⚙️ Added group to ICommand to support grouped usage overview
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
⚙️ StringTypeDrawer now uses EditorGUILayout.DelayedTextField
🆕 Added CleanupAttribute
UniquePrefixAttribute
to FlagPrefixAttribute
🆕 Cleanup Data Providers and Code Generators
Instead of manually writing custom systems to remove components or destroy
entities, you can now use the new [Cleanup]
attribute to automatically
generate <Context>CleanupSystems
for you.
E.g. adding the [Cleanup]
attribute to a DestroyedComponent
can replace
your custom DestroyEntitySystem
.
[Cleanup(CleanupMode.DestroyEntity)]
public sealed class DestroyedComponent : IComponent {
}
There are currently two options:
- CleanupMode.DestroyEntity
- CleanupMode.RemoveComponent
CleanupMode.DestroyEntity
will generate a system that destroys all
entities which have this component.
CleanupMode.RemoveComponent
will generate a system that will remove
this component from all entities which have this component.
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
🛠 Fixed context.Reset() which doesn't remove event handlers anymore #725 🛠 Updated EntitasStats to exclude JobSystem and Feature
🛠 Fixed Jenny dropdown UI to not show 'mixed...' anymore
⚙️ Added Jenny Server toggle to UI
⚙️ Added dry run option
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
jenny auto-import -s
or modify Preferences.properties
to update the paths to the plugins if necessary
🛠 Added support to remove event listeners within event callback #698
[Event(bool)]
#717
Use "find and replace" to update all your EventAttribute usages
[Event(true)]
is now [Event(EventTarget.Self)]
[Event(false)]
is now [Event(EventTarget.Any)]
⚙️ Added support for [DontDrawComponent]
for all components #678
💄 Updated comments for group.RemoveAllEventHandlers()
#684
🛠 Fixed check for updates
⚙️ Updated TargetFrameworkProfilePreProcessor
#721
🛠 Added str.ToUnixPath()
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
🛠 Fixed EventSystemsGenerator generated EventSystems per context but those systems contained EventSystems from all context
🛠 Added TcpMessageParser to reliably receive separate messages from a tcp stream
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
⚙️ Added better error message to EnsureStandalonePreProcessor
When EnsureStandalonePreProcessor is activated it will prevent you from accidentally generating in Unity. To generate in Unity make sure EnsureStandalonePreProcessor is not activated.
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
🆕 Added JobSystem for multi threading as a proof of concept.
public sealed class RotateSystem : JobSystem<GameEntity> {
public RotateSystem(GameContext context, int threads) :
base(context.GetGroup(GameMatcher.AllOf(GameMatcher.Rotation, GameMatcher.RotationVector)), threads) {
}
protected override void Execute(GameEntity entity) {
entity.rotation.value = entity.rotation.value * Quaternion.Euler(entity.rotationVector.value);
}
}
Limitations:
- Don't use generated methods like Add() and Replace()
- Modify component values directly See #325 (comment)
This is not a general purpose solution for all problems. It can be used to solve certain performance intense areas in your game. It can be very useful if there's a very large number of entities that have to be processed, or if the data transformation involves heavy calulations.
🆕 Added EnsureStandalonePreProcessor to prevent accidentally generating in Unity
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
This is a hotfix release to patch the bugs introduced by the code generator refactoring from 1.4.0.
🛠 Fixed needing to generate code twice to when event got removed #620 ⚙️ Added group.AsEnumerable() to support linq ⚙️ Added partial keyword to ComponentEntityApiInterfaceGenerator #607 ⚙️ Changed EntityLink exception to be a warning ⚙️ ComponentData can clone CodeGeneratorData
🆕 Added ValidateProjectPathPreProcessor #572 #563
⚙️ Added logger.Reset()
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
This is a hotfix release to patch the bugs introduced by the code generator refactoring from 1.4.0.
🛠 Fixed component name generation for EventType.Removed #631 (thanks to @hegi25)
🛠 Fixed jenny "Collection was modified; enumeration operation may not execute." #628 🛠 Fixed jenny "Index was outside the bounds of the array." #628
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
Breaking changes are marked with
🆕 Added group.GetEntities(buffer) #624
🆕 Made group iteration alloc free #624
⚙️ Added support for multiple events per component
⚙️ Added removeComponentWhenEmpty
to optionally remove or keep empty listener component
🛠 Fixed accessing non existing component in generated event system for EventType.Removed
🛠 Fixed events inheriting unique attribute from component
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
This update improves the new Entitas Events introduced in 1.1.0
Breaking changes are marked with
⚙️ Added support for multiple event listeners per entity
⚙️ EventInterfaceGenerator generates correct filename matching the class name. Thanks to @c0ffeeartc
auto-import
to update the generator names
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
This update improves the new Entitas Events introduced in 1.1.0
Breaking changes are marked with
⚙️ Added support for multiple contexts for events. Context prefix will be skipped if a component only has one context in favour of a nicer API
EventType.Added
, EventType.Removed
, EventType.AddedOrRemoved
🛠 Fixed typo _listsners
in event generator Thanks to @FNGgames
🛠 Fixed scan
command
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
🆕 Added Events aka Reactive-UI #591
ComponentEntityInterfaceGenerator
to generate IXyzEntity
insetad of IXyz
to avoid name collisions with EventInterfaceGenerator
⚙️ Added enum support for Code Generator Attributes
⚙️ Removed partial
keyword from ComponentGenerator
⚙️ Removed attributes from generated components
🆕 Added Jenny-Auto-Import
scripts to reducde terminal interaction
⚙️ Added silent -s
info to Jenny help page
⚙️ Using Console.WriteLine when prompting user input to support silent mode
⚙️ CodeGeneratorData can now be cloned
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
🛠 Workaround for Unity 2017.3 GUI mask bug (still shows Mixed...
instead of Everything
-> Unity bug) #569
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
🛠 Fixed issue with Entitas.Roslyn plugin and non-components with context attibute #564
🛠 Fixed auto-import
not making relative search paths on Windows
⚙️ Included readme files in zip ⚙️ Updated CONTRIBUTING.md and updated bee 🐝
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
🛠 Fixed The given assembly name or codebase was invalid
on windows #561
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
🛠 Auto-Import properly handles paths with spaces #555
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
- Using correct properties file for each Unity project by saving only the filename instead of full path
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
- Hotfix for EntityLink throwing errors OnApplicationQuit
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
- Hotfix for broken EntityLink (thanks to @c0ffeeartc for reporting so quickly)
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
See and discuss changes in Milestone 0.47.3
(Finally went back to Milestone development :) Transparency FTW!)
- EntityLink will immediately throw an exception if the gameObject is destroyed but still linked to an entity #470
- Fixed VisualDebugging Toggle in the Entitas Preferences Window #540
- Even more support for multiple properties, see #550
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
Here's another update to improve the code generator experience. Thanks again for all your great feedback! And thanks for going through this with me :) We're almost there!
Please follow the Entitas upgrade guide
- Added migration 0.47.2
- Added silent mode for
jenny fix
to simplifyjenny auto-import
experience. Use-s
, e.gjenny auto-import -s
- Added a potential fix for
jenny client gen
command never completes #546 - Renamed keys from
CodeGenerator.*
toJenny.*
. Please apply migration 0.47.2 - Added support to run CLI from any location
- Warning when no properties found
- Removed leading "./" from added searchPaths added by
jenny auto-import
- The Roslyn foundation moved to DesperateDevs
- Using the latest Roslyn libs
- Entitas project cleanup and maintenance
- Added more automation tasks to bee 🐝
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638
- Handling BadImageFormatException
- Not showing warnings for unresolved assemblies anymore
- Fixed closing AssemblyResolver before all plugin dependencies were loaded
- Fixed jenny server construction not complete before executing client command
- Brand new build automation workflow (bee 🐝)
- Completely automated build, sync and release flow for faster future updates (bzzz 🐝)
- Only Entitas.zip is attached to GitHub releases
- Jenny CLI is only bundled in Asset Store version
- Added Assets folder to Entitas.zip #535
- More flexible plugin-based CLI architecture
- Unity support for multiple properties files by adding switch button to Entitas Preferences in case multiple properties files exist #536
- Better CLI support for multiple properties files by showing a warning in case multiple properties files exist #536
- Fixes for server / client errors (ObjectDisposedException) #529
- Renamed key
CodeGenerator.CLI.Ignore.UnusedKeys
toIgnore.Keys
auto-import
reflects assemblies and sets plugins based on content instead of nameauto-import
automatically detects custom plugins in Unity project without manually setting up searchPaths- Added visual lines to
dump
- Renamed
ICodeGeneratorBase
toICodeGenerationPlugin
- Fixed
IConfigurable
commands not getting configured - Added minified properties support
- Fix for NullReferenceException (Entitas.Roslyn.SymbolExtension.ToCompilableString) #534
- Support for WrapperComponent #532
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days.
- Added
IPreProcessor
- Added TargetFrameworkProfilePreProcessor
- Fixed problems with Roslyn Generator and Visual Studio on Windows #503
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days.
- Added
IDoctor
for custom diagnosis and custom symptoms treatment :) Will help improving the code generator setup experience that is aimimg for a one-click setup - Implemented IDoctor for ComponentDataProvider, EntityIndexDataProvider and DebugLogPostProcessor
- Removed
isEnabledByDefault
from all plugins
- ResolveHost returns IPv4 address to fix issue with server / client mode on windows
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days.
- Added deep device profiling support to generated Feature class #497
- Added buttons to generate DefaultInstanceDrawer and TypeDrawer
- Added deep device profiling toggle to Entitas Preferences
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days.
This release is a maintenance release as announced here:
As the project got more mature the Entitas repository not only contained the ECS core but also a few other modules like Logging, Serialization, Networking, Code Generator, Common Utils and more. The goal of this refactoring was to extract reusable modules and increase the focus of the Entitas repository on ECS. Reusable modules have been successfully extracted to their own standalone projects. Overall, with the increased focus that is achieved by having standalone projects I expect the quality to raise, too. This is generally the case when you have reusable code that is battle tested in multiple different scenarios.
As mentioned in #508 those projects all have the DesperateDevs
namespace. You maybe already know about
Desperate Devs because of the new YouTube channel where I will upload more and more Video on ECS,
best practices and Software Architecture. Subscribe if you don't want to miss future videos.
https://www.youtube.com/channel/UC2q7q7tcrwWHu5GSGyt_JEQ
As a result of this refactoring I was able to remove a lot of noise from the Entitas repository and I could easily fix platform depended bugs without any distraction.
Entitas will benefit from having the Desperate Devs dependencies as it enforces modularity and reusability. Additionally, it will be possible to use awesome tools like TCPezy (DesperateDev.Networking) and Jenny (DesperateDevs.CodeGeneration) independently.
Please follow the Entitas upgrade guide
- Removed methods marked obsolete in 0.42.0 from April 2017
- Blueprints are now completely removed from the zip files (sources still available)
- Showing properties name in Edit Button
- CodeGeneratorPreferencesDrawer will keep unavailable plugins #496
- Added Display Dialog for auto import
- Added a secret and hidden cli command, can you find it? ❤️
- Fixed Unhandled Exception (appeared on Windows only) #489
- Changed language level of all projects to C# 4.0
- Deleted CodeGenerator Unity Test project
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days.
- Added Auto Import Button to Entitas Preferences. This will detect plugins and automatically set them in Entitas.properties
Thanks for the feedback on the new code generator so far. This update contains a lot of great improvments. As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days.
Please follow the Entitas upgrade guide
- Fixed flag components increasing the componentPool stack #445
- Logging all retained entities in ContextStillHasRetainedEntitiesException #448
- Added support for multiple indexed members per component #464
public sealed class MyComponent : IComponent {
// Multiple fields are now supported
[EntityIndex]
public int value;
[EntityIndex]
public int otherValue;
}
// will generate
context.GetEntitiesWithMyValue(...);
context.GetEntitiesWithMyOtherValue(...);
- Displaying more prominent popup in Unity when trying to generate with compile errors #463
- AssemblyResolver won't append dll to exe extension
- Changed code generator keys and removed default values
- Changed code generator cli keys and removed default values
- Added auto-import command. Use
entitas auto-import
to automatically populate Entitas.properties entitas status
command will detect potential collisions, e.g. duplicate providers from the default plugins and the roslyn pluginsentitas fix
can resolve plugin collisionsentitas fix
command will tell you to press any key- Removed
-a
keepAlive in favour ofentitas server
andentitas client
- Fixed client only sending first command to server #482
- Default Plugins are now in folder called Entitas
- Refactored all commands and simplified many utils methods
Entitas.exe
now with capital E
- Added custom support for multi-dimensional arrays types like
int[,,]
#481 Let me know if more types need custom support.
- Added migration for 0.45.0
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days.
- Added new menu item which connects to an external code generator server instance
- Added server command
- Added client command
- Added startCodeGenerator files for macOS and Windows
Start the code generator server by double clicking startCodeGenerator
on macOS or startCodeGenerator.bat
on Windows, or use the terminal
$ mono CodeGenerator/entitas.exe server
You can now either use the new Unity menu item Tools/Entitas/Generate with external Code Generator
which connects to a running server and sends the gen
command or connect yourself like this
$ mono CodeGenerator/entitas.exe client gen
This will connect to a running server and send the gen
command. This is useful if you want to add your own custom commands
in your IDE like Visual Studio or Rider (or others).
Using the code generator server and client is optional but can greatly improve your workflow and can drastically reduce the overhead of generating new files.
As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. Please check for updates in 2 - 4 days.
The new code generator is part of Entitas.Roslyn
. The Roslyn Plugins are now called Entitas.Roslyn.CodeGeneration.Plugins
. If you already tested the new code generator beta, please update Entitas.properties
Entitas.Roslyn.CodeGeneration.Plugins
Entitas.Roslyn.CodeGeneration.Plugins.ComponentDataProvider
Entitas.Roslyn.CodeGeneration.Plugins.EntityIndexDataProvider
New mandatory keys have been added to Entitas.properties. You can automatically add them by running entitas fix
- Added
ICodeGeneratorCachable
to cache and share objects between multiple plugins to avoid redundant calculations - Using the objectCache to share the AssemblyResolver between all plugins
- Added CodeGenerator to default searchPaths
- Added Unity menu item to generate with CLI
- Updated New command to use preferences
- Added CLIConfig with new key
Entitas.CodeGeneration.CodeGenerator.CLI.Ignore.UnusedKeys
to add keys that should be ignored when runningentitas status
orentitas doctor
. You can automatically ignore keys by pressingi
- Added support for custom properties files. Each command optionally accepts a path to a properties file. This way you can have multiple different configs how to run the code generator, e.g. one with the reflection-based code generator and one with the roslyn code generator.
entitas gen My.properties
- Pretty CLI
- Added Edit Button to Entitas Preferences
- Changed project structure. The Plugins are now called
Entitas.Roslyn.CodeGeneration.Plugins
- Using the objectCache to share the ProjectParser between all plugins which speeds up the code generation process
- Updated all packages to latest version and downgraded all projects from .NET 4.6.1 to .NET 4.6
- Added more dependencies to remove warnings when running
entitas doctor
orentitas gen
- Refactored Preferences to fully embrace Entitas.properties and User.properties
- Added format command
- keepAlive argument which will keep the process alive. This is very useful when using the new roslyn code generator to avoid reloading the whole parsing infrastructure. Using this argument ith roslyn results in super fast generation time
$ entitas gen -a
Entitas development is back on track again and the wait is over. This is probably one of the last updates before Entitas reaches 1.0.0. This verion has been tested successfully in combination with the new code generator that will work even when the code is not compiling.
- Added support for User.properties. You can now either overwrite values sepcified in Entitas.properties or use placeholders
Create a new file called User.properties and specify the keys and values that should be overwritten.
You can also specify placeholers like this ${myPlaceholder}
and specify the key either in Entitas.properties or User.properties.
see: Match One - Entitas.properties
see: Match One - User.properties
- Groups are now enumerable to iterate over groups circumventing the internal caching and potentially reducing memory allocations #408
foreach (var e in group) {
// Look closely: no group.GetEntities()
}
- Added commands add, set, remove, dump
- Fixed Entitas Stats not ignoring built-in MultiReactiveSystem in systems count
- VisualDebugging only lets you add components that the entity doesn't already have
- GUI fixes
- Properties are now formatted by default for better readability
- Ensuring dependencies in build scripts
Hotfix release for
- Fix Code Generation NullReferenceException in Unity 2017 #414
See and discuss changes in Milestone 0.42.2
- Fix Code Generation NullReferenceException in Unity 2017 #414
- EntityIndexGenerator is sorting entity indices
- CodeGenerator fix command runs recursively #409
- Code Generator CLI maintenance
- Update EntityDrawer to draw correct object type #399 #406
Added missing support for flag components in ComponentEntityInterfaceGenerator
- CodeGenerator CLI + Plugins are now included in zips and not deployed as separate zips
- Added support for flag components in ComponentEntityInterfaceGenerator
- Removed GameState from default contexts. Defaults are now Game and Input
See and discuss changes in Milestone 0.42.0
Please follow the Entitas upgrade guide
- Removed Entitas.Blueprints.Unity.*
- Changed ReactiveSystem.GetTrigger method signature
- Marked obsolete:
context.DestroyEntity(entity)
. Useentity.Destroy()
instead - Marked obsolete:
context.CreateCollector(matcher, event)
, use newcontext.CreateCollector(triggerOnEvent)
when you need.Removed
or.AddedOrRemoved
(e.g. GameMatcher.View.Removed())
- Use MultiReactiveSystem to process entities from different contexts in one system (see Test Example)
- Use
entity.Destroy()
instead ofcontext.DestroyEntity(entity)
- Unit Testing in external console works on Windows now
- Moved Entitas menu item under the Tools tab
- Removed Entitas.Blueprints.Unity.* from zips
- Creating new zip for code generator default plugins
- UX improvements
- Added MultiReactiveSystem to support reactive systems observing different contexts #303
- Added TriggerOnEvent
- Renamed
entity.Destroy()
toentity.InternalDestroy()
to reduce confusion - Added
entity.Destroy()
instead ofcontext.DestroyEntity(entity)
#254
- Added ComponentEntityInterfaceGenerator #303
- Updated ContextObserverGenerator to avoid
System.Security.SecurityException
on Windows #375 - .ToSafeDirectory() supports empty string and “.” to specify current directory
After installing please check your Entitas.properties. Due to the addition of IConfigurable
for code generator plugins
some keys in Entitas.properties changed. entitas.exe doctor
, entitas.exe status
and entitas.exe fix
can help you
fixing any issues. A new default Entitas.properties file will be created if none is found. The default Entitas.properties
should work with Unity without modification. For reference take a look at Match-One - Entitas.properties
Exiting limitation mentioned in the Entitas upgrade guide still apply (Entitas.Blueprints.CodeGeneration.Plugins is not supported in the code generator CLI)
- UpdateCSProjPostProcessor will update your project.csproj. Generated methods are available immediately without switching to Unity and waiting for the project to be updated. This feels even better when using the new code generator (roslyn coming soon) where you don't even have to compile your project anymore - super fast feedback loops!
- Better out-of-the-box experience when starting a new Unity project. Everything will work without any manual setup. Just generate :)
- Great code generator CLI experience with helpful commands like
status
andfix
which will let you modify Entitas.properties interactively - Logo refinements based on magic numbers (1.618 - golden ratio) :D
- Added
IConfigurable
interface to easily create customizable and configurable code generator plugins - Fixed
ignoreNamespaces
by using the newIConfigurable
#376 - Added UpdateCSProjPostProcessor which updates project.csproj so you don't need to wait for Unity to update your project
- Greatly improved the code generator CLI.
status
andfix
command will help you a lot to spot and fix problems in Entitas.properties - Added
Compile.cs
to ensureAssembly-CSharp.dll
in Unity - CodeGenFile converts to unix line endings when setting fileContent #352
- Added progress indicator to code generator CLI when running with
-v
in verbose mode - Added multiple smaller sub configs for TargetDirectory, ContextNames, Assemblies, ProjectPath, IgnoreNamespaces
- Placeholder
${myPlaceHolder}
in properties will remain even when overwriting - Caching AssemblyResolver
- Drawing generic text labels for configurables found in Entitas.properties
- Better error handling when Entitas.properties has problems
- Refined logo. More pleasant to the eye and more readable in smaller icons
See and discuss changes in Milestone 0.41.1
- Added ContextMatcherGenerator #358 #358 @marczaku
// instead of
Matcher<GameEntity>.AllOf(GameMatcher.Position, GameMatcher.View);
// you can write
GameMatcher.AllOf(GameMatcher.Position, GameMatcher.View);
- Added option to ignore namespace in generated api
- Simply add
Entitas.CodeGeneration.Plugins.IgnoreNamespaces = true
to your Entitas.properties - You can run
entitas status
to see if any plugins require additional keys
- Simply add
$ entitas status
Missing key: Entitas.CodeGeneration.Plugins.IgnoreNamespaces
- Added
IConfigurable
to support optional keys needed in Entitas.properties
- Added properties.ToDictionary()
See and discuss changes in Milestone 0.41.0
This milestone paves the way for a more customizable version of Entitas. A streamlined and modular project structure enables deploying Entitas as Dlls which opens the door for 3rd party Addons and the extendable command line code generator.
Please follow the Entitas upgrade guide
- Renamed Entitas.properties config keys
- Removed context.DeactivateAndRemoveEntityIndices()
- Removed context.ClearGroups()
- New namespaces as a consequence of project restructuring
- Project restructuring. All Entitas projects are now in Entitas.sln, including all Addons and Unity projects
- Deploying Entitas as Dlls instead of source code which has multiple benefits, e.g.
- Entitas Unity menu appears even if code doesn't compile
- Enables 3rd party Addons and Plugins
- Enables command line code generator
- Extracted Automatic Entity Reference Counting (AERC) as a strategy which can be set per context
- Better exception handling for Entitas.properties config
- Renamed config keys
- Removed context.DeactivateAndRemoveEntityIndices()
- Removed context.ClearGroups()
- Added command line code generator #158 #353
- Unsupported Plugins: Entitas.Blueprints.CodeGeneration.Plugins, Entitas.CodeGeneration.Unity.Editor
- ContextObserverGenerator puts VisualDebugging in try-catch to support Unit Testing #362
- Added FeatureClassGenerator and removed Feature class from Entitas to support conditional compilation with
#if UNITY_EDITOR
- Added MethodData instead of using System.Reflection.MethodInfo
- Added CleanTargetDirectoryPostProcessor
- Removed Feature class
- UX improvements
- Better exception handling for Entitas.properties config
See and discuss changes in Milestone 0.40.0
Please update Entitas.properties by opening Entitas Preferences. Added assemblyPath
and codeGeneratorAssemblyPath
to code generator config. When not selected already, navigate to Library/ScriptAssemblies/
in your Unity project
and select Assembly-CSharp.dll
for the assembly and Assembly-CSharp-Editor.dll
for the code generator assembly.
- Add ConsoleWriteLinePostProcessor #342
- Make EntitasPreferences.CONFIG_PATH public field in order to customize the path to the config file #342
- Add CodeGeneratorUtil to simplify creating an instance based on Entitas.properties
- Add
assemblyPath
andcodeGeneratorAssemblyPath
to code generator config
- Added SystemWarningThreshold to visualize slow systems
- Tinting slow systems red
- Systems list unfolded by default
See and discuss changes in Milestone 0.39.2
- Optimize group update performance for component add/remove #321
- Ignore indexed properties in PublicMemberInfo #339
- More explicit EntityIndex.ToString()
- More explicit EntityLink.ToString()
- Automatically draw types. No TypeDrawers #327
See and discuss changes in Milestone 0.39.1
- Added
entityIndex.ToString()
with name #329
- Add ContextObserverGenerator #337
- Simplified EntityIndexGenerator getKey
- Optimize DebugSystemsInspector #338
- Blueprints not persistent after changes to components. #331
See and discuss changes in Milestone 0.39.0
- Added
entityIndex.ToString()
with name #329
- Add
contexts.Reset()
(#317) - Removed ComponentDataProvider without namespace #323
- Don't generate EntityIndex when not specified #326
- Cache static component index lookup into local var #316
- Review and check for namespace awareness #328
See and discuss changes in Milestone 0.38.0
This seems to be the release of enhancements! Lots of useful improvments and features have been added to increase productivity and ease of use.
- Removed HideInBlueprintsInspector (#270 #306)
- Changed interface
ITypeDrawer
- Added Contexts constructor (#286)
- Using ToString on subclassed components, too (#290)
- Fixed cached entity ToString() wasn’t updated when calling entity.Release()
- Fixed typo
TEntitiy
toTEntity
(#291)
- Simplified DrawTexture
- Refactored EntitasLayout
- Generating Entity Indices (#75 #319)
- Added priority to ICodeGenFilePostProcessor
- Move logic to DebugLogPostProcessor to speed up code generation
- Added MergeFilesPostProcessor (#301)
- Added Contexts constructor (#286)
- Added default context (#288)
- Using MemberData instead of PublicMemberInfo in DataProviders (#280)
- Added progess report to code generator
- Added cancellable progess bar when generating
- Redesigned Entitas Preferences Window
- Redesigned DebugSystemsInspector
- Redesigned Type Drawers
- Added component member search (#298)
- Added search field to DictionaryTypeDrawer (#299)
- Better UX, better Buttons
- Entitaslayout.SearchTextField won’t affect GUI.change
- Fixed Hashset changes didn’t replace component
- Added
context.FindContextObserver()
for getting ContextObserver (#295) - Added default constructor to Feature class (#293)
- Added Entitas Stats Dialog
- EntityDrawer will use pooled components
- Simplified EntityDrawer and TypeDrawers
- Removed TypeEqualityComparer (#289)
- Drawing public fields of unsupported types
- Updated code templates for TypeDrawer and DefaultInstanceCreators (#297)
- Redesigned Entitas Migration Window
- Using HD header textures
See and discuss changes in Milestone 0.37.0
Please follow the Entitas upgrade guide
The deed is done. Entitas went type-safe! This was a huge task and I'm happy to finally share this with you guys! This feature makes Entitas safer and more managable in growing code bases and will eliminate certain kind of bugs. Thanks to @mstrchrstphr for starting the conversation and proposing solutions.
- Entitas went type-safe! (#257 #266)
- Entity API doesn't return Entity anymore (e.g. e.AddComponent())
- Fixed matchers not recalculating hash when changed
- Added EntityIndex support for multiple keys (#279 #281)
- Removed as many virtual keywords as possible
- Entitas went type-safe! (#257 #266)
- Rewrote code generator architecture (#265 #274 #275)
- ComponentsGenerator doesn't generate
e.IsMoveble(value)
. Onlye.isMoveble = value
- ComponentsGenerator Entity API doesn't return Entity anymore (e.g. e.AddPosition())
- Added additional ComponentGenerator which respects namespaces (#274)
- Entitas went type-safe! (#257 #266)
- Automatically embedding all migrations to Entitas.Migration.exe
- Added sloc (Source Lines Of Code) and loc (Lines Of Code) info
- Entitas went type-safe! (#257 #266)
- Added EntityLink (#271)
- Prettier search fields that support multiple search strings
- New folder structure with Entitas as the core and everything else as Addons
- Complete reorganization of the project structure (more modular and easier to reason about)
See and discuss changes in Milestone 0.36.0
Please follow the Entitas upgrade guide
- Removed pool.CreateSystem() (#233 #237)
- Removed
IEnsureComponents
,IExcludeComponents
,ISetPools
,ISetPool
,IReactiveSystem
,IMultiReactiveSystem
,IEntityCollectorSystem
- Changed the ReactiveSystem to be an abstract class instead of
IReactiveSystem
. You need to overrideGetTrigger
,Filter
andExecute
. This enables filtering entities based on component values (#234) - Renamed the term Pool to Context (#99 #250)
- Renamed
EntityCollector
toCollector
(#252 #253) - Renamed
GroupEventType
toGroupEvent
and removed the prefixOnEntity
- entity.ToString uses component.ToString(). Override ToString() in your components
to get a nice description, e.g.
Health(42)
(#203 #196)
- Removed OldPoolsGenerator
- Fixed code generator line ending for header
- Improved VisualDebugging performance by reusing StringBuilders
- Added support for
ICleanupSystem
andITearDownSystem
- Changed SystemsMonitor.axisRounding to 1
- Fix error when turning visual debugging on/off in Unity 5.4 or newer (#222)
- Changed default blueprint creation location (#206 #248)
- Simplified build pipeline
See and discuss changes in Milestone 0.35.0
Please follow the Entitas upgrade guide
- Fixed adding disabled entities to groups (#192, #193)
- Removed matcher with filter (#194, #195)
- Maintenance, cleanup and formatting
- Completely new build system to create new releases
See and discuss changes in Milestone 0.34.0
Please follow the Entitas upgrade guide
-
Added api to clone entities (#178, #182)
pool.CloneEntity(e);
entity.CopyTo(target);
-
Added EntityIndex constructor with EqualityComparer (#170, #186)
-
Rename GroupObserver to EntityCollector (#168, #188)
-
Added filter condition to matchers (#165, #189)
Matcher.Position.Where(e => e.position.x > 10);
- Added HideInBlueprintInspectorAttribute (#185)
- Improved snippets
- Added Visual Studio snippets (#172)
- Added TestRunner to support test debugging (#175, #176)
- Updated build scripts (#173, #177)
- Added tests for code formatting
Please follow the Entitas upgrade guide
- Added pools.CreateSystem()
- Added ObjectPool and ObjectCache and updated EntitasCache to use ObjectCache (#157)
- Added entityIndex.Activate() and removing entity indices from pool (#163)
- Renamed IDeinitializeSystem to ITearDownSystem (#164)
- TypeReflectionProvider sorts pool names and ToUppercaseFirst() (#155)
- CodeGeneratorConfig doesn't add default pool anymore (#156)
- Added repository icon
- Added snippets (see Snippets folder)
Summer break is over! Entitas development is back on track! Thanks all of you guys for using and contributing to Entitas. This release is packed with improvements from all of you, thanks for that!
Please follow the Entitas upgrade guide
- Lots of maintenance, refactoring, documentation and cleanup. Checked every class and every test ;)
- Removed unused usings (#134 @thematthopkins )
- Added script to generate docset and included it in build script (#141 @mstrchrstphr)
- Updated policy.mdpolicy to support latest Xamarin Studio
- Fixed inconsistent Line endings (#116 @ParagonFable)
- Added new
Pools
class. There is no static Pools anymore but an instance. - Added
ISetPools
to inject the shared pools instance - Removed
pool.CreateSystem<T>()
andpool.CreateSystem(Type type)
(Apply migration 0.32.0) - Fixed
pool.CreateSystem()
not creating a ReactiveSystem for IGroupObserverSystem - Added
EntityIndex
(#154) pool.Reset()
removes all event handlers- Fixed retain / release didn't update entity toString cache
- Added
EntitasCache
for object pooling of collections to reduce memory allocations - Updated Entity, Matcher and Pool to use EntitasCache (less garbage ❤️)
- Added
ICleanupSystem
- Added
IDeinitializeSystem
- Pushing removed component to component pool after dispatching event
- Fixed ComponentIndicesGenerator with multiple pools (#124)
- CodeGeneratorConfig will add default pool
- Fixed pools order if default pool exists
- CodeGenerator Preferences is using MaskField instead of Toggles now
- Less editor repaints for DebugSystemsInspector to improve performance
- Fixed system stats (Log stats) not ignoring Feature class
- Add ITypeDrawer for doubles (#132 @bddckr)
- Added support for enum masks (#132 @bddckr)
- Adjusted foldout spacing in custom inspector (#149 @ByteSheep)
- Updated keys for Entitas.properties and moved files from Entitas.Unity to Entitas.Serialization.Configuration
- Moved Properties from Entitas.Unity to Entitas.Serialization
- All attributes can now be used for classes, interfaces and structs
- Improved component generation for classes and interfaces and added support for default pool [Pool]
- Added support to CustomComponentNameAttribute to generate multiple components with different names for one class or interface
// This will automatically generate PositionComponent and VelocityComponent for you
[Pool, CustomComponentName("Position", "Velocity")]
public struct IntVector2 {
public int x;
public int y;
}
- Added support for generating components for structs
- Not generating obsolete pool attributes for generated classes
- Removed obsolete code
- Generating components for attributed classes and interfaces
// will automatically generate SomeClassComponent for you
[Core]
public class SomeClass {
public string name;
public SomeClass(string name) {
this.name = name;
}
}
- Added support to add empty PoolAttribute to assign component to default pool
// using [Pool] will also add this component to Pools.pool
[Core, Pool]
public class SomeComponent : IComponent {
}
- Added IComponentDrawer which can draw the whole component
- Added EntitasEntityErrorHierarchyIcon to indicate retained entities in the hierarchy
- Added CharTypeDrawer
- Fixed components not updating in the inspector (#107)
- Improved SystemsMonitor and added average line
- Fixed finding all BinaryBlueprints even when not loaded
- Correctly saving Blueprints when setting all BinaryBlueprints
- Added BlueprintsNotFoundException
- BinaryBlueprintInspector creates new pools instead of using one of Pools.allPools
- Fixed pool not shown when entering play-mode while a blueprint was selected in the project view
- Not caching blueprints when UNITY_EDITOR to enable live edit
- Added support for whitespace, '-' and braces in blueprint names
- Blueprints.FindAllBlueprints orders all blueprints by name
- Fixed pool not shown in hierarchy
This release introduces Blueprints for Entitas (Beta). Update if you want to use and play with Blueprints. Read more...
- Only creating PoolObserver when Application.isPlaying
- Added BlueprintsGenerator
- Added more options for sorting systems in the inspector
- Removing event handlers from pool observer when leaving play-mode
- Added Blueprints (and more)
- Added BlueprintInspector (and more)
- Moved build scripts into a folder
- Fixed GameObjectDestroyExtension.DestroyGameObject() compile time error (#91)
- Improved SystemsMonitor.Draw() to use correct available width even with scrollbars
- Tweaked drawing systems list
- Added EntitasPoolErrorHierarchyIcon to visualize when there are erros
- Updated build_commands.sh to generate C# project from Unity
Please follow the Entitas upgrade guide
- Added IGroupObserverSystem which allows ReactiveSystems to observe multiple pools
- Added pools.CreateGroupObserver() to simplify creating a GroupObserver for multiple pools
- TypeReflectionProvider ignores abstract IComponents (#88)
- Renamed ComponentsGenerator to ComponentExtensionsGenerator
- Renamed PoolAttributeGenerator to PoolAttributesGenerator
- Moved Assets/Entitas.Unity to Assets/Entitas/Unity
- Simplified folder structure in Entitas-Unity.zip
- Ignoring obsolete code generators
- Generate button changes size depending on generators list height
- Added Feature class which inherits from Systems or DebugSystems for you, so you don't have to care anymore
- Fixed MissingReferenceException occurring occasionally when stopping game (#71)
- Added support for editing entities in EditorMode (non-playing mode)
- Fixed bug when components are added on entity creation (#87)
- Added clear buttons to search textfields
- Improved DateTimeTypeDrawer
- Added new hierarchy icons for pool and systems
- Added M0300
- Moving Entitas.Migration into Entitas/Migration/Editor when creating Entitas-Unity.zip
- Added missing support for components with properties
- Updated ComponentsGenerator to use entity.CreateComponent()
- Added missing support for components with properties
Marked old PoolMetaData constructor obsolete. If you encounter compile errors please apply Migration 0.26.0, open C# project and generate again.
- Unified Entitas sub projects into a single project
- Unified all Unity projects into a single project
- Documentation maintenance
- Removing all event handler for entity.OnEntityReleased after event got dispatched
- Printing entity in EntityIsNotDestroyedException
- Added TypeExtension.ImplementsInterface()
- Added component types to PoolMetaData
- Made all methods in Systems virtual
- Added auto generated header to generated files
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by Entitas.CodeGenerator.ComponentsGenerator.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
- Using pool specific componentIds lookup when generating matchers for components with multiple pools
- TypeReflectionProvider ignores interfaces
- Added Entitas.Serialization
- Added PublicMemberInfo
- Compile errors won't block code generation anymore
- Printing total generated file count when generating
- Destroying EntityBahviour when entity got released
- Using entity component pool and providing correct previous and new component
- Added unique color for each component in EntityInspector
- Added component search field in EntityInspector
- 'Destroy Entity' Buttons are now red
- Simplified EntityInspector and made methods static
- Unfolded components info is now shared between entities within same pool
- Added shortcuts to Entitas Preferences and Generate
- Improved TypeDrawers
- Stepper UI tweaks
- Renamed 'Script Call Optimization' to 'Optimizations'
- Added EntitasEditorLayout
- Added ReactiveSystem destructor to prevent memory leaks
- Added GroupObserver destructor to prevent memory leaks
- EntityInspector now supports dropping UnityEngine.Object into fields that are null
- UI tweaks
- Added "Script Call Optimization" to Entitas Preferences Window
- Added priority to IEntitasPreferencesDrawer
- Tweaked UI
- Added toggle to Entitas Preferences to enable or disable Visual Debugging
- Tweaked UI
Please follow the Entitas upgrade guide
- Added documentation (#55)
- Added an object pool for components (#58)
- Added pool.ClearComponentPool(index) and pool.ClearComponentPools()
- Added ENTITAS_FAST_AND_UNSAFE compiler flag. When set it will speed up e.Retain() and e.Release() (#59)
- Generated component extensions are now reusing components using a component object pool when destroying entities (#58)
- Added tests for testing the logic of generated files
- Decoupling code generation logic by adding Code Generator Intermediate Format (#62)
- Added TypeReflectionProvider
- Supporting components with namespace
- Simplified linq expressions
- Removed generated systems
- The Code Generator is not depending on Entitas anymore
- Added Entitas.CodeGenerator.TypeReflection project
- Added
keys
andvalues
getter to Properties
- Added system search field to DebugSystemsInspector
- UI tweaks and performance optimizations
- Fixed logging wrong system stats
- Added header image and current version label to Entitas Preferences Window
- Added Entitas.Unity.Migration which provides an easy way to migrate source files
- Added header image and current version label to Entitas Migration Window
- Removed redundant files and gitignored Entitas in all Unity projects (#63)
- Removed Unity projects from Entitas.sln
- Removed warnings
If you're using Entitas with Unity, please open the Entitas preferences and make sure that all your desired code generators are activated. Due to some code generator renamings the ComponentLookupGenerator and the ComponentsGenerator are inactive. Activate them (if desired) and generate.
- Added
pool.Reset()
which clears all groups, destroys all entities and resets creationIndex
- Renamed some code generators
- Added
CustomPrefixAttribute
to support custom prefixes for flag components
[CustomPrefix("flag")]
public class DestroyComponent : IComponent {
}
// default
entity.isDestroy = true;
// with CustomPrefixAttribute
entity.flagDestroy = true;
- Added "Feedback" menu item to report bugs, request features, join the chat, read the wiki and donate
- Removing invalid code generator names from Entitas.properties
- Lots of UI tweaks
- Added toggle to sort systems by execution duration
- Added toggle to hide empty systems
- ReactiveSystems are highlighted with a white font color
- Added Clear Groups Button
- Added Entity Release Button
- Splitted systems list into initialize and execute systems and visualizing them separately
- Improved stepper UI
- All migrations now contain information about on which folder they should be applied
0.26.0
- Deactivates code to prevent compile erros
- Use on folder, where generated files are located
- Added Commands.GenerateProjectFiles and using it in build.sh
- Updated build.sh and build_commands.sh to include latest MigrationAssistant.exe
Please follow the Entitas upgrade guide
- Updated projects to Unity 5.3
- Improved all error messages and added hints
- Changed and applied policy.mdpolicy to all sources
- Moved Entitas Preferences to its own Editor Window
- Added runTests.bat for running test on windows (#49)
- Updated license
- Improved AERC performance
- Added group.RemoveAllEventHandlers()
- Added pool.ClearGroups() to remove all groups and remove all their event handlers
- Added pool.ResetCreationIndex()
- Throwing exception when there are retained entities and pool.DestroyAllEntities() is called
- Renamed entity.refCount to entity.retainCount
- Fixed creating entities
- Showing warning when there are retained entities
- Added UnityTests project with Unity Test Tools to fix a Unity specific HashSet bug
- Changed entity.Retain() to accept an owner object
- Added VisualDebugging support for displaying owners of entities
- Fixed dispatching group events after all groups are updated
- Supporting ENTITAS_DISABLE_VISUAL_DEBUGGING compiler flag
- Added entity.componentNames. This field is set by Entitas.Unity.VisualDebugging to provide better error messages
- Added matcher.componentNames. This field is set by Entitas.Unity.CodeGenerator to provide better error messages
- entity.ToString() now removes ComponentSuffix
- Fixed typo
- ComponentExtensionsGenerator sets matcher.componentNames
- Removed generating unused using in ComponentExtensionsGenerator
- Added update_project_dependencies.sh
- Refactored build commands into build_commands.sh
- Added systems.ActivateReactiveSystems() and systems.DeactivateReactiveSystems which should be called when you don't use systems anymore
- Merged shell scripts
- Renamed XyzEditor to XyzInspector
- Streamlined naming
- Simplified adding a component at runtime
- buildPackage.sh now creates Entitas-CSharp.zip and Entitas-Unity.zip
- Added support for adding components to multiple entities at once at runtime
Please follow the Entitas upgrade guide
- Throwing exception when attempting to generate while Unity is still compiling or assembly won't compile
- Added support for creating entities and adding components at runtime
Before updating, please follow the Entitas upgrade guide
- Gerneral
- Updated and applied policy
- Reimplemented new matcher AnyOf and NoneOf
Matcher.AllOf(Matcher.A, Matcher.B)
.AnyOf(Matcher.C, Matcher.D)
.NoneOf(Matcher.E, Matcher.F);
- Updated generators to work with new matchers
- PoolsGenerator generates Pools.allPools (#39)
- Code Generators convert local newline to unix newline
- Changed CodeGeneratorConfig.disabledCodeGenerators to CodeGeneratorConfig.enabledCodeGenerators
- Added reactiveSystem.Clear() and systems.ClearReactiveSystems()
- Added IClearReactiveSystem. When implemented, clears reactive system after execute finished
- Entitas
- GroupObserver retains entities only once
- PoolObserver now shows retained entities
- Destroying EntityBehaviour e.OnEntityReleased instead of e.OnComponentRemoved
- New logo
- Throwing an exception when releasing an entity that is not destroyed yet (#32)
- Added hierarchy icon
- Renamed DebugSystems related classes
- buildPackage.sh includes HierarchyIcon.png.meta
Please follow the Entitas upgrade guide
- Entitas
- Restored previous pool.DestroyEntity() behaviour
- IReactiveSystem and IMultiReactiveSystem changed and use
TriggerOnEvent
- Use the command line tool
MigrationAssistant.exe
to automatically migrate IReactiveSystem - Renamed IStartSystem.Start to IInitializeSystem.Initialize (#21)
- Entitas
- e.RemoveAllComponents() updates toString cache, even if entity has no components
- Added AERC (Automatic Entity Reference Counting) (#30, solves #25)
- Reduced gc allocations in e.RemoveAllComponents()
- Reduced gc allocations in pool.CreateEntity() and pool.DestroyEntity()
- pool.DestroyEntity() will clean suscribed event delegates of entities (#27)
- entity.ToString() will always use component type
- Streamlined and refactored tests and sources
- Improved SystemMonitorEditor graph performance (#14)
- Added M0220 (Migrates IReactiveSystem to combine trigger and eventTypes to TriggerOnEvent)
- Updated migration descriptions
- Removed project files
- Renamed updateDependencies.sh to updateProjects.sh
- buildPackage.sh includes EntitasUpgradeGuide.md in Entitas.zip
- Entitas.Migration
- Changed target framework to .NET 3.5 to fix build errors in VisualStudio (#22)
- Changed pool.DestroyEntity(entity) behaviour
- won't trigger group.OnEntityRemoved anymore
- triggers group.OnEntityWillBeDestroyed
- removes entity from all groupObserver.collectedEntities
- ReactiveSystem doesn't pass on destroyed entities anymore
- ReactiveSystem doesn't call Execute() when filtered entities.Count == 0
- Added project files (#18)
- Entitas
- Removed all matchers except AllOfMatcher
- Added
IEnsureComponents
to optionally ensure entities passed in via ReactiveSystem have certain components - Added
IExcludeComponents
to optionally exclude entities passed in via ReactiveSystem - Added support for multiple PoolAttributes on components
[PoolA, PoolB, PoolC]
public class SomeComponent : IComponent {}
- Added
disabledCodeGenerators
to CodeGeneratorConfig - Added code generator toggles to CodeGeneratorPreferencesDrawer
- Nicer stats
- GroupObserver supports observing multiple groups
- Added support for IMultiReactiveSystem
- Added internal entity._isEnabled to prevent modifying pooled entities
- Replaced internal object pool with Stack
- Fixed generated replace method, when replacing non existent component
- Drastically improved performance and memory usage by caching ToString() and reducing setting gameObject.name
Please follow the Entitas upgrade guide
-
Entitas
- Added new e.OnComponentReplaced and removed all *WillBeRemoved events
- Added component index and changed component to OnEntityAdded and OnEntityRemoved
- IReactiveSystem.Execute takes List instead of Entity[]
- Entitas now runs without producing garbage!
-
Entitas.CodeGenerator
- Removed support for properties in components
-
Entitas.Unity.VisualDebugging
- Replaced DebugPool with a more flexible PoolObserver
- Added group.OnEntityUpdated event with previous and new component
- ComponentExtensionsGenerator generates component object pool
- Converting newlines in generated files to Environment.NewLine (Pull request #11, thanks @movrajr)
- Added policy.mdpolicy
- Added ReactiveSystem.Activate() and .Deactivate()
- Displaying nested systems hierarchy for DebugSystems
- Unchecking a ReacitveSystem in VisualDebugging deactivates it
- Fixed #9
- ComponentExtensionsGenerator now supports properties
- Use the command line tool
MigrationAssistant.exe
to automatically migrate- Changed IReactiveSystem.GetTriggeringMatcher to IReactiveSystem.trigger
- Changed IReactiveSystem.GetEventType to IReactiveSystem.eventType
Please follow the Entitas upgrade guide
- Fixed code generation issues on Windows by converting and normalizing line endings
- Fixed EntitasCheckForUpdates.CheckForUpdates() by temporarily trusting all sources
- Added
systemCodeGenerators
to CodeGenerator.Generate()
CodeGenerator.Generate(Type[] types, string[] poolNames, string dir,
IComponentCodeGenerator[] componentCodeGenerators,
ISystemCodeGenerator[] systemCodeGenerators,
IPoolCodeGenerator[] poolCodeGenerators)
- Added PoolsGenerator which creates a getter for all pools
var pool = Pools.pool;
var metaPool = Pools.meta;
- Added SystemExtensionsGenerator
new Systems()
.Add(pool.CreateGameBoardSystem())
.Add(pool.CreateCreateGameBoardCacheSystem())
.Add(pool.CreateFallSystem())
.Add(pool.CreateFillSystem())
.Add(pool.CreateProcessInputSystem())
.Add(pool.CreateRemoveViewSystem())
.Add(pool.CreateAddViewSystem())
.Add(pool.CreateRenderPositionSystem())
.Add(pool.CreateDestroySystem())
.Add(pool.CreateScoreSystem());
- Added Components, Systems & Pools sub folders to generated folder
- Properties split with Environment.NewLine instead of '\n'
- Entitas preferences appends "/Generated/" to generated folder if necessary
- Using Queue for SystemsDebugEditor.systemMonitorData
- Moved system getters from Systems to DebugSystems
- Generated ComponentIds use array instead of dictionary for component name lookup
- Added "Step manually" to DebugSystems
- Added activate / deactivate systems at runtime
- Displaying Systems.totalSystemsCount in SystemsDebugEditor
- Added SystemsMonitor visual graph
- Removed override DebugSystems.DestroyAllEntities()
- Added entitas_version file
- Added CreateSystem(ISystem) to PoolExtensions
- Fixed typo GroupObserver.ClearCollectedEntities()
- Added "Check for updates..." menu item
- Added Stats menu item to log current components, systems and pools
- Upgraded all Unity projects to Unity 5
- Added Systems class
- Re-combined pool extensions for creating systems to pool.CreateSystem() and removed pool.CreateStartSystem() and pool.CreateExecuteSystem()
- Fixed: Pool won't destroy entities it doesn't contain
- Properties now support multiline values and placeholder replacement with ${key}
- Added fluent api to Entity
pool.CreateEntity()
.IsGameBoardElement(true)
.IsMovable(true)
.AddPosition(x, y)
.AddResource(Res.Piece0)
.IsInteractive(true);
- CodeGenerator takes arrays of IComponentCodeGenerator and IPoolCodeGenerator to generate files so you can easily provide your own custom code generators
- Added dialog for 'Migrate Matcher' menu item
- Added DebugSystems
- Added HashSetTypeDrawer
- Entitas 0.12.0 generates prefixed matchers based on the PoolAttribute and introduces some API changes. Please follow the Entitas upgrade guide
- Split into multiple modules and seperate projects. Entitas now consists of
- Entitas
- Entitas.CodeGenerator
- Entitas.Unity
- Entitas.Unity.CodeGenerator
- Entitas.Unity.VisualDebugging
- Added IEntitasPreferencesDrawer to be able to extend the Entitas preferences panel
- Entitas preferences internal keys changed. Please check your settings in projectRoot/Entitas.properties and update keys
- Entitas.CodeGenerator.GeneratedFolderPath -> Entitas.Unity.CodeGenerator.GeneratedFolderPath
- Entitas.CodeGenerator.Pools -> Entitas.Unity.CodeGenerator.Pools
- Added support to set fields to null
- Added support to create a new instance if the value of a field is null
- Added IDefaultInstanceCreator to create default objects for unsupported types
- Added IDefaultInstanceCreator implementations for array, dictionary and string
- Added support to insert and remove elements from lists, arrays and dictionaries
- Added name property to DebugPool
- Added VisualDebuggingConfig and VisualDebuggingPreferencesDrawer
- EntityDebugEditor can generate IDefaultInstanceCreator and ITypeDrawer implementations for unsupported types
- Fixed: handling null values
- Renamed ICustomTypeDrawer to ITypeDrawer
- Big refactoring to simplify drawing types
- buildPackage.sh keeps uncompressed source files in bin folder
- Added updateDependencies.sh which updates all dependencies of Entitas.Unity.CodeGenerator, Entitas.Unity.VisualDebugging and tests
- Renamed and moved files and folders to be more consistent with the new project structure
- Entitas 0.12.0 generates prefixed matchers based on the PoolAttribute and introduces some API changes. Please follow the Entitas upgrade guide
- Added IStartSystem and pool.CreateStartSystem() extension
- Renamed pool.CreateSystem() to pool.CreateExecuteSystem()
- Added pool.CreateStartSystem()
- Added EntitasUpdater to automatically update the introduced matcher API changes
- Fixed null exceptions
- Added support for multi dimensional and jagged arrays
- Removed Debug.Log
- Added Code Generator PreferenceItem
- set generated folder path
- define multiple pools
- Added PoolAttributeGenerator
- Generated Matcher is now prefixed based on PoolAttribute (e.g. UIMatcher)
- Generating ToString() for matchers to print component name instead of index
- IndicesLookupGenerator generates indices ordered alphabetically
- Added TypeGenerator to streamline string generation from types
- Added support for nested classes
- Added Properties and CodeGeneratorConfig to serialize Entitas preferences to file
- Removed warning in AbstractCompoundMatcher
- buildPackage.sh only builds when all tests are passing
- buildPackage.sh deletes meta files before creating zip archive
- Entitas 0.10.0 included lots of renaming. Please follow the Entitas upgrade guide if you are on < v0.10.0
- Added AllOfCompoundMatcher
- Added AnyOfMatcher
- Added AnyOfCompoundMatcher
- Added NoneOfMatcher
- Added NoneOfCompoundMatcher
- Updated Entitas to handle any implementation of IMatcher
- Fixed dispatching OnComponentAdded when replacing a non existing component with null
- Optimizations
- Added support for custom type drawers
ICustomTypeDrawer
- Added component folding and pooled entities count
- Added groups to PoolDebugEditor
- Added support for IList
- UI improvements
- Fixed typeShortcuts to use type.FullName to support UnityEngine.Object (conflicted with System.Object)
- Added EntitasCodeGeneratorMenuItem
- Moved and renamed some folders
- Added buildPackage.sh which creates a bin/Entitas.zip with all necessary source files
- Entitas 0.10.0 includes lots of renaming. Please follow the Entitas upgrade guide
- Added empty ISystem and IExecuteSystem for more flexibility
- Added public creationIndex to Entity
- Observer is now on group not on pool
- Removed WillBeRemovedSystem and observer
- Added CreateSystem to PoolExtension
- Added fast entities count call to Pool
- Added creationIndex to entity.ToString()
- pool.CreateEntity() and pool.DestroyEntity() are now virtual
- Added VisualDebugging
- Supports enums nested in components
- Added option to [DontGenerate] to ignore generating index, too