mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-05-29 10:59:55 +02:00
Merge pull request #6124 from imgntn/bball_fixes
[Scripts] Fix Basketball Solidity in Toybox
This commit is contained in:
commit
6465bb85dd
4 changed files with 31 additions and 26 deletions
|
@ -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
|
||||||
});
|
});
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -321,7 +321,7 @@
|
||||||
resetMe: {
|
resetMe: {
|
||||||
resetMe: true
|
resetMe: true
|
||||||
},
|
},
|
||||||
grabbable: {
|
grabbableKey: {
|
||||||
invertSolidWhileHeld: true
|
invertSolidWhileHeld: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -294,7 +294,7 @@ MasterReset = function() {
|
||||||
resetMe: {
|
resetMe: {
|
||||||
resetMe: true
|
resetMe: true
|
||||||
},
|
},
|
||||||
grabbable: {
|
grabbableKey: {
|
||||||
invertSolidWhileHeld: true
|
invertSolidWhileHeld: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue