pex-renderer icon indicating copy to clipboard operation
pex-renderer copied to clipboard

Add world or scene as a root ECS object

Open vorg opened this issue 3 years ago • 6 comments

Given that pex-renderer is no longer Renderer but generic ECS machine should the main object be called World or Scene?

import createWorld from "../index.js";

const world = createWorld() //OK

world.addSystem(renderer.geometrySystem()); //OK
world.addSystem(renderer.transformSystem()); //OK
world.addSystem(renderer.renderSystem()); //OK


const lineBuilder = world.entity({ //OK
  transform: world.transform(), //Ugh
  geometry: world.geometry({ ... }), //Ugh
  material: world.material({ ... }), //Ugh
});
world.add(lineBuilder) //OK

vorg avatar Jul 05 '22 08:07 vorg

If we would get rid of component constructors and allow

const lineBuilder = world.entity({ //OK
  transform: { positions: [0, 0, 0] }
  geometry: createCube(),
  material: { baseColor: [1, 0, 0, 1] }
});

how does one discovers possible components and their values?

vorg avatar Jul 05 '22 08:07 vorg

Given that pex-renderer is no longer Renderer but generic ECS machine should the main object be called World or Scene?

Do we need a separate pex-ecs for world/entity adding?

import createContext from "pex-context";
import createWorld from "pex-ecs"; // or if too many packages, import { createWorld } from "pex-renderer"
import { systems as rendererSystems } from "pex-renderer";

const ctx = createContext()
const world = createWorld({ ctx }) // world properties

world.addSystem(rendererSystems.geometry());
world.addSystem(rendererSystems.transform());
world.addSystem(rendererSystems.render());

If we would get rid of component constructors and allow

const lineBuilder = world.entity({ //OK
  transform: { positions: [0, 0, 0] }
  geometry: createCube(),
  material: { baseColor: [1, 0, 0, 1] }
});

how does one discovers possible components and their values?

I am all in favour of using plain object and removing renderer.material() calls that are a bit heavy to parse.

dmnsgn avatar Jul 05 '22 09:07 dmnsgn

i don't see value in completely separate pex-ecs (I can see use cases like html canvas projects) but i would just use pex-renderer createWorld with 100% custom systems first as a test case. systems namespace is fine although i prefer flat apis. Any particular reasons for world.geometrySystem() -> rendererSystem.geometry() ?

vorg avatar Jul 05 '22 12:07 vorg