From 629d39efe5a35f7921a7d3417ea3d6ea11853769 Mon Sep 17 00:00:00 2001 From: Leon van Kammen Date: Fri, 3 Nov 2023 10:57:46 +0100 Subject: [PATCH] work in progress [might break] --- helloworld.js | 44 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/helloworld.js b/helloworld.js index 7332066..c1593f0 100644 --- a/helloworld.js +++ b/helloworld.js @@ -1,23 +1,47 @@ AFRAME.registerComponent('helloworld', { - schema: { - foo: {type: 'string', default: ''}, - }, + schema: { }, - init: function ( ) { + init: function () { - let scene = document.querySelector('a-scene').object3D + // entrypoint for single-file webxros/AFRAME components + this.addEventListener('webxros', (opts) => { + this.require({ + "superclipboard": { required: false, repo: "https://github.com/Utopiah/aframe-components" }, + "spatialeditor": { required: false, repo: "https://github.com/coderofsalvation/webxros-apps" }, + "jsonform": { required: false, repo: "https://github.com/coderofsalvation/webxros-apps" }, + "speech-controls": { required: false, url: "https://rawgit.com/Utopiah/aframe-speech-controls-component/master/dist/aframe-speech-controls-component.min.js"}, + "ISOterminal": { required: false } + }) + // the components above get saved cached/to the browser (IndexedDB) filesystem (so the ISOterminal can read/edit them as well in realtime) + }) - // webxros events are optional, but can be listed here - scene.addEventListener('tty', (tty) => { - tty.write("hello terminal from XR") - tty.on('stdout', (data) => { + this.addEventListener('microgesture-auth', (com) => { // component was mounted + this.addEventListener('superclipboard', (com) => { // component was mounted + this.addEventListener('ISOterminal', (term) => { + // 'term' is basically AFRAME.components.ISOterminal + term.write('hello to XR linux terminal from AFRAME') + term.on('stdout', (data) => { // react to data being spoken/typed into the terminal // (spatial prompting like 'open foo.gltf', 'component helloworld' e.g.) }) }) + this.addEventListener('jsonform', (form) => { + form.add({ + name: 'edit', // "everything must have an edit-button" ~ Fabien Benetou + icon: 'gear', // see https://jsonforms.io to see json-2-html forms + type: 'object', // json-2-webxr has nothing like it (yet) but offers uniform interfaces across components + properties:{ + enabled: { type: 'boolean', default: true, format: 'checkbox' } + edit_terminal: { type: 'function', cb: () => AFRAME.components.ISOterminal.exec('pico /com/helloworld.js') } + edit_spatialeditor: { type: 'function', cb: () => AFRAME.components.spatialeditor.edit('helloworld') } + } + } + + }) + console.log("hello world!") - }, + } });