mirror of
https://github.com/Ukendio/jecs.git
synced 2025-04-25 01:20:04 +00:00
Fix world:remove
This commit is contained in:
parent
65984b6c65
commit
059a3f9bed
6 changed files with 210 additions and 61 deletions
59
docs/api.md
59
docs/api.md
|
@ -1,59 +0,0 @@
|
|||
# API
|
||||
|
||||
## World
|
||||
|
||||
### World.new() -> `World`
|
||||
Creates a new world.
|
||||
|
||||
Example:
|
||||
::: code-group
|
||||
|
||||
```luau [luau]
|
||||
local world = jecs.World.new()
|
||||
```
|
||||
|
||||
```ts [typescript]
|
||||
import { World } from "@rbxts/jecs";
|
||||
|
||||
const world = new World();
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
### world:entity() -> `Entity<T>`
|
||||
Creates a new entity.
|
||||
|
||||
Example:
|
||||
::: code-group
|
||||
|
||||
```luau [luau]
|
||||
local entity = world:entity()
|
||||
```
|
||||
|
||||
```ts [typescript]
|
||||
const entity = world.entity();
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
### world:component() -> `Entity<T>`
|
||||
Creates a new static component. Keep in mind that components are also entities.
|
||||
|
||||
Example:
|
||||
::: code-group
|
||||
|
||||
```luau [luau]
|
||||
local Health = world:component()
|
||||
```
|
||||
|
||||
```ts [typescript]
|
||||
const Health = world.component<number>();
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::: info
|
||||
You should use this when creating static components.
|
||||
|
||||
For example, a generic Health entity should be created using this.
|
||||
:::
|
132
docs/api/query.md
Normal file
132
docs/api/query.md
Normal file
|
@ -0,0 +1,132 @@
|
|||
# Query
|
||||
|
||||
A World contains entities which have components. The World is queryable and can be used to get entities with a specific set of components.
|
||||
|
||||
## Functions
|
||||
|
||||
### new()
|
||||
```luau
|
||||
function World.new(): World
|
||||
```
|
||||
Creates a new world.
|
||||
|
||||
Example:
|
||||
::: code-group
|
||||
|
||||
```luau [luau]
|
||||
local world = jecs.World.new()
|
||||
```
|
||||
|
||||
```ts [typescript]
|
||||
import { World } from "@rbxts/jecs";
|
||||
|
||||
const world = new World();
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
## entity()
|
||||
```luau
|
||||
function World:entity(): Entity -- The new entit.
|
||||
```
|
||||
Creates a new entity.
|
||||
|
||||
Example:
|
||||
::: code-group
|
||||
|
||||
```luau [luau]
|
||||
local entity = world:entity()
|
||||
```
|
||||
|
||||
```ts [typescript]
|
||||
const entity = world.entity();
|
||||
```
|
||||
|
||||
::
|
||||
:
|
||||
|
||||
### component()
|
||||
```luau
|
||||
function World:component<T>(): Entity<T> -- The new componen.
|
||||
```
|
||||
Creates a new component.
|
||||
|
||||
Example:
|
||||
::: code-group
|
||||
|
||||
```luau [luau]
|
||||
local Health = world:component() :: jecs.Entity<number>
|
||||
```
|
||||
|
||||
```ts [typescript]
|
||||
const Health = world.component<number>();
|
||||
```
|
||||
:::
|
||||
|
||||
::: info
|
||||
You should use this when creating components.
|
||||
|
||||
For example, a Health type should be created using this.
|
||||
:::
|
||||
|
||||
### get()
|
||||
```luau
|
||||
function World:get(
|
||||
entity: Entity, -- The entity
|
||||
...: Entity<T> -- The types to fetch
|
||||
): ... -- Returns the component data in the same order they were passed in
|
||||
```
|
||||
Returns the data for each provided type for the corresponding entity.
|
||||
|
||||
:::
|
||||
|
||||
### add()
|
||||
```luau
|
||||
function World:add(
|
||||
entity: Entity, -- The entity
|
||||
id: Entity<T> -- The component ID to add
|
||||
): ()
|
||||
```
|
||||
Adds a component ID to the entity.
|
||||
|
||||
This operation adds a single (component) id to an entity.
|
||||
|
||||
::: info
|
||||
This function is idempotent, meaning if the entity already has the id, this operation will have no side effects.
|
||||
:::
|
||||
|
||||
|
||||
### set()
|
||||
```luau
|
||||
function World:set(
|
||||
entity: Entity, -- The entity
|
||||
id: Entity<T>, -- The component ID to set
|
||||
data: T -- The data of the component's type
|
||||
): ()
|
||||
```
|
||||
Adds or changes the entity's component.
|
||||
|
||||
### query()
|
||||
```luau
|
||||
function World:query(
|
||||
...: Entity<T> -- The component IDs to query with. Entities that satifies the conditions will be returned
|
||||
): Query<...Entity<T>> -- Returns the Query which gets the entity and their corresponding data when iterated
|
||||
```
|
||||
Creates a [`query`](query) with the given component IDs.
|
||||
|
||||
Example:
|
||||
::: code-group
|
||||
|
||||
```luau [luau]
|
||||
for id, position, velocity in world:query(Position, Velocity) do
|
||||
-- Do something
|
||||
end
|
||||
```
|
||||
|
||||
```ts [typescript]
|
||||
for (const [id, position, velocity] of world.query(Position, Velocity) {
|
||||
// Do something
|
||||
}
|
||||
```
|
||||
|
||||
:::
|
70
docs/api/world.md
Normal file
70
docs/api/world.md
Normal file
|
@ -0,0 +1,70 @@
|
|||
# World
|
||||
|
||||
A World contains entities which have components. The World is queryable and can be used to get entities with a specific set of components.
|
||||
|
||||
## Functions
|
||||
|
||||
### new()
|
||||
```lua
|
||||
function World.new(): World
|
||||
```
|
||||
Creates a new world.
|
||||
|
||||
Example:
|
||||
::: code-group
|
||||
|
||||
```luau [luau]
|
||||
local world = jecs.World.new()
|
||||
```
|
||||
|
||||
```ts [typescript]
|
||||
import { World } from "@rbxts/jecs";
|
||||
|
||||
const world = new World();
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
## entity()
|
||||
```luau
|
||||
function World:entity(): Entity
|
||||
```
|
||||
Creates a new entity.
|
||||
|
||||
Example:
|
||||
::: code-group
|
||||
|
||||
```luau [luau]
|
||||
local entity = world:entity()
|
||||
```
|
||||
|
||||
```ts [typescript]
|
||||
const entity = world.entity();
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
### component()`
|
||||
```luau
|
||||
function World:component<T>(): Entity<T>
|
||||
```
|
||||
Creates a new component.
|
||||
|
||||
Example:
|
||||
::: code-group
|
||||
|
||||
```luau [luau]
|
||||
local Health = world:component() :: jecs.Entity<number>
|
||||
```
|
||||
|
||||
```ts [typescript]
|
||||
const Health = world.component<number>();
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::: info
|
||||
You should use this when creating components.
|
||||
|
||||
For example, a Health type should be created using this.
|
||||
:::
|
|
@ -1,3 +1 @@
|
|||
## TODO
|
||||
|
||||
This is a TODO stub.
|
|
@ -512,6 +512,7 @@ end
|
|||
|
||||
|
||||
local function archetype_traverse_remove(world: World, componentId: i53, from: Archetype): Archetype
|
||||
from = from or world.ROOT_ARCHETYPE
|
||||
local edge = edge_ensure(from, componentId)
|
||||
|
||||
local remove = edge.remove
|
||||
|
|
|
@ -25,6 +25,13 @@ local N = 10
|
|||
type World = jecs.WorldShim
|
||||
|
||||
TEST("world", function()
|
||||
do CASE "should not error when removing a component that entity doesn't have"
|
||||
local world = jecs.World.new() :: World
|
||||
local A = world:component()
|
||||
local e = world:entity()
|
||||
world:remove(e, A)
|
||||
CHECK(true)
|
||||
end
|
||||
do CASE("should find every component id")
|
||||
local world = jecs.World.new() :: World
|
||||
local A = world:component()
|
||||
|
|
Loading…
Reference in a new issue