Made requested changed to puck-attach.js

This commit is contained in:
seefo 2017-08-02 15:28:26 -07:00
parent 961f748d87
commit 82654c7cda

View file

@ -83,7 +83,9 @@ function getPropertyForEntity(entityID, propertyName) {
} }
var VIVE_PUCK_MODEL = "http://content.highfidelity.com/seefo/production/puck-attach/vive_tracker_puck.obj"; var VIVE_PUCK_MODEL = "http://content.highfidelity.com/seefo/production/puck-attach/vive_tracker_puck.obj";
var VIVE_PUCK_DIMENSIONS = { x: 0.0945, y: 0.0921, z: 0.0423 }; // 1/1000th scale of model
var VIVE_PUCK_SEARCH_DISTANCE = 1.5; // metres var VIVE_PUCK_SEARCH_DISTANCE = 1.5; // metres
var VIVE_PUCK_SPAWN_DISTANCE = 1.0; // metres
var VIVE_PUCK_NAME = "Tracked Puck"; var VIVE_PUCK_NAME = "Tracked Puck";
var trackedPucks = { }; var trackedPucks = { };
@ -91,23 +93,28 @@ var lastPuck = { };
function createPuck(puck) { function createPuck(puck) {
// create a puck entity and add it to our list of pucks // create a puck entity and add it to our list of pucks
var spawnOffset = Vec3.multiply(Vec3.FRONT, 1.0); var spawnOffset = Vec3.multiply(Vec3.FRONT, VIVE_PUCK_SPAWN_DISTANCE);
var spawnPosition = getRelativePosition(MyAvatar.position, MyAvatar.orientation, spawnOffset); var spawnPosition = getRelativePosition(MyAvatar.position, MyAvatar.orientation, spawnOffset);
// should be an overlay // should be an overlay
var puckEntityProperties = { var puckEntityProperties = {
"name": "Tracked Puck", name: "Tracked Puck",
"type": "Model", type: "Model",
"modelURL": VIVE_PUCK_MODEL, modelURL: VIVE_PUCK_MODEL,
"dimensions": { x: 0.0945, y: 0.0921, z: 0.0423 }, dimensions: VIVE_PUCK_DIMENSIONS,
"position": spawnPosition, position: spawnPosition,
"userData": "{ \"grabbableKey\": { \"grabbable\": true, \"kinematic\": false } }" userData: '{ "grabbableKey": { "grabbable": true, "kinematic": false } }'
}; };
var puckEntityID = Entities.addEntity(puckEntityProperties); var puckEntityID = Entities.addEntity(puckEntityProperties);
if (trackedPucks.hasOwnProperty(puck.puckno)) {
destroyPuck(puck.puckno);
}
trackedPucks[puck.puckno] = { trackedPucks[puck.puckno] = {
"puckEntityID": puckEntityID, puckEntityID: puckEntityID,
"trackedEntityID": "" trackedEntityID: ""
}; };
lastPuck = trackedPucks[puck.puckno]; lastPuck = trackedPucks[puck.puckno];
} }
@ -117,7 +124,7 @@ function finalizePuck() {
var foundEntities = Entities.findEntities(puckPosition, VIVE_PUCK_SEARCH_DISTANCE); var foundEntities = Entities.findEntities(puckPosition, VIVE_PUCK_SEARCH_DISTANCE);
var foundEntity; var foundEntity;
var leastDistance = 999999; // this should be something like Integer.MAX_VALUE var leastDistance = Number.MAX_VALUE;
for (var i = 0; i < foundEntities.length; i++) { for (var i = 0; i < foundEntities.length; i++) {
var entity = foundEntities[i]; var entity = foundEntities[i];
@ -141,6 +148,9 @@ function finalizePuck() {
function updatePucks() { function updatePucks() {
// for each puck, update its position and orientation // for each puck, update its position and orientation
for (var puckName in trackedPucks) { for (var puckName in trackedPucks) {
if (!trackedPucks.hasOwnProperty(puckName)) {
continue;
}
var action = indexToTrackedObjectName(puckName); var action = indexToTrackedObjectName(puckName);
var pose = Controller.getPoseValue(Controller.Standard[action]); var pose = Controller.getPoseValue(Controller.Standard[action]);
if (pose && pose.valid) { if (pose && pose.valid) {
@ -148,7 +158,7 @@ function updatePucks() {
if (puck.trackedEntityID) { if (puck.trackedEntityID) {
var avatarXform = new Xform(MyAvatar.orientation, MyAvatar.position); var avatarXform = new Xform(MyAvatar.orientation, MyAvatar.position);
var puckXform = new Xform(pose.rotation, pose.translation); var puckXform = new Xform(pose.rotation, pose.translation);
var finalXform = Xform.mul(avatarXform, Xform.mul(puckXform, Vec3.ZERO)); var finalXform = Xform.mul(avatarXform, puckXform);
Entities.editEntity(puck.puckEntityID, { Entities.editEntity(puck.puckEntityID, {
position: finalXform.pos, position: finalXform.pos,
@ -169,13 +179,16 @@ function destroyPuck(puckName) {
var puckEntityID = trackedPucks[puckName].puckEntityID; var puckEntityID = trackedPucks[puckName].puckEntityID;
var trackedEntityID = trackedPucks[puckName].trackedEntityID; var trackedEntityID = trackedPucks[puckName].trackedEntityID;
// remove the puck as a parent entity and then delete the puck
Entities.editEntity(trackedEntityID, { "parentID": "{00000000-0000-0000-0000-000000000000}" }); Entities.editEntity(trackedEntityID, { "parentID": "{00000000-0000-0000-0000-000000000000}" });
Entities.deleteEntity(puckEntityID); Entities.deleteEntity(puckEntityID);
} }
function destroyPucks() { function destroyPucks() {
// remove all pucks and unparent entities // remove all pucks and unparent entities
for (var puck in trackedPucks) { for (var puckName in trackedPucks) {
destroyPuck(puck); if (trackedPucks.hasOwnProperty(puckName)) {
destroyPuck(puckName);
}
} }
} }