miniplex@2.0.0
Major Changes
-
8a7a315: Miniplex 2.0 is a complete rewrite of the library, with a heavy focus on further improving the developer experience, and squashing some significant bugs.
While it does bring some breaking changes, it will still allow you to do everything that you've been doing with 1.0; when upgrading a 1.0 project to 2.0, most changes you will need to do are related to things having been renamed.
The headline changes in 2.0:
- A lot more relaxed and lightweight! Where Miniplex 1.0 would immediately crash your entire application when, for example, adding a component to an entity that already has the component, Miniplex 2.0 will simply no-op and continue.
- Much more flexible! Miniplex 2.0 simplifies and extends the query API (formerly often referred to as "archetypes"); you can now create queries through
world.with("componentName"), chain these together, use the newwithout, or even create advanced predicate-based queries usingwhere. - Improved type support! If you're using TypeScript, you will be happy to hear that type support has been significantly improved, with much better type narrowing for queries.
- The React API has been significantly simplified, and some pretty big bugs have been squashed. (Turns out Miniplex 1.0's React API really didn't like React's ``` much. Whoops!)
Some more details on the changes:
-
world.createEntityhas been renamed and simplified to justworld.add(which now returns the correct type for the entity, too), andworld.destroyEntitytoworld.remove.const entity = world.add({ position: { x: 0, y: 0 } }) world.addComponent(entity, "velocity", { x: 0, y: 0 }) world.remove(entity) -
The
Tagtype and constant have been removed. For tag-like components, simply usetrue(whichTagwas just an alias for.) -
Entities added to a world no longer receive a
__miniplexcomponent. This component has always been an internal implementation detail, but you might have used it in the past to get a unique identifier for an entity. This can now be done throughworld.id(entity), with ID lookups being available throughworld.entity(id). -
Queries can now be iterated over directly. Example:
const moving = world.with("position", "velocity") for (const { position, velocity } of moving) { position.x += velocity.x position.y += velocity.y }This is, in fact, now the recommended way to iterate over entities, since it is extremely efficient, and will make sure that the list of entities is being iterated over in reverse, which makes it safe to modify it during iteration.
You can also use this to neatly fetch the first entity from an archetype that you only expect to have a single entity in it:
const [player] = world.with("player") -
The queuing functionality that was built into the
Worldclass has been removed. If you've relied on this in the past,miniplexnow exports aqueueobject that you can use instead. Example:import { queue } from "miniplex" queue(() => { // Do something }) /* Later */ queue.flush()Please note that this is being provided to make upgrading to 2.0 a little easier, and will likely be removed in a future version.
-
withandwithoutare the new API for building queries. Examples:const moving = world.with("position", "velocity") const alive = world.without("dead") -
The new
world.wherenow allows you to build predicate-based queries! You can use this as an escape hatch for creating any kind of query based on any conditions you specify. Example:
Patch Changes
- Updated dependencies [8a7a315]
- @miniplex/bucket@2.0.0