Skip to content
Snippets Groups Projects
network-schemas.js 3.34 KiB
Newer Older
netpro2k's avatar
netpro2k committed
function registerNetworkSchemas() {
  const vectorRequiresUpdate = epsilon => {
    return () => {
      let prev = null;

      return curr => {
        if (prev === null) {
          prev = new THREE.Vector3(curr.x, curr.y, curr.z);
          return true;
        } else if (!NAF.utils.almostEqualVec3(prev, curr, epsilon)) {
          prev.copy(curr);
          return true;
        }

        return false;
      };
Brian Peiris's avatar
Brian Peiris committed
  NAF.schemas.add({
Robert Long's avatar
Robert Long committed
    template: "#remote-avatar-template",
netpro2k's avatar
netpro2k committed
    components: [
joni's avatar
joni committed
      {
        component: "position",
        requiresNetworkUpdate: vectorRequiresUpdate(0.001)
joni's avatar
joni committed
      },
        requiresNetworkUpdate: vectorRequiresUpdate(0.5)
Robert Long's avatar
Robert Long committed
      "scale",
Robert Long's avatar
Robert Long committed
      {
        selector: ".camera",
joni's avatar
joni committed
        component: "position",
        requiresNetworkUpdate: vectorRequiresUpdate(0.001)
Robert Long's avatar
Robert Long committed
      },
      {
        selector: ".camera",
joni's avatar
joni committed
        component: "rotation",
        requiresNetworkUpdate: vectorRequiresUpdate(0.5)
Robert Long's avatar
Robert Long committed
      },
      {
        selector: ".left-controller",
joni's avatar
joni committed
        component: "position",
        requiresNetworkUpdate: vectorRequiresUpdate(0.001)
Robert Long's avatar
Robert Long committed
      },
      {
        selector: ".left-controller",
joni's avatar
joni committed
        component: "rotation",
        requiresNetworkUpdate: vectorRequiresUpdate(0.5)
Robert Long's avatar
Robert Long committed
      },
      {
        selector: ".left-controller",
        component: "visible"
      },
      {
        selector: ".right-controller",
joni's avatar
joni committed
        component: "position",
        requiresNetworkUpdate: vectorRequiresUpdate(0.001)
Robert Long's avatar
Robert Long committed
      },
      {
        selector: ".right-controller",
joni's avatar
joni committed
        component: "rotation",
        requiresNetworkUpdate: vectorRequiresUpdate(0.5)
Robert Long's avatar
Robert Long committed
      },
      {
        selector: ".right-controller",
        component: "visible"
  NAF.schemas.add({
    template: "#interactable-media",
    components: [
      {
        component: "position",
        requiresNetworkUpdate: vectorRequiresUpdate(0.001)
      },
      {
        component: "rotation",
        requiresNetworkUpdate: vectorRequiresUpdate(0.5)
      "media-loader",
      {
        component: "media-video",
        property: "time"
      },
      {
        component: "media-video",
        property: "videoPaused"
      },
      {
        component: "media-pager",
        property: "index"
Greg Fodor's avatar
Greg Fodor committed
      },
      "pinnable"
joni's avatar
joni committed
    ]
  });

  NAF.schemas.add({
    template: "#interactable-drawing",
joni's avatar
joni committed
    components: [
      {
        component: "position",
        requiresNetworkUpdate: vectorRequiresUpdate(0.001)
joni's avatar
joni committed
      },
      {
        component: "rotation",
        requiresNetworkUpdate: vectorRequiresUpdate(0.5)
joni's avatar
joni committed
      },
      "scale",
      "networked-drawing"
joni's avatar
joni committed
    ]
  NAF.schemas.add({
    template: "#interactable-camera",
    components: ["position", "rotation"]
  });

Kevin Lee's avatar
Kevin Lee committed
  NAF.schemas.add({
    template: "#pen-interactable",
    components: [
      {
        component: "position",
        requiresNetworkUpdate: vectorRequiresUpdate(0.001)
      },
      {
        component: "rotation",
        requiresNetworkUpdate: vectorRequiresUpdate(0.5)
      },
Kevin Lee's avatar
Kevin Lee committed
      "scale",
Kevin Lee's avatar
Kevin Lee committed
      "media-loader",
      {
        selector: "#pen",
        component: "pen",
        property: "radius"
      },
      {
        selector: "#pen",
        component: "pen",
        property: "color"
Kevin Lee's avatar
Kevin Lee committed
      }
Kevin Lee's avatar
Kevin Lee committed
    ]
  });
netpro2k's avatar
netpro2k committed
}

export default registerNetworkSchemas;