aframeComponent.js 43 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253
  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.aframeComponentDef = {
  70. 'A-MATERIAL': [
  71. "alphaTest",
  72. "depthTest",
  73. "flatShading",
  74. "npot",
  75. "offset",
  76. "opacity",
  77. "remain",
  78. "repeat",
  79. "shader",
  80. "side",
  81. "transparent",
  82. "vertexColors",
  83. "visible",
  84. "ambient-occlusion-map",
  85. "ambient-occlusion-map-intensity",
  86. "ambient-occlusion-texture-offset",
  87. "ambient-occlusion-texture-repeat",
  88. "color",
  89. "displacement-bias",
  90. "displacement-map",
  91. "displacement-scale",
  92. "displacement-texture-offset",
  93. "displacement-texture-repeat",
  94. "emissive",
  95. "emissiveIntensity",
  96. "height",
  97. "envMap",
  98. "fog",
  99. "metalness",
  100. "normal-map",
  101. "normal-scale",
  102. "normal-texture-offset",
  103. "normal-texture-repeat",
  104. "roughness",
  105. "sphericalEnvMap",
  106. "width",
  107. "wireframe",
  108. "wireframe-linewidth",
  109. "src"]
  110. }
  111. //this.state.kernel = this.kernel.kernel.kernel;
  112. },
  113. // == Model API ============================================================================
  114. // -- creatingNode -------------------------------------------------------------------------
  115. creatingNode: function (nodeID, childID, childExtendsID, childImplementsIDs,
  116. childSource, childType, childIndex, childName, callback /* ( ready ) */) {
  117. // If the parent nodeID is 0, this node is attached directly to the root and is therefore either
  118. // the scene or a prototype. In either of those cases, save the uri of the new node
  119. var childURI = (nodeID === 0 ? childIndex : undefined);
  120. var appID = this.kernel.application();
  121. // If the node being created is a prototype, construct it and add it to the array of prototypes,
  122. // and then return
  123. var prototypeID = utility.ifPrototypeGetId(appID, this.state.prototypes, nodeID, childID);
  124. if (prototypeID !== undefined) {
  125. this.state.prototypes[prototypeID] = {
  126. parentID: nodeID,
  127. ID: childID,
  128. extendsID: childExtendsID,
  129. implementsID: childImplementsIDs,
  130. source: childSource,
  131. type: childType,
  132. name: childName
  133. };
  134. return;
  135. }
  136. var protos = getPrototypes(this.kernel, childExtendsID);
  137. //var kernel = this.kernel.kernel.kernel;
  138. var node;
  139. if (this.state.isComponentNode(protos)) {
  140. // Create the local copy of the node properties
  141. if (this.state.nodes[childID] === undefined) {
  142. this.state.nodes[childID] = this.state.createLocalNode(nodeID, childID, childExtendsID, childImplementsIDs,
  143. childSource, childType, childIndex, childName, callback);
  144. }
  145. node = this.state.nodes[childID];
  146. node.prototypes = protos;
  147. //node.aframeObj = createAFrameObject(node);
  148. node.aframeObj = setAFrameObject(node);
  149. // addNodeToHierarchy(node);
  150. //notifyDriverOfPrototypeAndBehaviorProps();
  151. }
  152. },
  153. // -- initializingNode -------------------------------------------------------------------------
  154. // initializingNode: function( nodeID, childID, childExtendsID, childImplementsIDs,
  155. // childSource, childType, childIndex, childName ) {
  156. // },
  157. // -- deletingNode -------------------------------------------------------------------------
  158. deletingNode: function (nodeID) {
  159. if (this.state.nodes[nodeID] !== undefined) {
  160. var node = this.state.nodes[nodeID];
  161. if (node.aframeObj.compName !== undefined) {
  162. // removes and destroys object
  163. node.aframeObj.el.removeAttribute(node.aframeObj.compName);
  164. node.aframeObj = undefined;
  165. }
  166. delete this.state.nodes[nodeID];
  167. }
  168. },
  169. // -- initializingProperty -----------------------------------------------------------------
  170. initializingProperty: function (nodeID, propertyName, propertyValue) {
  171. var value = undefined;
  172. var node = this.state.nodes[nodeID];
  173. if (node !== undefined) {
  174. value = this.settingProperty(nodeID, propertyName, propertyValue);
  175. }
  176. return value;
  177. },
  178. // -- creatingProperty ---------------------------------------------------------------------
  179. creatingProperty: function (nodeID, propertyName, propertyValue) {
  180. return this.initializingProperty(nodeID, propertyName, propertyValue);
  181. },
  182. // -- settingProperty ----------------------------------------------------------------------
  183. settingProperty: function (nodeID, propertyName, propertyValue) {
  184. var node = this.state.nodes[nodeID];
  185. var value = undefined;
  186. if (node && node.aframeObj && utility.validObject(propertyValue)) {
  187. var aframeObject = node.aframeObj;
  188. if (isComponentNodeDefinition(node.prototypes)) {
  189. value = propertyValue;
  190. switch (propertyName) {
  191. default:
  192. value = undefined;
  193. break;
  194. }
  195. }
  196. if (value === undefined && isComponentDefinition(node.prototypes)) {
  197. value = propertyValue;
  198. switch (propertyName) {
  199. case "compName":
  200. break;
  201. default:
  202. value = undefined;
  203. break;
  204. }
  205. }
  206. if (value === undefined && isAViewOffsetCameraDefinition(node.prototypes)) {
  207. if (aframeObject.el.getAttribute(aframeObject.compName)) {
  208. value = propertyValue;
  209. let parentNodeAF = aframeObject.el;
  210. // let defs = ['fullWidth', 'fullHeight', 'xoffset', 'yoffset'];
  211. // defs.forEach(element => {
  212. // element == propertyName ? parentNodeAF.setAttribute('viewoffset', element, propertyValue) :
  213. // value = undefined;
  214. // })
  215. switch (propertyName) {
  216. case "fullWidth":
  217. parentNodeAF.setAttribute('viewoffset', 'fullWidth', propertyValue);
  218. break;
  219. case "fullHeight":
  220. parentNodeAF.setAttribute('viewoffset', 'fullHeight', propertyValue);
  221. break;
  222. case "yoffset":
  223. parentNodeAF.setAttribute('viewoffset', 'yoffset', propertyValue);
  224. break;
  225. case "xoffset":
  226. parentNodeAF.setAttribute('viewoffset', 'xoffset', propertyValue);
  227. break;
  228. case "subcamWidth":
  229. parentNodeAF.setAttribute('viewoffset', 'width', propertyValue);
  230. break;
  231. case "subcamHeight":
  232. parentNodeAF.setAttribute('viewoffset', 'height', propertyValue);
  233. break;
  234. default:
  235. value = undefined;
  236. break;
  237. }
  238. }
  239. }
  240. if (value === undefined && isAShadowDefinition(node.prototypes)) {
  241. if (aframeObject.el.getAttribute(aframeObject.compName)) {
  242. value = propertyValue;
  243. let parentNodeAF = aframeObject.el;
  244. switch (propertyName) {
  245. case "cast":
  246. parentNodeAF.setAttribute('shadow', 'cast', propertyValue);
  247. break;
  248. case "receive":
  249. parentNodeAF.setAttribute('shadow', 'receive', propertyValue);
  250. break;
  251. default:
  252. value = undefined;
  253. break;
  254. }
  255. }
  256. }
  257. if (value === undefined && isAMaterialDefinition(node.prototypes)) {
  258. if (aframeObject.el.getAttribute(aframeObject.compName)) {
  259. value = propertyValue;
  260. let parentNodeAF = aframeObject.el;
  261. //let defs = ['color', 'transparent', 'opacity', 'side'];
  262. self.aframeComponentDef['A-MATERIAL'].forEach(element => {
  263. element == propertyName ? parentNodeAF.setAttribute('material', element, propertyValue) :
  264. value = undefined;
  265. })
  266. }
  267. }
  268. if (value === undefined && isAFogDefinition(node.prototypes)) {
  269. if (aframeObject.el.getAttribute(aframeObject.compName)) {
  270. value = propertyValue;
  271. let parentNodeAF = aframeObject.el;
  272. let defs = ['fogType', 'fogColor', 'density', 'near', 'far'];
  273. defs.forEach(element => {
  274. if (element == propertyName) {
  275. switch (element) {
  276. case 'fogType':
  277. parentNodeAF.setAttribute('fog', 'type', propertyValue);
  278. break;
  279. case 'fogColor':
  280. parentNodeAF.setAttribute('fog', 'color', propertyValue);
  281. break;
  282. default:
  283. value = parentNodeAF.setAttribute('fog', element, propertyValue);
  284. break;
  285. }
  286. } else {
  287. value = undefined
  288. }
  289. // element == propertyName ? parentNodeAF.setAttribute('fog', element, propertyValue) :
  290. // value = undefined;
  291. })
  292. }
  293. }
  294. if (value === undefined && isARayCasterDefinition(node.prototypes)) {
  295. if (aframeObject.el.getAttribute(aframeObject.compName)) {
  296. value = propertyValue;
  297. let parentNodeAF = aframeObject.el;
  298. let defs = ['direction', 'far', 'interval', 'near', 'objects', 'origin', 'recursive', 'showLine', 'useWorldCoordinates'];
  299. defs.forEach(element => {
  300. element == propertyName ? parentNodeAF.setAttribute('raycaster', element, propertyValue) :
  301. value = undefined;
  302. })
  303. }
  304. }
  305. if (value === undefined && isALinePathDefinition(node.prototypes)) {
  306. if (aframeObject.el.getAttribute(aframeObject.compName)) {
  307. value = propertyValue;
  308. let parentNodeAF = aframeObject.el;
  309. switch (propertyName) {
  310. case "color":
  311. parentNodeAF.setAttribute(aframeObject.compName, 'color', propertyValue);
  312. break;
  313. case "path":
  314. parentNodeAF.setAttribute(aframeObject.compName, 'path', propertyValue);
  315. break;
  316. case "width":
  317. parentNodeAF.setAttribute(aframeObject.compName, 'width', propertyValue);
  318. break;
  319. default:
  320. value = undefined;
  321. break;
  322. }
  323. }
  324. }
  325. //isALineDefinition(node.prototypes)
  326. //if (value === undefined && node.componentName == 'line') { //isALineDefinition( node.prototypes )
  327. if (node.extendsID == "http://vwf.example.com/aframe/lineComponent.vwf") {
  328. if (value === undefined && aframeObject.el.getAttribute(aframeObject.compName)) {
  329. value = propertyValue;
  330. //let parentNodeAF = self.state.kernel.find(node.parentID);
  331. // aframeObject.el.setAttribute('line', 'color')
  332. let parentNodeAF = aframeObject.el;
  333. switch (propertyName) {
  334. case "start":
  335. parentNodeAF.setAttribute(aframeObject.compName, { start: propertyValue });
  336. break;
  337. case "end":
  338. parentNodeAF.setAttribute(aframeObject.compName, { end: propertyValue });
  339. break;
  340. case "color":
  341. parentNodeAF.setAttribute(aframeObject.compName, 'color', propertyValue);
  342. break;
  343. case "opacity":
  344. parentNodeAF.setAttribute(aframeObject.compName, 'opacity', propertyValue);
  345. break;
  346. case "visible":
  347. parentNodeAF.setAttribute(aframeObject.compName, 'visible', propertyValue);
  348. break;
  349. default:
  350. value = undefined;
  351. break;
  352. }
  353. }
  354. }
  355. if (value === undefined && isAAnimMixerDefinition(node.prototypes)) {
  356. if (aframeObject.el.getAttribute(aframeObject.compName)) {
  357. value = propertyValue;
  358. let parentNodeAF = aframeObject.el;
  359. switch (propertyName) {
  360. case "clip":
  361. parentNodeAF.setAttribute(aframeObject.compName, 'clip', propertyValue);
  362. break;
  363. case "duration":
  364. parentNodeAF.setAttribute(aframeObject.compName, 'duration', propertyValue);
  365. break;
  366. case "crossFadeDuration":
  367. parentNodeAF.setAttribute(aframeObject.compName, 'crossFadeDuration', propertyValue);
  368. break;
  369. case "loop":
  370. parentNodeAF.setAttribute(aframeObject.compName, 'loop', propertyValue);
  371. break;
  372. case "repetitions":
  373. parentNodeAF.setAttribute(aframeObject.compName, 'repetitions', propertyValue);
  374. break;
  375. default:
  376. value = undefined;
  377. break;
  378. }
  379. }
  380. }
  381. if (value === undefined && isAInterpolationDefinition(node.prototypes)) {
  382. if (aframeObject.el.getAttribute(aframeObject.compName)) {
  383. value = propertyValue;
  384. let parentNodeAF = aframeObject.el;
  385. switch (propertyName) {
  386. case "enabled":
  387. parentNodeAF.setAttribute(aframeObject.compName, 'enabled', propertyValue);
  388. break;
  389. case "deltaPos":
  390. parentNodeAF.setAttribute(aframeObject.compName, 'deltaPos', propertyValue);
  391. break;
  392. case "deltaRot":
  393. parentNodeAF.setAttribute(aframeObject.compName, 'deltaRot', propertyValue);
  394. break;
  395. default:
  396. value = undefined;
  397. break;
  398. }
  399. }
  400. }
  401. if (value === undefined && isAGizmoDefinition(node.prototypes)) {
  402. if (aframeObject.el.getAttribute(aframeObject.compName)) {
  403. value = propertyValue;
  404. let parentNodeAF = aframeObject.el;
  405. switch (propertyName) {
  406. case "mode":
  407. parentNodeAF.setAttribute(aframeObject.compName, 'mode', propertyValue);
  408. break;
  409. default:
  410. value = undefined;
  411. break;
  412. }
  413. }
  414. }
  415. }
  416. return value;
  417. },
  418. // -- gettingProperty ----------------------------------------------------------------------
  419. gettingProperty: function (nodeID, propertyName, propertyValue) {
  420. var node = this.state.nodes[nodeID];
  421. var value = undefined;
  422. if (node && node.aframeObj) {
  423. var aframeObject = node.aframeObj;
  424. if (isComponentNodeDefinition(node.prototypes)) {
  425. switch (propertyName) {
  426. }
  427. }
  428. if (value === undefined && isComponentDefinition(node.prototypes)) {
  429. switch (propertyName) {
  430. case "compName":
  431. break;
  432. }
  433. }
  434. // isALineDefinition( node.prototypes ) aframeObject.compName == compName
  435. if (value === undefined && isARayCasterDefinition(node.prototypes)) {
  436. value = propertyValue;
  437. let parentNodeAF = aframeObject.el;
  438. let defs = ['direction', 'far', 'interval', 'near', 'objects', 'origin', 'recursive', 'showLine', 'useWorldCoordinates'];
  439. defs.forEach(element => {
  440. if (element == propertyName) {
  441. let val = parentNodeAF.getAttribute('raycaster').element;
  442. value = AFRAME.utils.coordinates.isCoordinates(val) ? AFRAME.utils.coordinates.stringify(val) : val
  443. }
  444. })
  445. }
  446. if (value === undefined && isAFogDefinition(node.prototypes)) {
  447. value = propertyValue;
  448. let parentNodeAF = aframeObject.el;
  449. let defs = ['fogType', 'color', 'density', 'near', 'far'];
  450. defs.forEach(element => {
  451. if (element == propertyName) {
  452. switch (element) {
  453. case 'fogType':
  454. value = parentNodeAF.getAttribute('fog').type;
  455. break;
  456. case 'fogColor':
  457. value = parentNodeAF.getAttribute('fog').color;
  458. break;
  459. default:
  460. value = parentNodeAF.getAttribute('fog').element;
  461. break;
  462. }
  463. }
  464. })
  465. }
  466. if (value === undefined && isAShadowDefinition(node.prototypes)) {
  467. value = propertyValue;
  468. // let parentNodeAF = self.state.nodes[node.parentID].aframeObj;
  469. let parentNodeAF = aframeObject.el;
  470. switch (propertyName) {
  471. case "cast":
  472. value = parentNodeAF.getAttribute(aframeObject.compName).cast;
  473. break;
  474. case "receive":
  475. value = parentNodeAF.getAttribute(aframeObject.compName).receive;
  476. break;
  477. }
  478. }
  479. if (value === undefined && isALineDefinition(node.prototypes)) {
  480. value = propertyValue;
  481. // let parentNodeAF = self.state.nodes[node.parentID].aframeObj;
  482. let parentNodeAF = aframeObject.el;
  483. switch (propertyName) {
  484. case "start":
  485. value = AFRAME.utils.coordinates.stringify(parentNodeAF.getAttribute(aframeObject.compName).start);
  486. break;
  487. case "end":
  488. value = AFRAME.utils.coordinates.stringify(parentNodeAF.getAttribute(aframeObject.compName).end);
  489. break;
  490. case "color":
  491. value = parentNodeAF.getAttribute(aframeObject.compName).color;
  492. break;
  493. case "opacity":
  494. value = parentNodeAF.getAttribute(aframeObject.compName).opacity;
  495. break;
  496. case "visible":
  497. value = parentNodeAF.getAttribute(aframeObject.compName).visible;
  498. break;
  499. }
  500. }
  501. if (value === undefined && isAAnimMixerDefinition(node.prototypes)) {
  502. value = propertyValue;
  503. // let parentNodeAF = self.state.nodes[node.parentID].aframeObj;
  504. let parentNodeAF = aframeObject.el;
  505. switch (propertyName) {
  506. case "clip":
  507. value = parentNodeAF.getAttribute(aframeObject.compName).clip;
  508. break;
  509. case "duration":
  510. value = parentNodeAF.getAttribute(aframeObject.compName).duration;
  511. break;
  512. case "crossFadeDuration":
  513. value = parentNodeAF.getAttribute(aframeObject.compName).crossFadeDuration;
  514. break;
  515. case "loop":
  516. value = parentNodeAF.getAttribute(aframeObject.compName).loop;
  517. break;
  518. case "repetitions":
  519. value = parentNodeAF.getAttribute(aframeObject.compName).repetitions;
  520. break;
  521. }
  522. }
  523. if (value === undefined && isAMaterialDefinition(node.prototypes)) {
  524. value = propertyValue;
  525. // let parentNodeAF = self.state.nodes[node.parentID].aframeObj;
  526. let parentNodeAF = aframeObject.el;
  527. self.aframeComponentDef['A-MATERIAL'].forEach(element => {
  528. if (element == propertyName) {
  529. value = parentNodeAF.getAttribute('material').element;
  530. }
  531. })
  532. // switch (propertyName) {
  533. // case "color":
  534. // value = parentNodeAF.getAttribute('material').color;
  535. // break;
  536. // case "opacity":
  537. // value = parentNodeAF.getAttribute('material').opacity;
  538. // break;
  539. // case "side":
  540. // value = parentNodeAF.getAttribute('material').side;
  541. // break;
  542. // case "transparent":
  543. // value = parentNodeAF.getAttribute('material').transparent;
  544. // break;
  545. // }
  546. }
  547. if (value === undefined && isALinePathDefinition(node.prototypes)) {
  548. value = propertyValue;
  549. // let parentNodeAF = self.state.nodes[node.parentID].aframeObj;
  550. let parentNodeAF = aframeObject.el;
  551. switch (propertyName) {
  552. case "color":
  553. value = parentNodeAF.getAttribute(aframeObject.compName).color;
  554. break;
  555. case "path":
  556. value = parentNodeAF.getAttribute(aframeObject.compName).path;
  557. break;
  558. case "width":
  559. value = parentNodeAF.getAttribute(aframeObject.compName).width;
  560. break;
  561. }
  562. }
  563. if (value === undefined && isAViewOffsetCameraDefinition(node.prototypes)) {
  564. value = propertyValue;
  565. // let parentNodeAF = self.state.nodes[node.parentID].aframeObj;
  566. let parentNodeAF = aframeObject.el;
  567. switch (propertyName) {
  568. case "fullWidth":
  569. value = parentNodeAF.getAttribute(aframeObject.compName).fullWidth;
  570. break;
  571. case "fullHeight":
  572. value = parentNodeAF.getAttribute(aframeObject.compName).fullHeight;
  573. break;
  574. case "subcamWidth":
  575. value = parentNodeAF.getAttribute(aframeObject.compName).width;
  576. break;
  577. case "subcamHeight":
  578. value = parentNodeAF.getAttribute(aframeObject.compName).height;
  579. break;
  580. case "xoffset":
  581. value = parentNodeAF.getAttribute(aframeObject.compName).xoffset;
  582. break;
  583. case "yoffset":
  584. value = parentNodeAF.getAttribute(aframeObject.compName).yoffset;
  585. break;
  586. }
  587. }
  588. if (value === undefined && isAInterpolationDefinition(node.prototypes)) {
  589. value = propertyValue;
  590. // let parentNodeAF = self.state.nodes[node.parentID].aframeObj;
  591. let parentNodeAF = aframeObject.el;
  592. switch (propertyName) {
  593. case "enabled":
  594. value = parentNodeAF.getAttribute(aframeObject.compName).enabled;
  595. break;
  596. case "deltaPos":
  597. value = parentNodeAF.getAttribute(aframeObject.compName).deltaPos;
  598. break;
  599. case "deltaRot":
  600. value = parentNodeAF.getAttribute(aframeObject.compName).deltaRot;
  601. break;
  602. }
  603. }
  604. if (value === undefined && isAGizmoDefinition(node.prototypes)) {
  605. value = propertyValue;
  606. // let parentNodeAF = self.state.nodes[node.parentID].aframeObj;
  607. let parentNodeAF = aframeObject.el;
  608. switch (propertyName) {
  609. case "mode":
  610. value = parentNodeAF.getAttribute(aframeObject.compName).mode;
  611. break;
  612. }
  613. }
  614. }
  615. if (value !== undefined) {
  616. propertyValue = value;
  617. }
  618. return value;
  619. }
  620. });
  621. function getPrototypes(kernel, extendsID) {
  622. var prototypes = [];
  623. var id = extendsID;
  624. while (id !== undefined) {
  625. prototypes.push(id);
  626. id = kernel.prototype(id);
  627. }
  628. return prototypes;
  629. }
  630. function isAAnimMixerDefinition(prototypes) {
  631. var found = false;
  632. if (prototypes) {
  633. for (var i = 0; i < prototypes.length && !found; i++) {
  634. found = (prototypes[i] == "http://vwf.example.com/aframe/anim-mixer-component.vwf");
  635. }
  636. }
  637. return found;
  638. }
  639. function isAInterpolationDefinition(prototypes) {
  640. var found = false;
  641. if (prototypes) {
  642. for (var i = 0; i < prototypes.length && !found; i++) {
  643. found = (prototypes[i] == "http://vwf.example.com/aframe/interpolation-component.vwf");
  644. }
  645. }
  646. return found;
  647. }
  648. function isALinePathDefinition(prototypes) {
  649. var found = false;
  650. if (prototypes) {
  651. for (var i = 0; i < prototypes.length && !found; i++) {
  652. found = (prototypes[i] == "http://vwf.example.com/aframe/linepath.vwf");
  653. }
  654. }
  655. return found;
  656. }
  657. function isAMaterialDefinition(prototypes) {
  658. var found = false;
  659. if (prototypes) {
  660. for (var i = 0; i < prototypes.length && !found; i++) {
  661. found = (prototypes[i] == "http://vwf.example.com/aframe/aMaterialComponent.vwf");
  662. }
  663. }
  664. return found;
  665. }
  666. function isAViewOffsetCameraDefinition(prototypes) {
  667. var found = false;
  668. if (prototypes) {
  669. for (var i = 0; i < prototypes.length && !found; i++) {
  670. found = (prototypes[i] == "http://vwf.example.com/aframe/viewOffsetCamera-component.vwf");
  671. }
  672. }
  673. return found;
  674. }
  675. function isAGizmoDefinition(prototypes) {
  676. var found = false;
  677. if (prototypes) {
  678. for (var i = 0; i < prototypes.length && !found; i++) {
  679. found = (prototypes[i] == "http://vwf.example.com/aframe/gizmoComponent.vwf");
  680. }
  681. }
  682. return found;
  683. }
  684. function isAFogDefinition(prototypes) {
  685. var found = false;
  686. if (prototypes) {
  687. for (var i = 0; i < prototypes.length && !found; i++) {
  688. found = (prototypes[i] == "http://vwf.example.com/aframe/aSceneFogComponent.vwf");
  689. }
  690. }
  691. return found;
  692. }
  693. function isAShadowDefinition(prototypes) {
  694. var found = false;
  695. if (prototypes) {
  696. for (var i = 0; i < prototypes.length && !found; i++) {
  697. found = (prototypes[i] == "http://vwf.example.com/aframe/shadowComponent.vwf");
  698. }
  699. }
  700. return found;
  701. }
  702. function isARayCasterDefinition(prototypes) {
  703. var found = false;
  704. if (prototypes) {
  705. for (var i = 0; i < prototypes.length && !found; i++) {
  706. found = (prototypes[i] == "http://vwf.example.com/aframe/raycasterComponent.vwf");
  707. }
  708. }
  709. return found;
  710. }
  711. function isALineDefinition(prototypes) {
  712. var found = false;
  713. if (prototypes) {
  714. for (var i = 0; i < prototypes.length && !found; i++) {
  715. found = (prototypes[i] == "http://vwf.example.com/aframe/lineComponent.vwf");
  716. }
  717. }
  718. return found;
  719. }
  720. function isGearVRControlsDefinition(prototypes) {
  721. var found = false;
  722. if (prototypes) {
  723. for (var i = 0; i < prototypes.length && !found; i++) {
  724. found = (prototypes[i] == "http://vwf.example.com/aframe/gearvr-controlsComponent.vwf");
  725. }
  726. }
  727. return found;
  728. }
  729. function isComponentNodeDefinition(prototypes) {
  730. var found = false;
  731. if (prototypes) {
  732. for (var i = 0; i < prototypes.length && !found; i++) {
  733. found = (prototypes[i] == "http://vwf.example.com/aframe/componentNode.vwf");
  734. }
  735. }
  736. return found;
  737. }
  738. function isComponentDefinition(prototypes) {
  739. var found = false;
  740. if (prototypes) {
  741. for (var i = 0; i < prototypes.length && !found; i++) {
  742. found = (prototypes[i] == "http://vwf.example.com/aframe/aentityComponent.vwf");
  743. }
  744. }
  745. return found;
  746. }
  747. function setAFrameObject(node, config) {
  748. var protos = node.prototypes;
  749. var aframeObj = {};
  750. var sceneEl = document.querySelector('a-scene');
  751. aframeObj.id = node.parentID;
  752. // aframeObj.el = sceneEl.children[node.parentID];
  753. aframeObj.el = Array.from(sceneEl.querySelectorAll('*')).filter(item => { return item.id == aframeObj.id })[0];
  754. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/lineComponent.vwf")) {
  755. // aframeObj.id = node.parentID;
  756. // aframeObj.el = sceneEl.children[node.parentID];
  757. if (node.name !== 'line') {
  758. aframeObj.compName = node.name;
  759. } else {
  760. aframeObj.compName = "line";
  761. }
  762. //aframeObj.el.setAttribute(node.type, {});
  763. aframeObj.el.setAttribute(aframeObj.compName, {});
  764. }
  765. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/gizmoComponent.vwf")) {
  766. // aframeObj.el.setAttribute(node.type, {});
  767. aframeObj.compName = "gizmo";
  768. aframeObj.el.setAttribute(aframeObj.compName, {});
  769. }
  770. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/aSceneFogComponent.vwf")) {
  771. // aframeObj.el.setAttribute(node.type, {});
  772. aframeObj = {};
  773. //var sceneEl = document.querySelector('a-scene');
  774. aframeObj.id = node.parentID;
  775. aframeObj.el = document.querySelector('a-scene');
  776. aframeObj.compName = "fog";
  777. aframeObj.el.setAttribute('fog', {});
  778. }
  779. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/raycasterComponent.vwf")) {
  780. // aframeObj.el.setAttribute(node.type, {});
  781. aframeObj.compName = "raycaster";
  782. aframeObj.el.setAttribute(aframeObj.compName, {});
  783. }
  784. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/shadowComponent.vwf")) {
  785. // aframeObj.el.setAttribute(node.type, {});
  786. aframeObj.compName = "shadow";
  787. aframeObj.el.setAttribute(aframeObj.compName, {});
  788. }
  789. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/viewOffsetCamera-component.vwf")) {
  790. // aframeObj.el.setAttribute(node.type, {});
  791. aframeObj.compName = "viewoffset";
  792. aframeObj.el.setAttribute(aframeObj.compName, {});
  793. }
  794. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/streamSoundComponent.vwf")) {
  795. // aframeObj.el.setAttribute(node.type, {});
  796. aframeObj.compName = "streamsound";
  797. aframeObj.el.setAttribute(aframeObj.compName, {});
  798. }
  799. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/linepath.vwf")) {
  800. // aframeObj.el.setAttribute(node.type, {});
  801. aframeObj.compName = "linepath";
  802. aframeObj.el.setAttribute(aframeObj.compName, {});
  803. }
  804. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/aMaterialComponent.vwf")) {
  805. // aframeObj.el.setAttribute(node.type, {});
  806. aframeObj.compName = "material";
  807. aframeObj.el.setAttribute(aframeObj.compName, {});
  808. }
  809. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/interpolation-component.vwf")) {
  810. // aframeObj.el.setAttribute(node.type, {});
  811. aframeObj.compName = "interpolation";
  812. aframeObj.el.setAttribute(aframeObj.compName, {});
  813. }
  814. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/anim-mixer-component.vwf")) {
  815. // aframeObj.el.setAttribute(node.type, {});
  816. aframeObj.compName = "animation-mixer";
  817. aframeObj.el.setAttribute(aframeObj.compName, {});
  818. }
  819. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/app-envmap-component.vwf")) {
  820. // aframeObj.el.setAttribute(node.type, {});
  821. aframeObj.compName = "envmap";
  822. aframeObj.el.setAttribute(aframeObj.compName, {});
  823. }
  824. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/app-avatarbvh-component.vwf")) {
  825. // aframeObj.el.setAttribute(node.type, {});
  826. aframeObj.compName = "avatarbvh";
  827. aframeObj.el.setAttribute(aframeObj.compName, {});
  828. }
  829. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/app-sun-component.vwf")) {
  830. // aframeObj.el.setAttribute(node.type, {});
  831. aframeObj.compName = "sun";
  832. aframeObj.el.setAttribute('id', "sun");
  833. aframeObj.el.setAttribute(aframeObj.compName, {});
  834. }
  835. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/app-skyshader-component.vwf")) {
  836. // aframeObj.el.setAttribute(node.type, {});
  837. aframeObj.compName = "skyshader";
  838. aframeObj.el.setAttribute(aframeObj.compName, {});
  839. }
  840. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/app-raycaster-listener-component.vwf")) {
  841. // aframeObj.el.setAttribute(node.type, {});
  842. aframeObj.compName = "raycaster-listener";
  843. aframeObj.el.setAttribute(aframeObj.compName, {});
  844. }
  845. if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/app-cursor-listener-component.vwf")) {
  846. // aframeObj.el.setAttribute(node.type, {});
  847. aframeObj.compName = "cursor-listener";
  848. aframeObj.el.setAttribute(aframeObj.compName, {});
  849. }
  850. return aframeObj;
  851. }
  852. function addNodeToHierarchy(node) {
  853. if (node.aframeObj) {
  854. if (self.state.nodes[node.parentID] !== undefined) {
  855. var parent = self.state.nodes[node.parentID];
  856. if (parent.aframeObj) {
  857. if (parent.children === undefined) {
  858. parent.children = [];
  859. }
  860. parent.children.push(node.ID);
  861. }
  862. }
  863. }
  864. }
  865. });