239 lines · 7.8 KB · JavaScript
RawDownload
var LEFT_HAND_INDEX = 0;var RIGHT_HAND_INDEX = 1;var LEFT_FOOT_INDEX = 2;var RIGHT_FOOT_INDEX = 3;var HIPS_INDEX = 4;var SPINE2_INDEX = 5; var HAND_SMOOTHING_TRANSLATION = 0.3;var HAND_SMOOTHING_ROTATION = 0.15;var FOOT_SMOOTHING_TRANSLATION = 0.3;var FOOT_SMOOTHING_ROTATION = 0.15;var TORSO_SMOOTHING_TRANSLATION = 0.3;var TORSO_SMOOTHING_ROTATION = 0.16; var mappingJson = {    name: "com.highfidelity.testing.exponentialFilterApp",    channels: [        {            from: "Standard.LeftHand",            to: "Actions.LeftHand",            filters: [                {                    type: "exponentialSmoothing",                    translation: HAND_SMOOTHING_TRANSLATION,                    rotation: HAND_SMOOTHING_ROTATION                }            ]        },        {            from: "Standard.RightHand",            to: "Actions.RightHand",            filters: [                {                    type: "exponentialSmoothing",                    translation: HAND_SMOOTHING_TRANSLATION,                    rotation: HAND_SMOOTHING_ROTATION                }            ]        },        {            from: "Standard.LeftFoot",            to: "Actions.LeftFoot",            filters: [                {                    type: "exponentialSmoothing",                    translation: FOOT_SMOOTHING_TRANSLATION,                    rotation: FOOT_SMOOTHING_ROTATION                }            ]        },        {            from: "Standard.RightFoot",            to: "Actions.RightFoot",            filters: [                {                    type: "exponentialSmoothing",                    translation: FOOT_SMOOTHING_TRANSLATION,                    rotation: FOOT_SMOOTHING_ROTATION                }            ]        },        {            from: "Standard.Hips",            to: "Actions.Hips",            filters: [                {                    type: "exponentialSmoothing",                    translation: TORSO_SMOOTHING_TRANSLATION,                    rotation: TORSO_SMOOTHING_ROTATION                }            ]        },        {            from: "Standard.Spine2",            to: "Actions.Spine2",            filters: [                {                    type: "exponentialSmoothing",                    translation: TORSO_SMOOTHING_TRANSLATION,                    rotation: TORSO_SMOOTHING_ROTATION                }            ]        }    ]}; //// tablet app boiler plate// var TABLET_BUTTON_NAME = "EXPFILT";var HTML_URL = Script.getExternalPath(Script.ExternalPaths.HF_Public, "/tony/html/exponentialFilterApp.html?7"); var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system");var tabletButton = tablet.addButton({    text: TABLET_BUTTON_NAME,    icon: Script.getExternalPath(Script.ExternalPaths.HF_Public, "/tony/icons/tpose-i.svg"),    activeIcon: Script.getExternalPath(Script.ExternalPaths.HF_Public, "/tony/icons/tpose-a.svg")}); tabletButton.clicked.connect(function () {    if (shown) {        tablet.gotoHomeScreen();    } else {        tablet.gotoWebScreen(HTML_URL);    }}); var shown = false; function onScreenChanged(type, url) {    if (type === "Web" && url === HTML_URL) {        tabletButton.editProperties({isActive: true});        if (!shown) {            // hook up to event bridge            tablet.webEventReceived.connect(onWebEventReceived);            shownChanged(true);        }        shown = true;    } else {        tabletButton.editProperties({isActive: false});        if (shown) {            // disconnect from event bridge            tablet.webEventReceived.disconnect(onWebEventReceived);            shownChanged(false);        }        shown = false;    }} function getTranslation(i) {    return mappingJson.channels[i].filters[0].translation;}function setTranslation(i, value) {    mappingJson.channels[i].filters[0].translation = value;    mappingChanged();}function getRotation(i) {    return mappingJson.channels[i].filters[0].rotation;}function setRotation(i, value) {    mappingJson.channels[i].filters[0].rotation = value; mappingChanged();} function onWebEventReceived(msg) {    if (msg.name === "init-complete") {        var values = [            {name: "enable-filtering", val: filterEnabled ? "on" : "off", checked: false},            {name: "left-hand-translation", val: getTranslation(LEFT_HAND_INDEX), checked: false},            {name: "left-hand-rotation", val: getRotation(LEFT_HAND_INDEX), checked: false},            {name: "right-hand-translation", val: getTranslation(RIGHT_HAND_INDEX), checked: false},            {name: "right-hand-rotation", val: getRotation(RIGHT_HAND_INDEX), checked: false},            {name: "left-foot-translation", val: getTranslation(LEFT_FOOT_INDEX), checked: false},            {name: "left-foot-rotation", val: getRotation(LEFT_FOOT_INDEX), checked: false},            {name: "right-foot-translation", val: getTranslation(RIGHT_FOOT_INDEX), checked: false},            {name: "right-foot-rotation", val: getRotation(RIGHT_FOOT_INDEX), checked: false},            {name: "hips-translation", val: getTranslation(HIPS_INDEX), checked: false},            {name: "hips-rotation", val: getRotation(HIPS_INDEX), checked: false},            {name: "spine2-translation", val: getTranslation(SPINE2_INDEX), checked: false},            {name: "spine2-rotation", val: getRotation(SPINE2_INDEX), checked: false}        ];        tablet.emitScriptEvent(JSON.stringify(values));    } else if (msg.name === "enable-filtering") {        if (msg.val === "on") {            filterEnabled = true;        } else if (msg.val === "off") {            filterEnabled = false;        }        mappingChanged();    } else if (msg.name === "left-hand-translation") {        setTranslation(LEFT_HAND_INDEX, Number(msg.val));    } else if (msg.name === "left-hand-rotation") {        setRotation(LEFT_HAND_INDEX, Number(msg.val));    } else if (msg.name === "right-hand-translation") {        setTranslation(RIGHT_HAND_INDEX, Number(msg.val));    } else if (msg.name === "right-hand-rotation") {        setRotation(RIGHT_HAND_INDEX, Number(msg.val));    } else if (msg.name === "left-foot-translation") {        setTranslation(LEFT_FOOT_INDEX, Number(msg.val));    } else if (msg.name === "left-foot-rotation") {        setRotation(LEFT_FOOT_INDEX, Number(msg.val));    } else if (msg.name === "right-foot-translation") {        setTranslation(RIGHT_FOOT_INDEX, Number(msg.val));    } else if (msg.name === "right-foot-rotation") {        setRotation(RIGHT_FOOT_INDEX, Number(msg.val));    } else if (msg.name === "hips-translation") {        setTranslation(HIPS_INDEX, Number(msg.val));    } else if (msg.name === "hips-rotation") {        setRotation(HIPS_INDEX, Number(msg.val));    } else if (msg.name === "spine2-translation") {        setTranslation(SPINE2_INDEX, Number(msg.val));    } else if (msg.name === "spine2-rotation") {        setRotation(SPINE2_INDEX, Number(msg.val));    }} tablet.screenChanged.connect(onScreenChanged); function shutdownTabletApp() {    tablet.removeButton(tabletButton);    if (shown) {        tablet.webEventReceived.disconnect(onWebEventReceived);        tablet.gotoHomeScreen();    }    tablet.screenChanged.disconnect(onScreenChanged);} //// end tablet app boiler plate// var filterEnabled = true;var mapping;function mappingChanged() {    if (mapping) {        mapping.disable();    }    if (filterEnabled) {        mapping = Controller.parseMapping(JSON.stringify(mappingJson));        mapping.enable();    }} function shownChanged(newShown) {    if (newShown) {        mappingChanged();    } else {        mapping.disable();    }} mappingChanged(); Script.scriptEnding.connect(function() {    if (mapping) {        mapping.disable();    }    tablet.removeButton(tabletButton);});