content/hifi-content/caitlyn/production/bubbles/bubbleMouth.js
2022-02-13 22:19:19 +01:00

54 lines
1.8 KiB
JavaScript

var currentBubble = null;
var BUBBLE_MODEL = "http://hifi-production.s3.amazonaws.com/DomainContent/Toybox/bubblewand/bubble.fbx";
var BUBBLE_INITIAL_DIMENSIONS = {
x: 0.03,
y: 0.03,
z: 0.03
};
var BUBBLE_LIFETIME_MIN = 3;
var BUBBLE_LIFETIME_MAX = 8;
var BUBBLE_SIZE_MIN = 0.05;
var BUBBLE_SIZE_MAX = 0.15;
var BUBBLE_LINEAR_DAMPING = 0.2;
var BUBBLE_GRAVITY_MIN = 0.1;
var BUBBLE_GRAVITY_MAX = 0.3;
function radiusFromVolume(volume) {
return Math.pow(volume / ((4/3) * Math.PI),(1/3));
}
var bubbleSizeMultiplier = 1;
var BREATH_RATE = 0.01; // 0.01 Liters per second
var breathedAir = 0.0; //
Script.update.connect(function(deltaTime) {
if (MyAvatar.audioAverageLoudness > 50) {
breathedAir += deltaTime * BREATH_RATE;
if (currentBubble == null) {
currentBubble = Entities.addEntity({
name: 'Bubble',
type: 'Model',
modelURL: BUBBLE_MODEL,
position: MyAvatar.getJointPosition(MyAvatar.jointNames.indexOf("Head")),
dimensions: BUBBLE_INITIAL_DIMENSIONS,
dynamic: false,
collisionless: true,
damping: BUBBLE_LINEAR_DAMPING,
shapeType: 'sphere',
lifetime: 60 // Noone exhales for 60 seconds hopefully!
});
return;
}
Entities.editEntity(currentBubble, {dimensions: Vec3.multiply({x: 2, y: 2, z: 2}, radiusFromVolume(breathedAir))});
return;
}
if (currentBubble) {
Entities.editEntity(currentBubble, {
lifetime: 20,
velocity: Vec3.sum(Vec3.multiplyQbyV(MyAvatar.orientation, {x: 0, y: 0, z: -1}), {y: 1})
});
currentBubble = null;
breathedAir = 0.0;
}
});