Path: blob/main/projects/particle-clicker/js/detector.js
1834 views
var detector={core:{canvas:null,ctx:null},events:{canvas:null,ctx:null,list:[]},visible:!0,width:400,height:400,ratio:1,colors:{siliconRing:"#FFF371",siliconRingLine:"#EAC918",ecal:"#C5FF82",ecalLine:"#9EFF28",hcal:"#E1FF79",hcalLine:"#C9FF2D",lightRing:"#A0B3FF",lightRingLine:"#A0B3FF",darkRing:"#7280B8",darkRingLine:"#7280B8",mucalLight:"#FFDFB7",mucalLightLine:"#FFDFB7",mucalDark:"#EA301F",mucalDarkLine:"#C5291A"},radius:{siliconInner:10,silicon:30,siliconSpace:35,ecal:50,hcal:80,darkRing1:83,darkRing1Space:86,lightRing:92,lightRingSpace:94,darkRing2:100,mucal:107,mucalLight:8,mucalDark:18},tracks:[{name:"electron",color:"#0016EA"},{name:"jet",color:"#0B7700"},{name:"muon",color:"#775400"}],lastRender:0,animate:function(t){var e=void 0!==t?t-detector.lastRender:16;detector.lastRender=t,requestAnimFrame(detector.animate),detector.draw(e)},init:function(t){detector.core.canvas=document.getElementById("detector-core"),detector.core.ctx=detector.core.canvas.getContext("2d"),detector.events.canvas=document.getElementById("detector-events"),detector.events.ctx=detector.events.canvas.getContext("2d");var e=window.devicePixelRatio||1,r=detector.core.ctx.webkitBackingStorePixelRatio||detector.core.ctx.mozBackingStorePixelRatio||detector.core.ctx.msBackingStorePixelRatio||detector.core.ctx.oBackingStorePixelRatio||detector.core.ctx.backingStorePixelRatio||1,a=e/r;if(detector.ratio=t/400,detector.width=t,detector.height=t,detector.core.canvas.width=t,detector.core.canvas.height=t,detector.events.canvas.width=t,detector.events.canvas.height=t,e!==r){var o=detector.core.canvas.width,c=detector.core.canvas.height;detector.core.canvas.width=o*a,detector.core.canvas.height=c*a,detector.core.canvas.style.width=o+"px",detector.core.canvas.style.height=c+"px",detector.events.canvas.width=o*a,detector.events.canvas.height=c*a,detector.events.canvas.style.width=o+"px",detector.events.canvas.style.height=c+"px",detector.core.ctx.scale(a,a),detector.events.ctx.scale(a,a)}detector.coreDraw(),detector.animate()},coreDraw:function(){var t=detector.core.ctx,e=detector.width/2,r=detector.height/2;t.clearRect(0,0,detector.width,detector.width);for(var a=3;a>=1;a--){t.strokeStyle=detector.colors.mucalDarkLine,t.fillStyle=detector.colors.mucalDark,t.beginPath(),t.moveTo(e+(detector.radius.mucal+a*detector.radius.mucalLight+a*detector.radius.mucalDark)*Math.cos(Math.PI*(2/12))*detector.ratio,r+(detector.radius.mucal+a*detector.radius.mucalLight+a*detector.radius.mucalDark)*Math.sin(Math.PI*(2/12))*detector.ratio);for(var o=1;o<=13;o++)t.lineTo(e+(detector.radius.mucal+a*detector.radius.mucalLight+a*detector.radius.mucalDark)*Math.cos(Math.PI*o*(2/12))*detector.ratio,r+(detector.radius.mucal+a*detector.radius.mucalLight+a*detector.radius.mucalDark)*Math.sin(Math.PI*o*(2/12))*detector.ratio);for(t.stroke(),t.fill(),t.beginPath(),t.moveTo(e+(detector.radius.mucal+a*detector.radius.mucalLight+(a-1)*detector.radius.mucalDark)*Math.cos(Math.PI*(2/12))*detector.ratio,r+(detector.radius.mucal+a*detector.radius.mucalLight+(a-1)*detector.radius.mucalDark)*Math.sin(Math.PI*(2/12))*detector.ratio),o=1;o<=13;o++)t.lineTo(e+(detector.radius.mucal+a*detector.radius.mucalLight+(a-1)*detector.radius.mucalDark)*Math.cos(Math.PI*o*(2/12))*detector.ratio,r+(detector.radius.mucal+a*detector.radius.mucalLight+(a-1)*detector.radius.mucalDark)*Math.sin(Math.PI*o*(2/12))*detector.ratio);t.stroke(),t.fillStyle=detector.colors.mucalLight,t.fill()}for(t.strokeStyle=detector.colors.mucalDarkLine,t.beginPath(),t.moveTo(e+detector.radius.mucal*Math.cos(Math.PI*(2/12))*detector.ratio,r+detector.radius.mucal*Math.sin(Math.PI*(2/12))*detector.ratio),o=1;o<=13;o++)t.lineTo(e+detector.radius.mucal*Math.cos(Math.PI*o*(2/12))*detector.ratio,r+detector.radius.mucal*Math.sin(Math.PI*o*(2/12))*detector.ratio);t.stroke(),t.fillStyle="#FFFFFF",t.fill(),t.beginPath(),t.strokeStyle=detector.colors.darkRingLine,t.fillStyle=detector.colors.darkRing,t.arc(e,r,detector.radius.darkRing2*detector.ratio,0,2*Math.PI,!0),t.fill(),t.stroke(),t.beginPath(),t.fillStyle="#FFFFFF",t.arc(e,r,detector.radius.lightRingSpace*detector.ratio,0,2*Math.PI,!0),t.fill(),t.beginPath(),t.strokeStyle=detector.colors.lightRingLine,t.fillStyle=detector.colors.lightRing,t.arc(e,r,detector.radius.lightRing*detector.ratio,0,2*Math.PI,!0),t.fill(),t.stroke(),t.beginPath(),t.fillStyle="#FFFFFF",t.arc(e,r,detector.radius.darkRing1Space*detector.ratio,0,2*Math.PI,!0),t.fill(),t.beginPath(),t.strokeStyle=detector.colors.darkRingLine,t.fillStyle=detector.colors.darkRing,t.arc(e,r,detector.radius.darkRing1*detector.ratio,0,2*Math.PI,!0),t.fill(),t.stroke(),t.beginPath(),t.fillStyle="#FFFFFF",t.arc(e,r,detector.radius.ecal*detector.ratio,0,2*Math.PI,!0),t.fill(),t.strokeStyle=detector.colors.hcalLine,t.fillStyle=detector.colors.hcal;var c=10;for(o=0;o<20;o++)t.beginPath(),t.moveTo(e+detector.radius.ecal*Math.cos(Math.PI*o/c)*detector.ratio,r+detector.radius.ecal*Math.sin(Math.PI*o/c)*detector.ratio),t.lineTo(e+detector.radius.hcal*Math.cos(Math.PI*o/c)*detector.ratio,r+detector.radius.hcal*Math.sin(Math.PI*o/c)*detector.ratio),t.arc(e,r,detector.radius.hcal*detector.ratio,Math.PI*o/c,Math.PI*(o+1)/c,!1),t.lineTo(e+detector.radius.ecal*Math.cos(Math.PI*(o+1)/c)*detector.ratio,r+detector.radius.ecal*Math.sin(Math.PI*(o+1)/c)*detector.ratio),t.lineTo(e+detector.radius.ecal*Math.cos(Math.PI*o/c)*detector.ratio,r+detector.radius.ecal*Math.sin(Math.PI*o/c)*detector.ratio),t.closePath(),t.fill(),t.stroke();for(t.strokeStyle=detector.colors.ecalLine,t.fillStyle=detector.colors.ecal,c=10,o=0;o<20;o++)t.beginPath(),t.moveTo(e+detector.radius.siliconSpace*Math.cos(Math.PI*o/c)*detector.ratio,r+detector.radius.siliconSpace*Math.sin(Math.PI*o/c)*detector.ratio),t.lineTo(e+detector.radius.ecal*Math.cos(Math.PI*o/c)*detector.ratio,r+detector.radius.ecal*Math.sin(Math.PI*o/c)*detector.ratio),t.lineTo(e+detector.radius.ecal*Math.cos(Math.PI*(o+1)/c)*detector.ratio,r+detector.radius.ecal*Math.sin(Math.PI*(o+1)/c)*detector.ratio),t.lineTo(e+detector.radius.siliconSpace*Math.cos(Math.PI*(o+1)/c)*detector.ratio,r+detector.radius.siliconSpace*Math.sin(Math.PI*(o+1)/c)*detector.ratio),t.closePath(),t.fill(),t.stroke();t.beginPath(),t.strokeStyle=detector.colors.siliconRingLine,t.fillStyle=detector.colors.siliconRing,t.arc(e,r,detector.radius.silicon*detector.ratio,0,2*Math.PI,!0),t.fill(),t.stroke(),t.beginPath(),t.strokeStyle=detector.colors.siliconRingLine,t.fillStyle=detector.colors.siliconRing,t.arc(e,r,detector.radius.siliconInner*detector.ratio,0,2*Math.PI,!0),t.fill(),t.stroke()},addEvent:function(){for(var t=Math.max(3,Math.ceil(15*Math.random())),e=0;e<t;e++){var r=Math.round(Math.random()*(detector.tracks.length-1)),a=new ParticleEvent(detector.tracks[r],t);detector.events.list.push(a)}},addEventExternal:function(t){if(detector.visible)for(var e=Math.min(20*t/10,20),r=0;r<e;r++){var a=Math.round(Math.random()*(detector.tracks.length-1)),o=new ParticleEvent(detector.tracks[a],e,!0);detector.events.list.push(o)}},draw:function(t){detector.events.ctx.clearRect(0,0,detector.width,detector.height);var e=-1;for(var r in detector.events.list)detector.events.list[r].alpha>0?detector.events.list[r].draw(t):e=r;e>0&&detector.events.list.splice(0,e)}};window.requestAnimFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t,e){window.setTimeout(t,1e3/60)},detector.init(400),$("#detector").width(400).height(400);123