Merge pull request #6419 from imgntn/betterbubbles

Improvments to Bubblewand
This commit is contained in:
Brad Hefta-Gaub 2015-11-19 18:26:59 -08:00
commit a59dc6a423
2 changed files with 27 additions and 15 deletions

View file

@ -12,8 +12,8 @@
Script.include("../../libraries/utils.js"); Script.include("../../libraries/utils.js");
var WAND_MODEL = 'http://hifi-public.s3.amazonaws.com/models/bubblewand/wand.fbx'; var WAND_MODEL = 'http://hifi-content.s3.amazonaws.com/james/bubblewand/wand.fbx';
var WAND_COLLISION_SHAPE = 'http://hifi-public.s3.amazonaws.com/models/bubblewand/actual_no_top_collision_hull.obj'; var WAND_COLLISION_SHAPE = 'http://hifi-content.s3.amazonaws.com/james/bubblewand/wand_collision_hull.obj';
var WAND_SCRIPT_URL = Script.resolvePath("wand.js"); var WAND_SCRIPT_URL = Script.resolvePath("wand.js");
@ -43,5 +43,18 @@ var wand = Entities.addEntity({
//must be enabled to be grabbable in the physics engine //must be enabled to be grabbable in the physics engine
collisionsWillMove: true, collisionsWillMove: true,
compoundShapeURL: WAND_COLLISION_SHAPE, compoundShapeURL: WAND_COLLISION_SHAPE,
script: WAND_SCRIPT_URL script: WAND_SCRIPT_URL,
userData: JSON.stringify({
grabbableKey: {
invertSolidWhileHeld: true,
spatialKey: {
relativePosition: {
x: 0,
y: 0.1,
z: 0
},
relativeRotation: Quat.fromPitchYawRollDegrees(0, 0, 90)
}
}
})
}); });

View file

@ -12,7 +12,7 @@
/*global MyAvatar, Entities, AnimationCache, SoundCache, Scene, Camera, Overlays, HMD, AvatarList, AvatarManager, Controller, UndoStack, Window, Account, GlobalServices, Script, ScriptDiscoveryService, LODManager, Menu, Vec3, Quat, AudioDevice, Paths, Clipboard, Settings, XMLHttpRequest, randFloat, randInt */ /*global MyAvatar, Entities, AnimationCache, SoundCache, Scene, Camera, Overlays, HMD, AvatarList, AvatarManager, Controller, UndoStack, Window, Account, GlobalServices, Script, ScriptDiscoveryService, LODManager, Menu, Vec3, Quat, AudioDevice, Paths, Clipboard, Settings, XMLHttpRequest, randFloat, randInt */
(function () { (function() {
Script.include("../../libraries/utils.js"); Script.include("../../libraries/utils.js");
@ -58,23 +58,23 @@
BubbleWand.prototype = { BubbleWand.prototype = {
timePassed: null, timePassed: null,
currentBubble: null, currentBubble: null,
preload: function (entityID) { preload: function(entityID) {
this.entityID = entityID; this.entityID = entityID;
}, },
getWandTipPosition: function (properties) { getWandTipPosition: function(properties) {
//the tip of the wand is going to be in a different place than the center, so we move in space relative to the model to find that position //the tip of the wand is going to be in a different place than the center, so we move in space relative to the model to find that position
var upVector = Quat.getUp(properties.rotation); var upVector = Quat.getUp(properties.rotation);
var upOffset = Vec3.multiply(upVector, WAND_TIP_OFFSET); var upOffset = Vec3.multiply(upVector, WAND_TIP_OFFSET);
var wandTipPosition = Vec3.sum(properties.position, upOffset); var wandTipPosition = Vec3.sum(properties.position, upOffset);
return wandTipPosition; return wandTipPosition;
}, },
addCollisionsToBubbleAfterCreation: function (bubble) { addCollisionsToBubbleAfterCreation: function(bubble) {
//if the bubble collide immediately, we get weird effects. so we add collisions after release //if the bubble collide immediately, we get weird effects. so we add collisions after release
Entities.editEntity(bubble, { Entities.editEntity(bubble, {
collisionsWillMove: true collisionsWillMove: true
}); });
}, },
randomizeBubbleGravity: function () { randomizeBubbleGravity: function() {
//change up the gravity a little bit for variation in floating effects //change up the gravity a little bit for variation in floating effects
var randomNumber = randFloat(BUBBLE_GRAVITY_MIN, BUBBLE_GRAVITY_MAX); var randomNumber = randFloat(BUBBLE_GRAVITY_MIN, BUBBLE_GRAVITY_MAX);
var gravity = { var gravity = {
@ -84,7 +84,7 @@
}; };
return gravity; return gravity;
}, },
growBubbleWithWandVelocity: function (properties, deltaTime) { growBubbleWithWandVelocity: function(properties, deltaTime) {
//get the wand and tip position for calculations //get the wand and tip position for calculations
var wandPosition = properties.position; var wandPosition = properties.position;
this.getWandTipPosition(properties); this.getWandTipPosition(properties);
@ -145,7 +145,7 @@
dimensions: dimensions dimensions: dimensions
}); });
}, },
createBubbleAtTipOfWand: function () { createBubbleAtTipOfWand: function() {
//create a new bubble at the tip of the wand //create a new bubble at the tip of the wand
var properties = Entities.getEntityProperties(this.entityID, ["position", "rotation"]); var properties = Entities.getEntityProperties(this.entityID, ["position", "rotation"]);
@ -162,24 +162,23 @@
position: this.getWandTipPosition(properties), position: this.getWandTipPosition(properties),
dimensions: BUBBLE_INITIAL_DIMENSIONS, dimensions: BUBBLE_INITIAL_DIMENSIONS,
collisionsWillMove: false, collisionsWillMove: false,
ignoreForCollisions: false, ignoreForCollisions: true,
linearDamping: BUBBLE_LINEAR_DAMPING, linearDamping: BUBBLE_LINEAR_DAMPING,
shapeType: "sphere" shapeType: "sphere"
}); });
}, },
startNearGrab: function () { startNearGrab: function() {
//create a bubble to grow at the start of the grab //create a bubble to grow at the start of the grab
if (this.currentBubble === null) { if (this.currentBubble === null) {
this.createBubbleAtTipOfWand(); this.createBubbleAtTipOfWand();
} }
}, },
continueNearGrab: function () { continueNearGrab: function() {
var deltaTime = checkInterval(); var deltaTime = checkInterval();
//only get the properties that we need //only get the properties that we need
var properties = Entities.getEntityProperties(this.entityID, ["position", "rotation"]); var properties = Entities.getEntityProperties(this.entityID, ["position", "rotation"]);
var wandTipPosition = this.getWandTipPosition(properties); var wandTipPosition = this.getWandTipPosition(properties);
//update the bubble to stay with the wand tip //update the bubble to stay with the wand tip
@ -189,7 +188,7 @@
this.growBubbleWithWandVelocity(properties, deltaTime); this.growBubbleWithWandVelocity(properties, deltaTime);
}, },
releaseGrab: function () { releaseGrab: function() {
//delete the current buble and reset state when the wand is released //delete the current buble and reset state when the wand is released
Entities.deleteEntity(this.currentBubble); Entities.deleteEntity(this.currentBubble);
this.currentBubble = null; this.currentBubble = null;