Browse Source

work on intersection

Nikolay Suslov 6 years ago
parent
commit
1327b947b2

+ 1 - 0
public/defaults/proxy/vwf.example.com/aframe/aentity.vwf.yaml

@@ -44,6 +44,7 @@ properties:
   visible:
   edit:
   osc:
+  ownedBy:
 events:
   positionChanged:
   rotationChanged:

+ 8 - 0
public/defaults/worlds/aframe2/index.vwf.yaml

@@ -154,6 +154,14 @@ children:
           position: "2 -0.75 0"
           depth: 1
         children:
+          raycaster:
+            extends: http://vwf.example.com/aframe/raycasterComponent.vwf
+            type: "component"
+            properties:
+              recursive: false
+              interval: 1000
+              far: 3
+              objects: ".intersectable"      
           material:
             extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
             properties:

+ 10 - 0
public/vwf/model/aframe.js

@@ -410,6 +410,11 @@ define(["module", "vwf/model", "vwf/utility"], function (module, model, utility)
                             node.events.clickable = propertyValue;
                             break;
 
+
+                        case "ownedBy":
+                                aframeObject.setAttribute('ownedby', propertyValue);
+                            break;
+
                         case "visible":
                             aframeObject.setAttribute('visible', propertyValue);
                             break;
@@ -927,6 +932,11 @@ define(["module", "vwf/model", "vwf/utility"], function (module, model, utility)
                         //     }
                         //     break;
 
+                        case "ownedBy":
+                            value = aframeObject.getAttribute('ownedby');
+                            break;
+
+
                         case "visible":
                             value = aframeObject.getAttribute('visible');
                             break;

+ 8 - 5
public/vwf/model/aframe/addon/aframe-components.js

@@ -188,6 +188,7 @@ AFRAME.registerComponent('raycaster-listener', {
         let self = this;
         this.intersected = false;
         this.casters = {}
+        this.me = vwf_view.kernel.moniker();
 
         this.el.addEventListener('raycaster-intersected', function (evt) {
 
@@ -199,11 +200,12 @@ AFRAME.registerComponent('raycaster-listener', {
 
 
                 } else {
-                    
-                    //evt.detail.intersection.object.el.id
-                    if (evt.detail.el.id.includes(vwf_view.kernel.moniker())) {
                     console.log('I was intersected at: ', evt.target);//evt.detail.getIntersection().point);
-                    vwf_view.kernel.fireEvent(evt.target.id, "intersectEvent",  [vwf_view.kernel.moniker()]);
+                    //evt.detail.intersection.object.el.id
+
+                let ownedby = evt.detail.el.getAttribute('ownedby');
+                if(ownedby == self.me || (evt.detail.el.id.includes(self.me)))  { //if (evt.detail.el.id.includes(self.me)) {
+                    vwf_view.kernel.fireEvent(evt.target.id, "intersectEvent",  [self.me]);
                     }
                 }
 
@@ -223,7 +225,8 @@ AFRAME.registerComponent('raycaster-listener', {
                 if (self.intersected) {
                     console.log('Clear intersection');
                     if (Object.entries(self.casters).length == 1 && (self.casters[evt.target.id] !== undefined)) {
-                        if (evt.detail.el.id.includes(vwf_view.kernel.moniker())) {
+                        let ownedby = evt.detail.el.getAttribute('ownedby');
+                if(ownedby == self.me || (evt.detail.el.id.includes(self.me))) {  //if (evt.detail.el.id.includes(self.me)) {
                         vwf_view.kernel.fireEvent(evt.target.id, "clearIntersectEvent", [vwf_view.kernel.moniker()])
                         }
                     }

+ 5 - 0
public/vwf/view/aframe.js

@@ -193,6 +193,11 @@ define(["module", "vwf/view"], function (module, view) {
                 return;
             }
 
+            if (propertyName == 'ownedBy')
+            {
+                //debugger;
+            }
+
             if (propertyName == 'position')
             {
                 receiveModelTransformChanges( nodeId, 'position', propertyValue );

+ 31 - 0
public/vwf/view/editor-new.js

@@ -1867,6 +1867,37 @@ define([
                                             //vwf_view.kernel.callMethod(node.parentID, "deleteNode", [node.name])
                                         }
                                     }),
+                                    self.widgets.floatActionButton({
+                                        label: "priority_high",
+                                        styleClass: "mdc-fab--mini",
+                                        onclickfunc: function () {
+                                            var nodeID = document.querySelector('#currentNode')._currentNode;
+                                            let node = self.nodes[nodeID];
+                                            //vwf_view.kernel.deleteChild(node.parentID, node.name);
+
+                                            let me = self.kernel.moniker();
+                                            vwf_view.kernel.setProperty(nodeID, 'ownedBy', me);
+
+                                            // let me = self.kernel.moniker();
+                                            // let viewDriver = vwf.views["vwf/view/aframe"];
+                                            // let nodeComponents = viewDriver.nodes[nodeID].components;
+                                            // let raycasterID = Object.entries(nodeComponents).find(el => 
+                                            //     el[0] == 'raycaster'
+                                            //   )[1];
+                                            //  if (raycasterID){
+                                            //     vwf_view.kernel.setProperty(raycasterID, 'ownedby', me);
+                                            //  }
+                                            //   else {
+                                            //       console.log("no raycaster component on: " + nodeID);
+                                            //   }
+
+
+                                            //let nodeComponents = node.components
+                                           
+                                            //vwf_view.kernel.callMethod(node.parentID, "deleteNode", [node.name])
+                                        }
+                                    }),
+
                                     saveGUI
 
                                 ]