aframeComponent.js 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028
  1. "use strict";
  2. // Copyright 2012 United States Government, as represented by the Secretary of Defense, Under
  3. // Secretary of Defense (Personnel & Readiness).
  4. //
  5. // Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
  6. // in compliance with the License. You may obtain a copy of the License at
  7. //
  8. // http://www.apache.org/licenses/LICENSE-2.0
  9. //
  10. // Unless required by applicable law or agreed to in writing, software distributed under the License
  11. // is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
  12. // or implied. See the License for the specific language governing permissions and limitations under
  13. // the License.
  14. /// vwf/model/scenejs.js is a placeholder for a 3-D scene manager.
  15. ///
  16. /// @module vwf/model/scenejs
  17. /// @requires vwf/model
  18. define(["module", "vwf/model", "vwf/utility"], function (module, model, utility) {
  19. var self;
  20. // vwf/model/example/scene.js is a demonstration of a scene manager.
  21. return model.load(module, {
  22. // == Module Definition ====================================================================
  23. // -- pipeline -----------------------------------------------------------------------------
  24. // pipeline: [ log ], // vwf <=> log <=> scene
  25. // -- initialize ---------------------------------------------------------------------------
  26. initialize: function () {
  27. self = this;
  28. this.state = {
  29. nodes: {},
  30. scenes: {},
  31. prototypes: {},
  32. createLocalNode: function (nodeID, childID, childExtendsID, childImplementsIDs,
  33. childSource, childType, childIndex, childName, callback) {
  34. return {
  35. "parentID": nodeID,
  36. "ID": childID,
  37. "extendsID": childExtendsID,
  38. "implementsIDs": childImplementsIDs,
  39. "source": childSource,
  40. "type": childType,
  41. "name": childName,
  42. "prototypes": undefined,
  43. "aframeObj": undefined,
  44. "componentName": undefined
  45. };
  46. },
  47. isComponentClass: function (prototypes, classID) {
  48. if (prototypes) {
  49. for (var i = 0; i < prototypes.length; i++) {
  50. if (prototypes[i] === classID) {
  51. //console.info( "prototypes[ i ]: " + prototypes[ i ] );
  52. return true;
  53. }
  54. }
  55. }
  56. return false;
  57. },
  58. isComponentNode: function (prototypes) {
  59. var found = false;
  60. if (prototypes) {
  61. for (var i = 0; i < prototypes.length && !found; i++) {
  62. found = (prototypes[i] === "http://vwf.example.com/aframe/componentNode.vwf");
  63. }
  64. }
  65. return found;
  66. }
  67. };
  68. this.state.kernel = this.kernel.kernel.kernel;
  69. //this.state.kernel = this.kernel.kernel.kernel;
  70. },
  71. // == Model API ============================================================================
  72. // -- creatingNode -------------------------------------------------------------------------
  73. creatingNode: function (nodeID, childID, childExtendsID, childImplementsIDs,
  74. childSource, childType, childIndex, childName, callback /* ( ready ) */) {
  75. // If the parent nodeID is 0, this node is attached directly to the root and is therefore either
  76. // the scene or a prototype. In either of those cases, save the uri of the new node
  77. var childURI = (nodeID === 0 ? childIndex : undefined);
  78. var appID = this.kernel.application();
  79. // If the node being created is a prototype, construct it and add it to the array of prototypes,
  80. // and then return
  81. var prototypeID = utility.ifPrototypeGetId(appID, this.state.prototypes, nodeID, childID);
  82. if (prototypeID !== undefined) {
  83. this.state.prototypes[prototypeID] = {
  84. parentID: nodeID,
  85. ID: childID,
  86. extendsID: childExtendsID,
  87. implementsID: childImplementsIDs,
  88. source: childSource,
  89. type: childType,
  90. name: childName
  91. };
  92. return;
  93. }
  94. var protos = getPrototypes(this.kernel, childExtendsID);
  95. //var kernel = this.kernel.kernel.kernel;
  96. var node;
  97. if (this.state.isComponentNode(protos)) {
  98. // Create the local copy of the node properties
  99. if (this.state.nodes[childID] === undefined) {
  100. this.state.nodes[childID] = this.state.createLocalNode(nodeID, childID, childExtendsID, childImplementsIDs,
  101. childSource, childType, childIndex, childName, callback);
  102. }
  103. node = this.state.nodes[childID];
  104. node.prototypes = protos;
  105. //node.aframeObj = createAFrameObject(node);
  106. node.aframeObj = setAFrameObject(node);
  107. // addNodeToHierarchy(node);
  108. //notifyDriverOfPrototypeAndBehaviorProps();
  109. }
  110. },
  111. // -- initializingNode -------------------------------------------------------------------------
  112. // initializingNode: function( nodeID, childID, childExtendsID, childImplementsIDs,
  113. // childSource, childType, childIndex, childName ) {
  114. // },
  115. // -- deletingNode -------------------------------------------------------------------------
  116. deletingNode: function (nodeID) {
  117. if (this.state.nodes[nodeID] !== undefined) {
  118. var node = this.state.nodes[nodeID];
  119. if (node.aframeObj.compName !== undefined) {
  120. // removes and destroys object
  121. node.aframeObj.el.removeAttribute(node.aframeObj.compName);
  122. node.aframeObj = undefined;
  123. }
  124. delete this.state.nodes[nodeID];
  125. }
  126. },
  127. // -- initializingProperty -----------------------------------------------------------------
  128. initializingProperty: function (nodeID, propertyName, propertyValue) {
  129. var value = undefined;
  130. var node = this.state.nodes[nodeID];
  131. if (node !== undefined) {
  132. value = this.settingProperty(nodeID, propertyName, propertyValue);
  133. }
  134. return value;
  135. },
  136. // -- creatingProperty ---------------------------------------------------------------------
  137. creatingProperty: function (nodeID, propertyName, propertyValue) {
  138. return this.initializingProperty(nodeID, propertyName, propertyValue);
  139. },
  140. // -- settingProperty ----------------------------------------------------------------------
  141. settingProperty: function (nodeID, propertyName, propertyValue) {
  142. var node = this.state.nodes[nodeID];
  143. var value = undefined;
  144. if (node && node.aframeObj && utility.validObject(propertyValue)) {
  145. var aframeObject = node.aframeObj;
  146. if (isComponentNodeDefinition(node.prototypes)) {
  147. value = propertyValue;
  148. switch (propertyName) {
  149. default:
  150. value = undefined;
  151. break;
  152. }
  153. }
  154. if (value === undefined && isComponentDefinition(node.prototypes)) {
  155. value = propertyValue;
  156. switch (propertyName) {
  157. case "compName":
  158. break;
  159. default:
  160. value = undefined;
  161. break;
  162. }
  163. }
  164. if (value === undefined && isAViewOffsetCameraDefinition(node.prototypes)) {
  165. if (aframeObject.el.getAttribute(aframeObject.compName)) {
  166. value = propertyValue;
  167. let parentNodeAF = aframeObject.el;
  168. // let defs = ['fullWidth', 'fullHeight', 'xoffset', 'yoffset'];
  169. // defs.forEach(element => {
  170. // element == propertyName ? parentNodeAF.setAttribute('viewoffset', element, propertyValue) :
  171. // value = undefined;
  172. // })
  173. switch (propertyName) {
  174. case "fullWidth":
  175. parentNodeAF.setAttribute('viewoffset', 'fullWidth', propertyValue);
  176. break;
  177. case "fullHeight":
  178. parentNodeAF.setAttribute('viewoffset', 'fullHeight', propertyValue);
  179. break;
  180. case "yoffset":
  181. parentNodeAF.setAttribute('viewoffset', 'yoffset', propertyValue);
  182. break;
  183. case "xoffset":
  184. parentNodeAF.setAttribute('viewoffset', 'xoffset', propertyValue);
  185. break;
  186. case "subcamWidth":
  187. parentNodeAF.setAttribute('viewoffset', 'width', propertyValue);
  188. break;
  189. case "subcamHeight":
  190. parentNodeAF.setAttribute('viewoffset', 'height', propertyValue);
  191. break;
  192. default:
  193. value = undefined;
  194. break;
  195. }
  196. }
  197. }
  198. if (value === undefined && isARayCasterDefinition(node.prototypes)) {
  199. if (aframeObject.el.getAttribute(aframeObject.compName)) {
  200. value = propertyValue;
  201. let parentNodeAF = aframeObject.el;
  202. let defs = ['direction', 'far', 'interval', 'near', 'objects', 'origin', 'recursive', 'showLine', 'useWorldCoordinates'];
  203. defs.forEach(element => {
  204. element == propertyName ? parentNodeAF.setAttribute('raycaster', element, propertyValue) :
  205. value = undefined;
  206. })
  207. }
  208. }
  209. if (value === undefined && aframeObject.el.getAttribute(aframeObject.compName)) {
  210. value = propertyValue;
  211. let parentNodeAF = aframeObject.el;
  212. switch (propertyName) {
  213. case "color":
  214. parentNodeAF.setAttribute(aframeObject.compName, 'color', propertyValue);
  215. break;
  216. case "path":
  217. parentNodeAF.setAttribute(aframeObject.compName, 'path', propertyValue);
  218. break;
  219. case "width":
  220. parentNodeAF.setAttribute(aframeObject.compName, 'width', propertyValue);
  221. break;
  222. default:
  223. value = undefined;
  224. break;
  225. }
  226. }
  227. //isALineDefinition(node.prototypes)
  228. //if (value === undefined && node.componentName == 'line') { //isALineDefinition( node.prototypes )
  229. if (node.extendsID == "http://vwf.example.com/aframe/lineComponent.vwf") {
  230. if (value === undefined && aframeObject.el.getAttribute(aframeObject.compName)) {
  231. value = propertyValue;
  232. //let parentNodeAF = self.state.kernel.find(node.parentID);
  233. // aframeObject.el.setAttribute('line', 'color')
  234. let parentNodeAF = aframeObject.el;
  235. switch (propertyName) {
  236. case "start":
  237. parentNodeAF.setAttribute(aframeObject.compName, { start: propertyValue });
  238. break;
  239. case "end":
  240. parentNodeAF.setAttribute(aframeObject.compName, { end: propertyValue });
  241. break;
  242. case "color":
  243. parentNodeAF.setAttribute(aframeObject.compName, 'color', propertyValue);
  244. break;
  245. case "opacity":
  246. parentNodeAF.setAttribute(aframeObject.compName, 'opacity', propertyValue);
  247. break;
  248. case "visible":
  249. parentNodeAF.setAttribute(aframeObject.compName, 'visible', propertyValue);
  250. break;
  251. default:
  252. value = undefined;
  253. break;
  254. }
  255. }
  256. }
  257. if (value === undefined && aframeObject.el.getAttribute(aframeObject.compName)) {
  258. value = propertyValue;
  259. let parentNodeAF = aframeObject.el;
  260. switch (propertyName) {
  261. case "clip":
  262. parentNodeAF.setAttribute(aframeObject.compName, 'clip', propertyValue);
  263. break;
  264. case "duration":
  265. parentNodeAF.setAttribute(aframeObject.compName, 'duration', propertyValue);
  266. break;
  267. case "crossFadeDuration":
  268. parentNodeAF.setAttribute(aframeObject.compName, 'crossFadeDuration', propertyValue);
  269. break;
  270. case "loop":
  271. parentNodeAF.setAttribute(aframeObject.compName, 'loop', propertyValue);
  272. break;
  273. case "repetitions":
  274. parentNodeAF.setAttribute(aframeObject.compName, 'repetitions', propertyValue);
  275. break;
  276. default:
  277. value = undefined;
  278. break;
  279. }
  280. }
  281. if (value === undefined && aframeObject.el.getAttribute(aframeObject.compName)) {
  282. value = propertyValue;
  283. let parentNodeAF = aframeObject.el;
  284. switch (propertyName) {
  285. case "enabled":
  286. parentNodeAF.setAttribute(aframeObject.compName, 'enabled', propertyValue);
  287. break;
  288. case "deltaPos":
  289. parentNodeAF.setAttribute(aframeObject.compName, 'deltaPos', propertyValue);
  290. break;
  291. case "deltaRot":
  292. parentNodeAF.setAttribute(aframeObject.compName, 'deltaRot', propertyValue);
  293. break;
  294. default:
  295. value = undefined;
  296. break;
  297. }
  298. }
  299. if (value === undefined && aframeObject.el.getAttribute(aframeObject.compName)) {
  300. value = propertyValue;
  301. let parentNodeAF = aframeObject.el;
  302. switch (propertyName) {
  303. case "mode":
  304. parentNodeAF.setAttribute(aframeObject.compName, 'mode', propertyValue);
  305. break;
  306. default:
  307. value = undefined;
  308. break;
  309. }
  310. }
  311. if (value === undefined && aframeObject.el.getAttribute(aframeObject.compName)) {
  312. value = propertyValue;
  313. //let parentNodeAF = self.state.kernel.find(node.parentID);
  314. // aframeObject.el.setAttribute('line', 'color')
  315. let parentNodeAF = aframeObject.el;
  316. switch (propertyName) {
  317. case "armModel":
  318. parentNodeAF.setAttribute(aframeObject.compName, { armModel: propertyValue });
  319. break;
  320. case "buttonColor":
  321. parentNodeAF.setAttribute(aframeObject.compName, { buttonColor: propertyValue });
  322. break;
  323. case "buttonTouchedColor":
  324. parentNodeAF.setAttribute(aframeObject.compName, 'buttonTouchedColor', propertyValue);
  325. break;
  326. case "buttonHighlightColor":
  327. parentNodeAF.setAttribute(aframeObject.compName, 'buttonHighlightColor', propertyValue);
  328. break;
  329. case "hand":
  330. parentNodeAF.setAttribute(aframeObject.compName, 'hand', propertyValue);
  331. break;
  332. case "model":
  333. parentNodeAF.setAttribute(aframeObject.compName, 'model', propertyValue);
  334. break;
  335. case "rotationOffset":
  336. parentNodeAF.setAttribute(aframeObject.compName, 'rotationOffset', propertyValue);
  337. break;
  338. default:
  339. value = undefined;
  340. break;
  341. }
  342. }
  343. }
  344. return value;
  345. },
  346. // -- gettingProperty ----------------------------------------------------------------------
  347. gettingProperty: function (nodeID, propertyName, propertyValue) {
  348. var node = this.state.nodes[nodeID];
  349. var value = undefined;
  350. if (node && node.aframeObj) {
  351. var aframeObject = node.aframeObj;
  352. if (isComponentNodeDefinition(node.prototypes)) {
  353. switch (propertyName) {
  354. }
  355. }
  356. if (value === undefined && isComponentDefinition(node.prototypes)) {
  357. switch (propertyName) {
  358. case "compName":
  359. break;
  360. }
  361. }
  362. // isALineDefinition( node.prototypes ) aframeObject.compName == compName
  363. if (value === undefined && isARayCasterDefinition(node.prototypes)) {
  364. value = propertyValue;
  365. let parentNodeAF = aframeObject.el;
  366. let defs = ['direction', 'far', 'interval', 'near', 'objects', 'origin', 'recursive', 'showLine', 'useWorldCoordinates'];
  367. defs.forEach(element => {
  368. if (element == propertyName) {
  369. let val = parentNodeAF.getAttribute('raycaster').element;
  370. value = AFRAME.utils.coordinates.isCoordinates(val) ? AFRAME.utils.coordinates.stringify(val) : val
  371. }
  372. })
  373. }
  374. if (value === undefined && isALineDefinition(node.prototypes)) {
  375. value = propertyValue;
  376. // let parentNodeAF = self.state.nodes[node.parentID].aframeObj;
  377. let parentNodeAF = aframeObject.el;
  378. switch (propertyName) {
  379. case "start":
  380. value = AFRAME.utils.coordinates.stringify(parentNodeAF.getAttribute(aframeObject.compName).start);
  381. break;
  382. case "end":
  383. value = AFRAME.utils.coordinates.stringify(parentNodeAF.getAttribute(aframeObject.compName).end);
  384. break;
  385. case "color":
  386. value = parentNodeAF.getAttribute(aframeObject.compName).color;
  387. break;
  388. case "opacity":
  389. value = parentNodeAF.getAttribute(aframeObject.compName).opacity;
  390. break;
  391. case "visible":
  392. value = parentNodeAF.getAttribute(aframeObject.compName).visible;
  393. break;
  394. }
  395. }
  396. if (value === undefined && isAAnimMixerDefinition(node.prototypes)) {
  397. value = propertyValue;
  398. // let parentNodeAF = self.state.nodes[node.parentID].aframeObj;
  399. let parentNodeAF = aframeObject.el;
  400. switch (propertyName) {
  401. case "clip":
  402. value = parentNodeAF.getAttribute(aframeObject.compName).clip;
  403. break;
  404. case "duration":
  405. value = parentNodeAF.getAttribute(aframeObject.compName).duration;
  406. break;
  407. case "crossFadeDuration":
  408. value = parentNodeAF.getAttribute(aframeObject.compName).crossFadeDuration;
  409. break;
  410. case "loop":
  411. value = parentNodeAF.getAttribute(aframeObject.compName).loop;
  412. break;
  413. case "repetitions":
  414. value = parentNodeAF.getAttribute(aframeObject.compName).repetitions;
  415. break;
  416. }
  417. }
  418. if (value === undefined && isALinePathDefinition(node.prototypes)) {
  419. value = propertyValue;
  420. // let parentNodeAF = self.state.nodes[node.parentID].aframeObj;
  421. let parentNodeAF = aframeObject.el;
  422. switch (propertyName) {
  423. case "color":
  424. value = parentNodeAF.getAttribute(aframeObject.compName).color;
  425. break;
  426. case "path":
  427. value = parentNodeAF.getAttribute(aframeObject.compName).path;
  428. break;
  429. case "width":
  430. value = parentNodeAF.getAttribute(aframeObject.compName).width;
  431. break;
  432. }
  433. }
  434. if (value === undefined && isAViewOffsetCameraDefinition(node.prototypes)) {
  435. value = propertyValue;
  436. // let parentNodeAF = self.state.nodes[node.parentID].aframeObj;
  437. let parentNodeAF = aframeObject.el;
  438. switch (propertyName) {
  439. case "fullWidth":
  440. value = parentNodeAF.getAttribute(aframeObject.compName).fullWidth;
  441. break;
  442. case "fullHeight":
  443. value = parentNodeAF.getAttribute(aframeObject.compName).fullHeight;
  444. break;
  445. case "subcamWidth":
  446. value = parentNodeAF.getAttribute(aframeObject.compName).width;
  447. break;
  448. case "subcamHeight":
  449. value = parentNodeAF.getAttribute(aframeObject.compName).height;
  450. break;
  451. case "xoffset":
  452. value = parentNodeAF.getAttribute(aframeObject.compName).xoffset;
  453. break;
  454. case "yoffset":
  455. value = parentNodeAF.getAttribute(aframeObject.compName).yoffset;
  456. break;
  457. }
  458. }
  459. if (value === undefined && isAInterpolationDefinition(node.prototypes)) {
  460. value = propertyValue;
  461. // let parentNodeAF = self.state.nodes[node.parentID].aframeObj;
  462. let parentNodeAF = aframeObject.el;
  463. switch (propertyName) {
  464. case "enabled":
  465. value = parentNodeAF.getAttribute(aframeObject.compName).enabled;
  466. break;
  467. case "deltaPos":
  468. value = parentNodeAF.getAttribute(aframeObject.compName).deltaPos;
  469. break;
  470. case "deltaRot":
  471. value = parentNodeAF.getAttribute(aframeObject.compName).deltaRot;
  472. break;
  473. }
  474. }
  475. if (value === undefined && isAGizmoDefinition(node.prototypes)) {
  476. value = propertyValue;
  477. // let parentNodeAF = self.state.nodes[node.parentID].aframeObj;
  478. let parentNodeAF = aframeObject.el;
  479. switch (propertyName) {
  480. case "mode":
  481. value = parentNodeAF.getAttribute(aframeObject.compName).mode;
  482. break;
  483. }
  484. }
  485. }
  486. if (value !== undefined) {
  487. propertyValue = value;
  488. }
  489. return value;
  490. }
  491. });
  492. function getPrototypes(kernel, extendsID) {
  493. var prototypes = [];
  494. var id = extendsID;
  495. while (id !== undefined) {
  496. prototypes.push(id);
  497. id = kernel.prototype(id);
  498. }
  499. return prototypes;
  500. }
  501. function isAAnimMixerDefinition(prototypes) {
  502. var found = false;
  503. if (prototypes) {
  504. for (var i = 0; i < prototypes.length && !found; i++) {
  505. found = (prototypes[i] == "http://vwf.example.com/aframe/anim-mixer-component.vwf");
  506. }
  507. }
  508. return found;
  509. }
  510. function isAInterpolationDefinition(prototypes) {
  511. var found = false;
  512. if (prototypes) {
  513. for (var i = 0; i < prototypes.length && !found; i++) {
  514. found = (prototypes[i] == "http://vwf.example.com/aframe/interpolation-component.vwf");
  515. }
  516. }
  517. return found;
  518. }
  519. function isALinePathDefinition(prototypes) {
  520. var found = false;
  521. if (prototypes) {
  522. for (var i = 0; i < prototypes.length && !found; i++) {
  523. found = (prototypes[i] == "http://vwf.example.com/aframe/linepath.vwf");
  524. }
  525. }
  526. return found;
  527. }
  528. function isAViewOffsetCameraDefinition(prototypes) {
  529. var found = false;
  530. if (prototypes) {
  531. for (var i = 0; i < prototypes.length && !found; i++) {
  532. found = (prototypes[i] == "http://vwf.example.com/aframe/viewOffsetCamera-component.vwf");
  533. }
  534. }
  535. return found;
  536. }
  537. function isAGizmoDefinition(prototypes) {
  538. var found = false;
  539. if (prototypes) {
  540. for (var i = 0; i < prototypes.length && !found; i++) {
  541. found = (prototypes[i] == "http://vwf.example.com/aframe/gizmoComponent.vwf");
  542. }
  543. }
  544. return found;
  545. }
  546. function isARayCasterDefinition(prototypes) {
  547. var found = false;
  548. if (prototypes) {
  549. for (var i = 0; i < prototypes.length && !found; i++) {
  550. found = (prototypes[i] == "http://vwf.example.com/aframe/raycasterComponent.vwf");
  551. }
  552. }
  553. return found;
  554. }
  555. function isALineDefinition(prototypes) {
  556. var found = false;
  557. if (prototypes) {
  558. for (var i = 0; i < prototypes.length && !found; i++) {
  559. found = (prototypes[i] == "http://vwf.example.com/aframe/lineComponent.vwf");
  560. }
  561. }
  562. return found;
  563. }
  564. function isGearVRControlsDefinition(prototypes) {
  565. var found = false;
  566. if (prototypes) {
  567. for (var i = 0; i < prototypes.length && !found; i++) {
  568. found = (prototypes[i] == "http://vwf.example.com/aframe/gearvr-controlsComponent.vwf");
  569. }
  570. }
  571. return found;
  572. }
  573. function isComponentNodeDefinition(prototypes) {
  574. var found = false;
  575. if (prototypes) {
  576. for (var i = 0; i < prototypes.length && !found; i++) {
  577. found = (prototypes[i] == "http://vwf.example.com/aframe/componentNode.vwf");
  578. }
  579. }
  580. return found;
  581. }
  582. function isComponentDefinition(prototypes) {
  583. var found = false;
  584. if (prototypes) {
  585. for (var i = 0; i < prototypes.length && !found; i++) {
  586. found = (prototypes[i] == "http://vwf.example.com/aframe/aentityComponent.vwf");
  587. }
  588. }
  589. return found;
  590. }
  591. function setAFrameObject(node, config) {
  592. var protos = node.prototypes;
  593. var aframeObj = {};
  594. var sceneEl = document.querySelector('a-scene');
  595. aframeObj.id = node.parentID;
  596. aframeObj.el = sceneEl.children[node.parentID];
  597. aframeObj.el = Array.from(sceneEl.querySelectorAll('*')).filter(item => { return item.id == aframeObj.id })[0];
  598. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/lineComponent.vwf")) {
  599. // aframeObj.id = node.parentID;
  600. // aframeObj.el = sceneEl.children[node.parentID];
  601. if (node.name !== 'line') {
  602. aframeObj.compName = node.name;
  603. } else {
  604. aframeObj.compName = "line";
  605. }
  606. //aframeObj.el.setAttribute(node.type, {});
  607. aframeObj.el.setAttribute(aframeObj.compName, {});
  608. }
  609. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/gizmoComponent.vwf")) {
  610. // aframeObj.el.setAttribute(node.type, {});
  611. aframeObj.compName = "gizmo";
  612. aframeObj.el.setAttribute(aframeObj.compName, {});
  613. }
  614. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/raycasterComponent.vwf")) {
  615. // aframeObj.el.setAttribute(node.type, {});
  616. aframeObj.compName = "raycaster";
  617. aframeObj.el.setAttribute(aframeObj.compName, {});
  618. }
  619. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/viewOffsetCamera-component.vwf")) {
  620. // aframeObj.el.setAttribute(node.type, {});
  621. aframeObj.compName = "viewoffset";
  622. aframeObj.el.setAttribute(aframeObj.compName, {});
  623. }
  624. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/streamSoundComponent.vwf")) {
  625. // aframeObj.el.setAttribute(node.type, {});
  626. aframeObj.compName = "streamsound";
  627. aframeObj.el.setAttribute(aframeObj.compName, {});
  628. }
  629. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/linepath.vwf")) {
  630. // aframeObj.el.setAttribute(node.type, {});
  631. aframeObj.compName = "linepath";
  632. aframeObj.el.setAttribute(aframeObj.compName, {});
  633. }
  634. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/interpolation-component.vwf")) {
  635. // aframeObj.el.setAttribute(node.type, {});
  636. aframeObj.compName = "interpolation";
  637. aframeObj.el.setAttribute(aframeObj.compName, {});
  638. }
  639. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/anim-mixer-component.vwf")) {
  640. // aframeObj.el.setAttribute(node.type, {});
  641. aframeObj.compName = "animation-mixer";
  642. aframeObj.el.setAttribute(aframeObj.compName, {});
  643. }
  644. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/app-envmap-component.vwf")) {
  645. // aframeObj.el.setAttribute(node.type, {});
  646. aframeObj.compName = "envmap";
  647. aframeObj.el.setAttribute(aframeObj.compName, {});
  648. }
  649. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/app-avatarbvh-component.vwf")) {
  650. // aframeObj.el.setAttribute(node.type, {});
  651. aframeObj.compName = "avatarbvh";
  652. aframeObj.el.setAttribute(aframeObj.compName, {});
  653. }
  654. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/app-sun-component.vwf")) {
  655. // aframeObj.el.setAttribute(node.type, {});
  656. aframeObj.compName = "sun";
  657. aframeObj.el.setAttribute('id', "sun");
  658. aframeObj.el.setAttribute(aframeObj.compName, {});
  659. }
  660. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/app-skyshader-component.vwf")) {
  661. // aframeObj.el.setAttribute(node.type, {});
  662. aframeObj.compName = "skyshader";
  663. aframeObj.el.setAttribute(aframeObj.compName, {});
  664. }
  665. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/app-raycaster-listener-component.vwf")) {
  666. // aframeObj.el.setAttribute(node.type, {});
  667. aframeObj.compName = "raycaster-listener";
  668. aframeObj.el.setAttribute(aframeObj.compName, {});
  669. }
  670. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/app-cursor-listener-component.vwf")) {
  671. // aframeObj.el.setAttribute(node.type, {});
  672. aframeObj.compName = "cursor-listener";
  673. aframeObj.el.setAttribute(aframeObj.compName, {});
  674. }
  675. return aframeObj;
  676. }
  677. function addNodeToHierarchy(node) {
  678. if (node.aframeObj) {
  679. if (self.state.nodes[node.parentID] !== undefined) {
  680. var parent = self.state.nodes[node.parentID];
  681. if (parent.aframeObj) {
  682. if (parent.children === undefined) {
  683. parent.children = [];
  684. }
  685. parent.children.push(node.ID);
  686. }
  687. }
  688. }
  689. }
  690. });