Advertisement
salahzar

doubleclickTP.js highfidelity

Jun 26th, 2018
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. "use strict";
  2. //
  3. //  defaultScripts.js
  4. //  examples
  5. //
  6. //  Copyright 2016 WolfGang von Caron
  7. //
  8. //  Distributed under the Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)
  9. //  See https://creativecommons.org/licenses/by-nc/4.0/
  10. //
  11. var SETTINGS_KEY = "doubleClickTPEnabled";
  12.  
  13. var MENU_CATEGORY = "Navigate";
  14. var MENU_ITEM = "Double Click TP";
  15.  
  16. var delay = 250;
  17. var mouseTravelLimit = 3;
  18.  
  19. var clickTime = 0;
  20. var clickPos;
  21.  
  22. function distSquare(posa,posb){
  23.     var x = Math.pow(posa.x - posb.x,2);
  24.     var y = Math.pow(posa.y - posb.y,2);
  25.     return x + y;
  26. }
  27.  
  28. function distLessThan(posa,posb,dist){
  29.     var sq = distSquare(posa,posb);
  30.    
  31.     return (sq < Math.pow(dist,2));
  32. }
  33.  
  34. function mouseRelease(event){
  35.     if(Settings.getValue(SETTINGS_KEY,true)){
  36.         if(event.isLeftButton){
  37.             var time = Date.now();
  38.             var delta = time - clickTime;
  39.             var pos = {x:event.x, y:event.y};
  40.             if(delta > delay){
  41.                 clickTime = time;
  42.                 clickPos = pos;
  43.             }else if(distLessThan(pos,clickPos,mouseTravelLimit)){
  44.                 var coords = getClickCoords(event);
  45.                 if(coords == null)return;
  46.                 clickTime = 0;
  47.                 var loc = Vec3.sum(coords.pos, Vec3.multiply(coords.normal,getDistanceToFloor()));
  48.                 MyAvatar.goToLocation(loc,false);
  49.             }
  50.         }
  51.     }
  52. }
  53.  
  54. function getDistanceToFloor(){
  55.    
  56.     var origin = MyAvatar.position;
  57.     var direction = {x:0,y:-1,z:0};
  58.     var ray = {origin: origin,direction:direction};
  59.     var entityResult = Entities.findRayIntersection(ray, true);
  60.     if(entityResult.intersects){
  61.         return Vec3.distance(origin,entityResult.intersection);
  62.     }
  63.     return 1;
  64.    
  65. }
  66.  
  67. function getClickCoords(event){
  68.     var ray = Camera.computePickRay(event.x, event.y);
  69.     var result = Entities.findRayIntersection(ray, true);
  70.     if(result.intersects){
  71.         return {pos: result.intersection, normal: result.surfaceNormal};
  72.     }
  73.     return null;
  74. }
  75.  
  76. function scriptEnd(event){
  77.     if(Menu.menuItemExists(MENU_CATEGORY,MENU_ITEM)){
  78.         Menu.removeMenuItem(MENU_CATEGORY, MENU_ITEM);
  79.     }
  80. }
  81.  
  82. function menuItemEvent(menuItem) {
  83.     if (menuItem == MENU_ITEM) {
  84.         Settings.setValue(SETTINGS_KEY,Menu.isOptionChecked(MENU_ITEM) === true ? true : false);
  85.     }
  86. }
  87.  
  88. function setup(){
  89.    
  90.     if(Menu.menuExists(MENU_CATEGORY)){
  91.         Menu.addMenuItem({
  92.             menuName: MENU_CATEGORY,
  93.             menuItemName: MENU_ITEM,
  94.             shortcutKey:   "Ctrl+Shift+D",
  95.             isCheckable:   true,
  96.             isChecked:     Settings.getValue(SETTINGS_KEY,true)
  97.         });
  98.     }
  99.     Script.scriptEnding.connect(scriptEnd);
  100.     Controller.mouseReleaseEvent.connect(mouseRelease);
  101.     Menu.menuItemEvent.connect(menuItemEvent);
  102. }
  103.  
  104. setup();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement