package component:witguest; interface math { record vec3 { x: f32, y: f32, z: f32, } } interface ecs { //use math.{vec3}; record entity-id { id: u64, } record entity { id: entity-id, generation: u64, } record wasm-type-id { inner: tuple, } record component-info { size: u64, alignment: u64, type-id: wasm-type-id, // a u128 } resource ecs-dynamic-view { constructor(wrld: borrow, component-infos: list); next: func() -> option>; } resource ecs-world { constructor(); // expects components to be tightly packed in the same order of component-infos spawn: func(components: list, component-infos: list) -> entity; view: func(component-infos: list) -> ecs-dynamic-view; } } /// An example world for the component to target. world example { import math; import ecs; import host-print: func(msg: string); export on-init: func() -> result; }