Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (() => {
- var url = 'https://eterna-phylo.firebaseapp.com';
- var applet = document.getElementById('maingame');
- if (applet === null)
- return "You must run this script as a booster from inside the game";
- var phyloApp = window.open(url, 'phylo');
- window.addEventListener("message", message_receive, false);
- let commands = [];
- function message_receive(e) {
- //global_timer.setHours(global_timer.getHours() + 1);
- console.log(e);
- if (e.origin !== url) return; // ignore other keys
- var message = e.data;
- if (!message) return; // ignore empty msg or msg reset
- commands.push(message);
- setTimeout(runCommands, 1);
- }
- function runCommands() {
- let seq = applet.get_sequence_string();
- while (commands.length > 0)
- seq = runCommand(commands.shift(), seq);
- console.log(seq);
- applet.set_sequence_string(seq);
- }
- function runCommand(data, seq) {
- let command = data.command;
- console.log(command);
- switch (command) {
- case 'update-lane':
- return updateLane(data, seq);
- case 'move-lane':
- return moveLane(data, seq);
- case 'set-all-lanes':
- return setAllLanes(data, seq);
- default:
- console.error("Unknown command " + command + " in the phylo booster");
- return seq;
- }
- }
- function setAllLanes(params, currentSeq) {
- let lanes = params.lanes;
- sortByStartIndex(lanes);
- let seq = '';
- console.log('in');
- for (let i = 0, index = 0; i < lanes.length; i++) {
- console.log(lanes[i]);
- index = lanes[i].startIndex;
- if (seq.length > index)
- alert('2 lanes are intersecting at nuc ' + (index + 1) + '!');
- while (seq.length < index)
- seq += 'A';
- seq += lanes[i].reversed ? lanes[i].newSeq.split('').reverse().join('') : lanes[i].newSeq;
- }
- while (seq.length < currentSeq.length)
- seq += 'A';
- return seq;
- }
- function sortByStartIndex(lanes) {
- for (let i = 0; i < lanes.length - 1; i++)
- for (let j = 0; j < lanes.length - i - 1; j++)
- if (lanes[j].startIndex > lanes[j + 1].startIndex) {
- const aux = lanes[j];
- lanes[j] = lanes[j + 1];
- lanes[j + 1] = aux;
- }
- }
- function updateLane(params, seq) {
- //bugged!
- console.log(params);
- let removeSize = params.oldLength - params.newSeq.length;
- console.log(removeSize);
- let removeFill = '';
- for (let i = 0; i < removeSize; i++)
- removeFill += 'A';
- console.log(seq.substring(0, params.startIndex) + '+' + params.newSeq + '+' + removeFill + '+' + seq.substring(params.startIndex + Math.max(params.oldLength, params.newSeq.length) + 1));
- seq = seq.substring(0, params.startIndex) + params.newSeq + removeFill + seq.substring(params.startIndex + Math.max(params.oldLength, params.newSeq.length));
- console.log(seq);
- return seq;
- }
- function moveLane(params, seq) {
- let fillLength = Math.abs(params.oldIndex - params.newIndex);
- let fillString = '';
- for (let i = 0; i < fillLength; i++)
- fillString += 'A';
- if (params.newIndex > params.oldIndex)
- return seq.substring(0, params.oldIndex) + fillString + params.seq + seq.substring(params.newIndex + params.seq.fillLength);
- else
- return seq.substring(0, newIndex) + params.seq + fillString + seq.substring(params.oldIndex + params.seq.fillLength);
- }
- alert('DO NOT have phylo and eterna as different tabs in the browser, but rather have them in completely seperate WINDOWS');
- return "true";
- })()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement