jecs-nightly/jecs/CHANGELOG.md
2025-05-11 00:11:19 +00:00

169 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 15 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 2040% 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.