diff --git a/index.html b/index.html
index 0ea0a4d..baf458b 100644
--- a/index.html
+++ b/index.html
@@ -3124,30 +3124,63 @@ function onNextPinchSplitReader(){
}, 50) // relatively cheap check, filtering on small array
}
-function addConnectorsToCodeEditor( codeEditor ){
+function addConnectorsToCodeEditor( codeEditor, input=true, output=true){
let el = codeEditor.element
el.addEventListener("object3dset", e => {
el.object3D.children[0].addEventListener("synccomplete", e => {
b = el.object3D.children[0]._textRenderInfo.blockBounds
w = b[2]-b[0]
h = b[3]-b[1]
- el.setAttribute("line__input", `start: 0 0 0; end : -1 1 0; opacity: 1;`)
- el.setAttribute("line__input__end", `start: -1 1 0; end : -2 1 0; opacity: 1;`)
- el.setAttribute("line__output", `start: ${w} ${-h} 0; end : ${w+1} ${-h-1} 0; opacity: 1;`)
- el.setAttribute("line__output__end", `start: ${w+1} ${-h-1} 0; end : ${w+2} ${-h-1} 0; opacity: 1;`)
+ // this assumes an axis aligned entity, which is correct until now
+ if (input){
+ el.setAttribute("line__input", `start: 0 0 0; end : -1 1 0; opacity: 1;`)
+ el.setAttribute("line__input__end", `start: -1 1 0; end : -2 1 0; opacity: 1;`)
+ }
+ if (output){
+ el.setAttribute("line__output", `start: ${w} ${-h} 0; end : ${w+1} ${-h-1} 0; opacity: 1;`)
+ el.setAttribute("line__output__end", `start: ${w+1} ${-h-1} 0; end : ${w+2} ${-h-1} 0; opacity: 1;`)
+ }
})
})
return el
}
+function checkConnectors( a, b ){
+ const connectionThreshold = 1 // to adjust after tries in VR, should probably be much shorter
+ const far = 999
+ let i1 = new THREE.Vector3(far,far,far)
+ let i2 = new THREE.Vector3(far,far,far)
+ let o1 = new THREE.Vector3(far,far,far)
+ let o2 = new THREE.Vector3(far,far,far)
+ a.element.getObject3D('line__input')?.getWorldPosition(i1)
+ b.element.getObject3D('line__input')?.getWorldPosition(i2)
+ a.element.getObject3D('line__output__end')?.getWorldPosition(o1)
+ b.element.getObject3D('line__output__end')?.getWorldPosition(o2)
+ let links = []
+ if ( i2.distanceTo(o1) < connectionThreshold ){
+ links.push({source:a, target:b})
+ }
+ if ( i1.distanceTo(o2) < connectionThreshold ){
+ links.push({source:b, target:a})
+ }
+ return links
+}
+
// used for testing
AFRAME.registerComponent('startfunctions', {
init: function () {
document.body.addEventListener( "highlighterready", (e) => {
- let ed = addCodeEditor( 'function NodalTestSquare(x){ return x*x}', 'javascript', '-.3 2.2 -.8')
- addConnectorsToCodeEditor( ed )
- let ed2 = addCodeEditor( 'function NodalPrintToJXR(x){ addNewNote(x) }', 'javascript', '.4 1.9 -.8')
- addConnectorsToCodeEditor( ed2 )
+ let ed1 = addCodeEditor( 'function NodalTestSquare(x){ return x*x}', 'javascript', '-.3 2.2 -.8')
+ addConnectorsToCodeEditor( ed1 )
+// testing multiline
+ let ed2 = addCodeEditor( `function NodalPrintToJXR(x){
+ addNewNote(x)
+}`, 'javascript', '.4 1.9 -.8')
+ addConnectorsToCodeEditor( ed2, true, false )
+ let ed3 = addCodeEditor( 'function NodalTestRandom(){ return Math.random()}', 'javascript', '-.8 2.5 -.8')
+ addConnectorsToCodeEditor( ed3, false, true)
+ setTimeout( _ => console.log( checkConnectors( editors[0], editors[2] ) ), 1000 )
+ // should be done after each codeEditors gets connectors added then on editor moves
}, false);
//startExperience()
//doublePinchToScale()