jecs/CHANGELOG.md

178 lines
5.5 KiB
Markdown
Raw Normal View History

2025-05-10 21:27:35 +00:00
# Changelog
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
## Unreleased
2025-06-10 14:00:41 +00:00
## 0.6.1
### Changed
- Entity types now unions with numbers should allow for easier time casting while not causing regressing previous behaviours
### Fixed
- Fixed a critical bug with `(*, R)` pairs not being removed when `R` is deleted
2025-05-10 21:27:35 +00:00
## 0.6.0
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
### 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.
2024-11-23 19:52:01 +00:00
### Changed
2025-05-10 21:27:35 +00:00
- `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.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
### 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.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
## 0.5.0
2024-11-23 19:52:01 +00:00
### Added
2025-05-10 21:27:35 +00:00
- `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.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
### 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.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
## 0.4.0
2024-11-23 19:52:01 +00:00
### Added
2025-05-10 21:27:35 +00:00
- Recycling support to `world:entity` so reused entity IDs now increment generation.
### Removed
- `Query:drain`
- `Query:next`
- `Query:replace`
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
### 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
2024-11-23 19:52:01 +00:00
### Changed
2025-05-10 21:27:35 +00:00
- `World:cleanup` to traverse a header type for graph edges.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
### 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.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
## 0.3.1 - 2024-10-01
2024-11-23 19:52:01 +00:00
### Added
2025-05-10 21:27:35 +00:00
- 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`.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
## 0.2.10
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
### Added
- Trait `jecs.Tag` for zero-cost tag components.
- Cleanup conditions: `jecs.OnDelete`, `jecs.Remove`.
2024-11-23 19:52:01 +00:00
### Changed
2025-05-10 21:27:35 +00:00
- `world:set` is now idempotent when setting tags.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
### 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.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
## 0.2.2
2024-11-23 19:52:01 +00:00
### Added
2025-05-10 21:27:35 +00:00
- `query:replace(fn)` for in-place replacement of component values.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
### Changed
- Iterator now goes backwards to avoid invalidation during iteration.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
## 0.2.1
2024-11-23 19:52:01 +00:00
### Added
2025-05-10 21:27:35 +00:00
- Built-in `jecs.Component` used to find all component IDs.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
## 0.2.0
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
### Added
- `world:parent(entity)` and `jecs.ChildOf` for parent-child relationships.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
### Changed
- Iteration performance improved by 2040% through manual indexing.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
## 0.1.1
2024-11-23 19:52:01 +00:00
### Added
2025-05-10 21:27:35 +00:00
- `world:clear(entity)` for removing all components from an entity.
- TypeScript types.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
## 0.1.0
2024-11-23 19:52:01 +00:00
### Changed
2025-05-10 21:27:35 +00:00
- Optimized iterator.
## 0.1.0-rc.6
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
### Added
- `jecs.Wildcard` term to query partially matched pairs.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
## 0.1.0-rc.5
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
### Added
- Entity relationships.
- `world:__iter()` for full world iteration.
- `world:add(entity, component)` (idempotent).
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
### Fixed
- Component overriding when set out of order.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
## 0.0.0-prototype.rc.3
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
### Added
- Observers.
- `query:without()` for invariant queries.
2024-11-23 19:52:01 +00:00
### Changed
2025-05-10 21:27:35 +00:00
- Separate ID ranges for entities and components.
- Avoid caching pointers; cache stable column indices instead.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
### Fixed
- Slow component updates due to unnecessary row changes.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
## 0.0.0-prototype.rc.2 - 2024-04-26
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
### Changed
- Query now uses smallest archetype map.
- Optimized query iterator.
- Renamed `world:add` to `world:set`.
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
## 0.0.0-prototype.rc.1
2024-11-23 19:52:01 +00:00
2025-05-10 21:27:35 +00:00
### Added
- Initial release.