added test file

This commit is contained in:
druiz17 2017-09-08 13:45:45 -07:00
parent b3e2c7ac56
commit 5d1a5eea4c

View file

@ -0,0 +1,278 @@
"use strict";
/* jslint bitwise: true */
/* global Script, Entities, MyAvatar, Vec3, Quat, Mat4 */
(function() { // BEGIN LOCAL_SCOPE
// var lifetime = -1;
var lifetime = 600;
var tableSections = 32;
var tableRadius = 9;
var sectionRelativeRotation = 0;
var sectionRotation = 0;
var sectionRelativeCenterA = 0;
var sectionRelativeCenterB = 0;
var sectionRelativeCenterSign = 0;
var sectionCenterA = 0;
var sectionCenterB = 0;
var sectionCenterSign = 0;
var yFlip = 0;
var objects = [];
var overlays = [];
var testNames = [
"FarActionGrab",
"NearParentGrabEntity",
"NearParentGrabOverlay",
"Clone Entity (dynamic)",
"Clone Entity (non-dynamic"
];
function createCloneDynamicEntity(index) {
createPropsCube(index, false, false, true, true);
createPropsModel(index, false, false, true, true);
createSign(index, "Clone Dynamic Entity");
};
function createCloneEntity(index) {
createPropsCube(index, false, false, true, false);
createPropsModel(index, false, false, true, false);
createSign(index, "Clone Non-Dynamic Entity");
};
function createNearGrabOverlay(index) {
createPropsCubeOverlay(index, false, false, true, true);
createPropsModelOverlay(index, false, false, true, true);
createSign(index, "Near Grab Overlay");
};
function createNearGrabEntity(index) {
createPropsCube(index, false, false, false, false);
createPropsModel(index, false, false, false, false);
createSign(index, "Near Grab Entity");
};
function createFarGrabEntity(index) {
createPropsCube(index, true, false, false, false);
createPropsModel(index, true, false, false, false);
createSign(index, "Far Grab Entity");
};
function createPropsModel(i, dynamic, collisionless, clone, cloneDynamic) {
var propsModel = {
name: "controller-tests model object " + i,
type: "Model",
modelURL: "http://headache.hungry.com/~seth/hifi/controller-tests/color-cube.obj",
position: sectionCenterA,
rotation: sectionRotation,
gravity: (dynamic && !collisionless) ? { x: 0, y: -1, z: 0 } : { x: 0, y: 0, z: 0 },
dimensions: { x: 0.2, y: 0.2, z: 0.2 },
userData: JSON.stringify({
grabbableKey: {
grabbable: true,
cloneLimit: 10,
cloneable: clone,
cloneDynamic: cloneDynamic
},
controllerTestEntity: true
}),
lifetime: lifetime,
shapeType: "box",
dynamic: dynamic,
collisionless: collisionless
};
objects.push(Entities.addEntity(propsModel));
}
function createPropsModelOverlay(i, dynamic, collisionless, clone, cloneDynamic) {
var propsModel = {
name: "controller-tests model object " + i,
type: "Model",
modelURL: "http://headache.hungry.com/~seth/hifi/controller-tests/color-cube.obj",
url: "http://headache.hungry.com/~seth/hifi/controller-tests/color-cube.obj",
grabbable: true,
position: sectionCenterA,
rotation: sectionRotation,
dimensions: { x: 0.2, y: 0.2, z: 0.2 },
userData: JSON.stringify({
grabbableKey: {
grabbable: true,
},
controllerTestEntity: true
}),
lifetime: lifetime,
visible: true,
};
overlays.push(Overlays.addOverlay("model", propsModel));
}
function createPropsCubeOverlay(i, dynamic, collisionless, clone, cloneDynamic) {
var propsCube = {
name: "controller-tests cube object " + i,
type: "Box",
color: { "blue": 200, "green": 10, "red": 20 },
position: sectionCenterB,
rotation: sectionRotation,
grabbable: true,
dimensions: { x: 0.2, y: 0.2, z: 0.2 },
userData: JSON.stringify({
grabbableKey: {
grabbable: true,
},
controllerTestEntity: true
}),
lifetime: lifetime,
solid: true,
visible: true,
};
overlays.push(Overlays.addOverlay("cube", propsCube));
}
function createPropsCube(i, dynamic, collisionless, clone, cloneDynamic) {
var propsCube = {
name: "controller-tests cube object " + i,
type: "Box",
shape: "Cube",
color: { "blue": 200, "green": 10, "red": 20 },
position: sectionCenterB,
rotation: sectionRotation,
gravity: dynamic ? { x: 0, y: -1, z: 0 } : { x: 0, y: 0, z: 0 },
dimensions: { x: 0.2, y: 0.2, z: 0.2 },
userData: JSON.stringify({
grabbableKey: {
grabbable: true,
cloneLimit: 10,
cloneable: clone,
cloneDynamic: cloneDynamic
},
controllerTestEntity: true
}),
lifetime: lifetime,
shapeType: "box",
dynamic: dynamic,
collisionless: collisionless
};
objects.push(Entities.addEntity(propsCube));
}
function createSign(i, signText) {
var propsLabel = {
name: "controller-tests sign " + i,
type: "Text",
lineHeight: 0.125,
position: sectionCenterSign,
rotation: Quat.multiply(sectionRotation, yFlip),
text: signText,
dimensions: { x: 1, y: 1, z: 0.01 },
lifetime: lifetime,
userData: JSON.stringify({
grabbableKey: {
grabbable: false,
},
controllerTestEntity: true
})
};
objects.push(Entities.addEntity(propsLabel));
}
function chooseType(index) {
switch (index) {
case 0:
createFarGrabEntity(index);
break;
case 1:
createNearGrabEntity(index);
break;
case 2:
createNearGrabOverlay(index);
break;
case 3:
createCloneDynamicEntity();
break;
case 4:
createCloneEntity(index);
break;
}
}
function setupControllerTests(testBaseTransform) {
// var tableID =
objects.push(Entities.addEntity({
name: "controller-tests table",
type: "Model",
modelURL: "http://headache.hungry.com/~seth/hifi/controller-tests/controller-tests-table.obj.gz",
position: Mat4.transformPoint(testBaseTransform, { x: 0, y: 1, z: 0 }),
rotation: Mat4.extractRotation(testBaseTransform),
userData: JSON.stringify({
grabbableKey: { grabbable: false },
soundKey: {
url: "http://headache.hungry.com/~seth/hifi/sound/clock-ticking-3.wav",
volume: 0.4,
loop: true,
playbackGap: 0,
playbackGapRange: 0
},
controllerTestEntity: true
}),
shapeType: "static-mesh",
lifetime: lifetime
}));
var Xdynamic = 1;
var Xcollisionless = 2;
var Xkinematic = 4;
var XignoreIK = 8;
yFlip = Quat.fromPitchYawRollDegrees(0, 180, 0);
for (var i = 0; i < 16; i++) {
sectionRelativeRotation = Quat.fromPitchYawRollDegrees(0, -360 * i / tableSections, 0);
sectionRotation = Quat.multiply(Mat4.extractRotation(testBaseTransform), sectionRelativeRotation);
sectionRelativeCenterA = Vec3.multiplyQbyV(sectionRotation, { x: -0.2, y: 1.25, z: tableRadius - 0.8 });
sectionRelativeCenterB = Vec3.multiplyQbyV(sectionRotation, { x: 0.2, y: 1.25, z: tableRadius - 0.8 });
sectionRelativeCenterSign = Vec3.multiplyQbyV(sectionRotation, { x: 0, y: 1.5, z: tableRadius + 1.0 });
sectionCenterA = Mat4.transformPoint(testBaseTransform, sectionRelativeCenterA);
sectionCenterB = Mat4.transformPoint(testBaseTransform, sectionRelativeCenterB);
sectionCenterSign = Mat4.transformPoint(testBaseTransform, sectionRelativeCenterSign);
var dynamic = (i & Xdynamic) ? true : false;
var collisionless = (i & Xcollisionless) ? true : false;
var kinematic = (i & Xkinematic) ? true : false;
var ignoreIK = (i & XignoreIK) ? true : false;
chooseType(i);
}
}
// This assumes the avatar is standing on a flat floor with plenty of space.
// Find the floor:
var pickRay = {
origin: Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, { x: 0, y: 2, z: -1 })),
direction: { x: 0, y: -1, z: 0 },
length: 20
};
var intersection = Entities.findRayIntersection(pickRay, true, [], [], true);
if (intersection.intersects) {
var testBaseTransform = Mat4.createFromRotAndTrans(MyAvatar.rotation, intersection.intersection);
setupControllerTests(testBaseTransform);
}
Script.scriptEnding.connect(function () {
for (var i = 0; i < objects.length; i++) {
var nearbyID = objects[i];
Entities.deleteEntity(nearbyID);
}
for (var i = 0; i < overlays.length; i++) {
var overlayID = overlays[i];
Overlays.deleteOverlay(overlayID);
}
});
}()); // END LOCAL_SCOPE