diff --git a/.config/lint.config.js b/.config/lint.config.js index 9d178572..975472fd 100644 --- a/.config/lint.config.js +++ b/.config/lint.config.js @@ -1,4 +1,4 @@ export default { "src/**/*.js":"npm run eslint -- --fix", - "demos/**/*.js":"npm run eslint -- --fix" + "examples/**/*.js":"npm run eslint -- --fix" } \ No newline at end of file diff --git a/.config/tsc.lint.json b/.config/tsc.lint.json index 5e107b90..1014648a 100644 --- a/.config/tsc.lint.json +++ b/.config/tsc.lint.json @@ -1,7 +1,7 @@ { "include": [ "../src", - "../demos" + "../examples" ], "exclude":[ ], diff --git a/.config/vite.config.js b/.config/vite.config.js index 8b347aa3..5e07a986 100644 --- a/.config/vite.config.js +++ b/.config/vite.config.js @@ -3,10 +3,11 @@ import {resolve} from 'path' import { cwd } from "process" export default defineConfig({ + publicDir:'assets', server: { port: 8082, strictPort: true, - open: "/demos/index.html", + open: "/examples/index.html", }, resolve: { alias: [{ diff --git a/demos/assets/audio/bad-apple.m4a b/assets/audio/bad-apple.m4a similarity index 100% rename from demos/assets/audio/bad-apple.m4a rename to assets/audio/bad-apple.m4a diff --git a/demos/assets/audio/hit.mp3 b/assets/audio/hit.mp3 similarity index 100% rename from demos/assets/audio/hit.mp3 rename to assets/audio/hit.mp3 diff --git a/demos/assets/warrior.png b/assets/warrior.png similarity index 100% rename from demos/assets/warrior.png rename to assets/warrior.png diff --git a/demos/demos/animation/index.js b/demos/demos/animation/index.js deleted file mode 100644 index c2805ea8..00000000 --- a/demos/demos/animation/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { default as animation } from './basic.js' -export { default as basicAnimation3D } from './basic3d.js' diff --git a/demos/demos/audio/audioOscillator.js b/demos/demos/audio/audioOscillator.js deleted file mode 100644 index 8d27f911..00000000 --- a/demos/demos/audio/audioOscillator.js +++ /dev/null @@ -1,33 +0,0 @@ -import { - Demo, - World, - AudioOscillator, - EntityCommands, - Cleanup, - Timer, - TimerMode -} from 'wima' -import { addDefaultCamera3D } from '../utils.js' - -export default new Demo( - 'audio/audio oscillator', - [init, addDefaultCamera3D] -) - -/** - * @param {World} world - */ -function init(world) { - const commands = world.getResource(EntityCommands) - - commands - .spawn() - .insertPrefab([ - new AudioOscillator(), - new Timer({ - mode: TimerMode.Repeat - }), - new Cleanup() - ]) - .build() -} diff --git a/demos/demos/audio/audioPlayer.js b/demos/demos/audio/audioPlayer.js deleted file mode 100644 index 828a9989..00000000 --- a/demos/demos/audio/audioPlayer.js +++ /dev/null @@ -1,38 +0,0 @@ -import { - Demo, - World, - AssetServer, - AudioPlayer, - TimerMode, - EntityCommands, - Cleanup, - Audio, - Timer -} from 'wima' -import { addDefaultCamera3D } from '../utils.js' - -export default new Demo( - 'audio/audio player', - [init, addDefaultCamera3D] -) - -/** - * @param {World} world - */ -function init(world) { - const server = world.getResource(AssetServer) - const commands = world.getResource(EntityCommands) - - commands - .spawn() - .insertPrefab([ - new AudioPlayer({ - audio: server.load(Audio, 'assets/audio/bad-apple.m4a') - }), - new Timer({ - mode: TimerMode.Repeat - }), - new Cleanup() - ]) - .build() -} diff --git a/demos/demos/audio/index.js b/demos/demos/audio/index.js deleted file mode 100644 index 1858d78c..00000000 --- a/demos/demos/audio/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export { default as audioGraph } from './audioGraph.js' -export { default as audioPlayer } from './audioPlayer.js' -export { default as audioPlayback } from './audioPlayback.js' -export { default as audioOscillator } from './audioOscillator.js' diff --git a/demos/demos/ecs/index.js b/demos/demos/ecs/index.js deleted file mode 100644 index a1ae3871..00000000 --- a/demos/demos/ecs/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { default as spawn } from './spawn.js' -export { default as despawn } from './despawn.js' diff --git a/demos/demos/gizmos/arcs.js b/demos/demos/gizmos/arcs.js deleted file mode 100644 index 2279968b..00000000 --- a/demos/demos/gizmos/arcs.js +++ /dev/null @@ -1,96 +0,0 @@ -import { - World, - Color, - Demo, - GizmoLineStyle, - PI, - HALF_PI -} from 'wima' -import { Demo1Gizmo2D } from '../utils.js' - -const QUATER_PI = Math.PI / 4 - -export default new Demo('gizmo2d/arcs', [init], [drawCirclularArcs, drawEllipticalArcs]) - -/** - * @param {World} world - */ -function init(world) { - const gizmo = world.getResource(Demo1Gizmo2D) - - gizmo.settings.lineWidth = 2 - gizmo.settings.lineStyle = GizmoLineStyle.Solid -} - -/** - * @param {World} world - */ -function drawCirclularArcs(world) { - const gizmo = world.getResource(Demo1Gizmo2D) - const radius = 40 - - gizmo - .translate(100, 100) - .arc(0, QUATER_PI, radius, radius, new Color(0.5, 0.5, 0.5, 1)) - .axes(20) - .translate(100, 0) - .arc(0, HALF_PI, radius, radius, new Color(1, 0, 0, 1)) - .axes(20) - .translate(100, 0) - .arc(0, HALF_PI + QUATER_PI, radius, radius, new Color(1, 1, 0, 1)) - .axes(20) - .translate(100, 0) - .arc(0, PI, radius, radius, new Color(0, 1, 0, 1)) - .axes(20) - .translate(100, 0) - .arc(0, PI + QUATER_PI, radius, radius, new Color(0, 1, 1, 1)) - .axes(20) - .translate(100, 0) - .arc(0, PI + HALF_PI, radius, radius, new Color(0, 0, 1, 1)) - .axes(20) - .reset() - .translate(100, 200) - .arc(0, PI + HALF_PI + QUATER_PI, radius, radius, new Color(1, 0, 1, 1)) - .axes(20) - .translate(100, 0) - .circle(radius, new Color(1, 1, 1, 1)) - .axes(20) - .reset() -} - -/** - * @param {World} world - */ -function drawEllipticalArcs(world) { - const gizmo = world.getResource(Demo1Gizmo2D) - const radiusX = 40 - const radiusY = 20 - - gizmo - .translate(100, 300) - .arc(0, QUATER_PI, radiusX, radiusY, new Color(0.5, 0.5, 0.5, 1)) - .axes(20) - .translate(100, 0) - .arc(0, HALF_PI, radiusX, radiusY, new Color(1, 0, 0, 1)) - .axes(20) - .translate(100, 0) - .arc(0, HALF_PI + QUATER_PI, radiusX, radiusY, new Color(1, 1, 0, 1)) - .axes(20) - .translate(100, 0) - .arc(0, PI, radiusX, radiusY, new Color(0, 1, 0, 1)) - .axes(20) - .translate(100, 0) - .arc(0, PI + QUATER_PI, radiusX, radiusY, new Color(0, 1, 1, 1)) - .axes(20) - .translate(100, 0) - .arc(0, PI + HALF_PI, radiusX, radiusY, new Color(0, 0, 1, 1)) - .axes(20) - .reset() - .translate(100, 400) - .arc(0, PI + HALF_PI + QUATER_PI, radiusX, radiusY, new Color(1, 0, 1, 1)) - .axes(20) - .translate(100, 0) - .ellipse(radiusX, radiusY, new Color(1, 1, 1, 1)) - .axes(20) - .reset() -} diff --git a/demos/demos/gizmos/grid.js b/demos/demos/gizmos/grid.js deleted file mode 100644 index aefbd57c..00000000 --- a/demos/demos/gizmos/grid.js +++ /dev/null @@ -1,43 +0,0 @@ -import { - World, - Color, - Demo, - Vector2, - BVector2, - GizmoLineStyle -} from 'wima' -import { Demo1Gizmo2D } from '../utils.js' - -export default new Demo('gizmo2d/grid', [init], [drawGrid]) - -/** - * @param {World} world - */ -function init(world) { - const gizmo = world.getResource(Demo1Gizmo2D) - - gizmo.settings.lineWidth = 2 - gizmo.settings.lineStyle = GizmoLineStyle.Solid -} - -/** - * @param {World} world - */ -function drawGrid(world) { - const gizmo = world.getResource(Demo1Gizmo2D) - - gizmo - .translate(200, 200) - .grid( - new Vector2(10, 10), - new Vector2(25, 25) - ) - .translate(0, 300) - .grid( - new Vector2(10, 10), - new Vector2(25, 25), - Color.WHITE.clone(), - new BVector2(true, true) - ) - .reset() -} diff --git a/demos/demos/gizmos/index.js b/demos/demos/gizmos/index.js deleted file mode 100644 index 0c9db427..00000000 --- a/demos/demos/gizmos/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export { default as lineStyle2d } from './linestyle.js' -export { default as arcs2d } from './arcs.js' -export { default as shapes2d } from './shapes.js' -export { default as grid2d } from './grid.js' diff --git a/demos/demos/gizmos/shapes.js b/demos/demos/gizmos/shapes.js deleted file mode 100644 index bf561bc7..00000000 --- a/demos/demos/gizmos/shapes.js +++ /dev/null @@ -1,47 +0,0 @@ -/** @import {Entity} from 'wima' */ -import { - World, - Color, - Demo, - Vector2, - GizmoLineStyle -} from 'wima' -import { Demo1Gizmo2D } from '../utils.js' - -export default new Demo('gizmo2d/shapes', [init], [update]) - -/** - * @param {World} world - */ -function init(world) { - const gizmo = world.getResource(Demo1Gizmo2D) - - gizmo.settings.lineWidth = 2 - gizmo.settings.lineStyle = GizmoLineStyle.Solid -} - -/** - * @param {World} world - */ -function update(world) { - const gizmo = world.getResource(Demo1Gizmo2D) - - gizmo - .translate(100, 150) - .aabb(50, 50, new Color(1, 1, 1, 1)) - .axes(20) - .translate(150, 0) - .ellipse(60, 40, new Color(1, 1, 1, 1)) - .axes(20) - .translate(150, 0) - .circle(50, new Color(1, 1, 1, 1)) - .axes(20) - .reset() - .translate(100, 300) - .grid(new Vector2(10, 10), new Vector2(10, 10)) - .axes(20) - .translate(150, 0) - .line(new Vector2(-50, 0), new Vector2(50, 0)) - .axes(20) - .reset() -} diff --git a/demos/demos/index.js b/demos/demos/index.js deleted file mode 100644 index aa8bb72d..00000000 --- a/demos/demos/index.js +++ /dev/null @@ -1,8 +0,0 @@ -export * from './audio/index.js' -export * from './animation/index.js' -export * from './transform/index.js' -export * from './render/index.js' -export * from './ecs/index.js' -export * from './input/index.js' -export * from './tween/index.js' -export * from './gizmos/index.js' diff --git a/demos/demos/input/index.js b/demos/demos/input/index.js deleted file mode 100644 index 86252a65..00000000 --- a/demos/demos/input/index.js +++ /dev/null @@ -1,3 +0,0 @@ -export { default as keyboard } from './keyboard.js' -export { default as mouse } from './mouse.js' -export { default as touch } from './touch.js' diff --git a/demos/demos/render/canvas-2d/index.js b/demos/demos/render/canvas-2d/index.js deleted file mode 100644 index 0f18cac9..00000000 --- a/demos/demos/render/canvas-2d/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default as materials } from './material.js' diff --git a/demos/demos/render/index.js b/demos/demos/render/index.js deleted file mode 100644 index 409835c4..00000000 --- a/demos/demos/render/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export * from './canvas-2d/index.js' -export * from './webgl/index.js' diff --git a/demos/demos/render/webgl/basictriangle.js b/demos/demos/render/webgl/basictriangle.js deleted file mode 100644 index b2302ddc..00000000 --- a/demos/demos/render/webgl/basictriangle.js +++ /dev/null @@ -1,41 +0,0 @@ -import { - Demo, - Mesh, - World, - Cleanup, - EntityCommands, - createTransform3D, - BasicMaterial, - Meshed, - BasicMaterial3D, - BasicMaterialAssets, - MeshAssets -} from 'wima' -import { addDefaultCamera3D } from '../../utils.js' - -export const basictriangle = new Demo( - 'basic triangle', - [addmesh, addDefaultCamera3D] -) - -/** - * @param {World} world - */ -function addmesh(world) { - const commands = world.getResource(EntityCommands) - const meshes = world.getResource(MeshAssets) - const materials = world.getResource(BasicMaterialAssets) - - const mesh = meshes.add(Mesh.triangle3D()) - const material = materials.add(new BasicMaterial()) - - commands - .spawn() - .insertPrefab([ - ...createTransform3D(), - new Meshed(mesh), - new BasicMaterial3D(material), - new Cleanup() - ]) - .build() -} diff --git a/demos/demos/render/webgl/index.js b/demos/demos/render/webgl/index.js deleted file mode 100644 index 94452234..00000000 --- a/demos/demos/render/webgl/index.js +++ /dev/null @@ -1,8 +0,0 @@ -export * from './basictriangle.js' -export * from './colorchangetriangle.js' -export * from './geometries.js' -export * from './rotationtriangle.js' -export * from './movingtriangle.js' -export * from './camerarotate.js' -export * from './cameraperspective.js' -export * from './cameraorthographic.js' diff --git a/demos/demos/render/webgl/rotationtriangle.js b/demos/demos/render/webgl/rotationtriangle.js deleted file mode 100644 index 68a1d3c7..00000000 --- a/demos/demos/render/webgl/rotationtriangle.js +++ /dev/null @@ -1,56 +0,0 @@ -import { - Demo, - Mesh, - World, - Cleanup, - Rotation3D, - EntityCommands, - Meshed, - BasicMaterial3D, - BasicMaterial, - createMovable3D, - Query, - BasicMaterialAssets, - MeshAssets -} from 'wima' -import { addDefaultCamera3D } from '../../utils.js' - -export const rotatingtriangle = new Demo( - 'rotating triangle', - [addmesh, addDefaultCamera3D], - [update] -) - -/** - * @param {World} world - */ -function addmesh(world) { - const commands = world.getResource(EntityCommands) - const meshes = world.getResource(MeshAssets) - const materials = world.getResource(BasicMaterialAssets) - - const mesh = meshes.add(Mesh.triangle3D()) - const material = materials.add(new BasicMaterial()) - - commands - .spawn() - .insertPrefab([ - ...createMovable3D(), - new Meshed(mesh), - new BasicMaterial3D(material), - new Cleanup() - ]) - .insert(new Rotation3D()) - .build() -} - -/** - * @param {World} world - */ -function update(world) { - const rotable = new Query(world, [Rotation3D]) - - rotable.each(([rotation]) => { - rotation.z = Math.PI / 4 - }) -} diff --git a/demos/demos/transform/2d/index.js b/demos/demos/transform/2d/index.js deleted file mode 100644 index 80837f34..00000000 --- a/demos/demos/transform/2d/index.js +++ /dev/null @@ -1,5 +0,0 @@ -export { default as translate2d } from './translate.js' -export { default as rotate2d } from './rotate.js' -export { default as scale2d } from './scale.js' -export { default as propagate2d } from './propagate.js' -export { default as lookat2d } from './lookat.js' diff --git a/demos/demos/transform/3d/index.js b/demos/demos/transform/3d/index.js deleted file mode 100644 index 7d2065ed..00000000 --- a/demos/demos/transform/3d/index.js +++ /dev/null @@ -1,5 +0,0 @@ -export { default as translate3d } from './translate.js' -export { default as rotate3d } from './rotate.js' -export { default as scale3d } from './scale.js' -export { default as lookAt3d } from './lookat.js' -export { default as propagate3d } from './propagate.js' diff --git a/demos/demos/transform/index.js b/demos/demos/transform/index.js deleted file mode 100644 index a0e135fc..00000000 --- a/demos/demos/transform/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export * from './2d/index.js' -export * from './3d/index.js' diff --git a/demos/demos/tween/index.js b/demos/demos/tween/index.js deleted file mode 100644 index aee5fa88..00000000 --- a/demos/demos/tween/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default as easing } from './easing.js' diff --git a/demos/index.html b/demos/index.html deleted file mode 100644 index 0151531e..00000000 --- a/demos/index.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - ES8 Project - - - - - - -
-
-
-
-
- -
-
- -
-
- - - \ No newline at end of file diff --git a/demos/main.js b/demos/main.js deleted file mode 100644 index 8a03aae0..00000000 --- a/demos/main.js +++ /dev/null @@ -1,109 +0,0 @@ -import { - App, - AppSchedule, - World, - FPSDebugger, - Gizmo2DPlugin, - Gizmo3DPlugin, - DOMWindowPlugin, - AnimationPlugin, - DemoPlugin, - MainWindow, - Query, - warn, - Entity, - WindowCommands, - DefaultPlugin, - Canvas2DRendererPlugin -} from 'wima' -import { - spawn, - despawn, - audioGraph, - audioPlayer, - audioPlayback, - audioOscillator, - keyboard, - mouse, - touch, - easing, - materials, - lineStyle2d, - arcs2d, - shapes2d, - grid2d, - translate2d, - rotate2d, - scale2d, - propagate2d, - lookat2d, - animation -} from './demos/index.js' -import { Demo1, Demo2, ResourceAliasPlugin } from './demos/utils.js' - -const app = new App() - -app - .registerPlugin(new ResourceAliasPlugin()) - .registerPlugin(new DefaultPlugin()) - .registerPlugin(new DOMWindowPlugin()) - .registerPlugin(new AnimationPlugin()) - .registerPlugin(new Canvas2DRendererPlugin()) - .registerPlugin(new Gizmo2DPlugin({ - label: Demo1 - })) - .registerPlugin(new Gizmo2DPlugin({ - label: Demo2 - })) - .registerPlugin(new Gizmo3DPlugin({ - label: Demo1 - })) - .registerPlugin(new Gizmo3DPlugin({ - label: Demo2 - })) - .registerPlugin(new DemoPlugin({ - demos: [ - animation, - spawn, - despawn, - materials, - easing, - keyboard, - mouse, - touch, - audioGraph, - audioPlayer, - audioPlayback, - audioOscillator, - lineStyle2d, - arcs2d, - shapes2d, - grid2d, - shapes2d, - grid2d, - translate2d, - rotate2d, - scale2d, - propagate2d, - lookat2d - ] - })) - .registerSystem(AppSchedule.Update, setupViewport) - .registerDebugger(new FPSDebugger()) - .run() - -/** - * @param {World} world - */ -function setupViewport(world) { - const windowcommands = world.getResource(WindowCommands) - const window = new Query(world, [Entity, MainWindow]).single() - - if (!window) return warn('No main window defined.') - - windowcommands - .window(window[0]) - .resize(innerWidth, innerHeight) -} - -addEventListener('contextmenu', (e) => e.preventDefault()) diff --git a/demos/webgl.html b/demos/webgl.html deleted file mode 100644 index 4a966343..00000000 --- a/demos/webgl.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - Document - - - - - - - - - - \ No newline at end of file diff --git a/demos/webgl.js b/demos/webgl.js deleted file mode 100644 index 6bc20977..00000000 --- a/demos/webgl.js +++ /dev/null @@ -1,94 +0,0 @@ -import { - App, - AppSchedule, - World, - FPSDebugger, - DemoPlugin, - DOMWindowPlugin, - WebglRendererPlugin, - MainWindow, - Query, - warn, - WindowCommands, - Entity, - DefaultPlugin, - Windows, - AnimationPlugin -} from 'wima' -import { - basictriangle, - changecolortriangle, - geometries, - rotatingtriangle, - movingtriangle, - cameraRotate, - orthograhicCamera, - perspectiveCamera, - translate3d, - rotate3d, - scale3d, - lookAt3d, - propagate3d, - basicAnimation3D - -} from './demos/index.js' -import { ResourceAliasPlugin } from './demos/utils.js' - -const app = new App() - -app - .registerPlugin(new ResourceAliasPlugin()) - .registerPlugin(new WebglRendererPlugin()) - .registerPlugin(new DefaultPlugin()) - .registerPlugin(new DOMWindowPlugin()) - .registerPlugin(new AnimationPlugin()) - .registerPlugin(new DemoPlugin({ - demos: [ - basictriangle, - changecolortriangle, - geometries, - rotatingtriangle, - movingtriangle, - cameraRotate, - orthograhicCamera, - perspectiveCamera, - translate3d, - rotate3d, - scale3d, - lookAt3d, - propagate3d, - basicAnimation3D - ] - })) - .registerDebugger(new FPSDebugger()) - .registerSystem(AppSchedule.Update, setupViewport) - .run() - -/** - * @param {World} world - */ -function setupViewport(world) { - const windowcommands = world.getResource(WindowCommands) - const window = new Query(world, [Entity, MainWindow]).single() - const canvases = world.getResource(Windows) - const width = innerWidth - const height = innerHeight - - if (!window) return warn('No main window defined.') - - const [entity] = window - const canvas = canvases.getWindow(entity) - - if (!canvas) return - - const gl = canvas.getContext('webgl2') - - if (!gl) return - - gl.viewport(0, 0, width, height) - windowcommands - .window(entity) - .resize(width, height) -} - -addEventListener('contextmenu', (e) => e.preventDefault()) diff --git a/examples/example.html b/examples/example.html new file mode 100644 index 00000000..afdaa3ed --- /dev/null +++ b/examples/example.html @@ -0,0 +1,63 @@ + + + + Wima engine example + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/example.js b/examples/example.js new file mode 100644 index 00000000..365d236b --- /dev/null +++ b/examples/example.js @@ -0,0 +1,62 @@ +import samples from './samples/index.js' + +init() + +/** + * + */ +function init() { + const params = new URLSearchParams(window.location.search) + const name = params.get('example') + + if (!name || name === '') { + const warning = 'No example selected.' + + document.body.append(document.createTextNode(warning)) + + return + } + + const demo = recursiveSelect( + name.split('/').filter((e) => e.length !== 0), + samples + ) + + if (!demo) { + const warning = 'The example selected does not exist.' + + document.body.append(document.createTextNode(warning)) + + return + } + + const script = document.createElement('script') + + script.type = 'module' + script.src = demo + document.head.append(script) +} + +/** + * @param {string[]} items + * @param {Record} map + * @returns {string | undefined} + */ +function recursiveSelect(items, map) { + const name = items.shift() + + if (!name) { + return undefined + } + + const item = map[name] + + if (item instanceof URL) { + return item.pathname + } + if (item === undefined) { + return undefined + } + + return recursiveSelect(items, item) +} diff --git a/examples/index.html b/examples/index.html new file mode 100644 index 00000000..8a39c73f --- /dev/null +++ b/examples/index.html @@ -0,0 +1,32 @@ + + + + + + + Webgl demos + + + + + + Open in another page + + + diff --git a/examples/main.js b/examples/main.js new file mode 100644 index 00000000..4b48f32e --- /dev/null +++ b/examples/main.js @@ -0,0 +1,78 @@ +import samples from './samples/index.js' + +const container = document.body.appendChild(document.createElement('div')) +const opts = container.appendChild(document.createElement('select')) + +container.style.position = 'absolute' +container.style.top = '0px' +container.style.left = '0px' +opts.addEventListener('change', (e) => { + const { target } = e + + if (!(target instanceof HTMLSelectElement)) return + + localStorage.setItem('play', target.value) + + switchDemo(target.value) +}) + +/** + * @param {string} name + */ +async function switchDemo(name) { + const frame = document.getElementById('example-frame') + const link = document.getElementById('popper') + + if (!(frame instanceof HTMLIFrameElement)) { + throw 'The element selected is not an iframe' + } + if (!(link instanceof HTMLAnchorElement)) { + throw 'The element selected is not an anchor' + } + + const linkSource = `./example.html?example=${name}` + + frame.src = linkSource + link.href = linkSource +} + +/** + * @param {Record} demos + * @param {string} prefix + */ +function setupOpts(demos, prefix = '') { + const fix = prefix !== '' ? `${prefix}/` : prefix + + for (const name in demos) { + const prename = fix + name + + if (demos[name] instanceof URL) { + const opt = document.createElement('option') + + opt.append(document.createTextNode(fix + name)) + opts.append(opt) + continue + } + + setupOpts(demos[name], prename) + } +} + +/** + * @param {Item} demos + */ +function init(demos) { + let name = localStorage.getItem('play') + + if (!name) name = Object.keys(demos)[0] || null + if (!name) return + + switchDemo(name) +} + +init(samples) +setupOpts(samples) + +/** + * @typedef {{ [x: string]: URL | Item}} Item + */ diff --git a/demos/demos/animation/basic.js b/examples/samples/animation/2d/basic.js similarity index 66% rename from demos/demos/animation/basic.js rename to examples/samples/animation/2d/basic.js index 53829c83..b186d33f 100644 --- a/demos/demos/animation/basic.js +++ b/examples/samples/animation/2d/basic.js @@ -2,7 +2,6 @@ import { Mesh, createTransform2D, World, - Demo, Cleanup, AnimationClip, AnimationTrack, @@ -20,17 +19,55 @@ import { BasicMaterial2D, HALF_PI, PI, - TAU + TAU, + AnimationClipAssets, + AppSchedule, + AnimationPlugin, + App, + Canvas2DRendererPlugin, + DefaultPlugin, + DOMWindowPlugin, + Entity, + FPSDebugger, + MainWindow, + Query, + warn, + WindowCommands } from 'wima' -import { AnimationClipAssets } from '../../../src/animation/resources/aliases.js' -import { addDefaultCamera2D } from '../utils.js' +import { addDefaultCamera2D, HackPlugin } from '../../utils.js' -export default new Demo('animation/basic2d', [init, addDefaultCamera2D]) +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new AnimationPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerSystem(AppSchedule.Startup, init) + .registerSystem(AppSchedule.Update, setupViewport) + .registerSystem(AppSchedule.Startup, addDefaultCamera2D) + .registerDebugger(new FPSDebugger()) + .run() + +/** + * @param {World} world + */ +function setupViewport(world) { + const windowcommands = world.getResource(WindowCommands) + const window = new Query(world, [Entity, MainWindow]).single() + + if (!window) return warn('No main window defined.') + + windowcommands + .window(window[0]) + .resize(innerWidth, innerHeight) +} /** * @param {World} world */ -export function init(world) { +function init(world) { const commands = world.getResource(EntityCommands) const clips = world.getResource(AnimationClipAssets) const meshes = world.getResource(MeshAssets) diff --git a/examples/samples/animation/2d/index.js b/examples/samples/animation/2d/index.js new file mode 100644 index 00000000..df60245c --- /dev/null +++ b/examples/samples/animation/2d/index.js @@ -0,0 +1,5 @@ +const basic = new URL('./basic.js', import.meta.url) + +export default { + 'basic': basic +} diff --git a/demos/demos/animation/basic3d.js b/examples/samples/animation/3d/basic.js similarity index 78% rename from demos/demos/animation/basic3d.js rename to examples/samples/animation/3d/basic.js index e298d07c..4ec7524b 100644 --- a/demos/demos/animation/basic3d.js +++ b/examples/samples/animation/3d/basic.js @@ -1,7 +1,6 @@ import { Mesh, World, - Demo, Cleanup, AnimationClip, AnimationTrack, @@ -22,12 +21,33 @@ import { Position3DAnimationEffector, Scale3DAnimationEffector, Quaternion, - Vector3 + Vector3, + AnimationClipAssets, + App, + AppSchedule, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger, + WebglRendererPlugin, + AnimationPlugin } from 'wima' -import { AnimationClipAssets } from '../../../src/animation/resources/aliases.js' -import { addDefaultCamera3D } from '../utils.js' +import { addDefaultCamera3D, HackPlugin, setupViewportWebgl } from '../../utils.js' -export default new Demo('animation/basic3d', [init, addDefaultCamera3D]) +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new WebglRendererPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new AnimationPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerDebugger(new FPSDebugger()) + .registerSystem(AppSchedule.Startup, init) + .registerSystem(AppSchedule.Startup, addDefaultCamera3D) + .registerSystem(AppSchedule.Update, setupViewportWebgl) + .run() + +console.log(app) /** * @param {World} world diff --git a/examples/samples/animation/3d/index.js b/examples/samples/animation/3d/index.js new file mode 100644 index 00000000..df60245c --- /dev/null +++ b/examples/samples/animation/3d/index.js @@ -0,0 +1,5 @@ +const basic = new URL('./basic.js', import.meta.url) + +export default { + 'basic': basic +} diff --git a/examples/samples/animation/index.js b/examples/samples/animation/index.js new file mode 100644 index 00000000..15ae735d --- /dev/null +++ b/examples/samples/animation/index.js @@ -0,0 +1,7 @@ +import { default as d2 } from './2d/index.js' +import { default as d3 } from './3d/index.js' + +export default { + '2d': d2, + '3d': d3 +} diff --git a/demos/demos/audio/audioGraph.js b/examples/samples/audio/audioGraph.js similarity index 50% rename from demos/demos/audio/audioGraph.js rename to examples/samples/audio/audioGraph.js index 313418f3..c9a0e246 100644 --- a/demos/demos/audio/audioGraph.js +++ b/examples/samples/audio/audioGraph.js @@ -1,19 +1,20 @@ import { - Demo, World, AudioAssets, AudioGraph, Handle, Audio, - AssetServer + AssetServer, + App, + AppSchedule, + Canvas2DRendererPlugin, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger, + Plugin } from 'wima' -import { addDefaultCamera3D } from '../utils.js' +import { HackPlugin, setupViewport } from '../utils.js' -export default new Demo( - 'audio/graph', - [init, addDefaultCamera3D], - [playAudio] -) class Playing { handle @@ -30,12 +31,37 @@ class Playing { } } +// Why use a plugin? The current implentation does not have system sets and +// systems registered directly on the App are precede ones registered by plugins. +// This conflict is between internal engine system and external engine systems ordering. +class MyPlugin extends Plugin { + + /** + * @param {App} app + */ + register(app) { + app.registerSystem(AppSchedule.Startup, init) + } +} +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerPlugin(new MyPlugin()) + .registerSystem(AppSchedule.Update, setupViewport) + .registerSystem(AppSchedule.Update, playAudio) + .registerDebugger(new FPSDebugger()) + .run() + /** * @param {World} world */ function init(world) { const server = world.getResource(AssetServer) - const handle = server.load(Audio, 'assets/audio/hit.mp3') + const handle = server.load(Audio, '/audio/hit.mp3') world.setResource(new Playing(handle)) } diff --git a/examples/samples/audio/audioOscillator.js b/examples/samples/audio/audioOscillator.js new file mode 100644 index 00000000..a666c776 --- /dev/null +++ b/examples/samples/audio/audioOscillator.js @@ -0,0 +1,45 @@ +import { + World, + AudioOscillator, + EntityCommands, + Cleanup, + Timer, + TimerMode, + App, + AppSchedule, + Canvas2DRendererPlugin, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger +} from 'wima' +import { HackPlugin, setupViewport } from '../utils.js' + +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerSystem(AppSchedule.Startup, init) + .registerSystem(AppSchedule.Update, setupViewport) + .registerDebugger(new FPSDebugger()) + .run() + +/** + * @param {World} world + */ +function init(world) { + const commands = world.getResource(EntityCommands) + + commands + .spawn() + .insertPrefab([ + new AudioOscillator(), + new Timer({ + mode: TimerMode.Repeat + }), + new Cleanup() + ]) + .build() +} diff --git a/demos/demos/audio/audioPlayback.js b/examples/samples/audio/audioPlayback.js similarity index 60% rename from demos/demos/audio/audioPlayback.js rename to examples/samples/audio/audioPlayback.js index 39e5dc13..fc69212b 100644 --- a/demos/demos/audio/audioPlayback.js +++ b/examples/samples/audio/audioPlayback.js @@ -1,5 +1,4 @@ import { - Demo, World, Audio, AudioPlayer, @@ -9,15 +8,44 @@ import { Timer, Query, VirtualClock, - AssetServer + AssetServer, + DefaultPlugin, + App, + AppSchedule, + Canvas2DRendererPlugin, + DOMWindowPlugin, + FPSDebugger, + Plugin } from 'wima' -import { addDefaultCamera3D } from '../utils.js' +import { HackPlugin, setupViewport } from '../utils.js' -export default new Demo( - 'audio/audio playback', - [init, addDefaultCamera3D], - [update] -) +class AudioTimer extends Timer {} + +// Why use a plugin? The current implentation does not have system sets and +// systems registered directly on the App are precede ones registered by plugins. +// This conflict is between internal engine system and external engine systems ordering. +class MyPlugin extends Plugin { + + /** + * @param {App} app + */ + register(app) { + app.registerSystem(AppSchedule.Startup, init) + } +} + +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerPlugin(new MyPlugin()) + .registerSystem(AppSchedule.Update, setupViewport) + .registerSystem(AppSchedule.Update, update) + .registerDebugger(new FPSDebugger()) + .run() /** * @param {World} world @@ -34,7 +62,7 @@ function init(world) { .spawn() .insertPrefab([ new AudioPlayer({ - audio: server.load(Audio, 'assets/audio/bad-apple.m4a') + audio: server.load(Audio, '/audio/bad-apple.m4a') }), new Timer({ mode: TimerMode.Once, @@ -82,5 +110,3 @@ function update(world) { timer.update(clock.getDelta()) } - -class AudioTimer extends Timer {} diff --git a/examples/samples/audio/audioPlayer.js b/examples/samples/audio/audioPlayer.js new file mode 100644 index 00000000..a350c920 --- /dev/null +++ b/examples/samples/audio/audioPlayer.js @@ -0,0 +1,64 @@ +import { + World, + AssetServer, + AudioPlayer, + TimerMode, + EntityCommands, + Cleanup, + Audio, + Timer, + App, + AppSchedule, + Canvas2DRendererPlugin, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger, + Plugin +} from 'wima' +import { HackPlugin, setupViewport } from '../utils.js' + +// Why use a plugin? The current implentation does not have system sets and +// systems registered directly on the App are precede ones registered by plugins. +// This conflict is between internal engine system and external engine systems ordering. +class MyPlugin extends Plugin { + + /** + * @param {App} app + */ + register(app) { + app.registerSystem(AppSchedule.Startup, init) + } +} + +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerPlugin(new MyPlugin()) + .registerSystem(AppSchedule.Update, setupViewport) + .registerDebugger(new FPSDebugger()) + .run() + +/** + * @param {World} world + */ +function init(world) { + const server = world.getResource(AssetServer) + const commands = world.getResource(EntityCommands) + + commands + .spawn() + .insertPrefab([ + new AudioPlayer({ + audio: server.load(Audio, '/audio/bad-apple.m4a') + }), + new Timer({ + mode: TimerMode.Repeat + }), + new Cleanup() + ]) + .build() +} diff --git a/examples/samples/audio/index.js b/examples/samples/audio/index.js new file mode 100644 index 00000000..072fec90 --- /dev/null +++ b/examples/samples/audio/index.js @@ -0,0 +1,11 @@ +const audioGraph = new URL('./audioGraph.js', import.meta.url) +const audioPlayer = new URL('./audioPlayer.js', import.meta.url) +const audioPlayback = new URL('./audioPlayback.js', import.meta.url) +const audioOscillator = new URL('./audioOscillator.js', import.meta.url) + +export default { + 'audioGraph': audioGraph, + 'audioPlayer': audioPlayer, + 'audioPlayback': audioPlayback, + 'audioOscillator': audioOscillator +} diff --git a/demos/demos/ecs/despawn.js b/examples/samples/ecs/despawn.js similarity index 69% rename from demos/demos/ecs/despawn.js rename to examples/samples/ecs/despawn.js index 6b089a50..681f4069 100644 --- a/demos/demos/ecs/despawn.js +++ b/examples/samples/ecs/despawn.js @@ -2,7 +2,6 @@ import { Mesh, createTransform2D, World, - Demo, Query, EntityCommands, Cleanup, @@ -11,16 +10,35 @@ import { Meshed, BasicMaterial2D, BasicMaterialAssets, - MeshAssets + MeshAssets, + App, + AppSchedule, + Canvas2DRendererPlugin, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger } from 'wima' -import { addDefaultCamera2D } from '../utils.js' +import { addDefaultCamera2D, HackPlugin, setupViewport } from '../utils.js' -export default new Demo('despawn', [init, addDefaultCamera2D], [update]) +class Marker { } const itemWidth = 50 const itemHeight = 50 const paddingWidth = 10 const paddingHeight = 10 +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerSystem(AppSchedule.Startup, init) + .registerSystem(AppSchedule.Startup, addDefaultCamera2D) + .registerSystem(AppSchedule.Update, setupViewport) + .registerSystem(AppSchedule.Update, update) + .registerDebugger(new FPSDebugger()) + .run() /** * @param {World} world @@ -68,5 +86,3 @@ function update(world) { commands.despawn(entity[0]) } - -class Marker { } diff --git a/examples/samples/ecs/index.js b/examples/samples/ecs/index.js new file mode 100644 index 00000000..fc7462d0 --- /dev/null +++ b/examples/samples/ecs/index.js @@ -0,0 +1,7 @@ +const spawn = new URL('./spawn.js', import.meta.url) +const despawn = new URL('./despawn.js', import.meta.url) + +export default { + 'spawn': spawn, + 'despawn': despawn +} diff --git a/demos/demos/ecs/spawn.js b/examples/samples/ecs/spawn.js similarity index 66% rename from demos/demos/ecs/spawn.js rename to examples/samples/ecs/spawn.js index bf06828d..6959bb61 100644 --- a/demos/demos/ecs/spawn.js +++ b/examples/samples/ecs/spawn.js @@ -2,7 +2,6 @@ import { Mesh, createTransform2D, World, - Demo, Query, EntityCommands, Cleanup, @@ -11,16 +10,34 @@ import { Meshed, BasicMaterial2D, BasicMaterialAssets, - MeshAssets + MeshAssets, + Canvas2DRendererPlugin, + App, + AppSchedule, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger } from 'wima' -import { addDefaultCamera2D } from '../utils.js' +import { addDefaultCamera2D, HackPlugin, setupViewport } from '../utils.js' -export default new Demo('spawn', [addDefaultCamera2D], [update]) +class Marker { } const itemWidth = 50 const itemHeight = 50 const paddingWidth = 10 const paddingHeight = 10 +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerSystem(AppSchedule.Startup, addDefaultCamera2D) + .registerSystem(AppSchedule.Update, setupViewport) + .registerSystem(AppSchedule.Update, update) + .registerDebugger(new FPSDebugger()) + .run() /** * @param {World} world @@ -53,5 +70,3 @@ function update(world) { ]) .build() } - -class Marker { } diff --git a/examples/samples/gizmos/2d/arcs.js b/examples/samples/gizmos/2d/arcs.js new file mode 100644 index 00000000..a2c2835a --- /dev/null +++ b/examples/samples/gizmos/2d/arcs.js @@ -0,0 +1,129 @@ +import { + World, + Color, + GizmoLineStyle, + PI, + HALF_PI, + QUARTER_PI, + Gizmo2D, + App, + AppSchedule, + Canvas2DRendererPlugin, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger, + Gizmo2DPlugin, + typeidGeneric +} from 'wima' +import { HackPlugin, addDefaultCamera2D, setupViewport } from '../../utils.js' + +class Demo { } + +/** + * @augments {Gizmo2D} + */ +class DemoGizmo2D extends Gizmo2D { } + +const app = new App() + +// We have to alias the gizmo resource manually +app.getWorld().setResourceAlias(typeidGeneric(Gizmo2D, [Demo]), DemoGizmo2D) + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerPlugin(new Gizmo2DPlugin({ + label: Demo + })) + .registerSystem(AppSchedule.Startup, init) + .registerSystem(AppSchedule.Startup, addDefaultCamera2D) + .registerSystem(AppSchedule.Update, setupViewport) + .registerSystem(AppSchedule.Update, drawCirclularArcs) + .registerSystem(AppSchedule.Update, drawEllipticalArcs) + .registerDebugger(new FPSDebugger()) + .run() + +/** + * @param {World} world + */ +function init(world) { + const gizmo = world.getResource(DemoGizmo2D) + + gizmo.settings.lineWidth = 2 + gizmo.settings.lineStyle = GizmoLineStyle.Solid +} + +/** + * @param {World} world + */ +function drawCirclularArcs(world) { + const gizmo = world.getResource(DemoGizmo2D) + const radius = 40 + + gizmo + .translate(100, 100) + .arc(0, QUARTER_PI, radius, radius, new Color(0.5, 0.5, 0.5, 1)) + .axes(20) + .translate(100, 0) + .arc(0, HALF_PI, radius, radius, new Color(1, 0, 0, 1)) + .axes(20) + .translate(100, 0) + .arc(0, HALF_PI + QUARTER_PI, radius, radius, new Color(1, 1, 0, 1)) + .axes(20) + .translate(100, 0) + .arc(0, PI, radius, radius, new Color(0, 1, 0, 1)) + .axes(20) + .translate(100, 0) + .arc(0, PI + QUARTER_PI, radius, radius, new Color(0, 1, 1, 1)) + .axes(20) + .translate(100, 0) + .arc(0, PI + HALF_PI, radius, radius, new Color(0, 0, 1, 1)) + .axes(20) + .reset() + .translate(100, 200) + .arc(0, PI + HALF_PI + QUARTER_PI, radius, radius, new Color(1, 0, 1, 1)) + .axes(20) + .translate(100, 0) + .circle(radius, new Color(1, 1, 1, 1)) + .axes(20) + .reset() +} + +/** + * @param {World} world + */ +function drawEllipticalArcs(world) { + const gizmo = world.getResource(DemoGizmo2D) + const radiusX = 40 + const radiusY = 20 + + gizmo + .translate(100, 300) + .arc(0, QUARTER_PI, radiusX, radiusY, new Color(0.5, 0.5, 0.5, 1)) + .axes(20) + .translate(100, 0) + .arc(0, HALF_PI, radiusX, radiusY, new Color(1, 0, 0, 1)) + .axes(20) + .translate(100, 0) + .arc(0, HALF_PI + QUARTER_PI, radiusX, radiusY, new Color(1, 1, 0, 1)) + .axes(20) + .translate(100, 0) + .arc(0, PI, radiusX, radiusY, new Color(0, 1, 0, 1)) + .axes(20) + .translate(100, 0) + .arc(0, PI + QUARTER_PI, radiusX, radiusY, new Color(0, 1, 1, 1)) + .axes(20) + .translate(100, 0) + .arc(0, PI + HALF_PI, radiusX, radiusY, new Color(0, 0, 1, 1)) + .axes(20) + .reset() + .translate(100, 400) + .arc(0, PI + HALF_PI + QUARTER_PI, radiusX, radiusY, new Color(1, 0, 1, 1)) + .axes(20) + .translate(100, 0) + .ellipse(radiusX, radiusY, new Color(1, 1, 1, 1)) + .axes(20) + .reset() +} diff --git a/examples/samples/gizmos/2d/grid.js b/examples/samples/gizmos/2d/grid.js new file mode 100644 index 00000000..be256d4f --- /dev/null +++ b/examples/samples/gizmos/2d/grid.js @@ -0,0 +1,76 @@ +import { + World, + Color, + Vector2, + BVector2, + GizmoLineStyle, + AppSchedule, + App, + Canvas2DRendererPlugin, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger, + Gizmo2D, + Gizmo2DPlugin, + typeidGeneric +} from 'wima' +import { HackPlugin, addDefaultCamera2D, setupViewport } from '../../utils.js' + +class Demo { } + +/** + * @augments {Gizmo2D} + */ +class DemoGizmo2D extends Gizmo2D { } + +const app = new App() + +// We have to alias the gizmo resource manually +app.getWorld().setResourceAlias(typeidGeneric(Gizmo2D, [Demo]), DemoGizmo2D) + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerPlugin(new Gizmo2DPlugin({ + label: Demo + })) + .registerSystem(AppSchedule.Startup, init) + .registerSystem(AppSchedule.Startup, addDefaultCamera2D) + .registerSystem(AppSchedule.Update, setupViewport) + .registerSystem(AppSchedule.Update, drawGrid) + .registerDebugger(new FPSDebugger()) + .run() + +/** + * @param {World} world + */ +function init(world) { + const gizmo = world.getResource(DemoGizmo2D) + + gizmo.settings.lineWidth = 2 + gizmo.settings.lineStyle = GizmoLineStyle.Solid +} + +/** + * @param {World} world + */ +function drawGrid(world) { + const gizmo = world.getResource(DemoGizmo2D) + + gizmo + .translate(200, 200) + .grid( + new Vector2(10, 10), + new Vector2(25, 25) + ) + .translate(0, 300) + .grid( + new Vector2(10, 10), + new Vector2(25, 25), + Color.WHITE.clone(), + new BVector2(true, true) + ) + .reset() +} diff --git a/examples/samples/gizmos/2d/index.js b/examples/samples/gizmos/2d/index.js new file mode 100644 index 00000000..e89be28f --- /dev/null +++ b/examples/samples/gizmos/2d/index.js @@ -0,0 +1,11 @@ +const lineStyle = new URL('./linestyle.js', import.meta.url) +const arcs = new URL('./arcs.js', import.meta.url) +const shapes = new URL('./shapes.js', import.meta.url) +const grid = new URL('./grid.js', import.meta.url) + +export default { + 'arcs': arcs, + 'shapes': shapes, + 'grid': grid, + 'line styles': lineStyle +} diff --git a/demos/demos/gizmos/linestyle.js b/examples/samples/gizmos/2d/linestyle.js similarity index 58% rename from demos/demos/gizmos/linestyle.js rename to examples/samples/gizmos/2d/linestyle.js index eb8d4619..a456a053 100644 --- a/demos/demos/gizmos/linestyle.js +++ b/examples/samples/gizmos/2d/linestyle.js @@ -1,14 +1,56 @@ -/** @import {Entity} from 'wima' */ import { World, Color, - Demo, Vector2, - GizmoLineStyle + GizmoLineStyle, + App, + AppSchedule, + Canvas2DRendererPlugin, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger, + Gizmo2D, + Gizmo2DPlugin, + typeidGeneric } from 'wima' -import { Demo1Gizmo2D, Demo2Gizmo2D } from '../utils.js' +import { HackPlugin, addDefaultCamera2D, setupViewport } from '../../utils.js' -export default new Demo('gizmo2d/line style', [init], [update]) +class Demo1 { } +class Demo2 { } + +/** + * @augments {Gizmo2D} + */ +class Demo1Gizmo2D extends Gizmo2D { } + +/** + * @augments {Gizmo2D} + */ +class Demo2Gizmo2D extends Gizmo2D { } + +const app = new App() + +// We have to alias the gizmo resource manually +app.getWorld().setResourceAlias(typeidGeneric(Gizmo2D, [Demo1]), Demo1Gizmo2D) +app.getWorld().setResourceAlias(typeidGeneric(Gizmo2D, [Demo2]), Demo2Gizmo2D) + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerPlugin(new Gizmo2DPlugin({ + label: Demo1 + })) + .registerPlugin(new Gizmo2DPlugin({ + label: Demo2 + })) + .registerSystem(AppSchedule.Startup, init) + .registerSystem(AppSchedule.Startup, addDefaultCamera2D) + .registerSystem(AppSchedule.Update, setupViewport) + .registerSystem(AppSchedule.Update, update) + .registerDebugger(new FPSDebugger()) + .run() /** * @param {World} world diff --git a/examples/samples/gizmos/2d/shapes.js b/examples/samples/gizmos/2d/shapes.js new file mode 100644 index 00000000..85f9f948 --- /dev/null +++ b/examples/samples/gizmos/2d/shapes.js @@ -0,0 +1,79 @@ +import { + World, + Color, + Vector2, + GizmoLineStyle, + App, + AppSchedule, + Canvas2DRendererPlugin, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger, + Gizmo2D, + Gizmo2DPlugin, + typeidGeneric +} from 'wima' +import { HackPlugin, addDefaultCamera2D, setupViewport } from '../../utils.js' + +class Demo { } + +/** + * @augments {Gizmo2D} + */ +class DemoGizmo2D extends Gizmo2D { } + +const app = new App() + +// We have to alias the gizmo resource manually +app.getWorld().setResourceAlias(typeidGeneric(Gizmo2D, [Demo]), DemoGizmo2D) + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerPlugin(new Gizmo2DPlugin({ + label: Demo + })) + .registerSystem(AppSchedule.Startup, init) + .registerSystem(AppSchedule.Startup, addDefaultCamera2D) + .registerSystem(AppSchedule.Update, setupViewport) + .registerSystem(AppSchedule.Update, update) + .registerDebugger(new FPSDebugger()) + .run() + +/** + * @param {World} world + */ +function init(world) { + const gizmo = world.getResource(DemoGizmo2D) + + gizmo.settings.lineWidth = 2 + gizmo.settings.lineStyle = GizmoLineStyle.Solid +} + +/** + * @param {World} world + */ +function update(world) { + const gizmo = world.getResource(DemoGizmo2D) + + gizmo + .translate(100, 150) + .aabb(50, 50, new Color(1, 1, 1, 1)) + .axes(20) + .translate(150, 0) + .ellipse(60, 40, new Color(1, 1, 1, 1)) + .axes(20) + .translate(150, 0) + .circle(50, new Color(1, 1, 1, 1)) + .axes(20) + .reset() + .translate(100, 300) + .grid(new Vector2(10, 10), new Vector2(10, 10)) + .axes(20) + .translate(150, 0) + .line(new Vector2(-50, 0), new Vector2(50, 0)) + .axes(20) + .reset() +} diff --git a/examples/samples/gizmos/index.js b/examples/samples/gizmos/index.js new file mode 100644 index 00000000..98a29256 --- /dev/null +++ b/examples/samples/gizmos/index.js @@ -0,0 +1,5 @@ +import { default as d2 } from './2d/index.js' + +export default { + '2d': d2 +} diff --git a/examples/samples/index.js b/examples/samples/index.js new file mode 100644 index 00000000..f0dd7903 --- /dev/null +++ b/examples/samples/index.js @@ -0,0 +1,19 @@ +import { default as audio } from './audio/index.js' +import { default as animation } from './animation/index.js' +import { default as transform } from './transform/index.js' +import { default as render } from './render/index.js' +import { default as ecs } from './ecs/index.js' +import { default as input } from './input/index.js' +import { default as tween } from './tween/index.js' +import { default as gizmos } from './gizmos/index.js' + +export default { + 'animation': animation, + 'audio': audio, + 'transform': transform, + 'render': render, + 'ecs': ecs, + 'input': input, + 'tween': tween, + 'gizmos': gizmos +} diff --git a/examples/samples/input/index.js b/examples/samples/input/index.js new file mode 100644 index 00000000..731f2421 --- /dev/null +++ b/examples/samples/input/index.js @@ -0,0 +1,9 @@ +const keyboard = new URL('./keyboard.js', import.meta.url) +const mouse = new URL('./mouse.js', import.meta.url) +const touch = new URL('./touch.js', import.meta.url) + +export default { + 'keyboard': keyboard, + 'mouse': mouse, + 'touch': touch +} diff --git a/demos/demos/input/keyboard.js b/examples/samples/input/keyboard.js similarity index 83% rename from demos/demos/input/keyboard.js rename to examples/samples/input/keyboard.js index 0629cd24..1fcd70b5 100644 --- a/demos/demos/input/keyboard.js +++ b/examples/samples/input/keyboard.js @@ -3,7 +3,6 @@ import { createTransform2D, World, Color, - Demo, Query, EntityCommands, Cleanup, @@ -14,15 +13,18 @@ import { Meshed, BasicMaterial2D, BasicMaterialAssets, - MeshAssets + MeshAssets, + App, + AppSchedule, + Canvas2DRendererPlugin, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger } from 'wima' -import { addDefaultCamera2D } from '../utils.js' +import { addDefaultCamera2D, HackPlugin, setupViewport } from '../utils.js' -export default new Demo( - 'keyboard', - [init, spawnDigits, spawnAlphabet, addDefaultCamera2D], - [update] -) +/** @type {Map} */ +class KeytoEntityMap extends Map { } const offsetX = -400 const offsetY = -100 @@ -30,9 +32,21 @@ const itemWidth = 50 const itemHeight = 50 const paddingWidth = 10 const paddingHeight = 10 - -/** @type {Map} */ -class KeytoEntityMap extends Map { } +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerSystem(AppSchedule.Startup, addDefaultCamera2D) + .registerSystem(AppSchedule.Startup, init) + .registerSystem(AppSchedule.Startup, spawnAlphabet) + .registerSystem(AppSchedule.Startup, spawnDigits) + .registerSystem(AppSchedule.Update, setupViewport) + .registerSystem(AppSchedule.Update, update) + .registerDebugger(new FPSDebugger()) + .run() /** * @param {World} world diff --git a/demos/demos/input/mouse.js b/examples/samples/input/mouse.js similarity index 80% rename from demos/demos/input/mouse.js rename to examples/samples/input/mouse.js index 2939c5a1..0c5ac046 100644 --- a/demos/demos/input/mouse.js +++ b/examples/samples/input/mouse.js @@ -3,7 +3,6 @@ import { createTransform2D, World, Color, - Demo, Query, EntityCommands, Cleanup, @@ -16,21 +15,15 @@ import { Meshed, BasicMaterial, BasicMaterial2D, BasicMaterialAssets, - MeshAssets + MeshAssets, + App, + DOMWindowPlugin, + AppSchedule, + Canvas2DRendererPlugin, + DefaultPlugin, + FPSDebugger } from 'wima' -import { addDefaultCamera2D } from '../utils.js' - -export default new Demo( - 'mouse', - [spawnButtons, spawnMouseFollower, addDefaultCamera2D], - [updateFollower, updateButtons] -) - -const offsetX = 100 -const offsetY = 100 -const itemWidth = 50 -const itemHeight = 50 -const paddingWidth = 10 +import { addDefaultCamera2D, HackPlugin, setupViewport } from '../utils.js' /** @type {Map} */ class KeytoEntityMap extends Map { } @@ -44,6 +37,27 @@ class MouseEntity { } } +const offsetX = 100 +const offsetY = 100 +const itemWidth = 50 +const itemHeight = 50 +const paddingWidth = 10 +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerSystem(AppSchedule.Startup, spawnButtons) + .registerSystem(AppSchedule.Startup, spawnMouseFollower) + .registerSystem(AppSchedule.Startup, addDefaultCamera2D) + .registerSystem(AppSchedule.Update, setupViewport) + .registerSystem(AppSchedule.Update, updateFollower) + .registerSystem(AppSchedule.Update, updateButtons) + .registerDebugger(new FPSDebugger()) + .run() + /** * @param {World} world */ diff --git a/demos/demos/input/touch.js b/examples/samples/input/touch.js similarity index 72% rename from demos/demos/input/touch.js rename to examples/samples/input/touch.js index 68de7de2..5280db50 100644 --- a/demos/demos/input/touch.js +++ b/examples/samples/input/touch.js @@ -3,7 +3,6 @@ import { createTransform2D, World, Color, - Demo, Query, EntityCommands, warn, @@ -15,19 +14,33 @@ import { BasicMaterial2D, Meshed, BasicMaterialAssets, - MeshAssets + MeshAssets, + App, + AppSchedule, + Canvas2DRendererPlugin, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger } from 'wima' -import { addDefaultCamera2D } from '../utils.js' - -export default new Demo( - 'touch', - [init, addDefaultCamera2D], - [update] -) +import { addDefaultCamera2D, HackPlugin, setupViewport } from '../utils.js' /** @type {Map} */ class TouchtoEntityMap extends Map { } +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerSystem(AppSchedule.Startup, init) + .registerSystem(AppSchedule.Startup, addDefaultCamera2D) + .registerSystem(AppSchedule.Update, setupViewport) + .registerSystem(AppSchedule.Update, update) + .registerDebugger(new FPSDebugger()) + .run() + /** * @param {World} world */ diff --git a/examples/samples/render/canvas-2d/index.js b/examples/samples/render/canvas-2d/index.js new file mode 100644 index 00000000..3af34165 --- /dev/null +++ b/examples/samples/render/canvas-2d/index.js @@ -0,0 +1,5 @@ +const materials = new URL('./material.js', import.meta.url) + +export default { + 'materials': materials +} diff --git a/demos/demos/render/canvas-2d/material.js b/examples/samples/render/canvas-2d/material.js similarity index 51% rename from demos/demos/render/canvas-2d/material.js rename to examples/samples/render/canvas-2d/material.js index 30a3e74a..313a85bf 100644 --- a/demos/demos/render/canvas-2d/material.js +++ b/examples/samples/render/canvas-2d/material.js @@ -2,26 +2,39 @@ import { Mesh, createTransform2D, World, - Demo, Cleanup, EntityCommands, BasicMaterial, Meshed, BasicMaterial2D, BasicMaterialAssets, - MeshAssets + MeshAssets, + App, + AppSchedule, + Canvas2DRendererPlugin, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger } from 'wima' -import { addDefaultCamera2D } from '../../utils.js' +import { addDefaultCamera2D, HackPlugin, setupViewport } from '../../utils.js' -export default new Demo( - 'materials', - [init, addDefaultCamera2D] -) +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerSystem(AppSchedule.Startup, init) + .registerSystem(AppSchedule.Startup, addDefaultCamera2D) + .registerSystem(AppSchedule.Update, setupViewport) + .registerDebugger(new FPSDebugger()) + .run() /** * @param {World} world */ -export async function init(world) { +function init(world) { const commands = world.getResource(EntityCommands) const meshes = world.getResource(MeshAssets) const basicMaterials = world.getResource(BasicMaterialAssets) diff --git a/examples/samples/render/index.js b/examples/samples/render/index.js new file mode 100644 index 00000000..2b3492ac --- /dev/null +++ b/examples/samples/render/index.js @@ -0,0 +1,7 @@ +import webgl from './webgl/index.js' +import canvas2d from './canvas-2d/index.js' + +export default { + 'canvas2d': canvas2d, + 'webgl': webgl +} diff --git a/demos/demos/render/webgl/movingtriangle.js b/examples/samples/render/webgl/basictriangle.js similarity index 50% rename from demos/demos/render/webgl/movingtriangle.js rename to examples/samples/render/webgl/basictriangle.js index f0885382..e65e44e1 100644 --- a/demos/demos/render/webgl/movingtriangle.js +++ b/examples/samples/render/webgl/basictriangle.js @@ -1,31 +1,40 @@ import { - Demo, Mesh, - Position3D, World, Cleanup, - Query, EntityCommands, - VirtualClock, + createTransform3D, BasicMaterial, Meshed, BasicMaterial3D, - createTransform3D, BasicMaterialAssets, - MeshAssets + MeshAssets, + App, + AppSchedule, + DOMWindowPlugin, + DefaultPlugin, + FPSDebugger, + WebglRendererPlugin } from 'wima' -import { addDefaultCamera3D } from '../../utils.js' +import { addDefaultCamera3D, HackPlugin, setupViewportWebgl } from '../../utils.js' + +const app = new App() -export const movingtriangle = new Demo( - 'moving triangle', - [addmesh, addDefaultCamera3D], - [updateMesh] -) +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new WebglRendererPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerDebugger(new FPSDebugger()) + .registerSystem(AppSchedule.Startup, spawnMesh) + .registerSystem(AppSchedule.Startup, addDefaultCamera3D) + .registerSystem(AppSchedule.Update, setupViewportWebgl) + .run() /** * @param {World} world */ -function addmesh(world) { +function spawnMesh(world) { const commands = world.getResource(EntityCommands) const meshes = world.getResource(MeshAssets) const materials = world.getResource(BasicMaterialAssets) @@ -43,17 +52,3 @@ function addmesh(world) { ]) .build() } - -/** - * @param {World} world - */ -function updateMesh(world) { - const query = new Query(world, [Position3D, Meshed]) - const clock = world.getResource(VirtualClock) - const dt = clock.getElapsed() - - query.each(([position]) => { - position.x = Math.sin(dt) * 0.5 - position.y = Math.cos(dt) * 0.5 - }) -} diff --git a/demos/demos/render/webgl/cameraorthographic.js b/examples/samples/render/webgl/cameraorthographic.js similarity index 65% rename from demos/demos/render/webgl/cameraorthographic.js rename to examples/samples/render/webgl/cameraorthographic.js index 53eeb9c1..3d369d06 100644 --- a/demos/demos/render/webgl/cameraorthographic.js +++ b/examples/samples/render/webgl/cameraorthographic.js @@ -1,5 +1,4 @@ import { - Demo, Mesh, OrthographicProjection, Rotation3D, @@ -14,14 +13,29 @@ import { createMovable3D, Query, BasicMaterialAssets, - MeshAssets + MeshAssets, + App, + AppSchedule, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger, + WebglRendererPlugin } from 'wima' +import { HackPlugin, setupViewportWebgl } from '../../utils.js' -export const orthograhicCamera = new Demo( - 'orthograhic camera', - [addmesh, addCamera3D], - [update] -) +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new WebglRendererPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerDebugger(new FPSDebugger()) + .registerSystem(AppSchedule.Startup, spawnMesh) + .registerSystem(AppSchedule.Startup, addCamera3D) + .registerSystem(AppSchedule.Update, setupViewportWebgl) + .registerSystem(AppSchedule.Update, update) + .run() /** * @param {World} world @@ -43,7 +57,7 @@ function addCamera3D(world) { /** * @param {World} world */ -function addmesh(world) { +function spawnMesh(world) { const commands = world.getResource(EntityCommands) const meshes = world.getResource(MeshAssets) const materials = world.getResource(BasicMaterialAssets) diff --git a/demos/demos/render/webgl/cameraperspective.js b/examples/samples/render/webgl/cameraperspective.js similarity index 64% rename from demos/demos/render/webgl/cameraperspective.js rename to examples/samples/render/webgl/cameraperspective.js index 2c076d16..a65c3712 100644 --- a/demos/demos/render/webgl/cameraperspective.js +++ b/examples/samples/render/webgl/cameraperspective.js @@ -1,5 +1,4 @@ import { - Demo, Mesh, PerspectiveProjection, Camera, @@ -14,14 +13,29 @@ import { Query, Rotation3D, BasicMaterialAssets, - MeshAssets + MeshAssets, + App, + AppSchedule, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger, + WebglRendererPlugin } from 'wima' +import { HackPlugin, setupViewportWebgl } from '../../utils.js' -export const perspectiveCamera = new Demo( - 'perspective camera', - [addmesh, addCamera3D], - [update] -) +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new WebglRendererPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerDebugger(new FPSDebugger()) + .registerSystem(AppSchedule.Startup, spawnMesh) + .registerSystem(AppSchedule.Startup, addCamera3D) + .registerSystem(AppSchedule.Update, setupViewportWebgl) + .registerSystem(AppSchedule.Update, update) + .run() /** * @param {World} world @@ -41,7 +55,7 @@ function addCamera3D(world) { /** * @param {World} world */ -function addmesh(world) { +function spawnMesh(world) { const commands = world.getResource(EntityCommands) const meshes = world.getResource(MeshAssets) const materials = world.getResource(BasicMaterialAssets) diff --git a/demos/demos/render/webgl/camerarotate.js b/examples/samples/render/webgl/camerarotate.js similarity index 64% rename from demos/demos/render/webgl/camerarotate.js rename to examples/samples/render/webgl/camerarotate.js index 78297845..89dba837 100644 --- a/demos/demos/render/webgl/camerarotate.js +++ b/examples/samples/render/webgl/camerarotate.js @@ -1,5 +1,4 @@ import { - Demo, Mesh, Rotation3D, World, @@ -13,14 +12,29 @@ import { createRawMovable3D, Query, BasicMaterialAssets, - MeshAssets + MeshAssets, + App, + AppSchedule, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger, + WebglRendererPlugin } from 'wima' +import { HackPlugin, setupViewportWebgl } from '../../utils.js' -export const cameraRotate = new Demo( - 'camera rotate', - [addmesh, addCamera3D], - [update] -) +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new WebglRendererPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerDebugger(new FPSDebugger()) + .registerSystem(AppSchedule.Startup, spawnMesh) + .registerSystem(AppSchedule.Startup, addCamera3D) + .registerSystem(AppSchedule.Update, setupViewportWebgl) + .registerSystem(AppSchedule.Update, update) + .run() /** * @param {World} world @@ -42,7 +56,7 @@ function addCamera3D(world) { /** * @param {World} world */ -function addmesh(world) { +function spawnMesh(world) { const commands = world.getResource(EntityCommands) const meshes = world.getResource(MeshAssets) const materials = world.getResource(BasicMaterialAssets) diff --git a/demos/demos/render/webgl/colorchangetriangle.js b/examples/samples/render/webgl/colorchangetriangle.js similarity index 68% rename from demos/demos/render/webgl/colorchangetriangle.js rename to examples/samples/render/webgl/colorchangetriangle.js index a13e0596..0ff670ff 100644 --- a/demos/demos/render/webgl/colorchangetriangle.js +++ b/examples/samples/render/webgl/colorchangetriangle.js @@ -1,5 +1,4 @@ import { - Demo, Mesh, Color, World, @@ -10,26 +9,39 @@ import { BasicMaterial3D, Meshed, BasicMaterialAssets, - MeshAssets + MeshAssets, + App, + AppSchedule, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger, + WebglRendererPlugin } from 'wima' -import { addDefaultCamera3D } from '../../utils.js' - -const MATERIAL_PATH = 'colorChange' - -export const changecolortriangle = new Demo( - 'color changing triangle', - [addmesh, addDefaultCamera3D], - [changeColor] -) +import { addDefaultCamera3D, HackPlugin, setupViewportWebgl } from '../../utils.js' class ChangeColor { color = new Color(0.003, 0.006, 0.012) } +const MATERIAL_PATH = 'colorChange' +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new WebglRendererPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerDebugger(new FPSDebugger()) + .registerSystem(AppSchedule.Startup, spawnMesh) + .registerSystem(AppSchedule.Startup, addDefaultCamera3D) + .registerSystem(AppSchedule.Update, setupViewportWebgl) + .registerSystem(AppSchedule.Update, changeColor) + .run() + /** * @param {World} world */ -function addmesh(world) { +function spawnMesh(world) { world.setResource(new ChangeColor()) const commands = world.getResource(EntityCommands) const meshes = world.getResource(MeshAssets) diff --git a/demos/demos/render/webgl/geometries.js b/examples/samples/render/webgl/geometries.js similarity index 68% rename from demos/demos/render/webgl/geometries.js rename to examples/samples/render/webgl/geometries.js index 9caf6463..21a508d7 100644 --- a/demos/demos/render/webgl/geometries.js +++ b/examples/samples/render/webgl/geometries.js @@ -1,5 +1,4 @@ import { - Demo, Mesh, Position3D, Rotation3D, @@ -12,20 +11,34 @@ import { createMovable3D, Query, BasicMaterialAssets, - MeshAssets + MeshAssets, + App, + AppSchedule, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger, + WebglRendererPlugin } from 'wima' -import { addDefaultCamera3D } from '../../utils.js' +import { addDefaultCamera3D, HackPlugin, setupViewportWebgl } from '../../utils.js' -export const geometries = new Demo( - 'mesh geometries', - [addmeshes, addDefaultCamera3D], - [update] -) +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new WebglRendererPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerDebugger(new FPSDebugger()) + .registerSystem(AppSchedule.Startup, spawnMeshes) + .registerSystem(AppSchedule.Startup, addDefaultCamera3D) + .registerSystem(AppSchedule.Update, setupViewportWebgl) + .registerSystem(AppSchedule.Update, update) + .run() /** * @param {World} world */ -function addmeshes(world) { +function spawnMeshes(world) { const commands = world.getResource(EntityCommands) const meshes = world.getResource(MeshAssets) const materials = world.getResource(BasicMaterialAssets) diff --git a/examples/samples/render/webgl/index.js b/examples/samples/render/webgl/index.js new file mode 100644 index 00000000..d1e85cb8 --- /dev/null +++ b/examples/samples/render/webgl/index.js @@ -0,0 +1,15 @@ +const basictriangle = new URL('./basictriangle.js', import.meta.url) +const colorchangetriangle = new URL('./colorchangetriangle.js', import.meta.url) +const geometries = new URL('./geometries.js', import.meta.url) +const camerarotate = new URL('./camerarotate.js', import.meta.url) +const cameraperspective = new URL('./cameraperspective.js', import.meta.url) +const cameraorthographic = new URL('./cameraorthographic.js', import.meta.url) + +export default { + 'basictriangle': basictriangle, + 'colorchangetriangle': colorchangetriangle, + 'geometries': geometries, + 'camerarotate': camerarotate, + 'cameraperspective': cameraperspective, + 'cameraorthographic': cameraorthographic +} diff --git a/examples/samples/transform/2d/index.js b/examples/samples/transform/2d/index.js new file mode 100644 index 00000000..bd4e2f5d --- /dev/null +++ b/examples/samples/transform/2d/index.js @@ -0,0 +1,13 @@ +const translate2d = new URL('./translate.js', import.meta.url) +const rotate2d = new URL('./rotate.js', import.meta.url) +const scale2d = new URL('./scale.js', import.meta.url) +const propagate2d = new URL('./propagate.js', import.meta.url) +const lookat2d = new URL('./lookat.js', import.meta.url) + +export default { + 'translate2d': translate2d, + 'rotate2d': rotate2d, + 'scale2d': scale2d, + 'propagate2d': propagate2d, + 'lookat2d': lookat2d +} diff --git a/demos/demos/transform/2d/lookat.js b/examples/samples/transform/2d/lookat.js similarity index 79% rename from demos/demos/transform/2d/lookat.js rename to examples/samples/transform/2d/lookat.js index e1f6c735..086ecc04 100644 --- a/demos/demos/transform/2d/lookat.js +++ b/examples/samples/transform/2d/lookat.js @@ -1,6 +1,5 @@ import { BasicMaterial, - Demo, Mesh, World, Cleanup, @@ -19,15 +18,34 @@ import { Color, HALF_PI, BasicMaterialAssets, - MeshAssets + MeshAssets, + App, + AppSchedule, + Canvas2DRendererPlugin, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger } from 'wima' -import { addDefaultCamera2D } from '../../utils.js' +import { addDefaultCamera2D, HackPlugin, setupViewport } from '../../utils.js' -export default new Demo( - 'transform2d/lookAt', - [spawnLookers, spawnTarget, addDefaultCamera2D], - [updateLookers, updateTarget] -) +class Target { } +class Looker { } + +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerSystem(AppSchedule.Startup, spawnLookers) + .registerSystem(AppSchedule.Startup, spawnTarget) + .registerSystem(AppSchedule.Startup, addDefaultCamera2D) + .registerSystem(AppSchedule.Update, setupViewport) + .registerSystem(AppSchedule.Update, updateLookers) + .registerSystem(AppSchedule.Update, updateTarget) + .registerDebugger(new FPSDebugger()) + .run() /** * @param {World} world @@ -131,6 +149,3 @@ function updateTarget(world) { position.x = amplitudeX * Math.cos(dt * frequencyX * speed) position.y = amplitudeY * Math.sin(dt * frequencyY * speed) } - -class Target { } -class Looker { } diff --git a/demos/demos/transform/2d/propagate.js b/examples/samples/transform/2d/propagate.js similarity index 75% rename from demos/demos/transform/2d/propagate.js rename to examples/samples/transform/2d/propagate.js index 1cf88c5f..b574246f 100644 --- a/demos/demos/transform/2d/propagate.js +++ b/examples/samples/transform/2d/propagate.js @@ -1,5 +1,4 @@ import { - Demo, World, VirtualClock, BasicMaterial, @@ -19,15 +18,29 @@ import { has, PI, QUARTER_PI, - Rotary + Rotary, + AppSchedule, + Canvas2DRendererPlugin, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger, + App } from 'wima' -import { addDefaultCamera2D } from '../../utils.js' +import { addDefaultCamera2D, HackPlugin, setupViewport } from '../../utils.js' -export default new Demo( - 'transform2d/propagate', - [addDefaultCamera2D, addMeshes], - [update] -) +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerSystem(AppSchedule.Startup, addMeshes) + .registerSystem(AppSchedule.Startup, addDefaultCamera2D) + .registerSystem(AppSchedule.Update, update) + .registerSystem(AppSchedule.Update, setupViewport) + .registerDebugger(new FPSDebugger()) + .run() /** * @param {World} world diff --git a/demos/demos/transform/2d/rotate.js b/examples/samples/transform/2d/rotate.js similarity index 58% rename from demos/demos/transform/2d/rotate.js rename to examples/samples/transform/2d/rotate.js index 15eb9a72..cdb37d4d 100644 --- a/demos/demos/transform/2d/rotate.js +++ b/examples/samples/transform/2d/rotate.js @@ -1,6 +1,5 @@ import { BasicMaterial, - Demo, Mesh, World, Cleanup, @@ -12,15 +11,29 @@ import { PI, Query, BasicMaterialAssets, - MeshAssets + MeshAssets, + AppSchedule, + Canvas2DRendererPlugin, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger, + App } from 'wima' -import { addDefaultCamera2D } from '../../utils.js' +import { addDefaultCamera2D, HackPlugin, setupViewport } from '../../utils.js' -export default new Demo( - 'transform2d/rotate', - [addmesh, addDefaultCamera2D], - [update] -) +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerSystem(AppSchedule.Startup, addmesh) + .registerSystem(AppSchedule.Startup, addDefaultCamera2D) + .registerSystem(AppSchedule.Update, update) + .registerSystem(AppSchedule.Update, setupViewport) + .registerDebugger(new FPSDebugger()) + .run() /** * @param {World} world diff --git a/demos/demos/transform/2d/scale.js b/examples/samples/transform/2d/scale.js similarity index 60% rename from demos/demos/transform/2d/scale.js rename to examples/samples/transform/2d/scale.js index 92f73343..d7c7753e 100644 --- a/demos/demos/transform/2d/scale.js +++ b/examples/samples/transform/2d/scale.js @@ -1,6 +1,6 @@ import { BasicMaterial, - Demo, + Mesh, Scale2D, World, @@ -12,15 +12,29 @@ import { BasicMaterial2D, createTransform2D, BasicMaterialAssets, - MeshAssets + MeshAssets, + App, + AppSchedule, + Canvas2DRendererPlugin, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger } from 'wima' -import { addDefaultCamera2D } from '../../utils.js' +import { addDefaultCamera2D, HackPlugin, setupViewport } from '../../utils.js' + +const app = new App() -export default new Demo( - 'transform2d/scale', - [addmesh, addDefaultCamera2D], - [updateMesh] -) +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerSystem(AppSchedule.Startup, addmesh) + .registerSystem(AppSchedule.Startup, addDefaultCamera2D) + .registerSystem(AppSchedule.Update, updateMesh) + .registerSystem(AppSchedule.Update, setupViewport) + .registerDebugger(new FPSDebugger()) + .run() /** * @param {World} world diff --git a/demos/demos/transform/2d/translate.js b/examples/samples/transform/2d/translate.js similarity index 61% rename from demos/demos/transform/2d/translate.js rename to examples/samples/transform/2d/translate.js index bf551f31..1a0a15a6 100644 --- a/demos/demos/transform/2d/translate.js +++ b/examples/samples/transform/2d/translate.js @@ -1,6 +1,5 @@ import { BasicMaterial, - Demo, Mesh, Position2D, World, @@ -12,15 +11,29 @@ import { Meshed, createTransform2D, BasicMaterialAssets, - MeshAssets + MeshAssets, + App, + AppSchedule, + Canvas2DRendererPlugin, + DOMWindowPlugin, + DefaultPlugin, + FPSDebugger } from 'wima' -import { addDefaultCamera2D } from '../../utils.js' +import { addDefaultCamera2D, HackPlugin, setupViewport } from '../../utils.js' -export default new Demo( - 'transform2d/translate', - [addmesh, addDefaultCamera2D], - [updateMesh] -) +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerSystem(AppSchedule.Startup, addmesh) + .registerSystem(AppSchedule.Startup, addDefaultCamera2D) + .registerSystem(AppSchedule.Update, updateMesh) + .registerSystem(AppSchedule.Update, setupViewport) + .registerDebugger(new FPSDebugger()) + .run() /** * @param {World} world diff --git a/examples/samples/transform/3d/index.js b/examples/samples/transform/3d/index.js new file mode 100644 index 00000000..3b4b697c --- /dev/null +++ b/examples/samples/transform/3d/index.js @@ -0,0 +1,13 @@ +const translate3d = new URL('./translate.js', import.meta.url) +const rotate3d = new URL('./rotate.js', import.meta.url) +const scale3d = new URL('./scale.js', import.meta.url) +const lookAt3d = new URL('./lookat.js', import.meta.url) +const propagate3d = new URL('./propagate.js', import.meta.url) + +export default { + 'translate3d': translate3d, + 'rotate3d': rotate3d, + 'scale3d': scale3d, + 'lookAt3d': lookAt3d, + 'propagate3d': propagate3d +} diff --git a/demos/demos/transform/3d/lookat.js b/examples/samples/transform/3d/lookat.js similarity index 76% rename from demos/demos/transform/3d/lookat.js rename to examples/samples/transform/3d/lookat.js index 1bf13c03..d8bcea57 100644 --- a/demos/demos/transform/3d/lookat.js +++ b/examples/samples/transform/3d/lookat.js @@ -1,6 +1,5 @@ import { BasicMaterial, - Demo, Mesh, World, Cleanup, @@ -17,20 +16,39 @@ import { Position3D, Color, BasicMaterialAssets, - MeshAssets + MeshAssets, + App, + AppSchedule, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger, + WebglRendererPlugin } from 'wima' -import { addDefaultCamera3D } from '../../utils.js' +import { addDefaultCamera3D, HackPlugin, setupViewportWebgl } from '../../utils.js' -export default new Demo( - 'transform3d/lookAt', - [addLookers, addTarget, addDefaultCamera3D], - [updateLookers, updateTarget] -) +class Target { } +class Looker { } + +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new WebglRendererPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerDebugger(new FPSDebugger()) + .registerSystem(AppSchedule.Startup, spawnLookers) + .registerSystem(AppSchedule.Startup, spawnTarget) + .registerSystem(AppSchedule.Startup, addDefaultCamera3D) + .registerSystem(AppSchedule.Update, setupViewportWebgl) + .registerSystem(AppSchedule.Update, updateLookers) + .registerSystem(AppSchedule.Update, updateTarget) + .run() /** * @param {World} world */ -function addLookers(world) { +function spawnLookers(world) { const commands = world.getResource(EntityCommands) const meshes = world.getResource(MeshAssets) const materials = world.getResource(BasicMaterialAssets) @@ -58,7 +76,7 @@ function addLookers(world) { /** * @param {World} world */ -function addTarget(world) { +function spawnTarget(world) { const commands = world.getResource(EntityCommands) const meshes = world.getResource(MeshAssets) const materials = world.getResource(BasicMaterialAssets) @@ -130,6 +148,3 @@ function updateTarget(world) { position.x = amplitudeX * Math.cos(dt * frequencyX * speed) position.y = amplitudeY * Math.sin(dt * frequencyY * speed) } - -class Target { } -class Looker { } diff --git a/demos/demos/transform/3d/propagate.js b/examples/samples/transform/3d/propagate.js similarity index 74% rename from demos/demos/transform/3d/propagate.js rename to examples/samples/transform/3d/propagate.js index 7652178a..46145ab6 100644 --- a/demos/demos/transform/3d/propagate.js +++ b/examples/samples/transform/3d/propagate.js @@ -1,5 +1,4 @@ import { - Demo, World, VirtualClock, BasicMaterial, @@ -18,20 +17,34 @@ import { MeshAssets, has, QUARTER_PI, - without + without, + App, + AppSchedule, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger, + WebglRendererPlugin } from 'wima' -import { addDefaultCamera3D } from '../../utils.js' +import { addDefaultCamera3D, HackPlugin, setupViewportWebgl } from '../../utils.js' -export default new Demo( - 'transform3d/propagate', - [addDefaultCamera3D, addMeshes], - [update] -) +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new WebglRendererPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerDebugger(new FPSDebugger()) + .registerSystem(AppSchedule.Startup, spawnMeshes) + .registerSystem(AppSchedule.Startup, addDefaultCamera3D) + .registerSystem(AppSchedule.Update, setupViewportWebgl) + .registerSystem(AppSchedule.Update, update) + .run() /** * @param {World} world */ -function addMeshes(world) { +function spawnMeshes(world) { const commands = world.getResource(EntityCommands) const meshes = world.getResource(MeshAssets) const materials = world.getResource(BasicMaterialAssets) diff --git a/demos/demos/transform/3d/rotate.js b/examples/samples/transform/3d/rotate.js similarity index 56% rename from demos/demos/transform/3d/rotate.js rename to examples/samples/transform/3d/rotate.js index 67933de6..dc18f3e3 100644 --- a/demos/demos/transform/3d/rotate.js +++ b/examples/samples/transform/3d/rotate.js @@ -1,6 +1,5 @@ import { BasicMaterial, - Demo, Mesh, World, Cleanup, @@ -12,20 +11,34 @@ import { PI, Query, BasicMaterialAssets, - MeshAssets + MeshAssets, + App, + AppSchedule, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger, + WebglRendererPlugin } from 'wima' -import { addDefaultCamera3D } from '../../utils.js' +import { addDefaultCamera3D, HackPlugin, setupViewportWebgl } from '../../utils.js' -export default new Demo( - 'transform3d/rotate', - [addmesh, addDefaultCamera3D], - [update] -) +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new WebglRendererPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerDebugger(new FPSDebugger()) + .registerSystem(AppSchedule.Startup, spawnMesh) + .registerSystem(AppSchedule.Startup, addDefaultCamera3D) + .registerSystem(AppSchedule.Update, setupViewportWebgl) + .registerSystem(AppSchedule.Update, update) + .run() /** * @param {World} world */ -function addmesh(world) { +function spawnMesh(world) { const commands = world.getResource(EntityCommands) const meshes = world.getResource(MeshAssets) const materials = world.getResource(BasicMaterialAssets) diff --git a/demos/demos/transform/3d/scale.js b/examples/samples/transform/3d/scale.js similarity index 59% rename from demos/demos/transform/3d/scale.js rename to examples/samples/transform/3d/scale.js index b38bd3d6..4ea2e893 100644 --- a/demos/demos/transform/3d/scale.js +++ b/examples/samples/transform/3d/scale.js @@ -1,6 +1,5 @@ import { BasicMaterial, - Demo, Mesh, Scale3D, World, @@ -12,20 +11,34 @@ import { BasicMaterial3D, createTransform3D, BasicMaterialAssets, - MeshAssets + MeshAssets, + App, + AppSchedule, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger, + WebglRendererPlugin } from 'wima' -import { addDefaultCamera3D } from '../../utils.js' +import { addDefaultCamera3D, HackPlugin, setupViewportWebgl } from '../../utils.js' -export default new Demo( - 'transform3d/scale', - [addmesh, addDefaultCamera3D], - [updateMesh] -) +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new WebglRendererPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerDebugger(new FPSDebugger()) + .registerSystem(AppSchedule.Startup, spawnMesh) + .registerSystem(AppSchedule.Startup, addDefaultCamera3D) + .registerSystem(AppSchedule.Update, setupViewportWebgl) + .registerSystem(AppSchedule.Update, updateMesh) + .run() /** * @param {World} world */ -function addmesh(world) { +function spawnMesh(world) { const commands = world.getResource(EntityCommands) const meshes = world.getResource(MeshAssets) const materials = world.getResource(BasicMaterialAssets) diff --git a/demos/demos/transform/3d/translate.js b/examples/samples/transform/3d/translate.js similarity index 59% rename from demos/demos/transform/3d/translate.js rename to examples/samples/transform/3d/translate.js index b7eb5d3e..031bf0a2 100644 --- a/demos/demos/transform/3d/translate.js +++ b/examples/samples/transform/3d/translate.js @@ -1,6 +1,5 @@ import { BasicMaterial, - Demo, Mesh, Position3D, World, @@ -12,20 +11,34 @@ import { Meshed, createTransform3D, BasicMaterialAssets, - MeshAssets + MeshAssets, + App, + AppSchedule, + DOMWindowPlugin, + DefaultPlugin, + FPSDebugger, + WebglRendererPlugin } from 'wima' -import { addDefaultCamera3D } from '../../utils.js' +import { addDefaultCamera3D, HackPlugin, setupViewportWebgl } from '../../utils.js' -export default new Demo( - 'transform3d/translate', - [addmesh, addDefaultCamera3D], - [updateMesh] -) +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new WebglRendererPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerDebugger(new FPSDebugger()) + .registerSystem(AppSchedule.Startup, spawnMesh) + .registerSystem(AppSchedule.Startup, addDefaultCamera3D) + .registerSystem(AppSchedule.Update, setupViewportWebgl) + .registerSystem(AppSchedule.Update, updateMesh) + .run() /** * @param {World} world */ -function addmesh(world) { +function spawnMesh(world) { const commands = world.getResource(EntityCommands) const meshes = world.getResource(MeshAssets) const materials = world.getResource(BasicMaterialAssets) diff --git a/examples/samples/transform/index.js b/examples/samples/transform/index.js new file mode 100644 index 00000000..15ae735d --- /dev/null +++ b/examples/samples/transform/index.js @@ -0,0 +1,7 @@ +import { default as d2 } from './2d/index.js' +import { default as d3 } from './3d/index.js' + +export default { + '2d': d2, + '3d': d3 +} diff --git a/demos/demos/tween/easing.js b/examples/samples/tween/easing.js similarity index 70% rename from demos/demos/tween/easing.js rename to examples/samples/tween/easing.js index 978d42cb..26961600 100644 --- a/demos/demos/tween/easing.js +++ b/examples/samples/tween/easing.js @@ -7,21 +7,34 @@ import { TweenFlip, createTransform2D, World, - Demo, Cleanup, EntityCommands, Assets, typeidGeneric, BasicMaterial, Meshed, - BasicMaterial2D + BasicMaterial2D, + App, + AppSchedule, + Canvas2DRendererPlugin, + DefaultPlugin, + DOMWindowPlugin, + FPSDebugger } from 'wima' -import { addDefaultCamera2D } from '../utils.js' +import { addDefaultCamera2D, HackPlugin, setupViewport } from '../utils.js' -export default new Demo( - 'easing', - [init, addDefaultCamera2D] -) +const app = new App() + +app + .registerPlugin(new HackPlugin()) + .registerPlugin(new DefaultPlugin()) + .registerPlugin(new DOMWindowPlugin()) + .registerPlugin(new Canvas2DRendererPlugin()) + .registerSystem(AppSchedule.Startup, init) + .registerSystem(AppSchedule.Startup, addDefaultCamera2D) + .registerSystem(AppSchedule.Update, setupViewport) + .registerDebugger(new FPSDebugger()) + .run() /** * @param {World} world diff --git a/examples/samples/tween/index.js b/examples/samples/tween/index.js new file mode 100644 index 00000000..b9362343 --- /dev/null +++ b/examples/samples/tween/index.js @@ -0,0 +1,5 @@ +const easing = new URL('./easing.js', import.meta.url) + +export default { + 'easing': easing +} diff --git a/demos/demos/utils.js b/examples/samples/utils.js similarity index 63% rename from demos/demos/utils.js rename to examples/samples/utils.js index 8e2a7825..c98f7e66 100644 --- a/demos/demos/utils.js +++ b/examples/samples/utils.js @@ -10,26 +10,21 @@ import { Plugin, App, typeidGeneric, - Gizmo2D, Audio, Image, Mesh, BasicMaterial, Parser, AudioParser, - ImageParser + ImageParser, + Query, + WindowCommands, + Entity, + MainWindow, + warn, + Windows } from 'wima' -// gizmo labels -export class Demo1 { } -export class Demo2 { } - -/** @augments Gizmo2D */ -export class Demo1Gizmo2D extends Gizmo2D { } - -/** @augments Gizmo2D */ -export class Demo2Gizmo2D extends Gizmo2D { } - /** * @param {World} world */ @@ -54,16 +49,55 @@ export function addDefaultCamera2D(world) { .build() } -export class ResourceAliasPlugin extends Plugin { +/** + * @param {World} world + */ +export function setupViewport(world) { + const windowcommands = world.getResource(WindowCommands) + const window = new Query(world, [Entity, MainWindow]).single() + + if (!window) return warn('No main window defined.') + + windowcommands + .window(window[0]) + .resize(innerWidth, innerHeight) +} + +/** + * @param {World} world + */ +export function setupViewportWebgl(world) { + const windowcommands = world.getResource(WindowCommands) + const window = new Query(world, [Entity, MainWindow]).single() + const canvases = world.getResource(Windows) + const width = innerWidth + const height = innerHeight + + if (!window) return warn('No main window defined.') + + const [entity] = window + const canvas = canvases.getWindow(entity) + + if (!canvas) return + + const gl = canvas.getContext('webgl2') + + if (!gl) return + + gl.viewport(0, 0, width, height) + windowcommands + .window(entity) + .resize(width, height) +} + +// Sometimes features that are supposed to be there arent, this plugin +// provides some hacks to "just enable" code to work until they land. +export class HackPlugin extends Plugin { /** * @param {App} app */ register(app) { - const world = app.getWorld() - - world.setResourceAlias(typeidGeneric(Gizmo2D, [Demo1]), Demo1Gizmo2D) - world.setResourceAlias(typeidGeneric(Gizmo2D, [Demo2]), Demo2Gizmo2D) // HACK: This is a hack until system sets and ordering is introduced. { diff --git a/package.json b/package.json index 7d5ed3bc..44d632ae 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ }, "scripts": { "start": "vite --config .config/vite.config.js", - "dev": "npm run build:lib", + "dev": "vite --config .config/vite.config.js", "init": "husky .husky", "rollup": "rollup --config .config/rollup.config.js", "eslint": "eslint --config .config/eslint.config.js --ignore-pattern '**/*.test.js'", @@ -35,12 +35,12 @@ "build": "npm run build:lib && npm run build:docs", "build:lib": "npm run types && npm run rollup && npm run clean:types", "build:docs": "npm run typedoc", - "lint": "npm run lint:src && npm run lint:demos", - "lint:dry": "npm run lint:src-dry && npm run lint:demos-dry", + "lint": "npm run lint:src && npm run lint:examples", + "lint:dry": "npm run lint:src-dry && npm run lint:examples-dry", "lint:src-dry": "npm run eslint -- src", - "lint:demos-dry": "npm run eslint -- demos", + "lint:examples-dry": "npm run eslint -- examples", "lint:src": "npm run lint:src-dry -- --fix", - "lint:demos": "npm run lint:demos-dry -- --fix", + "lint:examples": "npm run lint:examples-dry -- --fix", "tsc:lint": "tsc -p .config/tsc.lint.json", "watch:src": "npm run rollup -- --watch", "watch:docs": "npm run typedoc -- --watch", diff --git a/src/animation/index.js b/src/animation/index.js index 52c77a08..f69d436b 100644 --- a/src/animation/index.js +++ b/src/animation/index.js @@ -1,4 +1,5 @@ export * from './assets/index.js' export * from './components/index.js' +export * from './resources/index.js' export * from './core/index.js' export * from './plugin.js' diff --git a/src/asset/tests/assetserver.test.js b/src/asset/tests/assetserver.test.js index d476ffa9..ff6c2eca 100644 --- a/src/asset/tests/assetserver.test.js +++ b/src/asset/tests/assetserver.test.js @@ -35,15 +35,15 @@ class TextParser extends Parser { describe('Testing `AssetServer`', () => { test('Asset is cached by server.', () => { const server = createServer() - const handle1 = server.load(Text,"/demos/assets/text/sample.txt") - const handle2 = server.load(Text,"/demos/assets/text/sample.txt") + const handle1 = server.load(Text,"/assets/text/sample.txt") + const handle2 = server.load(Text,"/assets/text/sample.txt") deepStrictEqual(handle1.id(),handle2.id()) }) test('Unloaded asset gets new handle when reloaded.', () => { const server = createServer() - const handle1 = server.load(Text,"/demos/assets/text/sample.txt") + const handle1 = server.load(Text,"/assets/text/sample.txt") handle1.drop() @@ -52,8 +52,8 @@ describe('Testing `AssetServer`', () => { // TODO: Remove when handles are unique // handles arent unique yet, so this ensures handle is at a different index - const handle3 = server.load(Text,"/demos/assets/text/sample2.txt") - const handle2 = server.load(Text,"/demos/assets/text/sample.txt") + const handle3 = server.load(Text,"/assets/text/sample2.txt") + const handle2 = server.load(Text,"/assets/text/sample.txt") notDeepStrictEqual(handle1.id(),handle2.id()) })