您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
sdfsdf
// ==UserScript== // @name GLB Canvas Replay Conversion // @namespace pbr/canvas // @include http://goallineblitz.com/game/replay.pl?game_id=*&pbp_id=* // @copyright 2012, pabst // @license (CC) Attribution Share Alike; http://creativecommons.org/licenses/by-sa/3.0/ // @version 12.11.30 // @description sdfsdf // ==/UserScript== /* * * pabst did this 12/11/27+ * * */ unsafeWindow.pause(); document.getElementById("offense_container").style.visibility = "hidden"; document.getElementById("defense_container").style.visibility = "hidden"; document.getElementById("offense_container").style.display = "none"; document.getElementById("defense_container").style.display = "none"; var play_data = null; var imageData = []; if (!window.requestAnimationFrame) { requestAnimFrame = (function () { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(callback, element) { console.log("no request animation frame!!"); window.setTimeout(callback, 1000 / 20); }; }) (); }; window.setTimeout( function() { if (unsafeWindow.defaultFrameSpeed != 100) { console.log("replays must be set to 10fps for this script to work : "+unsafeWindow.defaultFrameSpeed); unsafeWindow.play(); } else { main(); } } , 100); function main() { var container = document.getElementById("replay_container") container.style.height = "500px"; container.style.width = "520px"; var area = document.getElementById("replay_area"); container.removeChild(area); play_data = fixFrames(); fixButtons(); initBackground(); initForeground(); initOffense(); initDefense(); initReplayInfo(); drawFrame(0,0); setTimeout(function() { isPlaying = true; document.getElementById("pause_button").visibility = "visible"; document.getElementById("play_button").visibility = "hidden"; render(); }, 2500); } function initBackground() { var canvas = document.createElement("canvas"); canvas.style.position = 'absolute'; canvas.setAttribute("id","background"); canvas.setAttribute("width","520px"); canvas.setAttribute("height","500px"); var container = document.getElementById("replay_container") container.appendChild(canvas); var context = canvas.getContext("2d"); context.save(); } function initForeground() { var canvas = document.createElement("canvas"); canvas.style.position = 'absolute'; canvas.setAttribute("id","foreground"); canvas.setAttribute("width","520px"); canvas.setAttribute("height","500px"); var container = document.getElementById("replay_container") container.appendChild(canvas); var context = canvas.getContext("2d"); context.save(); } function initOffense() { var canvas = document.createElement("canvas"); canvas.style.position = 'absolute'; canvas.style.top = "20px"; canvas.setAttribute("id","offense"); canvas.setAttribute("width","20px"); canvas.setAttribute("height","460px"); var container = document.getElementById("replay_container") container.appendChild(canvas); canvas.addEventListener("click", offenseClicked, false); } function offenseClicked() { renderOffenseLineup(); } function initDefense() { var canvas = document.createElement("canvas"); canvas.style.position = 'absolute'; canvas.style.left = "500px"; canvas.style.top = "20px"; canvas.setAttribute("id","defense"); canvas.setAttribute("width","20px"); canvas.setAttribute("height","460px"); var container = document.getElementById("replay_container") container.appendChild(canvas); canvas.addEventListener("click", defenseClicked, false); } function defenseClicked() { renderDefenseLineup(); } function initReplayInfo() { var canvas = document.createElement("canvas"); canvas.style.position = 'absolute'; canvas.setAttribute("id","replayInfo"); canvas.setAttribute("width","520px"); canvas.setAttribute("height","20px"); var container = document.getElementById("replay_container") container.appendChild(canvas); var canvas = document.createElement("canvas"); canvas.style.position = 'absolute'; canvas.style.top = "480px"; canvas.setAttribute("id","playResults"); canvas.setAttribute("width","520px"); canvas.setAttribute("height","20px"); var container = document.getElementById("replay_container") container.appendChild(canvas); } function getTeamBColor(id) { var team = unsafeWindow.ptid[id]; var position = unsafeWindow.players[id].position; var fcolor = unsafeWindow.home_color2+"_border_home"; var bcolor = unsafeWindow.home_color1; if (unsafeWindow.home != team) { fcolor = unsafeWindow.away_color2+"_border"; bcolor = unsafeWindow.away_color1; } bcolor = bcolor.replace("mid_","medium"); bcolor = bcolor.replace("_",""); return bcolor; } function getTeamFColor(bcolor) { var canvas = document.createElement("canvas"); var context = canvas.getContext("2d"); context.strokeStyle = bcolor; var color = context.strokeStyle.toString().slice(1); var r = parseInt(color.slice(0,2), 16); var g = parseInt(color.slice(2,4), 16); var b = parseInt(color.slice(4,6), 16); if ((r+g+b)/3 > 128) { return "black"; } else { return "white"; } } function renderReplayInfo() { if (imageData["replayInfo"] == null) { var canvas = document.createElement("canvas"); canvas.setAttribute("width","520px"); canvas.setAttribute("height","20px"); var context = canvas.getContext("2d"); var gradient = context.createLinearGradient(0,0,0,20); gradient.addColorStop(0,"rgb(100,100,100)"); gradient.addColorStop(1,"rgb(40,40,40)"); context.lineWidth = 2; context.fillStyle = gradient; context.fillRect(0,0,520,20); context.font = "bold 18px sans-serif"; context.fillStyle = "#ffcc00"; var info = document.getElementsByTagName("h1")[0].textContent; var length = context.measureText(info.toString()); context.fillText(info.toString(), 260-length.width/2,16); var p = play_data[0][1]; var id = p.id; var bcolor = getTeamBColor(id); var fcolor = getTeamFColor(bcolor); context.lineWidth = 2; context.fillStyle = bcolor; context.strokeStyle = fcolor; context.beginPath(); context.moveTo(0,0); context.lineTo(40, 0); context.lineTo(60,20); context.lineTo(0,20); context.lineTo(0,0); context.closePath(); context.fill(); context.stroke(); context.font="bold 16px sans-serif"; var score = document.getElementById("off_score").textContent; var length = context.measureText(score.toString()); context.fillStyle = fcolor; context.fillText(score.toString(), 20-length.width/2,16); var p = play_data[0][12]; var id = p.id; var bcolor = getTeamBColor(id); var fcolor = getTeamFColor(bcolor); context.lineWidth = 2; context.fillStyle = bcolor; context.strokeStyle = fcolor; context.beginPath(); context.moveTo(520,0); context.lineTo(480, 0); context.lineTo(460,20); context.lineTo(520,20); context.lineTo(520,0); context.closePath(); context.fill(); context.stroke(); context.font="bold 16px sans-serif"; var score = document.getElementById("def_score").textContent; var length = context.measureText(score.toString()); context.fillStyle = fcolor; context.fillText(score.toString(), 500-length.width/2,16); imageData["replayInfo"] = canvas; } var canvas = document.getElementById("replayInfo"); var context = canvas.getContext("2d"); context.drawImage(imageData["replayInfo"],0,0); if (imageData["playResults"] == null) { var canvas = document.createElement("canvas"); canvas.setAttribute("width","520px"); canvas.setAttribute("height","20px"); var context = canvas.getContext("2d"); var gradient = context.createLinearGradient(0,0,0,20); gradient.addColorStop(0,"rgb(100,100,100)"); gradient.addColorStop(1,"rgb(40,40,40)"); context.lineWidth = 2; context.fillStyle = gradient; context.fillRect(0,0,520,20); var size = 14; do { context.font = "bold "+size+"px sans-serif"; context.fillStyle = "#ffcc00"; var info = document.getElementById("outcome_content").textContent; var length = context.measureText(info.toString()); size--; } while (length.width > 520); context.fillText(info.toString(), 260-length.width/2,14); imageData["playResults"] = canvas; } var canvas = document.getElementById("playResults"); var context = canvas.getContext("2d"); context.drawImage(imageData["playResults"],0,0); } function renderOffenseBar(frame, pct, loc) { if (imageData["offenseBar"] == null) { var canvas = document.createElement("canvas"); canvas.setAttribute("width","20px"); canvas.setAttribute("height","480px"); var context = canvas.getContext("2d"); var p = play_data[0][1]; var id = p.id; var bcolor = getTeamBColor(id); var fcolor = getTeamFColor(bcolor); context.lineWidth = 3; context.fillStyle = bcolor; context.strokeStyle = fcolor; context.fillRect(0,0, 20,460); context.strokeRect(0,0, 20,460); var teamName = document.getElementsByClassName("secondary_container")[0].textContent; context.fillStyle = fcolor; context.lineWidth=1; context.font="bold 14px sans-serif"; context.save(); context.rotate(Math.PI/2); context.fillText(teamName, 50,-6); context.restore(); imageData["offenseBar"] = canvas; } var canvas = document.getElementById("offense"); var context = canvas.getContext("2d"); context.drawImage(imageData["offenseBar"],0,0); } var offenseLineupVisible = false; function renderOffenseLineup(frame, pct, loc) { offenseLineupVisible = !offenseLineupVisible; if (offenseLineupVisible == true) { var canvas = document.createElement("canvas"); canvas.setAttribute("id","offenseLineup"); canvas.setAttribute("width","200px"); canvas.setAttribute("height","480px"); canvas.style.position = "absolute"; canvas.style.left = "20px"; var context = canvas.getContext("2d"); var id = unsafeWindow.play_data[0][1].id; var team = unsafeWindow.ptid[id]; var bcolor = getTeamBColor(id); var fcolor = getTeamFColor(bcolor); context.font="14px sans-serif"; context.lineWidth = 2; context.fillStyle = bcolor; context.strokeStyle = fcolor; context.fillRect(0,130, 200,500); context.strokeRect(0,130, 200,500); for (var i=1; i<12; i++) { var id = unsafeWindow.play_data[0][i].id; var position = unsafeWindow.players[id].position; var name = unsafeWindow.players[id].name; var x = i; var y = 216; context.fillStyle = bcolor context.fillRect(0,(x-1)*24+y, 200,x*24+y); context.strokeRect(0,(x-1)*24+y, 200,x*24+y); context.fillStyle = fcolor; context.fillText(name, 25, x*24-10+y+3); context.drawImage(imageData[id], 5, (x-1)*24+y+4); } var image = new Image(); image.src = "http://goallineblitz.com/game/team_pic.pl?team_id="+team; var imgcanvas = document.createElement("canvas"); var imgcontext = imgcanvas.getContext("2d"); imgcontext.scale(75/image.width, 75/image.height); imgcontext.drawImage(image, 0, 0); context.drawImage(imgcanvas, 5,135); context.font = "64px sans-serif"; context.fillColor = fcolor; var score = document.getElementById("off_score").textContent; var length = context.measureText(score.toString()); context.fillText(score.toString(), 138-length.width/2,200); var container = document.getElementById("replay_container"); container.appendChild(canvas); } else { var lineup = document.getElementById("offenseLineup"); lineup.parentNode.removeChild(lineup); } } function renderDefenseBar(frame, pct, loc) { if (imageData["defenseBar"] == null) { var canvas = document.createElement("canvas"); canvas.setAttribute("width","20px"); canvas.setAttribute("height","460px"); var context = canvas.getContext("2d"); var p = play_data[0][12]; var id = p.id; var bcolor = getTeamBColor(id); var fcolor = getTeamFColor(bcolor); context.lineWidth = 3; context.fillStyle = bcolor; context.strokeStyle = fcolor; context.fillRect(0,0, 20,460); context.strokeRect(0,0, 20,460); var teamName = document.getElementsByClassName("secondary_container")[1].textContent; context.fillStyle = fcolor; context.lineWidth=1; context.font="bold 14px sans-serif"; context.save(); context.rotate(Math.PI/2); context.fillText(teamName, 50,-6); context.restore(); imageData["defenseBar"] = canvas; } var canvas = document.getElementById("defense"); var context = canvas.getContext("2d"); context.drawImage(imageData["defenseBar"],0,0); } var defenseLineupVisible = false; function renderDefenseLineup(frame, pct, loc) { defenseLineupVisible = !defenseLineupVisible; if (defenseLineupVisible == true) { var canvas = document.createElement("canvas"); canvas.setAttribute("id","defenseLineup"); canvas.setAttribute("width","200px"); canvas.setAttribute("height","480px"); canvas.style.position = "absolute"; canvas.style.left = "300px"; var context = canvas.getContext("2d"); var id = unsafeWindow.play_data[0][13].id; var team = unsafeWindow.ptid[id]; var bcolor = getTeamBColor(id); var fcolor = getTeamFColor(bcolor); context.font="14px sans-serif"; context.lineWidth = 2; context.fillStyle = bcolor; context.strokeStyle = fcolor; context.fillRect(0,130, 200,460); context.strokeRect(0,130, 200,460); for (var i=12; i<23; i++) { var id = unsafeWindow.play_data[0][i].id; var position = unsafeWindow.players[id].position; var name = unsafeWindow.players[id].name; var x = i-11; var y = 216; context.fillStyle = bcolor; context.fillRect(0,(x-1)*24+y, 200,x*24+y); context.strokeRect(0,(x-1)*24+y, 200,x*24+y); context.fillStyle = fcolor; context.fillText(name, 25, x*24-10+y+3); context.drawImage(imageData[id], 5, (x-1)*24+y+4); } var image = new Image(); image.src = "http://goallineblitz.com/game/team_pic.pl?team_id="+team; var imgcanvas = document.createElement("canvas"); var imgcontext = imgcanvas.getContext("2d"); imgcontext.scale(75/image.width, 75/image.height); imgcontext.drawImage(image, 0, 0); context.drawImage(imgcanvas, 5,135); context.font = "64px sans-serif"; context.fillColor = fcolor; var score = document.getElementById("def_score").textContent; var length = context.measureText(score.toString()); context.fillText(score.toString(), 138-(length.width/2),200); var container = document.getElementById("replay_container"); container.appendChild(canvas); } else { var lineup = document.getElementById("defenseLineup"); lineup.parentNode.removeChild(lineup); } } function drawFrame(frame, pct) { var loc = renderField(frame, pct); var canvas = document.getElementById("foreground"); var context = canvas.getContext("2d"); context.restore(); context.save(); context.clearRect(20, 0, 500, 1160); renderFirstDown(frame, pct, loc); renderVisionCone(frame, pct, loc); renderPlayers(frame, pct, loc); renderBall(frame, pct, loc); renderIcons(frame, pct, loc); renderOffenseBar(frame, pct, loc); renderDefenseBar(frame, pct, loc); renderReplayInfo(); } var initialTime = null; var currentTime = null; var isPlaying = false; var frameMultiplier = 1; function render() { if (isPlaying == false) return; currentTime = new Date(); if (initialTime == null) { initialTime = currentTime; } var diff = currentTime - initialTime; var frame = diff/100 * frameMultiplier; pct = frame - Math.floor(frame); frame = Math.floor(frame) % play_data.length; try { drawFrame(frame, pct); lastTime = currentTime; var scrubber = 480/play_data.length*(frame+pct); document.getElementById("scrubber_handle").style.left = scrubber+"px"; } catch (e) { window.console.log(e); } measureFps(); if (frame >= play_data.length-1) { initialTime = null; setTimeout(function() { drawFrame(0,0); setTimeout(function() { render(); }, 2500); }, 2500); } else { requestAnimFrame(render); } } function renderIcons(frame, pct, loc) { var canvas = document.getElementById("foreground"); var context = canvas.getContext("2d"); for (var p=1; p<play_data[frame].length; p++) { var left = play_data[frame]; if (left[p].icon != null) { var right = play_data[Math.min(frame+1, play_data.length-1)]; var xdiff = right[p].x - left[p].x; var ydiff = right[p].y - left[p].y; var x = left[p].x + xdiff * pct; var y = left[p].y + ydiff * pct + loc - 20; var image = new Image(); image.src = "/images/replay_icons/"+left[p].icon+".gif"; context.drawImage(image, x-14, y-16); } } } function renderVisionCone(frame, pct, loc) { var p = play_data[frame][0]; if ((p.tx != null) && (p.ty != null)) { var left = play_data[frame][0]; var right = play_data[Math.min(frame+1, play_data.length-1)][0]; var xdiff = right.x - left.x; var ydiff = right.y - left.y; var ballx = left.x + xdiff * pct - 16; var bally = left.y + ydiff * pct + loc; var xdiff = right.tx - left.tx; var ydiff = right.ty - left.ty; var targetx = left.tx + xdiff * pct - 16; var targety = left.ty + ydiff * pct + loc - 20; var canvas = document.getElementById("foreground"); var context = canvas.getContext("2d"); context.drawImage(imageData["target"], targetx+11, targety-5); /* var gradient = context.createRadialGradient(250,900,0,300,950,1); gradient.addColorStop(0,"rgba(200,200,200,1)"); gradient.addColorStop(1,"rgba(200,200,200,0.0)"); context.beginPath(); context.moveTo(250,900); context.lineTo(250,950); context.lineTo(300,900); context.lineTo(250,900); context.closePath(); context.fillStyle = gradient; context.strokeStyle = gradient; context.fill(); context.stroke(); */ } } function renderFirstDown(frame, pct, loc) { for (var i=1; i<play_data[0].length; i++) { var p = play_data[0][i]; if ((unsafeWindow.players[p.id].position == "C") || (unsafeWindow.players[p.id].position == "LS")) { var y = p.y+loc; var canvas = document.getElementById("foreground"); var context = canvas.getContext("2d"); var dir = document.getElementById("time_ytg"); var dirText = dir.innerHTML; var togo = ""; if (dirText.indexOf(" inches ") != -1) { togo = 0.3; } else { if (dirText.indexOf(" G on ") == -1) { var p2 = dirText.indexOf(" & ")+7; var p1 = dirText.indexOf(" on "); togo = parseFloat(dirText.substring(p2,p1)); if (dirText.substring(p2-10,p2-9) == "4") { context.strokeStyle = "rgb(255,0,0)"; } else { context.strokeStyle = "rgb(255,255,0)"; } } } var dy = togo * 9; if (parseFloat(play_data[0][1].y) > parseFloat(play_data[0][0].y)) { dy = dy * -1; } context.beginPath(); context.moveTo(20,y-dy); context.lineTo(500,y-dy); context.stroke(); context.lineWidth = 2; context.beginPath(); context.strokeStyle = "rgb(0,0,255)"; context.moveTo(20,y); context.lineTo(500,y); context.stroke(); break; } } } function renderField(frame, pct) { var left = play_data[frame]; var right = play_data[Math.min(frame+1, play_data.length-1)]; var ydiff = right[0].y - left[0].y; var y = left[0].y + ydiff * pct; var location = -1 * y + 250; location = Math.max(location, -660); location = Math.min(location, 0); var canvasbg = document.getElementById("background"); var contextbg = canvasbg.getContext("2d"); contextbg.drawImage(imageData["field"], 20, 0-location, 480, 500, 20, 0, 480, 500); return location; } function renderPlayers(frame, pct, loc) { /* for (var f=0; f<play_data.length; f++) { for (var p=0; p<play_data[f].length; p++) { if (play_data[f][p].icon != null) { console.log(f+") "+p+" -- "+play_data[f][p].icon); } } } */ var canvas = document.getElementById("foreground"); var context = canvas.getContext("2d"); for (var p=1; p<play_data[frame].length; p++) { var left = play_data[frame]; var right = play_data[Math.min(frame+1, play_data.length-1)]; var xdiff = right[p].x - left[p].x; var ydiff = right[p].y - left[p].y; var x = left[p].x + xdiff * pct; var y = left[p].y + ydiff * pct + loc - 20; if (imageData[left[p].id] != null) { context.drawImage(imageData[left[p].id], x, y); } } } function renderBall(frame, pct, loc) { var left = play_data[frame]; var right = play_data[Math.min(frame+1, play_data.length-1)]; var xdiff = right[0].x - left[0].x; var ydiff = right[0].y - left[0].y; var x = left[0].x + xdiff * pct + 3; var y = left[0].y + ydiff * pct + loc - 20; var canvasfg = document.getElementById("foreground"); var contextfg = canvasfg.getContext("2d"); if ((left[0].z < 5) || (right[0].z < 5)) { contextfg.drawImage(imageData["ball"], x, y); } else { if (imageData["rotated-ball"] == null) { var mul = 1; if (left[0].x < right[0].x) { mul = 1; } else { mul = -1; } if (left[0].y < right[0].y) { mul = mul * -1; } else { mul = mul * 1; } var rotation = mul * Math.atan(Math.abs(left[0].x-right[0].x)/Math.abs(left[0].y-right[0].y)); rotation += 2*Math.PI; var canvas = document.createElement("canvas"); canvas.setAttribute("width",16); canvas.setAttribute("height",16); var context = canvas.getContext("2d"); context.save(); context.translate(8, 8); context.rotate(rotation); context.drawImage(imageData["passing-ball"], -8, -8); context.restore(); imageData["rotated-ball"] = canvas; } contextfg.drawImage(imageData["rotated-ball"], x, y); //fix me!! } } function getFromCanvas(src, w, h) { var image = new Image(); image.src = src; var canvas = document.createElement("canvas"); canvas.setAttribute("width",w); canvas.setAttribute("height",h); var context = canvas.getContext("2d"); context.drawImage(image,0,0); return canvas; } function prepareImages() { imageData["ball"] = getFromCanvas("http://goallineblitz.com/images/ball.gif", 16, 16); imageData["passing-ball"] = getFromCanvas("http://goallineblitz.com/images/passing-ball.gif", 16, 16); //fix me!! imageData["kicking-ball"] = getFromCanvas("http://goallineblitz.com/images/kicking-ball.gif", 16, 16); //fix me!! imageData["field"] = getFromCanvas("http://goallineblitz.com/images/game/fields/"+unsafeWindow.field+".jpg", 520, 1160); var canvas = document.createElement("canvas"); canvas.setAttribute("width","26"); canvas.setAttribute("height","26"); var context = canvas.getContext("2d"); context.beginPath(); context.strokeStyle = "rgb(255,255,255)"; context.lineWidth = 3; context.moveTo(13,0); context.lineTo(13,26); context.moveTo(0,13); context.lineTo(26,13); context.stroke(); context.beginPath(); context.strokeStyle = "rgb(255,0,0)"; context.lineWidth = 2; context.arc(13, 13, 10, 0, 2*Math.PI, false); context.closePath(); context.stroke(); imageData["target"] = canvas; canvas = null; var done = []; for (var i=1; i<unsafeWindow.play_data[0].length; i++) { var p = unsafeWindow.play_data[0][i]; var id = p.id; if (imageData[id] != null) continue; var team = unsafeWindow.ptid[id]; var position = unsafeWindow.players[id].position; var fcolor = unsafeWindow.home_color2+"_border_home"; var bcolor = unsafeWindow.home_color1; if (unsafeWindow.home != team) { fcolor = unsafeWindow.away_color2+"_border"; bcolor = unsafeWindow.away_color1; } var fimage = new Image(); fimage.src = "http://goallineblitz.com/images/dots/"+fcolor+"/"+position+".gif"; var bimage = new Image(); bimage.src = "http://goallineblitz.com/images/dots/"+bcolor+".gif"; var canvas = document.createElement("canvas"); canvas.setAttribute("width","16"); canvas.setAttribute("height","16"); var context = canvas.getContext("2d"); if ((bimage.complete == false) || (fimage.complete == false)) { if (bimage.complete == false) { done.push(fimage.src); } if (fimage.complete == false) { done.push(fimage.src); } } else { context.drawImage(bimage,0,0); context.drawImage(fimage,0,0); imageData[id] = canvas; } } if (done.length > 0) { console.log("noooooo greasemonkey, no one would ever want to use worker threads..."); console.log(done); setTimeout(prepareImages, 250); } } function beginPressed() { pausePressed(); initialTime = null; currentTime = null; drawFrame(0,0); } function rwPressed() { if (isPlaying == true) { frameMultiplier = Math.max(frameMultiplier - 0.25, 0); console.log(frameMultiplier); } else { currentTime = currentTime.setMilliseconds(currentTime.getMilliseconds() - 100); currentTime = new Date(currentTime); var diff = currentTime - initialTime; var frame = diff/100 * frameMultiplier; pct = frame - Math.floor(frame); frame = Math.floor(frame) % play_data.length; if (frame < 0) frame += play_data.length; drawFrame(frame, pct); } } function pausePressed() { console.log("pause"); document.getElementById("pause_button").visibility = "hidden"; document.getElementById("play_button").visibility = "visible"; isPlaying = false; } function playPressed() { console.log("play"); document.getElementById("pause_button").visibility = "visible"; document.getElementById("play_button").visibility = "hidden"; isPlaying = true; var t = currentTime; currentTime = new Date(); initialTime = currentTime - (t-initialTime); render(); } function ffPressed() { if (isPlaying == true) { frameMultiplier = frameMultiplier + 0.25; console.log(frameMultiplier); } else { currentTime = currentTime.setMilliseconds(currentTime.getMilliseconds() + 100); currentTime = new Date(currentTime); var diff = currentTime - initialTime; var frame = diff/100 * frameMultiplier; pct = frame - Math.floor(frame); frame = Math.floor(frame) % play_data.length; drawFrame(frame, pct); } } function endPressed() { pausePressed(); initialTime = null; currentTime = null; drawFrame(play_data.length-1,0); } function fixButtons() { var buttons = document.getElementsByClassName("button left"); var begin = buttons[2]; begin.addEventListener("click",beginPressed); var rewind = buttons[3]; rewind.addEventListener("click",rwPressed); var pause = buttons[4]; pause.addEventListener("click",playPressed); var play = buttons[5]; play.addEventListener("click",pausePressed); var ff = buttons[6]; ff.addEventListener("click",ffPressed); var end = buttons[7]; end.addEventListener("click",endPressed); } function fixFrames() { var stime = new Date(); var uwpd = new Array(); for (var i=0; i<unsafeWindow.play_data.length; i++) { uwpd.push(new Array()); } var missing = 0; for (var p=0; p<unsafeWindow.play_data[0].length; p++) { var id = unsafeWindow.play_data[0][p].id; for (var cf=0; cf<unsafeWindow.play_data.length; cf++) { var found = false; for (var i=0; i<unsafeWindow.play_data[cf].length; i++) { if (id == unsafeWindow.play_data[cf][i].id) { found = true; uwpd[cf].push(eval(uneval(unsafeWindow.play_data[cf][i]))); break; } } if (!found) { uwpd[cf].push(eval(uneval(uwpd[cf-1][p]))); missing++; } } } var time = new Date() - stime; console.log("uwpd copy ("+missing+" missing): "+time.toFixed(0)+"ms"); for (var p=1; p<uwpd[0].length; p++) { for (var f=uwpd.length-1; f>0; f--) { if (uwpd[f][p].icon != null) { for (var z=f+1; z<Math.min(uwpd.length, f+8); z++) { uwpd[z][p].icon = uwpd[f][p].icon; } } } } var time = new Date() - stime; console.log("uwpd icons: "+time.toFixed(0)+"ms"); prepareImages(); return uwpd; } var frameCounter = 0; var lastTime = 0; var fps = []; function measureFps() { frameCounter++; if (frameCounter > 300) { var now = new Date(); var delta = now - lastTime; fps.push(frameCounter / delta); frameCounter = 0; lastTime = now; } if (fps.length == 10) { console.log(fps); fps = []; } }