Newer
Older
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;
};
};
requiresNetworkUpdate: vectorRequiresUpdate(0.001)
{
component: "rotation",
requiresNetworkUpdate: vectorRequiresUpdate(0.5)
"player-info",
"networked-avatar",
requiresNetworkUpdate: vectorRequiresUpdate(0.001)
requiresNetworkUpdate: vectorRequiresUpdate(0.5)
requiresNetworkUpdate: vectorRequiresUpdate(0.001)
requiresNetworkUpdate: vectorRequiresUpdate(0.5)
},
{
selector: ".left-controller",
component: "visible"
},
{
selector: ".right-controller",
requiresNetworkUpdate: vectorRequiresUpdate(0.001)
requiresNetworkUpdate: vectorRequiresUpdate(0.5)
},
{
selector: ".right-controller",
component: "visible"
template: "#interactable-media",
components: [
{
component: "position",
requiresNetworkUpdate: vectorRequiresUpdate(0.001)
requiresNetworkUpdate: vectorRequiresUpdate(0.5)
"media-loader",
{
component: "media-video",
property: "time"
},
{
component: "media-video",
property: "videoPaused"
},
{
component: "media-pager",
property: "index"
});
NAF.schemas.add({
template: "#interactable-drawing",
requiresNetworkUpdate: vectorRequiresUpdate(0.001)
requiresNetworkUpdate: vectorRequiresUpdate(0.5)
"scale",
"networked-drawing"
NAF.schemas.add({
template: "#interactable-camera",
components: ["position", "rotation"]
});
NAF.schemas.add({
template: "#pen-interactable",
components: [
{
component: "position",
requiresNetworkUpdate: vectorRequiresUpdate(0.001)
},
{
component: "rotation",
requiresNetworkUpdate: vectorRequiresUpdate(0.5)
},
component: "pen",
property: "radius"
},
{
selector: "#pen",
component: "pen",
property: "color"