(function () { var _entityID; var sitData = {"position": {x: 0, y: 0, z: 0}, "rotation": {x: 0, y: 0, z: 0, w: 1}}; var sitTimer; var driveKeyPressed = 0; var releaseTime = 1 * 5; var releaseDistance = 0.5; var sat = false; var sitOffsetPos; var sitOffsetRot; var OVERRIDEN_DRIVE_KEYS = [ DriveKeys.TRANSLATE_X, DriveKeys.TRANSLATE_Y, DriveKeys.TRANSLATE_Z, DriveKeys.STEP_TRANSLATE_X, DriveKeys.STEP_TRANSLATE_Y, DriveKeys.STEP_TRANSLATE_Z, ]; function sitYourAssDown() { sat = true; MyAvatar.collisionsEnabled = false; MyAvatar.setHMDLeanRecenterEnabled(false); MyAvatar.setParentID(_entityID); var setup = false; var userData = JSON.parse(Entities.getEntityProperties(_entityID, ["userData"]).userData); if (userData.hasOwnProperty("sitData")) { if (userData.sitData.hasOwnProperty("position") && userData.sitData.hasOwnProperty("rotation")) { sitData = userData.sitData; setup = true; } } if (!setup) { sitData = {"position": {x: 0, y: 0, z: 0}, "rotation": {x: 0, y: 0, z: 0, w: 1}}; } var entData = Entities.getEntityProperties(_entityID, ["position", "rotation"]); if (!sitData.rotation.hasOwnProperty("w")) { var tempRot = Quat.fromPitchYawRollDegrees(sitData.rotation.x, sitData.rotation.y, sitData.rotation.z); sitOffsetRot = Quat.multiply(entData.rotation, tempRot); } else { sitOffsetRot = Quat.multiply(entData.rotation, sitData.rotation); } sitOffsetPos = Vec3.sum(entData.position, Vec3.multiplyQbyV(entData.rotation, sitData.position)); MyAvatar.pinJoint(MyAvatar.getJointIndex("Hips"), sitOffsetPos, sitOffsetRot); Script.setTimeout(function () { MyAvatar.position = sitOffsetPos; MyAvatar.rotation = sitOffsetRot; }, 200); MyAvatar.position = sitOffsetPos; MyAvatar.rotation = sitOffsetRot; OVERRIDEN_DRIVE_KEYS.forEach(function (key) { MyAvatar.disableDriveKey(key); }); var ANIMATION_URL = "https://s3-us-west-1.amazonaws.com/hifi-content/clement/production/animations/sitting.fbx", ANIMATION_FPS = 30, ANIMATION_FIRST_FRAME = 1, ANIMATION_LAST_FRAME = 200; MyAvatar.getAnimationRoles().filter(function (role) { return !/^(right|left)/.test(role); }).forEach(function (role) { MyAvatar.overrideRoleAnimation(role, ANIMATION_URL, ANIMATION_FPS, true, ANIMATION_FIRST_FRAME, ANIMATION_LAST_FRAME); }); sitTimer = Script.setInterval(checkIfItsTimeToFuckOff, 200); } function checkIfItsTimeToFuckOff() { var found = false; if (driveKeyPressed > releaseTime || Vec3.distance(MyAvatar.position, sitOffsetPos) > releaseDistance) { getYourAssUpYouLazyFucker(); } OVERRIDEN_DRIVE_KEYS.forEach(function (key) { if (MyAvatar.getRawDriveKey(key) !== 0 && !found) { found = true; } }); if (found) { driveKeyPressed++; } else { driveKeyPressed = 0; } } function getYourAssUpYouLazyFucker() { MyAvatar.setParentID(""); sat = false; MyAvatar.collisionsEnabled = true; MyAvatar.setHMDLeanRecenterEnabled(true); MyAvatar.clearPinOnJoint(MyAvatar.getJointIndex("Hips")); OVERRIDEN_DRIVE_KEYS.forEach(function (key) { MyAvatar.enableDriveKey(key); }); MyAvatar.getAnimationRoles().filter(function (role) { return !/^(right|left)/.test(role); }).forEach(function (role) { MyAvatar.restoreRoleAnimation(role); }); } this.clickDownOnEntity = function (entityID, mouseEvent) { if (mouseEvent.isLeftButton && !sat) { sitYourAssDown(); } }; this.startFarTrigger = function (entityID) { if (!sat) { sitYourAssDown(); } }; this.preload = function (entityID) { this.entityID = entityID; _entityID = entityID; }; this.unload = function (entityID) { if (!!sitTimer) { Script.clearInterval(sitTimer); print("Cleared Timer"); if (sat) { getYourAssUpYouLazyFucker(); } } }; })