content/hifi-content/rebecca/Mexico/drinkTequila.js
2022-02-14 02:04:11 +01:00

182 lines
6.2 KiB
JavaScript

//
// drinkTequila.js
//
// created by Rebecca Stankus on 02/05/18
// Copyright 2018 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
// get distance to mouth...if near, drink
(function() {
var _this;
var AUDIO_VOLUME_LEVEL = 0.5;
var DRINK_SOUND = SoundCache.getSound(Script.resolvePath("Sounds/267425__gpenn76__long-slurp-swallow.wav"));
var DISTANCE_CHECK_INTERVAL_MS = 100;
var SEARCH_RADIUS = 2;
var FALL_ANIMATION = "https://hifi-content.s3.amazonaws.com/rebecca/Mexico/animations/Fall.fbx";
var FALL_TIMEOUT_MS = 7000;
var START_FRAME = 1;
var FRAMES_PER_SECOND= 45;
var END_FRAME = 150;
var DRUNK_ZONE_DIMENSIONS = {x: 0.5, y: 2, z: 0.5};
var LIFETIME = 30;
var DRINK_IT_DISTANCE = 0.2;
var DONE_DRINKING_SHOT = 1000;
var WAIT_AFTER_GRABBING = 100;
var TEN_SECONDS = 10;
var DRUNK_HAZE_1000_M = 1000;
var DRUNK_HAZE_100_M = 100;
var DRUNK_HAZE_50_M = 50;
var DRUNK_HAZE_10_M = 10;
var interval;
var drunkZone = null;
var tequila;
var drinking = false;
var firstGrab = true;
var pinkElephant1;
this.preload = function(entityID) {
_this = this;
_this.entityID = entityID;
};
var checkForDrunkZone = function() {
var isZone = false;
Entities.findEntities(MyAvatar.position, SEARCH_RADIUS).forEach(function(element) {
var properties = Entities.getEntityProperties(element, ['name', 'parentID']);
if (properties.name === "Tequila Drunk Zone") {
if (properties.parentID === MyAvatar.sessionUUID) {
drunkZone = element;
isZone = true;
}
}
});
return isZone;
};
this.startNearGrab = function() {
if (firstGrab) {
interval = Script.setInterval(distanceCheck, DISTANCE_CHECK_INTERVAL_MS);
}
};
this.clickReleaseOnEntity = function() {
drinkShot();
};
this.releaseGrab = function() {
if (interval) {
Script.clearInterval(interval);
}
Entities.editEntity(_this.entityID, {lifetime: TEN_SECONDS});
};
var distanceCheck = function() {
var facePosition = MyAvatar.getJointPosition("Head");
var distance = Vec3.distance(facePosition, Entities.getEntityProperties(_this.entityID, 'position').position);
if (distance < DRINK_IT_DISTANCE && !drinking) {
drinkShot();
drinking = true;
}
};
var drinkShot = function() {
if (firstGrab) {
playSound();
Entities.deleteEntity(tequila);
if (checkForDrunkZone()) {
Entities.editEntity(drunkZone, {lifetime: LIFETIME});
var zoneHazeProperties = Entities.getEntityProperties(drunkZone, 'haze').haze;
var hazeRange = zoneHazeProperties.hazeRange;
switch (hazeRange) {
case DRUNK_HAZE_1000_M:
Entities.editEntity(drunkZone, {haze: {
hazeColor:{
red: 0,
green: 0,
blue: 0
},
hazeRange: 100,
hazeBackgroundBlend: 0.5
}});
break;
case DRUNK_HAZE_100_M:
Entities.editEntity(drunkZone, {haze: {
hazeRange: 50,
hazeBackgroundBlend: 0.25
}});
break;
case DRUNK_HAZE_50_M:
Entities.editEntity(drunkZone, {haze: {
hazeRange: 10,
hazeBackgroundBlend: 0.1
}});
fallDown();
break;
case DRUNK_HAZE_10_M:
fallDown();
break;
default:
return;
}
} else {
Entities.addEntity({
type: 'Zone',
clientOnly: 1,
name: 'Tequila Drunk Zone',
hazeMode: 'enabled',
haze: {
hazeColor:{
red: 215,
green: 217,
blue: 167
},
hazeRange: 1000,
hazeBackgroundBlend: 0.9
},
parentID: MyAvatar.sessionUUID,
parentJointIndex: 0,
position: MyAvatar.getJointPosition("Hips"),
dimensions: DRUNK_ZONE_DIMENSIONS,
lifetime: LIFETIME
});
}
drunkZone = null;
Script.setTimeout(function() {
drinking = false;
}, DONE_DRINKING_SHOT);
}
if (Entities.getEntityProperties(_this.entityID, 'name').name !== "Tequila Shot Glass CC-BY Jarlan Perez") {
firstGrab = false;
}
};
var playSound = function() {
if (DRINK_SOUND.downloaded) {
Audio.playSound(DRINK_SOUND, {
position: MyAvatar.getJointPosition("Head"),
volume: AUDIO_VOLUME_LEVEL
});
}
};
var fallDown = function() {
MyAvatar.overrideAnimation(FALL_ANIMATION, FRAMES_PER_SECOND, 0, START_FRAME, END_FRAME);
Script.setTimeout(function(){
MyAvatar.restoreAnimation();
}, FALL_TIMEOUT_MS);
};
this.unload = function() {
this.releaseGrab();
MyAvatar.restoreAnimation();
if (pinkElephant1) {
Overlays.deleteOverlay(pinkElephant1);
}
};
});