{"size": 2485, "ext": "js", "max_stars_repo_path": "third_party/XRHandModelFactory.js", "max_stars_repo_name": "mromerocastro/hands-tracking---trails", "max_stars_repo_stars_event_min_datetime": "2020-09-12T03:26:17.000Z", "max_stars_repo_stars_event_max_datetime": "2020-09-12T03:26:17.000Z", "max_issues_repo_path": "third_party/XRHandModelFactory.js", "max_issues_repo_name": "mromerocastro/hands-tracking---trails", "max_issues_repo_issues_event_min_datetime": null, "max_issues_repo_issues_event_max_datetime": null, "max_forks_repo_path": "third_party/XRHandModelFactory.js", "max_forks_repo_name": "mromerocastro/hands-tracking---trails", "max_forks_repo_forks_event_min_datetime": null, "max_forks_repo_forks_event_max_datetime": null}
{"max_stars_count": 1, "max_issues_count": null, "max_forks_count": null, "avg_line_length": 26.1578947368, "max_line_length": 74, "alphanum_fraction": 0.5907444668}
import { Object3D } from "./three.module.js";

import { XRHandPrimitiveModel } from "./XRHandPrimitiveModel.js";

import { XRHandOculusMeshModel } from "./XRHandOculusMeshModel.js";

function XRHandModel(controller) {
  Object3D.call(this);

  this.controller = controller;
  this.motionController = null;
  this.envMap = null;

  this.mesh = null;
}

XRHandModel.prototype = Object.assign(Object.create(Object3D.prototype), {
  constructor: XRHandModel,

  updateMatrixWorld: function (force) {
    Object3D.prototype.updateMatrixWorld.call(this, force);

    if (this.motionController) {
      this.motionController.updateMesh();
    }
  },
});

const XRHandModelFactory = (function () {
  function XRHandModelFactory() {
    this.path = "";
  }

  XRHandModelFactory.prototype = {
    constructor: XRHandModelFactory,

    setPath: function (path) {
      this.path = path;
      return this;
    },

    createHandModel: function (controller, profile, options) {
      const handModel = new XRHandModel(controller);

      controller.addEventListener("connected", (event) => {
        const xrInputSource = event.data;

        if (xrInputSource.hand && !handModel.motionController) {
          handModel.visible = true;
          handModel.xrInputSource = xrInputSource;

          // @todo Detect profile if not provided
          if (profile === undefined || profile === "spheres") {
            handModel.motionController = new XRHandPrimitiveModel(
              handModel,
              controller,
              this.path,
              xrInputSource.handedness,
              { primitive: "sphere" }
            );
          } else if (profile === "boxes") {
            handModel.motionController = new XRHandPrimitiveModel(
              handModel,
              controller,
              this.path,
              xrInputSource.handedness,
              { primitive: "box" }
            );
          } else if (profile === "oculus") {
            handModel.motionController = new XRHandOculusMeshModel(
              handModel,
              controller,
              this.path,
              xrInputSource.handedness,
              options
            );
          }
        }
      });

      controller.addEventListener("disconnected", () => {
        // handModel.motionController = null;
        // handModel.remove( scene );
        // scene = null;
      });

      return handModel;
    },
  };

  return XRHandModelFactory;
})();

export { XRHandModelFactory };
