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; } });