@rbxts/stitch
v1.0.5
Published
<h1 align="center">@rbxts/stitch</h1>
Downloads
18
Readme
import { World } from "World";
import { ComponentDefinition } from "World/ComponentDefinition";
interface FooComponent extends ComponentDefinition {
defaults: { foo: string };
}
interface BarComponent extends ComponentDefinition {
defaults: { bar: string };
}
interface BazComponent extends ComponentDefinition {
defaults: { baz: string };
}
const world = new World("test");
const foo: FooComponent = { defaults: { foo: "a" } };
const bar: BarComponent = { defaults: { bar: "b" } };
const baz: BazComponent = { defaults: { baz: "c" } };
const first_instance = new Instance("Part");
world.addComponent("foo", first_instance, foo);
world.addComponent("bar", first_instance, bar);
world.addComponent("baz", first_instance, baz);
const second_instance = new Instance("Part");
world.addComponent("foo", second_instance, foo);
world.addComponent("baz", second_instance, baz);
world
.createQuery()
.all<[FooComponent, BarComponent, BazComponent]>("foo", "bar", "baz")
.except<[BarComponent]>("bar")
.forEach((entity, c1, c2) => {
print(entity); // second_instance - first_instance has a filtered out component thus wont be included
print(c1); // { foo: string }
print(c2); // { baz: string } baz took bar's place because it was filtered out
});
Installation
Via npm
npm install @rbxts/rbxts-pattern
Documentation
API Reference
world
The World class is a collection of entities, components, and systems. It is the central class that ties all other parts of an ECS together. A game could have many worlds, but normally there is only one world per game.
new
class World(namespace: string)
.addComponent
function addComponent<T extends ComponentDefinition>(
componentResolvable: ComponentResolvable,
entity: Instance | Entity<Array<unknown>>
data?: Data<T>
): Data<T>
.createQuery
function createQuery(): EntityQuery<never>;
.destroy
function destroy(): void
.getComponent
function getComponent<T extends ComponentDefinition>(
componentResolvable: ComponentResolvable,
entity: Entity<[Data<T>]>,
): Data<T> | undefined;
.getEntitiesWith
function getEntitiesWith<T extends ComponentDefinition>(
componentResolvable: ComponentResolvable,
): Array<Entity<[Data<T>]>>;
.registerComponent
function registerComponent(componentDefinition: ComponentDefinition): void
.removeComponent
function registerComponent(componentDefinition: ComponentDefinition): void;
.removeSystem
function removeSystem(systemResolvable: SystemResolvable): void;
.setComponent
function setComponent<T extends ComponentDefinition>(
componentResolvable: ComponentResolvable,
entity: Instance | Entity<[Data<T>]>,
data: Data<T>,
): Data<T>;
.unregisterComponent
function unregisterComponent(componentResolvable: ComponentResolvable): void;
.updateComponent
function updateComponent<T extends ComponentDefinition>(
componentResolvable: ComponentResolvable,
entity: Instance | Entity<[Data<T>]>,
data: Data<T>,
): Data<T>;
Open Sourced Example
I wrote an example game that uses Stitch in TS to show you how to use it!
https://github.com/Ukendio/fighting-game