Merge pull request #6124 from imgntn/bball_fixes

[Scripts]  Fix Basketball Solidity in Toybox
This commit is contained in:
Brad Hefta-Gaub 2015-10-21 09:11:12 -07:00
commit 6465bb85dd
4 changed files with 31 additions and 26 deletions

View file

@ -36,6 +36,10 @@ var hoop = Entities.addEntity({
y: 3.99, y: 3.99,
z: 3.79 z: 3.79
}, },
userData: JSON.stringify({
grabbableKey: {
grabbable: false
}
})
compoundShapeURL: hoopCollisionHullURL compoundShapeURL: hoopCollisionHullURL
}); });

View file

@ -22,8 +22,6 @@ var DIAMETER = 0.30;
var RESET_DISTANCE = 1; var RESET_DISTANCE = 1;
var MINIMUM_MOVE_LENGTH = 0.05; var MINIMUM_MOVE_LENGTH = 0.05;
var GRABBABLE_DATA_KEY = "grabbableKey";
var rackStartPosition = var rackStartPosition =
Vec3.sum(MyAvatar.position, Vec3.sum(MyAvatar.position,
Vec3.multiplyQbyV(MyAvatar.orientation, { Vec3.multiplyQbyV(MyAvatar.orientation, {
@ -53,19 +51,17 @@ var rack = Entities.addEntity({
ignoreForCollisions: false, ignoreForCollisions: false,
collisionSoundURL: collisionSoundURL, collisionSoundURL: collisionSoundURL,
compoundShapeURL: rackCollisionHullURL, compoundShapeURL: rackCollisionHullURL,
// scriptURL: rackScriptURL userData: JSON.stringify({
grabbableKey: {
grabbable: false
}
})
}); });
var balls = [];
setEntityCustomData(GRABBABLE_DATA_KEY, rack, {
grabbable: false
});
var nonCollidingBalls = [];
var collidingBalls = [];
var originalBallPositions = []; var originalBallPositions = [];
function createCollidingBalls() { function createBalls() {
var position = rackStartPosition; var position = rackStartPosition;
var i; var i;
@ -76,9 +72,9 @@ function createCollidingBalls() {
z: position.z + (DIAMETER) - (DIAMETER * i) z: position.z + (DIAMETER) - (DIAMETER * i)
}; };
var collidingBall = Entities.addEntity({ var ball = Entities.addEntity({
type: "Model", type: "Model",
name: 'Colliding Basketball', name: 'Hifi-Basketball',
shapeType: 'Sphere', shapeType: 'Sphere',
position: ballPosition, position: ballPosition,
dimensions: { dimensions: {
@ -96,16 +92,21 @@ function createCollidingBalls() {
collisionsWillMove: true, collisionsWillMove: true,
ignoreForCollisions: false, ignoreForCollisions: false,
modelURL: basketballURL, modelURL: basketballURL,
userData: JSON.stringify({
grabbableKey: {
invertSolidWhileHeld: true
}
})
}); });
collidingBalls.push(collidingBall); balls.push(ball);
originalBallPositions.push(position); originalBallPositions.push(position);
} }
} }
function testBallDistanceFromStart() { function testBallDistanceFromStart() {
var resetCount = 0; var resetCount = 0;
collidingBalls.forEach(function(ball, index) { balls.forEach(function(ball, index) {
var currentPosition = Entities.getEntityProperties(ball, "position").position; var currentPosition = Entities.getEntityProperties(ball, "position").position;
var originalPosition = originalBallPositions[index]; var originalPosition = originalBallPositions[index];
var distance = Vec3.subtract(originalPosition, currentPosition); var distance = Vec3.subtract(originalPosition, currentPosition);
@ -117,8 +118,8 @@ function testBallDistanceFromStart() {
if (moving < MINIMUM_MOVE_LENGTH) { if (moving < MINIMUM_MOVE_LENGTH) {
resetCount++; resetCount++;
if (resetCount === NUMBER_OF_BALLS) { if (resetCount === NUMBER_OF_BALLS) {
deleteCollidingBalls(); deleteBalls();
createCollidingBalls(); createBalls();
} }
} }
}, 200) }, 200)
@ -128,19 +129,19 @@ function testBallDistanceFromStart() {
function deleteEntity(entityID) { function deleteEntity(entityID) {
if (entityID === rack) { if (entityID === rack) {
deleteCollidingBalls(); deleteBalls();
Script.clearInterval(distanceCheckInterval); Script.clearInterval(distanceCheckInterval);
Entities.deletingEntity.disconnect(deleteEntity); Entities.deletingEntity.disconnect(deleteEntity);
} }
} }
function deleteCollidingBalls() { function deleteBalls() {
while (collidingBalls.length > 0) { while (balls.length > 0) {
Entities.deleteEntity(collidingBalls.pop()); Entities.deleteEntity(balls.pop());
} }
} }
createCollidingBalls(); createBalls();
Entities.deletingEntity.connect(deleteEntity); Entities.deletingEntity.connect(deleteEntity);
var distanceCheckInterval = Script.setInterval(testBallDistanceFromStart, 1000); var distanceCheckInterval = Script.setInterval(testBallDistanceFromStart, 1000);

View file

@ -321,7 +321,7 @@
resetMe: { resetMe: {
resetMe: true resetMe: true
}, },
grabbable: { grabbableKey: {
invertSolidWhileHeld: true invertSolidWhileHeld: true
} }
}) })

View file

@ -294,7 +294,7 @@ MasterReset = function() {
resetMe: { resetMe: {
resetMe: true resetMe: true
}, },
grabbable: { grabbableKey: {
invertSolidWhileHeld: true invertSolidWhileHeld: true
} }
}) })