169 lines
5.3 KiB
Markdown
169 lines
5.3 KiB
Markdown
# Changelog
|
||
|
||
## Unreleased
|
||
|
||
## 0.6.0
|
||
|
||
### Added
|
||
- `World:range` to restrict entity range to allow for e.g. reserving ids `1000..5000` for clients and everything above that (5000+) for entities from the server. This makes it possible to receive ids from a server that don't have to be mapped to local ids.
|
||
- `jecs.component`, `jecs.tag` and `jecs.meta` for preregistering ids and their metadata before a world
|
||
- Overload to `World:entity` to create an entity at the desired id.
|
||
|
||
### Changed
|
||
- `World:clear` to remove the `ID` from every entity instead of the previous behaviour of removing all of the components on the entity. You should prefer deleting the entity instead for the previous behaviour.
|
||
- Entity ID layouts by putting the index in the lower bits, which should make every world function 1–5 nanoseconds faster.
|
||
- Hooks now pass the full component ID which is useful for pairs when you need both the relation and the target.
|
||
- Replaced `OnSet` with `OnChange`, which now only runs when the component ID was previously present on the entity.
|
||
- `OnAdd` now runs after the value has been set and also passes the component ID and the value.
|
||
- `OnRemove` now lazily looks up which archetype the entity will move to. This is meant to support interior structural changes within every hook.
|
||
- Optimized `world:has` for both single and multiple component presence. This comes at the cost that it cannot check the component presence for more than 4 components at a time. If this is important, consider calling this function multiple times.
|
||
|
||
### Fixed
|
||
- `World:delete` not removing every pair with an unalive target. Specifically happened when you had at least two pairs of different relations with multiple targets each.
|
||
|
||
## 0.5.0
|
||
|
||
### Added
|
||
- `World:each` to find entities with a specific Tag.
|
||
- `World:children` to find children of an entity.
|
||
- `Query:cached` to add a query cache that updates itself when an archetype matching the query gets created or deleted.
|
||
|
||
### Changed
|
||
- Inference of entities' types using user-defined type functions.
|
||
- `Pair<First, Second>` to return `Second` if `First` is a `Tag`; otherwise, returns `First`.
|
||
|
||
### Fixed
|
||
- `World:target` not giving adjacent pairs.
|
||
|
||
## 0.4.0
|
||
|
||
### Added
|
||
- Recycling support to `world:entity` so reused entity IDs now increment generation.
|
||
|
||
### Removed
|
||
- `Query:drain`
|
||
- `Query:next`
|
||
- `Query:replace`
|
||
|
||
### Changed
|
||
- `jecs.Pair` type in Luau now returns the first element's type to avoid manual typecasting.
|
||
|
||
### Fixed
|
||
- `Query:archetypes` now correctly takes `self`.
|
||
|
||
## 0.3.2 - 2024-10-01
|
||
|
||
### Changed
|
||
- `World:cleanup` to traverse a header type for graph edges.
|
||
|
||
### Fixed
|
||
- Regression when calling `World:set` after `World:remove` on the same component.
|
||
- Removed explicit error in `JECS_DEBUG` for `World:target` missing index.
|
||
- `World.set` type inference with `NoInfer<T>` in TypeScript.
|
||
|
||
## 0.3.1 - 2024-10-01
|
||
|
||
### Added
|
||
- Index parameter to `World:target`.
|
||
- Global config `_G.JECS_HI_COMPONENT_ID` to change component ID limit (must be set before importing JECS).
|
||
- Debug mode via `_G.JECS_DEBUG` (must be set before importing JECS).
|
||
- `world:cleanup` to manually clean up empty archetypes.
|
||
|
||
### Changed
|
||
- `world:delete` now also deletes dependent archetypes and child entities.
|
||
|
||
### Fixed
|
||
- `Query` iterator to not drain by default.
|
||
- TypeScript package entry to `src` instead of `src/init`.
|
||
- `Query.next` now returns expected result tuple in typescript.
|
||
- `pair` returns a number instead of entity to prevent misuse.
|
||
- Exported built-in components `ChildOf`, `Name`, and `world.parent`.
|
||
|
||
## 0.2.10
|
||
|
||
### Added
|
||
- Trait `jecs.Tag` for zero-cost tag components.
|
||
- Cleanup conditions: `jecs.OnDelete`, `jecs.Remove`.
|
||
|
||
### Changed
|
||
- `world:set` is now idempotent when setting tags.
|
||
|
||
### Fixed
|
||
- Improved performance for hooks.
|
||
- Exported types and functions: `world:contains()`, `query:drain()`, `Query`.
|
||
- Hook types: `OnAdd`, `OnSet`, `OnRemove`.
|
||
- ID flexibility for `add`, `set`, `remove`, `get`, `has`, `query`.
|
||
- `world:contains()` now returns `boolean`.
|
||
- `world:has()` parameters now correct.
|
||
|
||
## 0.2.2
|
||
|
||
### Added
|
||
- `query:replace(fn)` for in-place replacement of component values.
|
||
|
||
### Changed
|
||
- Iterator now goes backwards to avoid invalidation during iteration.
|
||
|
||
## 0.2.1
|
||
|
||
### Added
|
||
- Built-in `jecs.Component` used to find all component IDs.
|
||
|
||
## 0.2.0
|
||
|
||
### Added
|
||
- `world:parent(entity)` and `jecs.ChildOf` for parent-child relationships.
|
||
|
||
### Changed
|
||
- Iteration performance improved by 20–40% through manual indexing.
|
||
|
||
## 0.1.1
|
||
|
||
### Added
|
||
- `world:clear(entity)` for removing all components from an entity.
|
||
- TypeScript types.
|
||
|
||
## 0.1.0
|
||
|
||
### Changed
|
||
- Optimized iterator.
|
||
|
||
## 0.1.0-rc.6
|
||
|
||
### Added
|
||
- `jecs.Wildcard` term to query partially matched pairs.
|
||
|
||
## 0.1.0-rc.5
|
||
|
||
### Added
|
||
- Entity relationships.
|
||
- `world:__iter()` for full world iteration.
|
||
- `world:add(entity, component)` (idempotent).
|
||
|
||
### Fixed
|
||
- Component overriding when set out of order.
|
||
|
||
## 0.0.0-prototype.rc.3
|
||
|
||
### Added
|
||
- Observers.
|
||
- `query:without()` for invariant queries.
|
||
|
||
### Changed
|
||
- Separate ID ranges for entities and components.
|
||
- Avoid caching pointers; cache stable column indices instead.
|
||
|
||
### Fixed
|
||
- Slow component updates due to unnecessary row changes.
|
||
|
||
## 0.0.0-prototype.rc.2 - 2024-04-26
|
||
|
||
### Changed
|
||
- Query now uses smallest archetype map.
|
||
- Optimized query iterator.
|
||
- Renamed `world:add` to `world:set`.
|
||
|
||
## 0.0.0-prototype.rc.1
|
||
|
||
### Added
|
||
- Initial release.
|