entityRenderAll() (src/dusk/entity/entityrender.c) ports ac2's scene.c:sceneRender() camera/view-matrix/draw-loop logic as a standalone function - find the active camera, bind SHADER_UNLIT with its projection/ view, draw every COMPONENT_TYPE_RENDERABLE entity. display.c calls it each frame between the screen clear and screenUnbind(), the same spot the old sceneRender() used to sit. A single-scene scene manager (src/dusk/scene/, ported from ac2 minus its prefab system and physics/trigger stepping - that module hasn't been ported yet) sits alongside this but isn't wired into the engine loop yet; only one scene can ever exist (no SCENE_COUNT_MAX array). entitymanager.c/h removed entirely: its three arrays (entities/components/ entitiesWithComponent) are now plain globals in entity.h/.c (ENTITIES/COMPONENTS/ENTITIES_WITH_COMPONENT), and every entity/component function across the whole ECS (entity, component, position, camera, renderable, physics, trigger, animation) drops its entitymanager_t *mgr parameter to operate on them directly - there was only ever one instance of that struct in the whole engine, so the indirection bought nothing. New duskscript bindings (src/dusk/script/native/entity/) expose entityAdd, entityAddComponent/entityGetComponent, entitySetName/entityGetName/ entityFindByName, entityDispose/entityDisposeDeep, entityPositionSetLocalPosition/entityPositionLookAt, entityRenderableSetMesh (by name - cube/plane/sphere/capsule/triprism/quad), and COMPONENT_TYPE_*/ENTITY_ID_INVALID/COMPONENT_ID_INVALID constants. assets/init.ds uses them to spawn a camera (via LookAt from (3,3,3) at the origin), a cube and a plane as the engine's first real content on the new ECS. Co-Authored-By: Claude Sonnet 5 <[email protected]>
21 lines
919 B
Plaintext
21 lines
919 B
Plaintext
// Entry point, run once by the engine after every other system is ready.
|
|
|
|
var camera = entityAdd();
|
|
var cameraPosition = entityAddComponent(camera, COMPONENT_TYPE_POSITION);
|
|
entityAddComponent(camera, COMPONENT_TYPE_CAMERA);
|
|
entityPositionLookAt(camera, cameraPosition, 3, 3, 3, 0, 0, 0);
|
|
|
|
var cube = entityAdd();
|
|
var cubePosition = entityAddComponent(cube, COMPONENT_TYPE_POSITION);
|
|
var cubeRenderable = entityAddComponent(cube, COMPONENT_TYPE_RENDERABLE);
|
|
entityRenderableSetMesh(cube, cubeRenderable, "cube");
|
|
entityPositionSetLocalPosition(cube, cubePosition, 0, 0, 0);
|
|
|
|
var plane = entityAdd();
|
|
var planePosition = entityAddComponent(plane, COMPONENT_TYPE_POSITION);
|
|
var planeRenderable = entityAddComponent(plane, COMPONENT_TYPE_RENDERABLE);
|
|
entityRenderableSetMesh(plane, planeRenderable, "plane");
|
|
entityPositionSetLocalPosition(plane, planePosition, 0, 0, 0);
|
|
|
|
consolePrint("Camera, cube and plane created");
|