Advertisement
Guest User

Untitled

a guest
Jun 6th, 2018
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (() => {
  2. var url = 'https://eterna-phylo.firebaseapp.com';
  3. var applet = document.getElementById('maingame');
  4. if (applet === null)
  5. return "You must run this script as a booster from inside the game";
  6. var phyloApp = window.open(url, 'phylo');
  7. window.addEventListener("message", message_receive, false);
  8. let commands = [];
  9. function message_receive(e) {
  10. //global_timer.setHours(global_timer.getHours() + 1);
  11. console.log(e);
  12.  
  13. if (e.origin !== url) return; // ignore other keys
  14. var message = e.data;
  15.  
  16. if (!message) return; // ignore empty msg or msg reset
  17.  
  18. commands.push(message);
  19. setTimeout(runCommands, 1);
  20. }
  21. function runCommands() {
  22. let seq = applet.get_sequence_string();
  23. while (commands.length > 0)
  24.     seq = runCommand(commands.shift(), seq);
  25.  
  26. console.log(seq);
  27. applet.set_sequence_string(seq);
  28. }
  29. function runCommand(data, seq) {
  30. let command = data.command;
  31. console.log(command);
  32. switch (command) {
  33.     case 'update-lane':
  34.     return updateLane(data, seq);
  35.     case 'move-lane':
  36.     return moveLane(data, seq);
  37.     case 'set-all-lanes':
  38.     return setAllLanes(data, seq);
  39.     default:
  40.     console.error("Unknown command " + command + " in the phylo booster");
  41.     return seq;
  42. }
  43. }
  44. function setAllLanes(params, currentSeq) {
  45. let lanes = params.lanes;
  46. sortByStartIndex(lanes);
  47. let seq = '';
  48. console.log('in');
  49. for (let i = 0, index = 0; i < lanes.length; i++) {
  50.     console.log(lanes[i]);
  51.     index = lanes[i].startIndex;
  52.     if (seq.length > index)
  53.     alert('2 lanes are intersecting at nuc ' + (index + 1) + '!');
  54.     while (seq.length < index)
  55.     seq += 'A';
  56.     seq += lanes[i].reversed ? lanes[i].newSeq.split('').reverse().join('') : lanes[i].newSeq;
  57. }
  58. while (seq.length < currentSeq.length)
  59.     seq += 'A';
  60. return seq;
  61. }
  62. function sortByStartIndex(lanes) {
  63. for (let i = 0; i < lanes.length - 1; i++)
  64.     for (let j = 0; j < lanes.length - i - 1; j++)
  65.     if (lanes[j].startIndex > lanes[j + 1].startIndex) {
  66.         const aux = lanes[j];
  67.         lanes[j] = lanes[j + 1];
  68.         lanes[j + 1] = aux;
  69.     }
  70. }
  71. function updateLane(params, seq) {
  72. //bugged!
  73. console.log(params);
  74. let removeSize = params.oldLength - params.newSeq.length;
  75. console.log(removeSize);
  76. let removeFill = '';
  77. for (let i = 0; i < removeSize; i++)
  78.     removeFill += 'A';
  79. console.log(seq.substring(0, params.startIndex) + '+' + params.newSeq + '+' + removeFill + '+' + seq.substring(params.startIndex + Math.max(params.oldLength, params.newSeq.length) + 1));
  80.  
  81. seq = seq.substring(0, params.startIndex) + params.newSeq + removeFill + seq.substring(params.startIndex + Math.max(params.oldLength, params.newSeq.length));
  82. console.log(seq);
  83. return seq;
  84. }
  85. function moveLane(params, seq) {
  86. let fillLength = Math.abs(params.oldIndex - params.newIndex);
  87. let fillString = '';
  88. for (let i = 0; i < fillLength; i++)
  89.     fillString += 'A';
  90. if (params.newIndex > params.oldIndex)
  91.     return seq.substring(0, params.oldIndex) + fillString + params.seq + seq.substring(params.newIndex + params.seq.fillLength);
  92. else
  93.     return seq.substring(0, newIndex) + params.seq + fillString + seq.substring(params.oldIndex + params.seq.fillLength);
  94. }
  95. alert('DO NOT have phylo and eterna as different tabs in the browser, but rather have them in completely seperate WINDOWS');
  96. return "true";
  97. })()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement