// // swallowPill.js // Play a swallow sound and trigger visual effects after a pill has been swallowed // // Author: Elisa Lupin-Jimenez // Copyright High Fidelity 2018 // // Licensed under the Apache 2.0 License // See accompanying license file or http://apache.org/ // // All assets are under CC Attribution Non-Commerical // http://creativecommons.org/licenses/ // (function() { var SWALLOW_SOUNDS_URLS = [ "http://www.pacdv.com/sounds/people_sound_effects/gulp-2.wav" ]; var VISUAL_EFFECTS = [ "Wireframe:LightingModel:enableWireframe", 1, // Depth 2, // Albedo 3, // Normal 5, // Metallic 6, // Emissive 16, // Shadow Cascade Indices 26, // Ambient Occlusion 27 // Ambient Occlusion Blurred ]; var VOLUME = 0.5; var WITHIN_10_CM = 0.1; var TIMEOUT = 10000; var playback; var render; var renderDebug; var isInactive = true; var _this = this; _this.preload = function(entityID) { _this.entityID = entityID; render = Render.getConfig("RenderMainView"); renderDebug = render.getConfig("DebugDeferredBuffer"); renderDebug.size = {x: -1, y: -1, z: 1, w: 1}; playback = {volume: VOLUME, position: Entities.getEntityProperties(_this.entityID).position}; }; var checkIfNearHead = function() { var pos = Entities.getEntityProperties(_this.entityID).position; var avatarHeadPosition = MyAvatar.getJointPosition("Head"); if (isInactive) { if (isWithin10cm(pos.y, avatarHeadPosition.y) & isWithin10cm(pos.z, avatarHeadPosition.z)) { isInactive = false; playSwallowEffect(avatarHeadPosition); } } }; function enableVisualEffects() { var size = VISUAL_EFFECTS.length - 1; var index = Math.round(Math.random() * size); var effect = VISUAL_EFFECTS[index]; print("effect is: " + effect); if (index === 0) { render.getConfig(effect.split(":")[1])[effect.split(":")[2]] = true; } else { renderDebug.enabled = true; renderDebug.mode = effect; } } function playSwallowEffect(position) { var size = SWALLOW_SOUNDS_URLS.length - 1; var index = Math.round(Math.random() * size); var sound = SoundCache.getSound(SWALLOW_SOUNDS_URLS[index]); Audio.playSound(sound, playback); enableVisualEffects(); var editJSON = { visible: false, collisionless: true }; Entities.editEntity(_this.entityID, editJSON); Script.setTimeout(function() { Entities.deleteEntity(_this.entityID); }, TIMEOUT); } // Helper function to see if the object is close to us var isWithin10cm = function(value1, value2) { if (Math.abs(Math.abs(value1) - Math.abs(value2)) <= WITHIN_10_CM) { return true; } return false; }; Script.update.connect(checkIfNearHead); _this.unload = function(entityID) { var WIREFRAME = "Wireframe:LightingModel:enableWireframe"; render.getConfig(WIREFRAME.split(":")[1])[WIREFRAME.split(":")[2]] = false; renderDebug.mode = 0; renderDebug.size = {x: 0, y: -1, z: 1, w: 1}; renderDebug.enabled = false; Script.update.disconnect(checkIfNearHead); Script.update.disconnect(_this.mousePressOnEntity); }; });