Advertisement
Guest User

Zoom GUI R3

a guest
Aug 6th, 2015
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.42 KB | None | 0 0
  1. // ==UserScript==
  2. // @name Tagpro Zoom GUI R3
  3. // @version R3-0.996
  4. // @description Control Zoom
  5. // @author Despair
  6. // @include http://*.koalabeast.com:*
  7. // @include http://*.jukejuice.com:*
  8. // @include http://*.newcompte.fr:*
  9. // ==/UserScript==
  10.  
  11. // - Settings - //
  12.  
  13. // - change offset of button positions relative to bottom-right of window
  14. var iconXOffset = 10, iconYOffset = 150;
  15.  
  16. // - start with automatic zoom levels
  17. var startAutoIn = true, startAutoOut = true;
  18.  
  19. // - start centered as spec
  20. var startCentered = true;
  21.  
  22. // - add zoom level and viewport size in top-right of viewport
  23. var showPortData = false, showTileData = true;
  24.  
  25. // - prevent zooming in too much with + and - keys in spec
  26. var boundToLimit = false;
  27.  
  28. // - allow panning the camera when centered
  29. var canPan = true;
  30.  
  31. // - speed(tiles per sec) of camera panning as spec
  32. var panSpeed = 8;
  33.  
  34. // - remap i, j, k, l to arrows to allow panning
  35. var altPanning = true;
  36.  
  37. // - enable all functions as a player - can be considered cheating
  38. var enableZoom = true, showPups = false;
  39.  
  40. /*
  41. * ##########################
  42. * - end of settings -
  43. * !! proceed with caution !!
  44. * ##########################
  45. */
  46.  
  47. // Variables
  48. var zoomArray = [1, 4/3, 5/3, 2, 2.5, 10/3, 4],//40 30 24 20 16 12 10
  49. scriptMode = "null", isOn = true, autoZoomIn = false, autoZoomOut = false,
  50. zoomInLvl = 40, zoomOutLvl = 16, autoZoomInLvl = 40, autoZoomOutLvl = 16,
  51. worldXCenter = 0, worldYCenter = 0, defaultCenter = [0, 0],
  52. worldWidth = 0, worldHeight = 0, wasCtrlHeld = false, wasAltHeld = false,
  53. dataTextOffset = 0, pupList = [], pupGhost = {};
  54.  
  55. // Images - http://imgur.com/a/3o4VM
  56. var img_base = "http://i.imgur.com/NC6G8pH.png",
  57. img_sOn = "http://i.imgur.com/5blvhrD.png",
  58. img_sOff = "http://i.imgur.com/W8N6Ia5.png",
  59. img_zPlus = "http://i.imgur.com/ZMl4njt.png",
  60. img_zMinus = "http://i.imgur.com/Rm7H6ub.png",
  61. img_calcOn = "http://i.imgur.com/9Ecly83.png",
  62. img_calcOff = "http://i.imgur.com/PrcWFF6.png",
  63. img_zMask = "http://i.imgur.com/0VFdVYw.png",
  64. img_zAlt = "http://i.imgur.com/EEha17U.png";
  65.  
  66. // INITIALIZATION //
  67.  
  68. // call functions after tagpro loads
  69. tagpro.ready(function(){
  70.  
  71. // player left while spectating
  72. tagpro.socket.on("playerLeft", function(id){
  73. try{
  74. if(tagpro.spectator) setTimeout(function(){updateZoom();},50);
  75. }
  76. catch(error){console.log("Error", error);}
  77. });
  78.  
  79. setTimeout(function(){
  80. startScript();
  81. },500);
  82. });
  83.  
  84. // call functions with delay
  85. function startScript(){
  86. findCenter();
  87. replaceTR();
  88. zoomDisp();
  89. makeButtons();
  90. checkResize();
  91. onStartCheck();
  92. setInterval(function(){
  93. checkResize();
  94. },500);
  95. }
  96.  
  97. // make buttons
  98. function makeButtons(){
  99. var a;
  100. button_base = createButton("img", img_base, 0, 0);//background
  101. button_active = createButton("img", img_sOn, 16, 16, updateMode);//on/off - color
  102. button_active.style.background = '#bfbfbf';
  103. button_zoomPlus = createButton("img", img_zPlus, 2, 21, zoomChange, "+");//zoom out
  104. button_zoomMinus = createButton("img", img_zMinus, 2, 2, zoomChange, "-");//zoom in
  105. button_zoomBar = createButton("div", "#ffffff", 48, 4);//zoom bar
  106. a = button_zoomBar.style; a.height = "5px"; a.width = "8px";
  107. button_zoomPart = createButton("div", "#ffffff", 48, 4);//zoom bar partial
  108. a = button_zoomPart.style; a.height = "5px"; a.width = "8px"; a.opacity = 0.5;
  109. button_zoomMask = createButton("img", img_zMask, 46, 2, resetZoom);//covers zoom bar
  110. button_calcZIn = createButton("img", img_calcOn, 31, 2, toggleAutoZoom, "in");//calc z in
  111. button_calcZOut = createButton("img", img_calcOn, 16, 2, toggleAutoZoom, "out");//calc z out
  112. button_altZoom = createButton("img", img_zAlt, 60, 4);//zoom bar other
  113. }
  114.  
  115. // make a button from input
  116. function createButton(type, input, Xpos, Ypos, action, arg){
  117. if(!(type == "img" || type == "div")){return;}
  118. var button = document.createElement(type);
  119. if(type == "img") button.src = input;
  120. else if(type == "div") button.style.background = input;
  121. button.ondragstart = function(){return false;};
  122. button.style.position = "absolute";
  123. button.style.right = iconXOffset + Xpos + "px";
  124. button.style.bottom = iconYOffset + Ypos + "px";
  125. if(action !== undefined){
  126. button.onmouseover = function(){button.style.cursor="pointer";};
  127. button.onclick = function(e){
  128. wasCtrlHeld = (e.ctrlKey); wasAltHeld = (e.altKey);
  129. if(arg === undefined){action();}
  130. else{action(arg);}
  131. };
  132. }
  133. document.body.appendChild(button);
  134. return button;
  135. }
  136.  
  137. var dispLoc = new PIXI.Point(0, 0);
  138. function zoomDisp(){
  139. if(showPortData || showTileData){
  140. if(showPortData) dataTextOffset += 70;
  141. if(showTileData) dataTextOffset += 50;
  142. tagpro.ui.sprites.zoomDisplay = tagpro.renderer.prettyText("=3");
  143. tagpro.renderer.layers.ui.addChild(tagpro.ui.sprites.zoomDisplay);
  144. dispLoc.set(tagpro.renderer.canvas.width - dataTextOffset, 10);
  145. tagpro.ui.sprites.zoomDisplay.position = dispLoc;
  146. setInterval(function(){
  147. updateZoomDisp();
  148. }, 100);
  149. }
  150. }
  151.  
  152. // find world midpoint from wall tiles
  153. function findCenter(){
  154. var i = 0, j = 0;
  155. var mapWidth = tagpro.map.length, mapHeight = tagpro.map[0].length;
  156. var earlyRow = 999, lateRow = -1, earlyCol = 999, lateCol = -1;
  157. for (i = 0; i < mapWidth; i++){
  158. var column = tagpro.map[i].slice(0);//get copy not object reference
  159. var firstWall = 0, lastWall = 0;
  160. for (j = 0; j < mapHeight; j++){
  161. column[j] = Math.floor(column[j]);
  162. if(column[j] == 6){
  163. pupList.push({x:i, y:j});
  164. if(!pupGhost[i]) pupGhost[i] = {};
  165. pupGhost[i][j] = tagpro.tiles.draw(tagpro.renderer.layers.midground, 6, {x:i*40, y:j*40});
  166. pupGhost[i][j].visible = false;
  167. }
  168. }
  169. firstWall = column.indexOf(1);
  170. if(firstWall < earlyRow && firstWall != -1) earlyRow = firstWall;
  171. lastWall = column.lastIndexOf(1);
  172. if(lastWall > lateRow) lateRow = lastWall;
  173. if(firstWall != -1){
  174. if(i < earlyCol) earlyCol = i;
  175. if(i > lateCol) lateCol = i;
  176. }
  177. }
  178. var hasWalls = (earlyRow != 999);
  179. worldWidth = hasWalls ? 1 + lateCol - earlyCol : mapWidth;
  180. worldHeight = hasWalls ? 1 + lateRow - earlyRow : mapHeight;
  181. worldXCenter = hasWalls ? earlyCol + (worldWidth / 2) : mapWidth / 2;
  182. worldYCenter = hasWalls ? earlyRow + (worldHeight / 2) : mapHeight / 2;
  183. defaultCenter = [worldXCenter, worldYCenter];
  184. }
  185.  
  186. // set values after startup
  187. function onStartCheck(){
  188. var trodvs = tagpro.renderer.options.disableViewportScaling;
  189. if(!trodvs) trodvs = true;
  190. if(tagpro.spectator){
  191. scriptMode = startCentered ? "center" : "follow";
  192. specLoop = setInterval(function(){
  193. checkSpec();
  194. if(!tagpro.spectator) clearInterval(specLoop);
  195. }, 1000);
  196. }
  197. else scriptMode = "self";
  198. if(startAutoIn){
  199. autoZoomIn = true;
  200. //zoomInLvl = autoZoomInLvl;
  201. }
  202. if(startAutoOut){
  203. autoZoomOut = true;
  204. //zoomOutLvl = autoZoomOutLvl;
  205. }
  206. updateMainMask();
  207. updateAutoMask();
  208. updateZoom();
  209. }
  210.  
  211. // KEY CONTROL //
  212.  
  213. $(document).keydown(function(key){keyUpdate(key, "down");});
  214. $(document).keyup(function(key){keyUpdate(key, "up");});
  215.  
  216. var arrows = [0,0,0,0,false,false];
  217. function keyUpdate(e, state){
  218. e = e || window.event;
  219. var charCode = e.which || e.keyCode,
  220. useAltPan = false;
  221. if(document.getElementById("chat").style.display !== "inline-block"){
  222. // - camera panning - //
  223. if(altPanning && canPan){
  224. if(charCode>=73 && charCode<=76){
  225. var keymap = {73:38, 74:37, 75:40, 76:39};
  226. charCode = keymap[charCode];
  227. useAltPan = true;
  228. }
  229. }
  230. if((tagpro.spectator || useAltPan) && (!tagpro.viewport.followPlayer && canPan)){
  231. arrows[4] = e.shiftKey;
  232. arrows[5] = e.ctrlKey || e.altKey;
  233. if(state == "down"){
  234. if(charCode>=37 && charCode<=40){
  235. arrows[charCode-37] = 1;
  236. }
  237. }else if(state == "up"){
  238. if(charCode>=37 && charCode<=40){
  239. arrows[charCode-37] = 0;
  240. }
  241. }
  242. }
  243. //console.log(charCode +" "+state);
  244. /*
  245. if(state == "down"){//triggered continuously while key is held
  246. //
  247. }
  248. */
  249. if(state == "up"){
  250. if(charCode == 90) updateZoom();
  251. if(charCode == 86){
  252. worldXCenter = defaultCenter[0];
  253. worldYCenter = defaultCenter[1];
  254. }
  255. if(tagpro.spectator){
  256. if(charCode == 67){
  257. if(scriptMode == "flag") forceMode("center");
  258. else syncMode();
  259. }
  260. switch(charCode){
  261. case 107:
  262. case 109:
  263. syncZoom();
  264. break;
  265. case 81:
  266. case 87:
  267. case 65:
  268. case 83:
  269. forceMode("follow");
  270. break;
  271. case 68:
  272. forceMode("flag");
  273. break;
  274. default:
  275. break;
  276. }
  277. }
  278. }
  279. }
  280. }
  281.  
  282. if(canPan){
  283. setInterval(function(){
  284. updateCenter();
  285. }, 50);
  286. }
  287. function updateCenter(){
  288. var speed = panSpeed/20;
  289. if(arrows[4]) speed *= 2;
  290. if(arrows[5]) speed /= 2;
  291. worldXCenter += speed * (arrows[2]-arrows[0]);
  292. worldYCenter += speed * (arrows[3]-arrows[1]);
  293. }
  294.  
  295. function syncZoom(){
  296. if(tagpro.spectator){
  297. var a = Math.round(40/tagpro.zoom);
  298. if(a === 0){a = 1; alert("no u pliss");}
  299. if(tagpro.viewport.followPlayer && !autoZoomIn) zoomInLvl = a;
  300. else if(!tagpro.viewport.followPlayer && !autoZoomOut) zoomOutLvl = a;
  301. tagpro.zoom = 40/a;
  302. updateZoom();
  303. }
  304. }
  305.  
  306. function syncMode(){
  307. setTimeout(function(){
  308. if(tagpro.viewport.followPlayer){
  309. if(scriptMode != "follow"){
  310. scriptMode = "follow";
  311. updateMainMask();
  312. updateZoom();
  313. }
  314. }
  315. else{
  316. if(scriptMode != "center"){
  317. scriptMode = "center";
  318. updateMainMask();
  319. updateZoom();
  320. }
  321. }
  322. },50);
  323. }
  324.  
  325. function forceMode(input){
  326. setTimeout(function(){
  327. scriptMode = input;
  328. updateMainMask();
  329. updateZoom();
  330. },50);
  331. }
  332.  
  333. // ZOOM CONTROLLER //
  334.  
  335. // change zoom level and focus
  336. function updateZoom(){
  337. if(isOn){
  338. var mode = (scriptMode != "flag") ? scriptMode : FC.mode;
  339. if(!tagpro.spectator && !enableZoom){
  340. zoomOutLvl = Math.max(zoomOutLvl, autoZoomOutLvl);
  341. zoomInLvl = Math.max(zoomInLvl, autoZoomInLvl);
  342. mode = "self";
  343. }
  344. if(mode == "center"){
  345. tagpro.viewport.followPlayer = false;
  346. tagpro.zoom = 40 / ((autoZoomOut) ? autoZoomOutLvl : zoomOutLvl);
  347. }
  348. else if(mode == "self" || mode == "follow"){
  349. tagpro.viewport.followPlayer = true;
  350. tagpro.zoom = 40 / ((autoZoomIn) ? autoZoomInLvl : zoomInLvl);
  351. if(scriptMode == "flag"){
  352. var x = Number((FC.red !== 0) ? FC.red : FC.blue);
  353. tagpro.socket.emit((tagpro.players[x].team === 1) ? "redflagcarrier" : "blueflagcarrier");
  354. }
  355. }
  356. }
  357. updateZoomBar();
  358. }
  359.  
  360. // - FLAG MODE - //
  361.  
  362. setInterval(function(){followFlags();}, 100);
  363.  
  364. var FC = {red:0, blue:0, state:"null", mode:"null"};
  365. function followFlags(){
  366. if(tagpro.spectator){
  367. if(isOn && scriptMode == "flag"){
  368. checkFC("both");
  369. //console.log("red-"+FC.red+" blue-"+FC.blue);
  370. if((FC.red !== 0 && FC.blue !== 0) || (FC.red === 0 && FC.blue === 0)){
  371. if(FC.state != "center"){
  372. FC.state = "center";
  373. changeMode("center");
  374. }
  375. }else if(FC.red !== 0 && FC.blue === 0){
  376. if(FC.state != "followRed"){
  377. FC.state = "followRed";
  378. changeMode("followRed");
  379. }
  380. }else if(FC.red === 0 && FC.blue !== 0){
  381. if(FC.state != "followBlue"){
  382. FC.state = "followBlue";
  383. changeMode("followBlue");
  384. }
  385. }
  386. }
  387. }
  388. }
  389.  
  390. var modeCooldown;
  391. function changeMode(input){
  392. var redHasYellow = tagpro.players[FC.red] ? tagpro.players[FC.red].flag == 3 : false,
  393. blueHasYellow = tagpro.players[FC.blue] ? tagpro.players[FC.blue].flag == 3 : false,
  394. isInstant = redHasYellow || blueHasYellow;
  395. clearTimeout(modeCooldown);
  396. modeCooldown = setTimeout(function(){
  397. var x = ((FC.red !== 0 && FC.blue !== 0) || (FC.red === 0 && FC.blue === 0));
  398. if(input == 'center' && x){
  399. FC.mode = 'center';
  400. updateZoom();
  401. }else if((input == 'followRed' || input == 'followBlue') && !x){
  402. FC.mode = 'follow';
  403. updateZoom();
  404. }
  405. },!isInstant ? 1000 : 50);
  406. }
  407.  
  408. function checkFC(input){
  409. if(input == "both"){
  410. checkFC("red");
  411. checkFC("blue");
  412. }else{
  413. if(tagpro.players[FC[input]]){
  414. if(tagpro.players[FC[input]].flag === null){
  415. FC[input] = 0;
  416. findFC();
  417. }
  418. }else{
  419. FC[input] = 0;
  420. findFC();
  421. }
  422. }
  423. }
  424.  
  425. function findFC(){
  426. for(var key in tagpro.players){
  427. if(tagpro.players.hasOwnProperty(key)){
  428. var x = tagpro.players[key];
  429. if(x.flag !== null){
  430. if(x.team == 1) FC.red = key;
  431. else if(x.team == 2) FC.blue = key;
  432. }
  433. }
  434. }
  435. }
  436.  
  437. // ICON UPDATE //
  438.  
  439. // change camera color based off of mode
  440. function updateMainMask(){
  441. var color = '#333333';
  442. if(scriptMode == "center") color = '#e5e500';
  443. else if(scriptMode == "self") color = '#00e500';
  444. else if(scriptMode == "follow") color = '#00e5e5';
  445. else if(scriptMode == "flag"){
  446. color = 'linear-gradient(135deg, #ff6565, #ff6565 25%, #6f91ff 75%, #6f91ff)';
  447. }
  448. button_active.style.background = color;
  449. button_active.src = (isOn) ? img_sOn : img_sOff;
  450. }
  451.  
  452. // show active state of calculated zoom
  453. function updateAutoMask(){
  454. button_calcZIn.src = (autoZoomIn) ? img_calcOn : img_calcOff;
  455. button_calcZOut.src = (autoZoomOut) ? img_calcOn : img_calcOff;
  456. }
  457.  
  458. // update zoom bar
  459. function updateZoomBar(){
  460. var mainDisplay = 0, sideDisplay = 0, mainOffset = 0, sideOffset = 0;
  461. if(scriptMode == "self" || scriptMode == "follow"){
  462. mainDisplay = zoomInLvl;
  463. sideDisplay = zoomOutLvl;
  464. }else{
  465. mainDisplay = zoomOutLvl;
  466. sideDisplay = zoomInLvl;
  467. }
  468. mainOffset = calcZoomBarOffset(mainDisplay);
  469. button_zoomBar.style.height = 5 + mainOffset - (mainOffset % 4) + "px";
  470. button_zoomPart.style.bottom = iconYOffset + 6 + mainOffset + "px";
  471. button_zoomPart.style.opacity = (mainOffset % 4 !== 0) ? 0.5 : 0;
  472. sideOffset = calcZoomBarOffset(sideDisplay);
  473. button_altZoom.style.bottom = iconYOffset + 4 + sideOffset + "px";
  474. }
  475.  
  476. // get offset for zoom indicators
  477. function calcZoomBarOffset(input){
  478. var i, output = 0, loop = true;
  479. if(input < 40){
  480. for(i = 0; loop; i++){
  481. if(i >= 6){
  482. output = 26; loop = false;
  483. }
  484. if(input == 40/zoomArray[i]){
  485. output = i*4; loop = false;
  486. }
  487. else if(40/zoomArray[i] > input && input > 40/zoomArray[i+1]){
  488. output = (i*4)+2; loop = false;
  489. }
  490. }
  491. }
  492. return output;
  493. }
  494.  
  495. // INTERACTIVE BUTTONS //
  496.  
  497. // change script state
  498. function updateMode(){
  499. if(!wasCtrlHeld){
  500. if(tagpro.spectator){
  501. if(scriptMode == "center") scriptMode = (wasAltHeld) ? "flag" : "follow";
  502. else scriptMode = (!wasAltHeld) ? "center" : ((scriptMode != "flag") ? "flag" : "follow" );
  503. }else{
  504. if(scriptMode == "self"){scriptMode = "center";}
  505. else{scriptMode = "self";}
  506. }
  507. }else{isOn = !isOn;}
  508. updateMainMask();
  509. updateZoom();
  510. }
  511.  
  512. // toggle auto zoom calculation
  513. function toggleAutoZoom(input){
  514. if(input == "in") autoZoomIn = !autoZoomIn;
  515. else if(input == "out") autoZoomOut = !autoZoomOut;
  516. updateAutoMask();
  517. updateZoom();
  518. }
  519.  
  520. // increase or decrease zoom level
  521. function zoomChange(input){
  522. var changeZoomIn = false, changeValue = 0;
  523. if(!wasAltHeld) changeZoomIn = false;
  524. else changeZoomIn = true;
  525. if(scriptMode == "self" || scriptMode == "follow") changeZoomIn = !changeZoomIn;
  526. if(!wasCtrlHeld){
  527. var curZoom = 0, i, loop = true, next, prev;
  528. if(!changeZoomIn) curZoom = zoomOutLvl;
  529. else curZoom = zoomInLvl;
  530. for(i = 0; loop; i++){
  531. if(i >= 6) loop = false;
  532. if(curZoom == 40/zoomArray[i]){
  533. next = zoomArray[i+1]; prev = zoomArray[i-1]; loop = false;
  534. }else if(40/zoomArray[i] > curZoom && curZoom > 40/zoomArray[i+1]){
  535. next = zoomArray[i+1]; prev = zoomArray[i]; loop = false;
  536. }
  537. }
  538. if(prev === undefined) prev = zoomArray[6];
  539. if(next === undefined) next = zoomArray[0];
  540. if(input == "+") changeValue = curZoom - (40/next);
  541. else changeValue = (40/prev) - curZoom;
  542. }
  543. else changeValue = 1;
  544. if(input == "+") changeValue *= -1;
  545. var zoomValue = (changeZoomIn) ? zoomInLvl : zoomOutLvl;
  546. zoomValue += changeValue;
  547. zoomValue = Math.max(Math.min(zoomValue, 40), 1);
  548. if(changeZoomIn) zoomInLvl = zoomValue;
  549. else zoomOutLvl = zoomValue;
  550. updateZoom();
  551. }
  552.  
  553. // reset zoom
  554. function resetZoom(){
  555. var changeZoomIn = false;
  556. if(!wasAltHeld) changeZoomIn = false;
  557. else changeZoomIn = true;
  558. if(scriptMode == "self" || scriptMode == "follow") changeZoomIn = !changeZoomIn;
  559. if(!changeZoomIn){
  560. if(zoomOutLvl != 40/zoomArray[0]) zoomOutLvl = 40/zoomArray[0];
  561. else zoomOutLvl = 40/zoomArray[4];
  562. }else{
  563. if(zoomInLvl != 40/zoomArray[0]) zoomInLvl = 40/zoomArray[0];
  564. else zoomInLvl = 40/zoomArray[4];
  565. }
  566. updateZoom();
  567. }
  568.  
  569. // AUTO UPDATE //
  570.  
  571. // resize detector
  572. var vpHighCache = 0;
  573. function checkResize(){
  574. var vpHighCheck = tagpro.renderer.canvas.height;
  575. if(vpHighCheck != vpHighCache){
  576. vpHighCache = vpHighCheck;
  577. calcAutoZoomIn();
  578. calcAutoZoomOut();
  579. updateZoom();
  580. updatePositions();
  581. }
  582. }
  583.  
  584. setInterval(function(){updatePupSight();}, 100);
  585. function updatePupSight(){
  586. for(var i=0; i < pupList.length; i++){
  587. var canSee = false, seeX, seeY;
  588. if(showPups || tagpro.spectator) canSee = true;
  589. else{
  590. seeX = Math.abs((pupList[i].x*40) - tagpro.players[tagpro.playerId].x) < 660;
  591. seeY = Math.abs((pupList[i].y*40) - tagpro.players[tagpro.playerId].y) < 420;
  592. canSee = (seeX && seeY);
  593. }
  594. tagpro.renderer.dynamicSprites[pupList[i].x][pupList[i].y].visible = canSee ? true : false;
  595. pupGhost[pupList[i].x][pupList[i].y].visible = canSee ? false : true;
  596. }
  597. }
  598.  
  599. function updatePositions(){
  600. if(showTileData || showPortData){
  601. dispLoc.set(tagpro.renderer.canvas.width - dataTextOffset, 10);
  602. tagpro.ui.sprites.zoomDisplay.position = dispLoc;
  603. }
  604. }
  605.  
  606. // show zoom level
  607. function updateZoomDisp(){
  608. var x = "";
  609. if(showPortData) x += tagpro.renderer.canvas.width + " X " + tagpro.renderer.canvas.height;
  610. if(showPortData && showTileData) x += " - ";
  611. if(showTileData) x += Math.round(400/tagpro.zoom) / 10 + " px";
  612. tagpro.ui.sprites.zoomDisplay.setText(x);
  613. }
  614.  
  615. // join from spectator detector
  616. function checkSpec(){
  617. if(!tagpro.spectator){
  618. scriptMode = "self";
  619. updateMainMask();
  620. updateZoom();
  621. }
  622. }
  623.  
  624. // CALCULATE ZOOM LEVELS //
  625.  
  626. // calculate auto zoomin value
  627. function calcAutoZoomIn(){
  628. var vpHR = tagpro.renderer.canvas.height / 800;
  629. autoZoomInLvl = Math.max(Math.round(40 * vpHR), 1);
  630. }
  631.  
  632. // calculate auto zoomout value
  633. function calcAutoZoomOut(){
  634. var wideRatio = ((worldWidth * 40) - 60) / tagpro.renderer.canvas.width,
  635. highRatio = ((worldHeight * 40) - 60) / tagpro.renderer.canvas.height,
  636. zoomForWidth = Math.floor(40 / wideRatio),
  637. zoomForheight = Math.floor(40 / highRatio);
  638. autoZoomOutLvl = Math.max(Math.min(zoomForWidth, zoomForheight, 40), 1);
  639. }
  640.  
  641. // REPLACE TAGPRO FUNCTIONS //
  642. function replaceTR(){
  643.  
  644. var tr = tagpro.renderer;
  645.  
  646. tr.centerCameraPosition = function (){
  647. tr.centerContainerToPoint(worldXCenter*tagpro.TILE_SIZE, worldYCenter*tagpro.TILE_SIZE);
  648. };
  649.  
  650. tr.updateCameraZoom = function(){
  651. var resizeScaleFactor = tr.options.disableViewportScaling ? 1 : this.vpHeight / tr.canvas_height;
  652. tagpro.zoom = tagpro.zoom + tagpro.zooming > 0.1 ? tagpro.zoom + tagpro.zooming : tagpro.zoom;
  653. if(boundToLimit) tagpro.zoom = Math.max(tagpro.zoom, 1);
  654. var scale = new PIXI.Point(1.0 / tagpro.zoom * resizeScaleFactor, 1.0 / tagpro.zoom * resizeScaleFactor);
  655. var inverseScale = new PIXI.Point(tagpro.zoom, tagpro.zoom);
  656. tr.gameContainer.scale = scale;
  657. for(var player in tagpro.players){
  658. if(!tagpro.players.hasOwnProperty(player)) continue;
  659. var p = tagpro.players[player];
  660. var info = p.sprites.info;
  661. info.x = 19 - (tagpro.zoom * 19);
  662. info.scale = inverseScale;
  663. if(p.sprites){
  664. var visibility = tagpro.zoom < tr.zoomThreshold;
  665. if(p.sprites.flair) p.sprites.flair.visible = visibility;
  666. if(p.sprites.degrees) p.sprites.degrees.visible = visibility;
  667. }
  668. }
  669. };
  670. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement