From 6de25f122c4e52327e58adbfaef0362a7d6f8f7f Mon Sep 17 00:00:00 2001
From: waynemwashuma <94756970+waynemwashuma@users.noreply.github.com>
Date: Wed, 17 Dec 2025 22:21:42 +0300
Subject: [PATCH 1/6] Export resources from animation module
---
src/animation/index.js | 1 +
1 file changed, 1 insertion(+)
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'
From b4397fc2ab0fd64a4279cc813cf889dba185224a Mon Sep 17 00:00:00 2001
From: waynemwashuma <94756970+waynemwashuma@users.noreply.github.com>
Date: Wed, 17 Dec 2025 22:22:53 +0300
Subject: [PATCH 2/6] Move assets to root directory
---
{demos/assets => assets}/audio/bad-apple.m4a | Bin
{demos/assets => assets}/audio/hit.mp3 | Bin
{demos/assets => assets}/warrior.png | Bin
3 files changed, 0 insertions(+), 0 deletions(-)
rename {demos/assets => assets}/audio/bad-apple.m4a (100%)
rename {demos/assets => assets}/audio/hit.mp3 (100%)
rename {demos/assets => assets}/warrior.png (100%)
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
From 02afbfc47e6d041d3dbc09aeb6b72d0bab43413c Mon Sep 17 00:00:00 2001
From: waynemwashuma <94756970+waynemwashuma@users.noreply.github.com>
Date: Wed, 17 Dec 2025 22:25:26 +0300
Subject: [PATCH 3/6] Refactor examples to be self contained
---
demos/demos/animation/index.js | 2 -
demos/demos/audio/audioOscillator.js | 33 -----
demos/demos/audio/audioPlayer.js | 38 ------
demos/demos/audio/index.js | 4 -
demos/demos/ecs/index.js | 2 -
demos/demos/gizmos/arcs.js | 96 -------------
demos/demos/gizmos/grid.js | 43 ------
demos/demos/gizmos/index.js | 4 -
demos/demos/gizmos/shapes.js | 47 -------
demos/demos/index.js | 8 --
demos/demos/input/index.js | 3 -
demos/demos/render/canvas-2d/index.js | 1 -
demos/demos/render/index.js | 2 -
demos/demos/render/webgl/basictriangle.js | 41 ------
demos/demos/render/webgl/index.js | 8 --
demos/demos/render/webgl/rotationtriangle.js | 56 --------
demos/demos/transform/2d/index.js | 5 -
demos/demos/transform/3d/index.js | 5 -
demos/demos/transform/index.js | 2 -
demos/demos/tween/index.js | 1 -
demos/index.html | 49 -------
demos/main.js | 109 ---------------
demos/webgl.html | 27 ----
demos/webgl.js | 94 -------------
examples/example.html | 63 +++++++++
examples/example.js | 55 ++++++++
examples/index.html | 32 +++++
examples/main.js | 73 ++++++++++
.../samples/animation/2d}/basic.js | 49 ++++++-
examples/samples/animation/2d/index.js | 5 +
.../samples/animation/3d/basic.js | 25 +++-
examples/samples/animation/3d/index.js | 5 +
examples/samples/animation/index.js | 7 +
.../samples}/audio/audioGraph.js | 41 ++++--
examples/samples/audio/audioOscillator.js | 46 +++++++
.../samples}/audio/audioPlayback.js | 46 +++++--
examples/samples/audio/audioPlayer.js | 64 +++++++++
examples/samples/audio/index.js | 11 ++
.../demos => examples/samples}/ecs/despawn.js | 28 +++-
examples/samples/ecs/index.js | 7 +
.../demos => examples/samples}/ecs/spawn.js | 27 +++-
examples/samples/gizmos/2d/arcs.js | 128 ++++++++++++++++++
examples/samples/gizmos/2d/grid.js | 76 +++++++++++
examples/samples/gizmos/2d/index.js | 11 ++
.../samples/gizmos/2d}/linestyle.js | 50 ++++++-
examples/samples/gizmos/2d/shapes.js | 77 +++++++++++
examples/samples/gizmos/index.js | 5 +
examples/samples/index.js | 19 +++
examples/samples/input/index.js | 9 ++
.../samples}/input/keyboard.js | 35 +++--
.../demos => examples/samples}/input/mouse.js | 44 ++++--
.../demos => examples/samples}/input/touch.js | 30 ++--
examples/samples/render/canvas-2d/index.js | 5 +
.../samples}/render/canvas-2d/material.js | 29 ++--
examples/samples/render/index.js | 6 +
.../samples/render/webgl/basictriangle.js | 50 ++++---
.../render/webgl/cameraorthographic.js | 29 +++-
.../render/webgl/cameraperspective.js | 29 +++-
.../samples}/render/webgl/camerarotate.js | 29 +++-
.../render/webgl/colorchangetriangle.js | 35 +++--
.../samples}/render/webgl/geometries.js | 31 +++--
examples/samples/render/webgl/index.js | 15 ++
examples/samples/transform/2d/index.js | 13 ++
.../samples}/transform/2d/lookat.js | 37 +++--
.../samples}/transform/2d/propagate.js | 28 +++-
.../samples}/transform/2d/rotate.js | 29 ++--
.../samples}/transform/2d/scale.js | 28 +++-
.../samples}/transform/2d/translate.js | 28 +++-
examples/samples/transform/3d/index.js | 13 ++
.../samples}/transform/3d/lookat.js | 41 ++++--
.../samples}/transform/3d/propagate.js | 30 ++--
.../samples}/transform/3d/rotate.js | 30 ++--
.../samples}/transform/3d/scale.js | 30 ++--
.../samples}/transform/3d/translate.js | 31 +++--
examples/samples/transform/index.js | 7 +
.../samples}/tween/easing.js | 27 +++-
examples/samples/tween/index.js | 5 +
{demos/demos => examples/samples}/utils.js | 68 +++++++---
78 files changed, 1507 insertions(+), 944 deletions(-)
delete mode 100644 demos/demos/animation/index.js
delete mode 100644 demos/demos/audio/audioOscillator.js
delete mode 100644 demos/demos/audio/audioPlayer.js
delete mode 100644 demos/demos/audio/index.js
delete mode 100644 demos/demos/ecs/index.js
delete mode 100644 demos/demos/gizmos/arcs.js
delete mode 100644 demos/demos/gizmos/grid.js
delete mode 100644 demos/demos/gizmos/index.js
delete mode 100644 demos/demos/gizmos/shapes.js
delete mode 100644 demos/demos/index.js
delete mode 100644 demos/demos/input/index.js
delete mode 100644 demos/demos/render/canvas-2d/index.js
delete mode 100644 demos/demos/render/index.js
delete mode 100644 demos/demos/render/webgl/basictriangle.js
delete mode 100644 demos/demos/render/webgl/index.js
delete mode 100644 demos/demos/render/webgl/rotationtriangle.js
delete mode 100644 demos/demos/transform/2d/index.js
delete mode 100644 demos/demos/transform/3d/index.js
delete mode 100644 demos/demos/transform/index.js
delete mode 100644 demos/demos/tween/index.js
delete mode 100644 demos/index.html
delete mode 100644 demos/main.js
delete mode 100644 demos/webgl.html
delete mode 100644 demos/webgl.js
create mode 100644 examples/example.html
create mode 100644 examples/example.js
create mode 100644 examples/index.html
create mode 100644 examples/main.js
rename {demos/demos/animation => examples/samples/animation/2d}/basic.js (66%)
create mode 100644 examples/samples/animation/2d/index.js
rename demos/demos/animation/basic3d.js => examples/samples/animation/3d/basic.js (79%)
create mode 100644 examples/samples/animation/3d/index.js
create mode 100644 examples/samples/animation/index.js
rename {demos/demos => examples/samples}/audio/audioGraph.js (53%)
create mode 100644 examples/samples/audio/audioOscillator.js
rename {demos/demos => examples/samples}/audio/audioPlayback.js (60%)
create mode 100644 examples/samples/audio/audioPlayer.js
create mode 100644 examples/samples/audio/index.js
rename {demos/demos => examples/samples}/ecs/despawn.js (69%)
create mode 100644 examples/samples/ecs/index.js
rename {demos/demos => examples/samples}/ecs/spawn.js (66%)
create mode 100644 examples/samples/gizmos/2d/arcs.js
create mode 100644 examples/samples/gizmos/2d/grid.js
create mode 100644 examples/samples/gizmos/2d/index.js
rename {demos/demos/gizmos => examples/samples/gizmos/2d}/linestyle.js (58%)
create mode 100644 examples/samples/gizmos/2d/shapes.js
create mode 100644 examples/samples/gizmos/index.js
create mode 100644 examples/samples/index.js
create mode 100644 examples/samples/input/index.js
rename {demos/demos => examples/samples}/input/keyboard.js (83%)
rename {demos/demos => examples/samples}/input/mouse.js (80%)
rename {demos/demos => examples/samples}/input/touch.js (72%)
create mode 100644 examples/samples/render/canvas-2d/index.js
rename {demos/demos => examples/samples}/render/canvas-2d/material.js (51%)
create mode 100644 examples/samples/render/index.js
rename demos/demos/render/webgl/movingtriangle.js => examples/samples/render/webgl/basictriangle.js (50%)
rename {demos/demos => examples/samples}/render/webgl/cameraorthographic.js (66%)
rename {demos/demos => examples/samples}/render/webgl/cameraperspective.js (64%)
rename {demos/demos => examples/samples}/render/webgl/camerarotate.js (64%)
rename {demos/demos => examples/samples}/render/webgl/colorchangetriangle.js (68%)
rename {demos/demos => examples/samples}/render/webgl/geometries.js (68%)
create mode 100644 examples/samples/render/webgl/index.js
create mode 100644 examples/samples/transform/2d/index.js
rename {demos/demos => examples/samples}/transform/2d/lookat.js (79%)
rename {demos/demos => examples/samples}/transform/2d/propagate.js (75%)
rename {demos/demos => examples/samples}/transform/2d/rotate.js (58%)
rename {demos/demos => examples/samples}/transform/2d/scale.js (61%)
rename {demos/demos => examples/samples}/transform/2d/translate.js (61%)
create mode 100644 examples/samples/transform/3d/index.js
rename {demos/demos => examples/samples}/transform/3d/lookat.js (76%)
rename {demos/demos => examples/samples}/transform/3d/propagate.js (74%)
rename {demos/demos => examples/samples}/transform/3d/rotate.js (56%)
rename {demos/demos => examples/samples}/transform/3d/scale.js (58%)
rename {demos/demos => examples/samples}/transform/3d/translate.js (59%)
create mode 100644 examples/samples/transform/index.js
rename {demos/demos => examples/samples}/tween/easing.js (70%)
create mode 100644 examples/samples/tween/index.js
rename {demos/demos => examples/samples}/utils.js (64%)
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..61d6feee
--- /dev/null
+++ b/examples/example.js
@@ -0,0 +1,55 @@
+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..1d33718a
--- /dev/null
+++ b/examples/main.js
@@ -0,0 +1,73 @@
+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 = '') {
+ if (prefix != '') {
+ prefix += '/'
+ }
+
+ for (const name in demos) {
+ const prename = prefix + name
+ if (demos[name] instanceof URL) {
+ const opt = document.createElement("option")
+ opt.append(document.createTextNode(prefix + 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
+ */
\ No newline at end of file
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..07f1e1dd
--- /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
+}
\ No newline at end of file
diff --git a/demos/demos/animation/basic3d.js b/examples/samples/animation/3d/basic.js
similarity index 79%
rename from demos/demos/animation/basic3d.js
rename to examples/samples/animation/3d/basic.js
index e298d07c..b96ecee4 100644
--- a/demos/demos/animation/basic3d.js
+++ b/examples/samples/animation/3d/basic.js
@@ -22,13 +22,30 @@ import {
Position3DAnimationEffector,
Scale3DAnimationEffector,
Quaternion,
- Vector3
+ Vector3,
+ AnimationClipAssets,
+ App,
+ AppSchedule,
+ DefaultPlugin,
+ DOMWindowPlugin,
+ FPSDebugger,
+ WebglRendererPlugin
} from 'wima'
-import { AnimationClipAssets } from '../../../src/animation/resources/aliases.js'
-import { addDefaultCamera3D } from '../utils.js'
+import { addDefaultCamera3D, HackPlugin, setupViewport, 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 DOMWindowPlugin())
+ .registerDebugger(new FPSDebugger())
+ .registerSystem(AppSchedule.Startup, init)
+ .registerSystem(AppSchedule.Update, addDefaultCamera3D)
+ .registerSystem(AppSchedule.Update, setupViewportWebgl)
+ .run()
+
/**
* @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..74628dd4
--- /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..2d83ac05
--- /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 "./2d/index.js";
+
+export default {
+ "2d": d2,
+ "3d": d3
+}
\ No newline at end of file
diff --git a/demos/demos/audio/audioGraph.js b/examples/samples/audio/audioGraph.js
similarity index 53%
rename from demos/demos/audio/audioGraph.js
rename to examples/samples/audio/audioGraph.js
index 313418f3..56308a23 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,6 +31,30 @@ 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
*/
diff --git a/examples/samples/audio/audioOscillator.js b/examples/samples/audio/audioOscillator.js
new file mode 100644
index 00000000..a240dbdc
--- /dev/null
+++ b/examples/samples/audio/audioOscillator.js
@@ -0,0 +1,46 @@
+import {
+ Demo,
+ 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()
+}
\ No newline at end of file
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..135b9b6c 100644
--- a/demos/demos/audio/audioPlayback.js
+++ b/examples/samples/audio/audioPlayback.js
@@ -9,15 +9,43 @@ 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, '../assets/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..015ac030
--- /dev/null
+++ b/examples/samples/audio/audioPlayer.js
@@ -0,0 +1,64 @@
+import {
+ Demo,
+ 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, '../assets/audio/bad-apple.m4a')
+ }),
+ new Timer({
+ mode: TimerMode.Repeat
+ }),
+ new Cleanup()
+ ])
+ .build()
+}
\ No newline at end of file
diff --git a/examples/samples/audio/index.js b/examples/samples/audio/index.js
new file mode 100644
index 00000000..0f69d2cf
--- /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..ba87ec7b
--- /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..2a5363dc
--- /dev/null
+++ b/examples/samples/gizmos/2d/arcs.js
@@ -0,0 +1,128 @@
+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()
+}
\ No newline at end of file
diff --git a/examples/samples/gizmos/2d/grid.js b/examples/samples/gizmos/2d/grid.js
new file mode 100644
index 00000000..1546ac80
--- /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()
+}
\ No newline at end of file
diff --git a/examples/samples/gizmos/2d/index.js b/examples/samples/gizmos/2d/index.js
new file mode 100644
index 00000000..35e0aecc
--- /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..f015fd55 100644
--- a/demos/demos/gizmos/linestyle.js
+++ b/examples/samples/gizmos/2d/linestyle.js
@@ -1,14 +1,54 @@
-/** @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..2fc316fc
--- /dev/null
+++ b/examples/samples/gizmos/2d/shapes.js
@@ -0,0 +1,77 @@
+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()
+}
\ No newline at end of file
diff --git a/examples/samples/gizmos/index.js b/examples/samples/gizmos/index.js
new file mode 100644
index 00000000..0a887089
--- /dev/null
+++ b/examples/samples/gizmos/index.js
@@ -0,0 +1,5 @@
+import { default as d2 } from "./2d/index.js";
+
+export default {
+ "2d": d2
+}
\ No newline at end of file
diff --git a/examples/samples/index.js b/examples/samples/index.js
new file mode 100644
index 00000000..527ce896
--- /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
+}
\ No newline at end of file
diff --git a/examples/samples/input/index.js b/examples/samples/input/index.js
new file mode 100644
index 00000000..d11c7b78
--- /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..19f282eb 100644
--- a/demos/demos/input/keyboard.js
+++ b/examples/samples/input/keyboard.js
@@ -14,15 +14,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 +33,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..f166f5c0 100644
--- a/demos/demos/input/touch.js
+++ b/examples/samples/input/touch.js
@@ -15,19 +15,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..908e100c
--- /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..d92a1ad0
--- /dev/null
+++ b/examples/samples/render/index.js
@@ -0,0 +1,6 @@
+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..7d9be598 100644
--- a/demos/demos/render/webgl/movingtriangle.js
+++ b/examples/samples/render/webgl/basictriangle.js
@@ -1,31 +1,41 @@
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'
-export const movingtriangle = new Demo(
- 'moving triangle',
- [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)
+ .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)
@@ -42,18 +52,4 @@ function addmesh(world) {
new Cleanup()
])
.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
- })
-}
+}
\ No newline at end of file
diff --git a/demos/demos/render/webgl/cameraorthographic.js b/examples/samples/render/webgl/cameraorthographic.js
similarity index 66%
rename from demos/demos/render/webgl/cameraorthographic.js
rename to examples/samples/render/webgl/cameraorthographic.js
index 53eeb9c1..dda48b1c 100644
--- a/demos/demos/render/webgl/cameraorthographic.js
+++ b/examples/samples/render/webgl/cameraorthographic.js
@@ -14,14 +14,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 +58,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..32289dda 100644
--- a/demos/demos/render/webgl/cameraperspective.js
+++ b/examples/samples/render/webgl/cameraperspective.js
@@ -14,14 +14,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 +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/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..e10a96ab 100644
--- a/demos/demos/render/webgl/camerarotate.js
+++ b/examples/samples/render/webgl/camerarotate.js
@@ -13,14 +13,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 +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/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..c5bfc47b 100644
--- a/demos/demos/render/webgl/colorchangetriangle.js
+++ b/examples/samples/render/webgl/colorchangetriangle.js
@@ -10,26 +10,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..8e6a1927
--- /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..a19d9791
--- /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..f211402f 100644
--- a/demos/demos/transform/2d/propagate.js
+++ b/examples/samples/transform/2d/propagate.js
@@ -19,15 +19,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..fa776115 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,16 +11,28 @@ import {
PI,
Query,
BasicMaterialAssets,
- MeshAssets
+ MeshAssets,
+ AppSchedule,
+ Canvas2DRendererPlugin,
+ DefaultPlugin,
+ DOMWindowPlugin,
+ FPSDebugger,
+ App
} from 'wima'
-import { addDefaultCamera2D } from '../../utils.js'
-
-export default new Demo(
- 'transform2d/rotate',
- [addmesh, addDefaultCamera2D],
- [update]
-)
+import { addDefaultCamera2D, 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, 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 61%
rename from demos/demos/transform/2d/scale.js
rename to examples/samples/transform/2d/scale.js
index 92f73343..89bd555f 100644
--- a/demos/demos/transform/2d/scale.js
+++ b/examples/samples/transform/2d/scale.js
@@ -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'
-export default new Demo(
- 'transform2d/scale',
- [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/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..b670a6c4 100644
--- a/demos/demos/transform/2d/translate.js
+++ b/examples/samples/transform/2d/translate.js
@@ -12,15 +12,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..ad561ee2
--- /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..1cc8a648 100644
--- a/demos/demos/transform/3d/lookat.js
+++ b/examples/samples/transform/3d/lookat.js
@@ -17,20 +17,40 @@ import {
Position3D,
Color,
BasicMaterialAssets,
- MeshAssets
+ MeshAssets,
+ App,
+ AppSchedule,
+ DefaultPlugin,
+ DOMWindowPlugin,
+ FPSDebugger,
+ WebglRendererPlugin
} from 'wima'
-import { addDefaultCamera3D } from '../../utils.js'
+import { addDefaultCamera3D, HackPlugin, setupViewport, 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 +78,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 +150,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..2aa1b8b9 100644
--- a/demos/demos/transform/3d/propagate.js
+++ b/examples/samples/transform/3d/propagate.js
@@ -18,20 +18,34 @@ import {
MeshAssets,
has,
QUARTER_PI,
- without
+ without,
+ App,
+ AppSchedule,
+ DefaultPlugin,
+ DOMWindowPlugin,
+ FPSDebugger,
+ WebglRendererPlugin
} from 'wima'
-import { addDefaultCamera3D } from '../../utils.js'
+import { addDefaultCamera3D, HackPlugin, setupViewport, 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..585be8e7 100644
--- a/demos/demos/transform/3d/rotate.js
+++ b/examples/samples/transform/3d/rotate.js
@@ -12,20 +12,34 @@ import {
PI,
Query,
BasicMaterialAssets,
- MeshAssets
+ MeshAssets,
+ App,
+ AppSchedule,
+ DefaultPlugin,
+ DOMWindowPlugin,
+ FPSDebugger,
+ WebglRendererPlugin
} from 'wima'
-import { addDefaultCamera3D } from '../../utils.js'
+import { addDefaultCamera3D, HackPlugin, setupViewport, 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 58%
rename from demos/demos/transform/3d/scale.js
rename to examples/samples/transform/3d/scale.js
index b38bd3d6..96d58db5 100644
--- a/demos/demos/transform/3d/scale.js
+++ b/examples/samples/transform/3d/scale.js
@@ -12,20 +12,34 @@ import {
BasicMaterial3D,
createTransform3D,
BasicMaterialAssets,
- MeshAssets
+ MeshAssets,
+ App,
+ AppSchedule,
+ DefaultPlugin,
+ DOMWindowPlugin,
+ FPSDebugger,
+ WebglRendererPlugin
} from 'wima'
-import { addDefaultCamera3D } from '../../utils.js'
+import { addDefaultCamera3D, HackPlugin, setupViewport, 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..ef1ffa16 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, setupViewport, 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..379f0c48
--- /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
+}
\ No newline at end of file
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..2db184a6
--- /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 64%
rename from demos/demos/utils.js
rename to examples/samples/utils.js
index 8e2a7825..0f2ef215 100644
--- a/demos/demos/utils.js
+++ b/examples/samples/utils.js
@@ -17,19 +17,15 @@ import {
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,17 +50,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.
{
app
From 8bd4d3dd3d0eed811be16d86e94bd0febfd21125 Mon Sep 17 00:00:00 2001
From: waynemwashuma <94756970+waynemwashuma@users.noreply.github.com>
Date: Wed, 17 Dec 2025 23:16:24 +0300
Subject: [PATCH 4/6] Update configuration files
---
.config/lint.config.js | 2 +-
.config/tsc.lint.json | 2 +-
.config/vite.config.js | 3 ++-
package.json | 10 +++++-----
4 files changed, 9 insertions(+), 8 deletions(-)
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/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",
From d167f74be37218778de423883a7eb0346155e5af Mon Sep 17 00:00:00 2001
From: waynemwashuma <94756970+waynemwashuma@users.noreply.github.com>
Date: Wed, 17 Dec 2025 23:19:08 +0300
Subject: [PATCH 5/6] Update tests using external assets
---
src/asset/tests/assetserver.test.js | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
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())
})
From a7a4da9600b58c37595f1fbaaf2157e613277452 Mon Sep 17 00:00:00 2001
From: waynemwashuma <94756970+waynemwashuma@users.noreply.github.com>
Date: Sun, 1 Feb 2026 21:57:27 +0300
Subject: [PATCH 6/6] Lint files
---
examples/example.js | 43 +++++++++-------
examples/main.js | 49 ++++++++++---------
examples/samples/animation/2d/index.js | 6 +--
examples/samples/animation/3d/basic.js | 13 +++--
examples/samples/animation/3d/index.js | 4 +-
examples/samples/animation/index.js | 10 ++--
examples/samples/audio/audioGraph.js | 7 +--
examples/samples/audio/audioOscillator.js | 5 +-
examples/samples/audio/audioPlayback.js | 8 +--
examples/samples/audio/audioPlayer.js | 10 ++--
examples/samples/audio/index.js | 16 +++---
examples/samples/ecs/index.js | 8 +--
examples/samples/gizmos/2d/arcs.js | 5 +-
examples/samples/gizmos/2d/grid.js | 4 +-
examples/samples/gizmos/2d/index.js | 16 +++---
examples/samples/gizmos/2d/linestyle.js | 6 ++-
examples/samples/gizmos/2d/shapes.js | 6 ++-
examples/samples/gizmos/index.js | 6 +--
examples/samples/index.js | 18 +++----
examples/samples/input/index.js | 12 ++---
examples/samples/input/keyboard.js | 1 -
examples/samples/input/touch.js | 1 -
examples/samples/render/canvas-2d/index.js | 4 +-
examples/samples/render/index.js | 9 ++--
.../samples/render/webgl/basictriangle.js | 3 +-
.../render/webgl/cameraorthographic.js | 1 -
.../samples/render/webgl/cameraperspective.js | 1 -
examples/samples/render/webgl/camerarotate.js | 1 -
.../render/webgl/colorchangetriangle.js | 1 -
examples/samples/render/webgl/index.js | 24 ++++-----
examples/samples/transform/2d/index.js | 20 ++++----
examples/samples/transform/2d/propagate.js | 1 -
examples/samples/transform/2d/rotate.js | 2 +
examples/samples/transform/2d/scale.js | 2 +-
examples/samples/transform/2d/translate.js | 1 -
examples/samples/transform/3d/index.js | 20 ++++----
examples/samples/transform/3d/lookat.js | 4 +-
examples/samples/transform/3d/propagate.js | 3 +-
examples/samples/transform/3d/rotate.js | 3 +-
examples/samples/transform/3d/scale.js | 3 +-
examples/samples/transform/3d/translate.js | 2 +-
examples/samples/transform/index.js | 10 ++--
examples/samples/tween/index.js | 4 +-
examples/samples/utils.js | 36 +++++++-------
44 files changed, 209 insertions(+), 200 deletions(-)
diff --git a/examples/example.js b/examples/example.js
index 61d6feee..365d236b 100644
--- a/examples/example.js
+++ b/examples/example.js
@@ -1,30 +1,37 @@
-import samples from "./samples/index.js";
+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."
+ 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),
+ name.split('/').filter((e) => e.length !== 0),
samples
)
- if(!demo) {
- const warning = "The example selected does not exist."
+ 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)
@@ -32,24 +39,24 @@ function init() {
/**
* @param {string[]} items
- * @param {Record} map
+ * @param {Record} map
* @returns {string | undefined}
*/
-function recursiveSelect(items,map){
+function recursiveSelect(items, map) {
const name = items.shift()
- if(!name){
+ if (!name) {
return undefined
}
-
+
const item = map[name]
- if(item instanceof URL) {
+ if (item instanceof URL) {
return item.pathname
}
- if(item === undefined) {
+ if (item === undefined) {
return undefined
}
- return recursiveSelect(items,item)
+ return recursiveSelect(items, item)
}
diff --git a/examples/main.js b/examples/main.js
index 1d33718a..4b48f32e 100644
--- a/examples/main.js
+++ b/examples/main.js
@@ -1,15 +1,17 @@
-import samples from "./samples/index.js"
+import samples from './samples/index.js'
-const container = document.body.appendChild(document.createElement("div"))
-const opts = container.appendChild(document.createElement("select"))
+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"
+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)
+
+ localStorage.setItem('play', target.value)
switchDemo(target.value)
})
@@ -18,37 +20,40 @@ opts.addEventListener('change', (e) => {
* @param {string} name
*/
async function switchDemo(name) {
- const frame = document.getElementById("example-frame")
- const link = document.getElementById("popper")
+ const frame = document.getElementById('example-frame')
+ const link = document.getElementById('popper')
if (!(frame instanceof HTMLIFrameElement)) {
- throw "The element selected is not an iframe"
+ throw 'The element selected is not an iframe'
}
if (!(link instanceof HTMLAnchorElement)) {
- throw "The element selected is not an anchor"
+ 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
+ * @param {string} prefix
*/
function setupOpts(demos, prefix = '') {
- if (prefix != '') {
- prefix += '/'
- }
+ const fix = prefix !== '' ? `${prefix}/` : prefix
for (const name in demos) {
- const prename = prefix + name
+ const prename = fix + name
+
if (demos[name] instanceof URL) {
- const opt = document.createElement("option")
- opt.append(document.createTextNode(prefix + name))
+ const opt = document.createElement('option')
+
+ opt.append(document.createTextNode(fix + name))
opts.append(opt)
continue
}
+
setupOpts(demos[name], prename)
}
}
@@ -57,9 +62,9 @@ function setupOpts(demos, prefix = '') {
* @param {Item} demos
*/
function init(demos) {
- let name = localStorage.getItem("play")
- if (!name)
- name = Object.keys(demos)[0] || null
+ let name = localStorage.getItem('play')
+
+ if (!name) name = Object.keys(demos)[0] || null
if (!name) return
switchDemo(name)
@@ -70,4 +75,4 @@ setupOpts(samples)
/**
* @typedef {{ [x: string]: URL | Item}} Item
- */
\ No newline at end of file
+ */
diff --git a/examples/samples/animation/2d/index.js b/examples/samples/animation/2d/index.js
index 07f1e1dd..df60245c 100644
--- a/examples/samples/animation/2d/index.js
+++ b/examples/samples/animation/2d/index.js
@@ -1,5 +1,5 @@
-const basic = new URL("./basic.js", import.meta.url)
+const basic = new URL('./basic.js', import.meta.url)
export default {
- "basic": basic
-}
\ No newline at end of file
+ 'basic': basic
+}
diff --git a/examples/samples/animation/3d/basic.js b/examples/samples/animation/3d/basic.js
index b96ecee4..4ec7524b 100644
--- a/examples/samples/animation/3d/basic.js
+++ b/examples/samples/animation/3d/basic.js
@@ -1,7 +1,6 @@
import {
Mesh,
World,
- Demo,
Cleanup,
AnimationClip,
AnimationTrack,
@@ -29,9 +28,10 @@ import {
DefaultPlugin,
DOMWindowPlugin,
FPSDebugger,
- WebglRendererPlugin
+ WebglRendererPlugin,
+ AnimationPlugin
} from 'wima'
-import { addDefaultCamera3D, HackPlugin, setupViewport, setupViewportWebgl } from '../../utils.js'
+import { addDefaultCamera3D, HackPlugin, setupViewportWebgl } from '../../utils.js'
const app = new App()
@@ -39,13 +39,16 @@ 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.Update, addDefaultCamera3D)
+ .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
index 74628dd4..df60245c 100644
--- a/examples/samples/animation/3d/index.js
+++ b/examples/samples/animation/3d/index.js
@@ -1,5 +1,5 @@
-const basic = new URL("./basic.js", import.meta.url)
+const basic = new URL('./basic.js', import.meta.url)
export default {
- "basic": basic
+ 'basic': basic
}
diff --git a/examples/samples/animation/index.js b/examples/samples/animation/index.js
index 2d83ac05..15ae735d 100644
--- a/examples/samples/animation/index.js
+++ b/examples/samples/animation/index.js
@@ -1,7 +1,7 @@
-import { default as d2 } from "./2d/index.js";
-import { default as d3 } from "./2d/index.js";
+import { default as d2 } from './2d/index.js'
+import { default as d3 } from './3d/index.js'
export default {
- "2d": d2,
- "3d": d3
-}
\ No newline at end of file
+ '2d': d2,
+ '3d': d3
+}
diff --git a/examples/samples/audio/audioGraph.js b/examples/samples/audio/audioGraph.js
index 56308a23..c9a0e246 100644
--- a/examples/samples/audio/audioGraph.js
+++ b/examples/samples/audio/audioGraph.js
@@ -33,12 +33,13 @@ 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.
+// This conflict is between internal engine system and external engine systems ordering.
class MyPlugin extends Plugin {
+
/**
* @param {App} app
*/
- register(app){
+ register(app) {
app.registerSystem(AppSchedule.Startup, init)
}
}
@@ -60,7 +61,7 @@ app
*/
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
index a240dbdc..a666c776 100644
--- a/examples/samples/audio/audioOscillator.js
+++ b/examples/samples/audio/audioOscillator.js
@@ -1,5 +1,4 @@
import {
- Demo,
World,
AudioOscillator,
EntityCommands,
@@ -32,7 +31,7 @@ app
*/
function init(world) {
const commands = world.getResource(EntityCommands)
-
+
commands
.spawn()
.insertPrefab([
@@ -43,4 +42,4 @@ function init(world) {
new Cleanup()
])
.build()
-}
\ No newline at end of file
+}
diff --git a/examples/samples/audio/audioPlayback.js b/examples/samples/audio/audioPlayback.js
index 135b9b6c..fc69212b 100644
--- a/examples/samples/audio/audioPlayback.js
+++ b/examples/samples/audio/audioPlayback.js
@@ -1,5 +1,4 @@
import {
- Demo,
World,
Audio,
AudioPlayer,
@@ -24,12 +23,13 @@ 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.
+// This conflict is between internal engine system and external engine systems ordering.
class MyPlugin extends Plugin {
+
/**
* @param {App} app
*/
- register(app){
+ register(app) {
app.registerSystem(AppSchedule.Startup, init)
}
}
@@ -62,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,
diff --git a/examples/samples/audio/audioPlayer.js b/examples/samples/audio/audioPlayer.js
index 015ac030..a350c920 100644
--- a/examples/samples/audio/audioPlayer.js
+++ b/examples/samples/audio/audioPlayer.js
@@ -1,5 +1,4 @@
import {
- Demo,
World,
AssetServer,
AudioPlayer,
@@ -20,12 +19,13 @@ 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.
+// This conflict is between internal engine system and external engine systems ordering.
class MyPlugin extends Plugin {
+
/**
* @param {App} app
*/
- register(app){
+ register(app) {
app.registerSystem(AppSchedule.Startup, init)
}
}
@@ -53,7 +53,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.Repeat
@@ -61,4 +61,4 @@ function init(world) {
new Cleanup()
])
.build()
-}
\ No newline at end of file
+}
diff --git a/examples/samples/audio/index.js b/examples/samples/audio/index.js
index 0f69d2cf..072fec90 100644
--- a/examples/samples/audio/index.js
+++ b/examples/samples/audio/index.js
@@ -1,11 +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)
+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
+ 'audioGraph': audioGraph,
+ 'audioPlayer': audioPlayer,
+ 'audioPlayback': audioPlayback,
+ 'audioOscillator': audioOscillator
}
diff --git a/examples/samples/ecs/index.js b/examples/samples/ecs/index.js
index ba87ec7b..fc7462d0 100644
--- a/examples/samples/ecs/index.js
+++ b/examples/samples/ecs/index.js
@@ -1,7 +1,7 @@
-const spawn = new URL("./spawn.js", import.meta.url)
-const despawn = new URL("./despawn.js", import.meta.url)
+const spawn = new URL('./spawn.js', import.meta.url)
+const despawn = new URL('./despawn.js', import.meta.url)
export default {
- "spawn": spawn,
- "despawn": despawn
+ 'spawn': spawn,
+ 'despawn': despawn
}
diff --git a/examples/samples/gizmos/2d/arcs.js b/examples/samples/gizmos/2d/arcs.js
index 2a5363dc..a2c2835a 100644
--- a/examples/samples/gizmos/2d/arcs.js
+++ b/examples/samples/gizmos/2d/arcs.js
@@ -18,6 +18,7 @@ import {
import { HackPlugin, addDefaultCamera2D, setupViewport } from '../../utils.js'
class Demo { }
+
/**
* @augments {Gizmo2D}
*/
@@ -26,7 +27,7 @@ class DemoGizmo2D extends Gizmo2D { }
const app = new App()
// We have to alias the gizmo resource manually
-app.getWorld().setResourceAlias(typeidGeneric(Gizmo2D,[Demo]), DemoGizmo2D)
+app.getWorld().setResourceAlias(typeidGeneric(Gizmo2D, [Demo]), DemoGizmo2D)
app
.registerPlugin(new HackPlugin())
@@ -125,4 +126,4 @@ function drawEllipticalArcs(world) {
.ellipse(radiusX, radiusY, new Color(1, 1, 1, 1))
.axes(20)
.reset()
-}
\ No newline at end of file
+}
diff --git a/examples/samples/gizmos/2d/grid.js b/examples/samples/gizmos/2d/grid.js
index 1546ac80..be256d4f 100644
--- a/examples/samples/gizmos/2d/grid.js
+++ b/examples/samples/gizmos/2d/grid.js
@@ -26,7 +26,7 @@ class DemoGizmo2D extends Gizmo2D { }
const app = new App()
// We have to alias the gizmo resource manually
-app.getWorld().setResourceAlias(typeidGeneric(Gizmo2D,[Demo]), DemoGizmo2D)
+app.getWorld().setResourceAlias(typeidGeneric(Gizmo2D, [Demo]), DemoGizmo2D)
app
.registerPlugin(new HackPlugin())
@@ -73,4 +73,4 @@ function drawGrid(world) {
new BVector2(true, true)
)
.reset()
-}
\ No newline at end of file
+}
diff --git a/examples/samples/gizmos/2d/index.js b/examples/samples/gizmos/2d/index.js
index 35e0aecc..e89be28f 100644
--- a/examples/samples/gizmos/2d/index.js
+++ b/examples/samples/gizmos/2d/index.js
@@ -1,11 +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)
+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,
+ 'arcs': arcs,
+ 'shapes': shapes,
+ 'grid': grid,
+ 'line styles': lineStyle
}
diff --git a/examples/samples/gizmos/2d/linestyle.js b/examples/samples/gizmos/2d/linestyle.js
index f015fd55..a456a053 100644
--- a/examples/samples/gizmos/2d/linestyle.js
+++ b/examples/samples/gizmos/2d/linestyle.js
@@ -17,10 +17,12 @@ import { HackPlugin, addDefaultCamera2D, setupViewport } from '../../utils.js'
class Demo1 { }
class Demo2 { }
+
/**
* @augments {Gizmo2D}
*/
class Demo1Gizmo2D extends Gizmo2D { }
+
/**
* @augments {Gizmo2D}
*/
@@ -29,8 +31,8 @@ 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.getWorld().setResourceAlias(typeidGeneric(Gizmo2D, [Demo1]), Demo1Gizmo2D)
+app.getWorld().setResourceAlias(typeidGeneric(Gizmo2D, [Demo2]), Demo2Gizmo2D)
app
.registerPlugin(new HackPlugin())
diff --git a/examples/samples/gizmos/2d/shapes.js b/examples/samples/gizmos/2d/shapes.js
index 2fc316fc..85f9f948 100644
--- a/examples/samples/gizmos/2d/shapes.js
+++ b/examples/samples/gizmos/2d/shapes.js
@@ -14,7 +14,9 @@ import {
typeidGeneric
} from 'wima'
import { HackPlugin, addDefaultCamera2D, setupViewport } from '../../utils.js'
+
class Demo { }
+
/**
* @augments {Gizmo2D}
*/
@@ -23,7 +25,7 @@ class DemoGizmo2D extends Gizmo2D { }
const app = new App()
// We have to alias the gizmo resource manually
-app.getWorld().setResourceAlias(typeidGeneric(Gizmo2D,[Demo]), DemoGizmo2D)
+app.getWorld().setResourceAlias(typeidGeneric(Gizmo2D, [Demo]), DemoGizmo2D)
app
.registerPlugin(new HackPlugin())
@@ -74,4 +76,4 @@ function update(world) {
.line(new Vector2(-50, 0), new Vector2(50, 0))
.axes(20)
.reset()
-}
\ No newline at end of file
+}
diff --git a/examples/samples/gizmos/index.js b/examples/samples/gizmos/index.js
index 0a887089..98a29256 100644
--- a/examples/samples/gizmos/index.js
+++ b/examples/samples/gizmos/index.js
@@ -1,5 +1,5 @@
-import { default as d2 } from "./2d/index.js";
+import { default as d2 } from './2d/index.js'
export default {
- "2d": d2
-}
\ No newline at end of file
+ '2d': d2
+}
diff --git a/examples/samples/index.js b/examples/samples/index.js
index 527ce896..f0dd7903 100644
--- a/examples/samples/index.js
+++ b/examples/samples/index.js
@@ -8,12 +8,12 @@ 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
-}
\ No newline at end of file
+ '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
index d11c7b78..731f2421 100644
--- a/examples/samples/input/index.js
+++ b/examples/samples/input/index.js
@@ -1,9 +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)
+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
+ 'keyboard': keyboard,
+ 'mouse': mouse,
+ 'touch': touch
}
diff --git a/examples/samples/input/keyboard.js b/examples/samples/input/keyboard.js
index 19f282eb..1fcd70b5 100644
--- a/examples/samples/input/keyboard.js
+++ b/examples/samples/input/keyboard.js
@@ -3,7 +3,6 @@ import {
createTransform2D,
World,
Color,
- Demo,
Query,
EntityCommands,
Cleanup,
diff --git a/examples/samples/input/touch.js b/examples/samples/input/touch.js
index f166f5c0..5280db50 100644
--- a/examples/samples/input/touch.js
+++ b/examples/samples/input/touch.js
@@ -3,7 +3,6 @@ import {
createTransform2D,
World,
Color,
- Demo,
Query,
EntityCommands,
warn,
diff --git a/examples/samples/render/canvas-2d/index.js b/examples/samples/render/canvas-2d/index.js
index 908e100c..3af34165 100644
--- a/examples/samples/render/canvas-2d/index.js
+++ b/examples/samples/render/canvas-2d/index.js
@@ -1,5 +1,5 @@
-const materials = new URL("./material.js", import.meta.url)
+const materials = new URL('./material.js', import.meta.url)
export default {
- "materials": materials
+ 'materials': materials
}
diff --git a/examples/samples/render/index.js b/examples/samples/render/index.js
index d92a1ad0..2b3492ac 100644
--- a/examples/samples/render/index.js
+++ b/examples/samples/render/index.js
@@ -1,6 +1,7 @@
-import webgl from "./webgl/index.js"
-import canvas2d from "./canvas-2d/index.js"
+import webgl from './webgl/index.js'
+import canvas2d from './canvas-2d/index.js'
+
export default {
- "canvas2d": canvas2d,
- "webgl": webgl
+ 'canvas2d': canvas2d,
+ 'webgl': webgl
}
diff --git a/examples/samples/render/webgl/basictriangle.js b/examples/samples/render/webgl/basictriangle.js
index 7d9be598..e65e44e1 100644
--- a/examples/samples/render/webgl/basictriangle.js
+++ b/examples/samples/render/webgl/basictriangle.js
@@ -1,5 +1,4 @@
import {
- Demo,
Mesh,
World,
Cleanup,
@@ -52,4 +51,4 @@ function spawnMesh(world) {
new Cleanup()
])
.build()
-}
\ No newline at end of file
+}
diff --git a/examples/samples/render/webgl/cameraorthographic.js b/examples/samples/render/webgl/cameraorthographic.js
index dda48b1c..3d369d06 100644
--- a/examples/samples/render/webgl/cameraorthographic.js
+++ b/examples/samples/render/webgl/cameraorthographic.js
@@ -1,5 +1,4 @@
import {
- Demo,
Mesh,
OrthographicProjection,
Rotation3D,
diff --git a/examples/samples/render/webgl/cameraperspective.js b/examples/samples/render/webgl/cameraperspective.js
index 32289dda..a65c3712 100644
--- a/examples/samples/render/webgl/cameraperspective.js
+++ b/examples/samples/render/webgl/cameraperspective.js
@@ -1,5 +1,4 @@
import {
- Demo,
Mesh,
PerspectiveProjection,
Camera,
diff --git a/examples/samples/render/webgl/camerarotate.js b/examples/samples/render/webgl/camerarotate.js
index e10a96ab..89dba837 100644
--- a/examples/samples/render/webgl/camerarotate.js
+++ b/examples/samples/render/webgl/camerarotate.js
@@ -1,5 +1,4 @@
import {
- Demo,
Mesh,
Rotation3D,
World,
diff --git a/examples/samples/render/webgl/colorchangetriangle.js b/examples/samples/render/webgl/colorchangetriangle.js
index c5bfc47b..0ff670ff 100644
--- a/examples/samples/render/webgl/colorchangetriangle.js
+++ b/examples/samples/render/webgl/colorchangetriangle.js
@@ -1,5 +1,4 @@
import {
- Demo,
Mesh,
Color,
World,
diff --git a/examples/samples/render/webgl/index.js b/examples/samples/render/webgl/index.js
index 8e6a1927..d1e85cb8 100644
--- a/examples/samples/render/webgl/index.js
+++ b/examples/samples/render/webgl/index.js
@@ -1,15 +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)
+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
+ '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
index a19d9791..bd4e2f5d 100644
--- a/examples/samples/transform/2d/index.js
+++ b/examples/samples/transform/2d/index.js
@@ -1,13 +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)
+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
+ 'translate2d': translate2d,
+ 'rotate2d': rotate2d,
+ 'scale2d': scale2d,
+ 'propagate2d': propagate2d,
+ 'lookat2d': lookat2d
}
diff --git a/examples/samples/transform/2d/propagate.js b/examples/samples/transform/2d/propagate.js
index f211402f..b574246f 100644
--- a/examples/samples/transform/2d/propagate.js
+++ b/examples/samples/transform/2d/propagate.js
@@ -1,5 +1,4 @@
import {
- Demo,
World,
VirtualClock,
BasicMaterial,
diff --git a/examples/samples/transform/2d/rotate.js b/examples/samples/transform/2d/rotate.js
index fa776115..cdb37d4d 100644
--- a/examples/samples/transform/2d/rotate.js
+++ b/examples/samples/transform/2d/rotate.js
@@ -22,6 +22,7 @@ import {
import { addDefaultCamera2D, HackPlugin, setupViewport } from '../../utils.js'
const app = new App()
+
app
.registerPlugin(new HackPlugin())
.registerPlugin(new DefaultPlugin())
@@ -33,6 +34,7 @@ app
.registerSystem(AppSchedule.Update, setupViewport)
.registerDebugger(new FPSDebugger())
.run()
+
/**
* @param {World} world
*/
diff --git a/examples/samples/transform/2d/scale.js b/examples/samples/transform/2d/scale.js
index 89bd555f..d7c7753e 100644
--- a/examples/samples/transform/2d/scale.js
+++ b/examples/samples/transform/2d/scale.js
@@ -1,6 +1,6 @@
import {
BasicMaterial,
- Demo,
+
Mesh,
Scale2D,
World,
diff --git a/examples/samples/transform/2d/translate.js b/examples/samples/transform/2d/translate.js
index b670a6c4..1a0a15a6 100644
--- a/examples/samples/transform/2d/translate.js
+++ b/examples/samples/transform/2d/translate.js
@@ -1,6 +1,5 @@
import {
BasicMaterial,
- Demo,
Mesh,
Position2D,
World,
diff --git a/examples/samples/transform/3d/index.js b/examples/samples/transform/3d/index.js
index ad561ee2..3b4b697c 100644
--- a/examples/samples/transform/3d/index.js
+++ b/examples/samples/transform/3d/index.js
@@ -1,13 +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)
+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
+ 'translate3d': translate3d,
+ 'rotate3d': rotate3d,
+ 'scale3d': scale3d,
+ 'lookAt3d': lookAt3d,
+ 'propagate3d': propagate3d
}
diff --git a/examples/samples/transform/3d/lookat.js b/examples/samples/transform/3d/lookat.js
index 1cc8a648..d8bcea57 100644
--- a/examples/samples/transform/3d/lookat.js
+++ b/examples/samples/transform/3d/lookat.js
@@ -1,6 +1,5 @@
import {
BasicMaterial,
- Demo,
Mesh,
World,
Cleanup,
@@ -25,8 +24,7 @@ import {
FPSDebugger,
WebglRendererPlugin
} from 'wima'
-import { addDefaultCamera3D, HackPlugin, setupViewport, setupViewportWebgl } from '../../utils.js'
-
+import { addDefaultCamera3D, HackPlugin, setupViewportWebgl } from '../../utils.js'
class Target { }
class Looker { }
diff --git a/examples/samples/transform/3d/propagate.js b/examples/samples/transform/3d/propagate.js
index 2aa1b8b9..46145ab6 100644
--- a/examples/samples/transform/3d/propagate.js
+++ b/examples/samples/transform/3d/propagate.js
@@ -1,5 +1,4 @@
import {
- Demo,
World,
VirtualClock,
BasicMaterial,
@@ -26,7 +25,7 @@ import {
FPSDebugger,
WebglRendererPlugin
} from 'wima'
-import { addDefaultCamera3D, HackPlugin, setupViewport, setupViewportWebgl } from '../../utils.js'
+import { addDefaultCamera3D, HackPlugin, setupViewportWebgl } from '../../utils.js'
const app = new App()
diff --git a/examples/samples/transform/3d/rotate.js b/examples/samples/transform/3d/rotate.js
index 585be8e7..dc18f3e3 100644
--- a/examples/samples/transform/3d/rotate.js
+++ b/examples/samples/transform/3d/rotate.js
@@ -1,6 +1,5 @@
import {
BasicMaterial,
- Demo,
Mesh,
World,
Cleanup,
@@ -20,7 +19,7 @@ import {
FPSDebugger,
WebglRendererPlugin
} from 'wima'
-import { addDefaultCamera3D, HackPlugin, setupViewport, setupViewportWebgl } from '../../utils.js'
+import { addDefaultCamera3D, HackPlugin, setupViewportWebgl } from '../../utils.js'
const app = new App()
diff --git a/examples/samples/transform/3d/scale.js b/examples/samples/transform/3d/scale.js
index 96d58db5..4ea2e893 100644
--- a/examples/samples/transform/3d/scale.js
+++ b/examples/samples/transform/3d/scale.js
@@ -1,6 +1,5 @@
import {
BasicMaterial,
- Demo,
Mesh,
Scale3D,
World,
@@ -20,7 +19,7 @@ import {
FPSDebugger,
WebglRendererPlugin
} from 'wima'
-import { addDefaultCamera3D, HackPlugin, setupViewport, setupViewportWebgl } from '../../utils.js'
+import { addDefaultCamera3D, HackPlugin, setupViewportWebgl } from '../../utils.js'
const app = new App()
diff --git a/examples/samples/transform/3d/translate.js b/examples/samples/transform/3d/translate.js
index ef1ffa16..031bf0a2 100644
--- a/examples/samples/transform/3d/translate.js
+++ b/examples/samples/transform/3d/translate.js
@@ -19,7 +19,7 @@ import {
FPSDebugger,
WebglRendererPlugin
} from 'wima'
-import { addDefaultCamera3D, HackPlugin, setupViewport, setupViewportWebgl } from '../../utils.js'
+import { addDefaultCamera3D, HackPlugin, setupViewportWebgl } from '../../utils.js'
const app = new App()
diff --git a/examples/samples/transform/index.js b/examples/samples/transform/index.js
index 379f0c48..15ae735d 100644
--- a/examples/samples/transform/index.js
+++ b/examples/samples/transform/index.js
@@ -1,7 +1,7 @@
-import { default as d2 } from "./2d/index.js";
-import { default as d3 } from "./3d/index.js";
+import { default as d2 } from './2d/index.js'
+import { default as d3 } from './3d/index.js'
export default {
- "2d": d2,
- "3d": d3
-}
\ No newline at end of file
+ '2d': d2,
+ '3d': d3
+}
diff --git a/examples/samples/tween/index.js b/examples/samples/tween/index.js
index 2db184a6..b9362343 100644
--- a/examples/samples/tween/index.js
+++ b/examples/samples/tween/index.js
@@ -1,5 +1,5 @@
-const easing = new URL("./easing.js", import.meta.url)
+const easing = new URL('./easing.js', import.meta.url)
export default {
- "easing": easing
+ 'easing': easing
}
diff --git a/examples/samples/utils.js b/examples/samples/utils.js
index 0f2ef215..c98f7e66 100644
--- a/examples/samples/utils.js
+++ b/examples/samples/utils.js
@@ -10,7 +10,6 @@ import {
Plugin,
App,
typeidGeneric,
- Gizmo2D,
Audio,
Image,
Mesh,
@@ -65,30 +64,30 @@ export function setupViewport(world) {
}
/**
-* @param {World} world
-*/
+ * @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
+ 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.')
+ if (!window) return warn('No main window defined.')
- const [entity] = window
- const canvas = canvases.getWindow(entity)
+ const [entity] = window
+ const canvas = canvases.getWindow(entity)
- if (!canvas) return
+ if (!canvas) return
- const gl = canvas.getContext('webgl2')
+ const gl = canvas.getContext('webgl2')
- if (!gl) return
+ if (!gl) return
- gl.viewport(0, 0, width, height)
- windowcommands
- .window(entity)
- .resize(width, height)
+ gl.viewport(0, 0, width, height)
+ windowcommands
+ .window(entity)
+ .resize(width, height)
}
// Sometimes features that are supposed to be there arent, this plugin
@@ -99,6 +98,7 @@ export class HackPlugin extends Plugin {
* @param {App} app
*/
register(app) {
+
// HACK: This is a hack until system sets and ordering is introduced.
{
app