mirror of
https://github.com/overte-org/overte.git
synced 2025-08-04 03:23:33 +02:00
Merge pull request #6419 from imgntn/betterbubbles
Improvments to Bubblewand
This commit is contained in:
commit
a59dc6a423
2 changed files with 27 additions and 15 deletions
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
});
|
});
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue