@rel-packages/osu-beatmap-preview 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -2
- package/dist/index.js.map +3 -3
- package/dist/player/player.d.ts +0 -2
- package/dist/player/player.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var _;((V)=>{V[V.Standard=0]="Standard";V[V.Taiko=1]="Taiko";V[V.Catch=2]="Catch";V[V.Mania=3]="Mania"})(_||={});var ST;((V)=>{V[V.Auto=0]="Auto";V[V.Normal=1]="Normal";V[V.Soft=2]="Soft";V[V.Drum=3]="Drum"})(ST||={});var w={Circle:1,Slider:2,NewCombo:4,Spinner:8,ComboSkip:112,Hold:128},o={Normal:1,Whistle:2,Finish:4,Clap:8},UT=(T)=>(T.type&w.Circle)!==0,c=(T)=>(T.type&w.Slider)!==0,p=(T)=>(T.type&w.Spinner)!==0,RT=(T)=>(T.type&w.Hold)!==0,wT=(T)=>(T.type&w.NewCombo)!==0;var vT;((R)=>{R.NoOsuFiles="NO_OSU_FILES";R.DifficultyNotFound="DIFFICULTY_NOT_FOUND";R.InvalidBeatmap="INVALID_BEATMAP";R.UnsupportedMode="UNSUPPORTED_MODE";R.AudioNotLoaded="AUDIO_NOT_LOADED";R.AudioDecodeError="AUDIO_DECODE_ERROR";R.NotLoaded="NOT_LOADED";R.Unknown="UNKNOWN"})(vT||={});var uT=(T)=>({success:!0,data:T}),v=(T,I)=>({success:!1,code:T,reason:I}),SI=(T)=>{if(T.success)return T.data;throw Error(`[${T.code}] ${T.reason}`)},UI=(T)=>{return T.success},RI=(T)=>{return!T.success};var P={None:0,NoFail:1,Easy:2,TouchDevice:4,Hidden:8,HardRock:16,SuddenDeath:32,DoubleTime:64,Relax:128,HalfTime:256,Nightcore:512,Flashlight:1024,Autoplay:2048,SpunOut:4096,Autopilot:8192,Perfect:16384,FadeIn:8388608,Mirror:1073741824},mT=P.DoubleTime|P.HalfTime|P.Nightcore,AI=P.HardRock|P.Easy|mT,PI=(T)=>{let I=0,D=T.toLowerCase(),H={nf:P.NoFail,ez:P.Easy,td:P.TouchDevice,hd:P.Hidden,hr:P.HardRock,sd:P.SuddenDeath,dt:P.DoubleTime,rx:P.Relax,ht:P.HalfTime,nc:P.Nightcore,fl:P.Flashlight,at:P.Autoplay,so:P.SpunOut,ap:P.Autopilot,pf:P.Perfect,fi:P.FadeIn,mr:P.Mirror};for(let V=0;V<D.length-1;V+=2){let F=D.slice(V,V+2);if(H[F])I|=H[F]}return I},OI=(T)=>{let I=[];if(T&P.NoFail)I.push("NF");if(T&P.Easy)I.push("EZ");if(T&P.Hidden)I.push("HD");if(T&P.HardRock)I.push("HR");if(T&P.SuddenDeath)I.push("SD");if(T&P.DoubleTime)I.push("DT");if(T&P.HalfTime)I.push("HT");if(T&P.Nightcore)I.push("NC");if(T&P.Flashlight)I.push("FL");if(T&P.SpunOut)I.push("SO");if(T&P.FadeIn)I.push("FI");if(T&P.Mirror)I.push("MR");let D=I.indexOf("DT"),H=I.indexOf("NC");if(D>=0&&H>=0)I.splice(D,1);return I.join("")},n=(T)=>{if(T&(P.DoubleTime|P.Nightcore))return 1.5;if(T&P.HalfTime)return 0.75;return 1},lT=[P.HardRock|P.Easy,P.DoubleTime|P.HalfTime|P.Nightcore,P.Hidden|P.FadeIn],$I=(T,I)=>{if(T&I)return T&~I;let D=T;for(let H of lT)if(I&H)D&=~H;return D|I},K=(T,I)=>(T&I)!==0,NI=(T)=>{let I=[{name:"No Fail",acronym:"NF",value:P.NoFail},{name:"Easy",acronym:"EZ",value:P.Easy},{name:"Hidden",acronym:"HD",value:P.Hidden},{name:"Double Time",acronym:"DT",value:P.DoubleTime},{name:"Half Time",acronym:"HT",value:P.HalfTime},{name:"Nightcore",acronym:"NC",value:P.Nightcore}];switch(T){case"standard":return[...I,{name:"Hard Rock",acronym:"HR",value:P.HardRock},{name:"Flashlight",acronym:"FL",value:P.Flashlight}];case"mania":return[...I,{name:"Fade In",acronym:"FI",value:P.FadeIn},{name:"Mirror",acronym:"MR",value:P.Mirror}];case"taiko":case"catch":return[...I,{name:"Hard Rock",acronym:"HR",value:P.HardRock}];default:return I}};import xT from"jszip";class f{beatmap;section="";parse(T){this.beatmap=this.create_empty_beatmap(),this.section="";let I=T.split(`
|
|
2
2
|
`);for(let D of I)this.parse_line(D);if(this.beatmap.ar===-1)this.beatmap.ar=this.beatmap.od;return this.beatmap}parse_info(T,I){this.beatmap=this.create_empty_beatmap(),this.section="";let D=T.split(`
|
|
3
|
-
`);for(let H of D)if(this.parse_line(H),this.section==="Events"||this.section==="TimingPoints"||this.section==="Colours"||this.section==="HitObjects")break;if(this.beatmap.ar===-1)this.beatmap.ar=this.beatmap.od;return{filename:I,title:this.beatmap.title,artist:this.beatmap.artist,version:this.beatmap.version,mode:this.beatmap.mode,ar:this.beatmap.ar,cs:this.beatmap.cs,od:this.beatmap.od,hp:this.beatmap.hp}}create_empty_beatmap(){return{format_version:1,mode:0,title:"",title_unicode:"",artist:"",artist_unicode:"",creator:"",version:"",ar:-1,cs:5,od:5,hp:5,sv:1,tick_rate:1,timing_points:[],objects:[],circle_count:0,slider_count:0,spinner_count:0,hold_count:0}}parse_line(T){if(T.startsWith(" ")||T.startsWith("_"))return;let I=T.trim();if(I.length===0||I.startsWith("//"))return;if(I.startsWith("[")&&I.endsWith("]")){this.section=I.slice(1,-1);return}let D=I.match(/osu file format v(\d+)/);if(D){this.beatmap.format_version=parseInt(D[1]);return}switch(this.section){case"General":this.parse_general(I);break;case"Metadata":this.parse_metadata(I);break;case"Difficulty":this.parse_difficulty(I);break;case"TimingPoints":this.parse_timing_point(I);break;case"HitObjects":this.parse_hit_object(I);break}}parse_general(T){let[I,D]=this.split_property(T);if(I==="Mode")this.beatmap.mode=parseInt(D)}parse_metadata(T){let[I,D]=this.split_property(T);switch(I){case"Title":this.beatmap.title=D;break;case"TitleUnicode":this.beatmap.title_unicode=D;break;case"Artist":this.beatmap.artist=D;break;case"ArtistUnicode":this.beatmap.artist_unicode=D;break;case"Creator":this.beatmap.creator=D;break;case"Version":this.beatmap.version=D;break}}parse_difficulty(T){let[I,D]=this.split_property(T),H=parseFloat(D);switch(I){case"CircleSize":this.beatmap.cs=H;break;case"OverallDifficulty":this.beatmap.od=H;break;case"ApproachRate":this.beatmap.ar=H;break;case"HPDrainRate":this.beatmap.hp=H;break;case"SliderMultiplier":this.beatmap.sv=H;break;case"SliderTickRate":this.beatmap.tick_rate=H;break}}current_beat_length=500;parse_timing_point(T){let I=T.split(",");if(I.length<2)return;let D=parseFloat(I[0]),H=parseFloat(I[1]),V=parseInt(I[3]??"0"),F=parseInt(I[4]??"0"),S=parseInt(I[5]??"100"),U=I.length>=7?I[6].trim()!=="0":!0,R=I.length>=8?(parseInt(I[7])&1)!==0:!1,B=H<0,$=B?-100/H:1;if(!B&&H>0)this.current_beat_length=H;this.beatmap.timing_points.push({time:D,ms_per_beat:H,change:U,sample_set:V,sample_index:F,volume:S,kiai:R,velocity:$,beat_length:this.current_beat_length})}parse_hit_object(T){let I=T.split(",");if(I.length<4)return;let D=parseFloat(I[0]),H=parseFloat(I[1]),V=parseFloat(I[2]),F=parseInt(I[3]),S=parseInt(I[4]??"0"),U={time:V,type:F,hit_sound:S,end_time:V,end_pos:[D,H],combo_number:0,combo_count:0,data:{pos:[D,H]}};if(F&w.Circle)this.beatmap.circle_count++,U.data={pos:[D,H]},this.parse_extras(I,5,U);else if(F&w.Slider){if(I.length<8)return;this.beatmap.slider_count++;let R=this.parse_slider_data(I,D,H);if(U.data=R,I.length>8)U.edge_sounds=I[8].split("|").map((B)=>parseInt(B));if(I.length>9)U.edge_sets=I[9].split("|").map((B)=>{let $=B.split(":");return[parseInt($[0]),parseInt($[1])]});this.parse_extras(I,10,U)}else if(F&w.Spinner){this.beatmap.spinner_count++;let R=parseInt(I[5]);U.data={end_time:R},U.end_time=R,U.end_pos=[256,192],this.parse_extras(I,6,U)}else if(F&w.Hold){this.beatmap.hold_count++;let R=parseInt(I[5].split(":")[0]);U.data={pos:[D,H],end_time:R},U.end_time=R,this.parse_extras(I,6,U)}this.beatmap.objects.push(U)}parse_extras(T,I,D){if(I<T.length){let H=T[I];if(H&&H.includes(":")){let V=H.split(":");D.hit_sample={normal_set:parseInt(V[0]),addition_set:parseInt(V[1]),index:parseInt(V[2]),volume:parseInt(V[3]),filename:V[4]||void 0}}}}parse_slider_data(T,I,D){let H=T[5].split("|"),V=H[0],F=[];for(let R=1;R<H.length;R++){let B=H[R].split(":");F.push([parseInt(B[0]),parseInt(B[1])])}let S=parseInt(T[6]),U=parseFloat(T[7]);return{pos:[I,D],path_type:V,control_points:F,repetitions:S,distance:U}}split_property(T){let I=T.indexOf(":");if(I===-1)return[T,""];return[T.slice(0,I).trim(),T.slice(I+1).trim()]}}var i=4096,BT=(T)=>{let I=T.slice(0,i).match(/PreviewTime:\s*([+-]?\d+)/);return I?parseInt(I[1]):-1},AT=(T)=>{let I=T.slice(0,i).match(/AudioFilename:\s*(.+)/);return I?I[1].trim():null},PT=(T)=>{let I=T.slice(0,i).match(/0,0,"([^"]+)"/);return I?I[1]:null},OT=(T)=>{let I=T.slice(0,i).match(/(?:Video|1),(-?\d+),"([^"]+)"/);if(!I)return null;return{offset:parseInt(I[1]),filename:I[2]}};class h{async load_osz(T,I){let D=await xT.loadAsync(T),H=new Map;for(let[V,F]of Object.entries(D.files))if(!F.dir)H.set(V,await F.async("arraybuffer"));return this.load_from_files(H,I)}async load_from_files(T,I){let D=[...T.keys()].filter((J)=>J.toLowerCase().endsWith(".osu"));if(D.length===0)throw Error("No .osu files found in beatmap");let H=new f,V=D.map((J)=>{let Q=this.to_string(T.get(J));return H.parse_info(Q,J)}),F=this.select_difficulty(D,T,I?.difficulty),S=this.to_string(T.get(F)),U=H.parse(S),R=AT(S),B=PT(S),$=OT(S),O=new Map;for(let[J,Q]of T)if(Q instanceof ArrayBuffer)O.set(J,Q);else O.set(J,new TextEncoder().encode(Q).buffer);let N;if(R)N=this.find_file(O,R);let M;if(B){let J=this.find_file(O,B);if(J)M=new Blob([J])}let W,A;if($){let J=this.find_file(O,$.filename);if(J)W=new Blob([J]),A=$.offset}return{beatmap:U,available_difficulties:V,files:O,audio:N,background:M,video:W,audio_filename:R??void 0,background_filename:B??void 0,video_filename:$?.filename,video_offset:A}}async list_difficulties(T){let I=await xT.loadAsync(T),D=[];for(let V of Object.keys(I.files))if(V.toLowerCase().endsWith(".osu"))D.push(V);let H=[];for(let V of D){let S=(await I.files[V].async("string")).match(/Version:\s*(.+)/);H.push(S?S[1].trim():V)}return H}select_difficulty(T,I,D){if(D===void 0)return T[0];if(typeof D==="number"){if(D<0||D>=T.length)throw Error(`Difficulty index ${D} out of range (0-${T.length-1})`);return T[D]}for(let H of T){let F=this.to_string(I.get(H)).match(/Version:\s*(.+)/);if(F&&F[1].trim()===D)return H}for(let H of T)if(H.toLowerCase().includes(D.toLowerCase()))return H;throw Error(`Difficulty "${D}" not found`)}find_file(T,I){if(T.has(I))return T.get(I);let D=I.toLowerCase();for(let[H,V]of T)if(H.toLowerCase()===D)return V;return}to_string(T){if(typeof T==="string")return T;return new TextDecoder().decode(T)}}var $T=512,NT=384,yT;((F)=>{F[F.None=0]="None";F[F.Large=32]="Large";F[F.Medium=16]="Medium";F[F.Small=8]="Small";F[F.Tiny=4]="Tiny"})(yT||={});var u={offset_x:64,offset_y:48,scale:1,show_playfield:!0,playfield_color:"#ffffff",playfield_opacity:0.1,grid_level:0,grid_color:"#ffffff",grid_opacity:0.35,use_high_dpi:!0};class b{backend;skin;config;mods;beatmap;objects=[];background_image=null;constructor(T,I,D=0,H=u){this.backend=T,this.skin=I,this.mods=D,this.config={...u,...H}}set_background(T){this.background_image=T}update_config(T){this.config={...this.config,...T}}dispose(){this.objects=[]}render_playfield(T,I,D,H){if(!this.config.show_playfield)return;let{backend:V,config:F}=this,S=T??512,U=I??384,R=D??0,B=H??0;V.save(),V.set_alpha(F.playfield_opacity),V.begin_path(),V.move_to(R,B),V.line_to(R+S,B),V.line_to(R+S,B+U),V.line_to(R,B+U),V.line_to(R,B),V.stroke_path(F.playfield_color,2),V.restore()}render_grid(){if(this.config.grid_level===0)return;let{backend:T,config:I}=this,D=I.grid_level;T.save(),T.set_alpha(I.grid_opacity);for(let H=0;H<=512;H+=D)T.begin_path(),T.move_to(H,0),T.line_to(H,384),T.stroke_path(I.grid_color,H%(D*4)===0?1:0.5);for(let H=0;H<=384;H+=D)T.begin_path(),T.move_to(0,H),T.line_to(512,H),T.stroke_path(I.grid_color,H%(D*4)===0?1:0.5);T.restore()}render_background(){if(!this.background_image)return;let{backend:T}=this;T.save(),T.set_alpha(0.3);let{width:I,height:D}=T,{width:H,height:V}=this.background_image;if(H>0&&V>0){let F=Math.max(I/H,D/V),S=H*F,U=V*F,R=(I-S)/2,B=(D-U)/2;T.draw_image(this.background_image,R,B,S,U)}else T.draw_image(this.background_image,0,0,I,D);T.restore()}get_visible_objects(T,I,D){let H=[];for(let V of this.objects){let F=V.time-I,S=V.end_time+D;if(T>=F&&T<=S)H.push(V)}return H}}class a{ctx;_width=0;_height=0;_dpr=1;get width(){return this._width}get height(){return this._height}initialize(T,I=!0){this._dpr=I?window.devicePixelRatio||1:1;let D=T.clientWidth||T.width,H=T.clientHeight||T.height;T.width=D*this._dpr,T.height=H*this._dpr;let V=T.getContext("2d",{alpha:!0,desynchronized:!0});if(!V)throw Error("Failed to get 2D context");this.ctx=V,this._width=D,this._height=H,V.scale(this._dpr,this._dpr),V.imageSmoothingEnabled=!0,V.imageSmoothingQuality="high"}clear(){this.ctx.save(),this.ctx.setTransform(this._dpr,0,0,this._dpr,0,0),this.ctx.clearRect(0,0,this._width,this._height),this.ctx.restore()}dispose(){}resize(T,I){this._width=T,this._height=I,this._dpr=window.devicePixelRatio||1;let D=this.ctx.canvas;D.width=T*this._dpr,D.height=I*this._dpr,D.style.width=`${T}px`,D.style.height=`${I}px`,this.ctx.resetTransform(),this.ctx.scale(this._dpr,this._dpr),this.ctx.imageSmoothingEnabled=!0,this.ctx.imageSmoothingQuality="high"}draw_circle(T,I,D,H,V,F){let S=this.ctx;if(S.beginPath(),S.arc(T,I,D,0,Math.PI*2),H&&H!=="transparent")S.fillStyle=H,S.fill();if(V&&F&&F>0)S.strokeStyle=V,S.lineWidth=F,S.stroke()}draw_arc(T,I,D,H,V,F,S,U=!1){let R=this.ctx;R.beginPath(),R.arc(T,I,D,H,V,U),R.strokeStyle=F,R.lineWidth=S,R.stroke()}draw_rect(T,I,D,H,V){this.ctx.fillStyle=V,this.ctx.fillRect(T,I,D,H)}draw_rect_gradient(T,I,D,H,V){this.ctx.fillStyle=V,this.ctx.fillRect(T,I,D,H)}create_linear_gradient(T,I,D,H,V){let F=this.ctx.createLinearGradient(T,I,D,H);for(let S of V)F.addColorStop(S.offset,S.color);return F}draw_text(T,I,D,H,V,F="left",S="alphabetic"){let U=this.ctx;U.font=H,U.fillStyle=V,U.textAlign=F,U.textBaseline=S,U.fillText(T,I,D)}begin_path(){this.ctx.beginPath()}move_to(T,I){this.ctx.moveTo(T,I)}line_to(T,I){this.ctx.lineTo(T,I)}bezier_curve_to(T,I,D,H,V,F){this.ctx.bezierCurveTo(T,I,D,H,V,F)}quadratic_curve_to(T,I,D,H){this.ctx.quadraticCurveTo(T,I,D,H)}arc_to(T,I,D,H,V,F){this.ctx.arc(T,I,D,H,V,F)}rect(T,I,D,H){this.ctx.rect(T,I,D,H)}clip(){this.ctx.clip()}stroke_path(T,I,D="butt",H="miter"){let V=this.ctx;V.strokeStyle=T,V.lineWidth=I,V.lineCap=D,V.lineJoin=H,V.stroke()}fill_path(T){this.ctx.fillStyle=T,this.ctx.fill()}save(){this.ctx.save()}restore(){this.ctx.restore()}translate(T,I){this.ctx.translate(T,I)}scale(T,I){this.ctx.scale(T,I)}rotate(T){this.ctx.rotate(T)}set_alpha(T){this.ctx.globalAlpha=T}set_shadow(T,I){this.ctx.shadowColor=T,this.ctx.shadowBlur=I}set_composite_operation(T){this.ctx.globalCompositeOperation=T}draw_image(T,I,D,H,V){if(H!==void 0&&V!==void 0)this.ctx.drawImage(T.source,I,D,H,V);else this.ctx.drawImage(T.source,I,D)}draw_image_part(T,I,D,H,V,F,S,U,R){this.ctx.drawImage(T.source,I,D,H,V,F,S,U,R)}render_slider_to_image(T,I,D,H,V,F=1,S=1){let U=1/0,R=1/0,B=-1/0,$=-1/0;for(let Z of T){if(Z[0]<U)U=Z[0];if(Z[0]>B)B=Z[0];if(Z[1]<R)R=Z[1];if(Z[1]>$)$=Z[1]}let O=I+2;U-=O,R-=O,B+=O,$+=O;let N=Math.ceil((B-U)*V),M=Math.ceil(($-R)*V);if(N<=0||M<=0)return null;let W=document.createElement("canvas");W.width=N,W.height=M;let A=W.getContext("2d");if(!A)return null;A.save(),A.scale(V,V),A.translate(-U,-R);let J=()=>{if(A.beginPath(),T.length>0){A.moveTo(T[0][0],T[0][1]);for(let Z=1;Z<T.length;Z++)A.lineTo(T[Z][0],T[Z][1])}};A.lineCap="round",A.lineJoin="round",A.globalAlpha=S,A.strokeStyle=D,A.lineWidth=I*2,J(),A.stroke();let Q=I*0.872;if(F<1)A.globalCompositeOperation="destination-out",A.globalAlpha=1,A.lineWidth=Q*2,J(),A.stroke(),A.globalCompositeOperation="source-over";return A.globalAlpha=F,A.strokeStyle=H,A.lineWidth=Q*2,J(),A.stroke(),A.restore(),{source:W,width:N,height:M,min_x:U,min_y:R}}}var t={min:1800,mid:1200,max:450},cT=450,jT=(T,I)=>{if(T>5)return I.mid+(I.max-I.mid)*(T-5)/5;if(T<5)return I.mid+(I.mid-I.min)*(T-5)/5;return I.mid},JT=(T,I)=>{if(Math.sign(T-I.mid)===Math.sign(I.max-I.mid))return(T-I.mid)/(I.max-I.mid)*5+5;return(T-I.mid)/(I.mid-I.min)*5+5},d=(T)=>jT(T,t),MT=(T)=>400*Math.min(1,T/450),pT=(T)=>{return(1-0.7*((T-5)/5))/2},WT=(T)=>pT(T)*64;var ZT={name:"Hard Rock",acronym:"HR",apply_to_difficulty(T){T.cs=Math.min(T.cs*1.3,10),T.ar=Math.min(T.ar*1.4,10),T.od=Math.min(T.od*1.4,10),T.hp=Math.min(T.hp*1.4,10)}};var qT={name:"Easy",acronym:"EZ",apply_to_difficulty(T){T.cs*=0.5,T.ar*=0.5,T.od*=0.5,T.hp*=0.5}};var nT={name:"Double Time",acronym:"DT",get_rate_multiplier:()=>1.5},dT={name:"Nightcore",acronym:"NC",get_rate_multiplier:()=>1.5};var sT={name:"Half Time",acronym:"HT",get_rate_multiplier:()=>0.75};var _T=0.4,oT=0.3,iT={name:"Hidden",acronym:"HD"};var QT=(T)=>{if(T&(P.DoubleTime|P.Nightcore))return 1.5;if(T&P.HalfTime)return 0.75;return 1},aT=(T,I)=>{if(I&P.Easy)qT.apply_to_difficulty(T);if(I&P.HardRock)ZT.apply_to_difficulty(T)},tT=(T,I)=>{if(I===1)return T;let D=d(T)/I;return JT(D,t)},gT=(T,I,D,H,V)=>{let F={cs:T,ar:I,od:D,hp:H};aT(F,V);let S=QT(V);return F.ar=tT(F.ar,S),F};var kT=(T,I)=>[T[0]+I[0],T[1]+I[1]],C=(T,I)=>[T[0]-I[0],T[1]-I[1]],fT=(T,I)=>[T[0]*I,T[1]*I],eT=(T,I)=>[T[0]/I,T[1]/I],bI=(T,I)=>T[0]*I[0]+T[1]*I[1],z=(T)=>Math.sqrt(T[0]*T[0]+T[1]*T[1]),rI=(T)=>T[0]*T[0]+T[1]*T[1],mI=(T,I)=>z(C(T,I)),XT=(T)=>{let I=z(T);return I>0?eT(T,I):[0,0]},k=(T,I,D)=>T+(I-T)*D,r=(T,I,D)=>[k(T[0],I[0],D),k(T[1],I[1],D)],q=(T,I,D)=>Math.min(D,Math.max(I,T));var e=(T,I=0.25)=>{if(T.length<2)return[...T];let D=[];return KT(T,D,I),D},KT=(T,I,D)=>{if(TI(T,D)){if(I.length===0)I.push(T[0]);I.push(T[T.length-1]);return}let H=[],V=[];DI(T,H,V),KT(H,I,D),KT(V,I,D)},TI=(T,I)=>{if(T.length<=2)return!0;let D=T[0],H=T[T.length-1];for(let V=1;V<T.length-1;V++)if(II(T[V],D,H)>I)return!1;return!0},II=(T,I,D)=>{let H=C(D,I),V=H[0]*H[0]+H[1]*H[1];if(V===0)return z(C(T,I));let F=Math.max(0,Math.min(1,((T[0]-I[0])*H[0]+(T[1]-I[1])*H[1])/V)),S=[I[0]+F*H[0],I[1]+F*H[1]];return z(C(T,S))},DI=(T,I,D)=>{let H=T.length,V=[T];for(let F=1;F<H;F++){V[F]=[];for(let S=0;S<H-F;S++)V[F][S]=r(V[F-1][S],V[F-1][S+1],0.5)}for(let F=0;F<H;F++)I.push(V[F][0]),D.push(V[H-1-F][F])},TT=(T,I,D)=>{let H=C(I,T),V=z(H);if(V===0)return[T];let F=[H[0]/V,H[1]/V],S=kT(T,fT(F,D));return[T,S]},YT=(T,I)=>{if(T.length!==3)return e(T);let[D,H,V]=T,F=HI(D,H,V);if(!F)return TT(D,V,I);let S=z(C(D,F)),U=Math.atan2(D[1]-F[1],D[0]-F[0]),R=Math.atan2(V[1]-F[1],V[0]-F[0]),$=(H[0]-D[0])*(V[1]-D[1])-(H[1]-D[1])*(V[0]-D[0])>0,O=R-U;if($&&O<0)O+=2*Math.PI;if(!$&&O>0)O-=2*Math.PI;let N=Math.abs(O)*S,M=Math.max(2,Math.ceil(Math.abs(O)*S/4)),W=[];for(let A=0;A<=M;A++){let J=A/M,Q=U+O*J*Math.min(1,I/N);W.push([F[0]+S*Math.cos(Q),F[1]+S*Math.sin(Q)])}return W},HI=(T,I,D)=>{let H=2*(T[0]*(I[1]-D[1])+I[0]*(D[1]-T[1])+D[0]*(T[1]-I[1]));if(Math.abs(H)<0.001)return null;let V=((T[0]*T[0]+T[1]*T[1])*(I[1]-D[1])+(I[0]*I[0]+I[1]*I[1])*(D[1]-T[1])+(D[0]*D[0]+D[1]*D[1])*(T[1]-I[1]))/H,F=((T[0]*T[0]+T[1]*T[1])*(D[0]-I[0])+(I[0]*I[0]+I[1]*I[1])*(T[0]-D[0])+(D[0]*D[0]+D[1]*D[1])*(I[0]-T[0]))/H;return[V,F]},CT=(T)=>{if(T.length<2)return[...T];let I=[];for(let D=0;D<T.length-1;D++){let H=T[Math.max(0,D-1)],V=T[D],F=T[D+1],S=T[Math.min(T.length-1,D+2)],U=50;for(let R=0;R<=50;R++){let B=R/50;I.push(VI(H,V,F,S,B))}}return I},VI=(T,I,D,H,V)=>{let F=V*V,S=F*V;return[0.5*(2*I[0]+(-T[0]+D[0])*V+(2*T[0]-5*I[0]+4*D[0]-H[0])*F+(-T[0]+3*I[0]-3*D[0]+H[0])*S),0.5*(2*I[1]+(-T[1]+D[1])*V+(2*T[1]-5*I[1]+4*D[1]-H[1])*F+(-T[1]+3*I[1]-3*D[1]+H[1])*S)]};var LT={1:["#d5bc00"],2:["#ffffff","#ffffff"],3:["#ffffff","#d5bc00","#ffffff"],4:["#ffffff","#dc8dba","#dc8dba","#ffffff"],5:["#ffffff","#dc8dba","#d5bc00","#dc8dba","#ffffff"],6:["#ffffff","#dc8dba","#ffffff","#ffffff","#dc8dba","#ffffff"],7:["#ffffff","#dc8dba","#ffffff","#d5bc00","#ffffff","#dc8dba","#ffffff"],8:["#d5bc00","#ffffff","#dc8dba","#ffffff","#d5bc00","#ffffff","#dc8dba","#ffffff"],9:["#ffffff","#dc8dba","#ffffff","#dc8dba","#d5bc00","#dc8dba","#ffffff","#dc8dba","#ffffff"],10:["#ffffff","#dc8dba","#d5bc00","#dc8dba","#ffffff","#ffffff","#dc8dba","#d5bc00","#dc8dba","#ffffff"]},zT={combo_colors:["0,185,0","7, 105, 227","224, 4, 38","227, 171, 2"],circle_border_width:0.13,hit_circle_opacity:0.85,approach_circle_width:0.1,slider_body_opacity:0.8,slider_border_opacity:1,slider_tick_opacity:0.75,slider_tick_size:0.1,follow_circle_factor:1.5,follow_circle_width:4,follow_circle_opacity:0.8,follow_circle_color:"#ffffffff",follow_circle_use_combo_color:!1,slider_ball_color:"#ffffff",slider_ball_opacity:1,enable_slider_ball:!0,follow_point_width:2,spinner_size:180,spinner_center_size:10,mania_lane_width:30,mania_note_height:15,mania_hit_position:364,mania_lane_spacing:1,mania_lane_colors:LT,font_family:'"Exo 2", sans-serif',hit_animation_duration:300,hit_animation_scale:1.3,enable_hit_animations:!0,enable_follow_circle_animations:!0,enable_approach_circle:!0},IT=(T)=>{if(!T)return{...zT};return{...zT,...T,mania_lane_colors:T.mania_lane_colors?{...LT,...T.mania_lane_colors}:LT}},j=(T,I,D=1)=>{return`rgba(${T.combo_colors[I%T.combo_colors.length]},${D})`},s=(T,I,D)=>{let H=T.mania_lane_colors[I]??T.mania_lane_colors[4];return H[D%H.length]??"#ffffff"};var g=(T)=>1-Math.pow(1-T,3),GT=(T)=>384-T;class DT extends b{radius=32;preempt=1200;fade_in=600;timing_points=[];slider_cache=new Map;constructor(T,I,D=0,H=u){super(T,I,D,H)}initialize(T){this.beatmap=T,this.objects=JSON.parse(JSON.stringify(T.objects)).sort((D,H)=>D.time-H.time),this.timing_points=this.process_timing_points([...T.timing_points]),this.slider_cache.clear();let I=gT(T.cs,T.ar,0,0,this.mods);this.radius=WT(I.cs),this.preempt=d(I.ar),this.fade_in=MT(this.preempt),this.preprocess_objects()}set_mods(T){if(this.mods=T,this.beatmap)this.initialize(this.beatmap)}process_timing_points(T){if(T.length===0)return T;T[0].time=0;let I=T[0].ms_per_beat;for(let D of T)if(D.ms_per_beat<0)D.ms_per_beat=I*(-D.ms_per_beat/100);else I=D.ms_per_beat;return T.reverse()}preprocess_objects(){let T=0,I=1;for(let D of this.objects){if(wT(D))T=(T+1)%this.skin.combo_colors.length,I=1;else I++;if(D.combo_number=T,D.combo_count=I,c(D)){let H=D.data;if(K(this.mods,P.HardRock))H.pos=[H.pos[0],GT(H.pos[1])],H.control_points=H.control_points.map((S)=>[S[0],GT(S[1])]);H.computed_path=this.compute_slider_path(H);let V=this.get_timing_at(D.time),F=H.distance/(100*this.beatmap.sv)*V.ms_per_beat;H.duration=F,D.end_time=D.time+F*H.repetitions,D.end_pos=this.get_slider_position(H,D.end_time-D.time,F)}else if(p(D))D.end_pos=[256,192];else{let H=D.data;if(K(this.mods,P.HardRock))H.pos=[H.pos[0],GT(H.pos[1])];D.end_pos=H.pos}}}compute_slider_path(T){if(T.path_type==="L")return TT(T.pos,T.control_points[0],T.distance);let I=[T.pos,...T.control_points];switch(T.path_type){case"P":return YT(I,T.distance);case"C":return CT(I);default:return this.flatten_multibezier(I,T.distance)}}flatten_multibezier(T,I){let D=[],H=[T[0]];for(let F=1;F<T.length;F++){let[S,U]=[T[F-1],T[F]];if(S[0]===U[0]&&S[1]===U[1]){if(H.length>1)D.push(H);H=[U]}else H.push(U)}if(H.length>1)D.push(H);let V=[];for(let F of D){let S=e(F);V.push(...S)}return this.clamp_path_to_distance(V,I)}clamp_path_to_distance(T,I){if(T.length<2)return T;let D=[T[0]],H=0;for(let V=1;V<T.length;V++){let F=z(C(T[V],T[V-1]));if(H+F>=I){let U=(I-H)/F;D.push(r(T[V-1],T[V],U));break}H+=F,D.push(T[V])}return D}get_timing_at(T){for(let I of this.timing_points)if(I.time<=T)return I;return this.timing_points[this.timing_points.length-1]}render(T){let{backend:I,config:D}=this;this.render_background(),I.save(),I.translate(D.offset_x,D.offset_y),I.scale(D.scale,D.scale),this.render_playfield(),this.render_grid();let H=this.get_visible_objects(T,this.preempt,200);for(let V=0;V<H.length-1;V++){let F=H[V],S=H[V+1];if(!p(F)&&!p(S))this.draw_follow_point(F,S,T)}H.reverse();for(let V of H)if(c(V))this.draw_slider(V,T);else if(UT(V))this.draw_hit_circle(V,T);else if(p(V))this.draw_spinner(V,T);for(let V of H){if(!K(this.mods,P.Hidden)&&T<=V.time&&this.skin.enable_approach_circle&&(c(V)||UT(V)))this.draw_approach_circle(V,T);if(c(V)&&T>V.time&&T<=V.end_time+240)this.draw_follow_circle(V,T)}I.restore()}get_slider_body_opacity(T,I){let D=T.time-this.preempt;if(K(this.mods,P.Hidden)){let V=this.preempt*0.4,F=D+V;if(I<D)return 0;if(I<F)return q((I-D)/V,0,1);let S=T.end_time-F;return 1-q((I-F)/S,0,1)}if(I<D)return 0;let H=q((I-D)/this.fade_in,0,1);if(I>T.end_time){let V=q((I-T.end_time)/200,0,1);H=1-g(V)}return q(H,0,1)}draw_approach_circle(T,I){if(K(this.mods,P.Hidden))return;let{backend:D,skin:H,radius:V,preempt:F,fade_in:S}=this,U=T.data.pos,R=T.time-F;if(I<R||I>T.time)return;let $=1+(T.time-I)/F*3,O=V*$,N=Math.min(S*2,F),M=q((I-R)/N,0,0.9);D.set_alpha(M),D.draw_circle(U[0],U[1],O,"transparent",j(H,T.combo_number,1),V*H.approach_circle_width),D.set_alpha(1)}draw_hit_circle(T,I){let{backend:D,skin:H,radius:V,fade_in:F,preempt:S}=this,U=T.data.pos,R=T.time-S,B=240;if(I<R)return;if(I>T.end_time+240)return;let $=1,O=1;if(I<T.time)if(K(this.mods,P.Hidden)){let A=this.preempt*0.4,J=R+A,Q=this.preempt*0.3;if(I<J)$=q((I-R)/A,0,1);else $=1-q((I-J)/Q,0,1)}else $=q((I-R)/this.fade_in,0,1);else{if(K(this.mods,P.Hidden))return;if(!H.enable_hit_animations)return;let A=q((I-T.end_time)/240,0,1);O=1+(H.hit_animation_scale-1)*g(A),$=1-g(A)}if($<=0)return;let N=V*O,M=N*(1-H.circle_border_width/2),W=N*H.circle_border_width;if(D.set_alpha($*H.hit_circle_opacity),D.draw_circle(U[0],U[1],M,j(H,T.combo_number,1),"rgba(255,255,255,1)",W),I<T.time){let A=V*0.8,J=A*0.05;D.draw_text(String(T.combo_count),U[0],U[1]+J,`600 ${A}px ${H.font_family}`,"rgba(255,255,255,1)","center","middle")}D.set_alpha(1)}draw_slider(T,I){let{backend:D,skin:H,radius:V}=this,F=T.data,S=F.computed_path;if(!S||S.length<2)return;let U=this.get_slider_body_opacity(T,I);if(U<=0.01)return;let B=V*0.872,$=j(H,T.combo_number,1);if(H.slider_body_opacity<1&&H.slider_border_opacity>0)this.draw_masked_slider(T,S,$,U,H.slider_body_opacity,H.slider_border_opacity);else{D.save(),D.set_alpha(U*H.slider_border_opacity),D.begin_path(),D.move_to(S[0][0],S[0][1]);for(let A=1;A<S.length;A++)D.line_to(S[A][0],S[A][1]);D.stroke_path("rgba(255,255,255,1)",V*2,"round","round"),D.set_alpha(U*H.slider_body_opacity),D.begin_path(),D.move_to(S[0][0],S[0][1]);for(let A=1;A<S.length;A++)D.line_to(S[A][0],S[A][1]);D.stroke_path($,B*2,"round","round"),D.restore(),D.set_alpha(U)}if(this.draw_slider_ticks(T,F,S,I),F.repetitions>1)this.handle_reverse_arrows(T,F,S,I);let O=T.time-this.preempt,N=150,M=0,W=1;if(K(this.mods,P.Hidden)){let A=this.preempt*0.4,J=O+A,Q=this.preempt*0.3;if(I<O)M=0;else if(I<T.time)if(I<J)M=q((I-O)/A,0,1);else M=1-q((I-J)/Q,0,1);else if(I<T.time+N){let Z=0;if(T.time<J)Z=q((T.time-O)/A,0,1);else Z=1-q((T.time-J)/Q,0,1);let X=(I-T.time)/N;M=Z*(1-g(X)),W=1+g(X)*0.4}}else if(I<O)M=0;else if(I<T.time)M=q((I-O)/this.fade_in,0,1);else if(I<T.time+N){let A=q((T.time-O)/this.fade_in,0,1),J=(I-T.time)/N;M=A*(1-g(J)),W=1+g(J)*0.4}if(M>0){let A=F.pos,J=V*(1-H.circle_border_width/2)*W,Q=V*H.circle_border_width*W;D.set_alpha(M*H.hit_circle_opacity),D.draw_circle(A[0],A[1],J,j(H,T.combo_number,1),"rgba(255,255,255,1)",Q);let Z=V*0.8*W,X=Z*0.05;D.draw_text(String(T.combo_count),A[0],A[1]+X,`600 ${Z}px ${H.font_family}`,"rgba(255,255,255,1)","center","middle")}D.set_alpha(1)}handle_reverse_arrows(T,I,D,H){let{radius:V,preempt:F,fade_in:S}=this,U=T.time-F,R=I.duration,B=1;if(K(this.mods,P.Hidden)){let M=F*0.4,W=U+M,A=F*0.3;if(H<U)B=0;else if(H<W)B=q((H-U)/M,0,1);else B=1-q((H-W)/A,0,1)}else if(H<U)B=0;else if(H<T.time)B=q((H-U)/S,0,1);if(B<=0)return;let $=Math.max(0,H-T.time),O=Math.floor($/R);if(I.repetitions-1-O>=1){let M=O%2===0;this.draw_reverse_arrow(D,M,H,B)}if(H<T.time){if(this.draw_reverse_arrow(D,!0,H,B),I.repetitions>2)this.draw_reverse_arrow(D,!1,H,B)}}draw_masked_slider(T,I,D,H,V,F){let{backend:S,config:U,radius:R}=this,B=this.slider_cache.get(T);if(B&&Math.abs(B.scale-U.scale)<0.001){if(S.save(),U.scale!==0)S.scale(1/U.scale,1/U.scale),S.translate(-U.offset_x,-U.offset_y);let A=B.image.min_x||0,J=B.image.min_y||0,Q=Math.floor(A*U.scale+U.offset_x),Z=Math.floor(J*U.scale+U.offset_y);S.set_alpha(H),S.draw_image(B.image,Q,Z),S.restore();return}let $=S.render_slider_to_image(I,R,"white",D,U.scale,V,F);if(!$)return;if(this.slider_cache.set(T,{image:$,scale:U.scale}),S.save(),U.scale!==0)S.scale(1/U.scale,1/U.scale),S.translate(-U.offset_x,-U.offset_y);let O=$.min_x||0,N=$.min_y||0,M=Math.floor(O*U.scale+U.offset_x),W=Math.floor(N*U.scale+U.offset_y);S.set_alpha(H),S.draw_image($,M,W),S.restore()}draw_slider_ticks(T,I,D,H){let{backend:V,skin:F,radius:S,preempt:U,fade_in:R}=this;if(H>T.end_time)return;let B=this.get_timing_at(T.time),$=100*this.beatmap.sv*B.velocity,O=$/B.beat_length,N=$/this.beatmap.tick_rate,M=O*10,W=I.distance,A=this.get_path_length(D);for(let J=N;J<=W;J+=N){if(J>=W-M)break;let Z=J/W*A,X=this.get_position_at_length(D,Z),Y=1;if(K(this.mods,P.Hidden)){let G=T.time+J/W*I.duration,E=G-Math.min(1000,U*0.7),x=G-U;if(H<x||H>E)Y=0;else if(H>E-200)Y=(E-H)/200;else Y=q((H-x)/R,0,1)}else{let G=T.time-U;if(H<G)Y=0;else{let x=q((H-G)/R,0,1),y=J/W*(R*0.3),L=q((H-G-y)/(R*0.5),0,1);Y=Math.min(x,L)}let E=T.time+J/W*I.duration;if(H>E){let x=(H-E)/150;Y=Math.max(0,Y*(1-x))}}if(Y>0)V.set_alpha(Y*F.slider_tick_opacity),V.draw_circle(X[0],X[1],S*F.slider_tick_size,"rgba(255,255,255,1)","rgba(255,255,255,0.1)",1)}}get_position_at_length(T,I){let D=0;for(let H=1;H<T.length;H++){let V=z(C(T[H],T[H-1]));if(D+V>=I){let F=(I-D)/V;return r(T[H-1],T[H],F)}D+=V}return T[T.length-1]}draw_reverse_arrow(T,I,D,H){let{backend:V,radius:F}=this;if(H<=0)return;let S,U;if(I){S=T[T.length-1];let y=T[T.length-1];for(let L=T.length-2;L>=0;L--){let m=T[L][0]-S[0],l=T[L][1]-S[1];if(m*m+l*l>1){y=T[L];break}}U=XT(C(y,S))}else{S=T[0];let y=T[0];for(let L=1;L<T.length;L++){let m=T[L][0]-S[0],l=T[L][1]-S[1];if(m*m+l*l>1){y=T[L];break}}U=XT(C(y,S))}let R=300,B=35,$=250,O=D%R,N=1;if(O<B)N=1+O/B*0.3;else N=1.3-(O-B)/$*0.3;let M=F*0.6*N,W=Math.atan2(U[1],U[0]),A=Math.PI/3.5,J=M*0.8,Q=M*0.25,Z=S[0]+Math.cos(W)*Q,X=S[1]+Math.sin(W)*Q,Y=Z-Math.cos(W-A)*J,G=X-Math.sin(W-A)*J,E=Z-Math.cos(W+A)*J,x=X-Math.sin(W+A)*J;V.set_alpha(H),V.begin_path(),V.move_to(Y,G),V.line_to(Z,X),V.line_to(E,x),V.stroke_path("rgba(255,255,255,1)",3*N,"round","round"),V.set_alpha(1)}draw_follow_circle(T,I){let{backend:D,skin:H,radius:V}=this,F=T.data,S=F.duration,U=S*F.repetitions,R=Math.min(I-T.time,U),B=this.get_slider_position(F,R,S),$=240;if(I>T.end_time+240)return;let N=1+Math.sin(I*0.008)*0.08,M=1,W=100;if(R<W)M=0.5+q(R/W,0,1)*0.5;let A=H.follow_circle_opacity;if(K(this.mods,P.Hidden)){let Z=T.time-this.preempt,X=this.preempt*0.4,Y=Z+X,G=this.preempt*0.3;if(I<Y)A*=q((I-Z)/X,0,1);else{let E=q((I-Y)/G,0,1);A*=1-E}}if(I>T.end_time){let Z=q((I-T.end_time)/240,0,1);A*=1-Z,M*=1+Z*0.3}if(A<=0)return;if(H.enable_slider_ball){let Z=V*0.85,X=A*(H.slider_ball_opacity/H.follow_circle_opacity);if(I>T.end_time){let Y=q((I-T.end_time)/100,0,1);X*=1-Y}if(X>0)D.set_alpha(X),D.draw_circle(B[0],B[1],Z,j(H,T.combo_number,0.7),"rgba(255,255,255,0.9)",V*0.12)}let J=V*H.follow_circle_factor*N*M,Q=H.follow_circle_use_combo_color?j(H,T.combo_number,1):H.follow_circle_color;D.set_alpha(A),D.begin_path(),D.arc_to(B[0],B[1],J,0,Math.PI*2),D.stroke_path(Q,H.follow_circle_width),D.set_alpha(1)}get_slider_position(T,I,D){let H=T.computed_path;if(!H||H.length===0)return T.pos;let V=I%(D*2),F=V<D?V/D:2-V/D;F=q(F,0,1);let S=this.get_path_length(H),U=F*S,R=0;for(let B=1;B<H.length;B++){let $=z(C(H[B],H[B-1]));if(R+$>=U){let O=(U-R)/$;return r(H[B-1],H[B],O)}R+=$}return H[H.length-1]}get_path_length(T){let I=0;for(let D=1;D<T.length;D++)I+=z(C(T[D],T[D-1]));return I}draw_spinner(T,I){let{backend:D,skin:H}=this,V=T.time-this.preempt;if(I<V)return;let F=q((I-V)/this.fade_in,0,1);if(I>T.end_time){let O=q((I-T.end_time)/200,0,1);F=1-g(O)}if(F<=0)return;let S=256,U=192,R=T.end_time-T.time,B=q((I-T.time)/R,0,1);D.set_alpha(F);let $=H.spinner_size*(1-B);if($>5)D.begin_path(),D.arc_to(S,U,$,0,Math.PI*2),D.stroke_path("rgba(255,255,255,0.6)",4);D.draw_circle(S,U,H.spinner_size,"rgba(0,0,0,0.2)"),D.draw_circle(S,U,12,"white")}draw_follow_point(T,I,D){if(K(this.mods,P.Hidden))return;if(T.combo_number!==I.combo_number)return;let{backend:H,skin:V}=this;if(D<T.end_time||D>I.time)return;let F=T.end_pos,S=I.data.pos,U=S[0]-F[0],R=S[1]-F[1];if(Math.sqrt(U*U+R*R)<48)return;let $=I.time-T.end_time,O=(D-T.end_time)/$,N=1;if(O<0.2)N=O/0.2;if(O>0.8)N=(1-O)/0.2;if(N<=0)return;let M=q(O*1.5,0,1),W=k(F[0],S[0],Math.max(0,O-0.3)),A=k(F[1],S[1],Math.max(0,O-0.3)),J=k(F[0],S[0],M),Q=k(F[1],S[1],M);H.set_alpha(N*0.6),H.begin_path(),H.move_to(W,A),H.line_to(J,Q),H.stroke_path("rgba(255,255,255,1)",V.follow_point_width,"round","round"),H.set_alpha(1)}}var hT=11485,bT=20;class HT extends b{key_count=4;scroll_time=hT/bT;hd_coverage=0.25;fi_coverage=0.6;gradient_ratio=0.2;constructor(T,I,D=0,H=u){super(T,I,D,H);this.update_scroll_time()}initialize(T){this.beatmap=T,this.objects=[...T.objects],this.key_count=Math.floor(T.cs);for(let I of this.objects)if(RT(I))I.end_time=I.data.end_time}set_mods(T){this.mods=T,this.update_scroll_time()}update_scroll_time(){let T=QT(this.mods);this.scroll_time=hT/(bT*T)}time_to_y(T){let I=this.skin.mania_hit_position,D=T/this.scroll_time;return I-D*I}render(T){let{backend:I,config:D,skin:H,key_count:V}=this;this.render_background();let F=V*H.mania_lane_width,S=Math.floor(($T-F)/2),U=H.mania_hit_position;I.save(),I.translate(D.offset_x,D.offset_y),I.scale(D.scale,D.scale),this.render_playfield(F,NT,S),this.draw_lane_keys(T,S),this.draw_judgment_line(S),I.save(),I.begin_path(),I.rect(S,0,F,U),I.clip(),I.set_alpha(0.7),I.draw_rect(S,0,F,U,"#000000"),I.set_alpha(1);for(let R of this.objects){if(R.end_time<T)continue;if(RT(R))this.draw_hold_note(R,T,S);else this.draw_note(R,T,S)}if(K(this.mods,P.Hidden)||K(this.mods,P.FadeIn)){let R=K(this.mods,P.Hidden)?this.hd_coverage:this.fi_coverage,B=U*R,$=U*this.gradient_ratio;if(K(this.mods,P.Hidden)){let O=U-B,N=$/B,M=I.create_linear_gradient(S,O,S,U,[{offset:0,color:"rgba(0,0,0,0)"},{offset:N*0.4,color:"rgba(0,0,0,0.3)"},{offset:N*0.7,color:"rgba(0,0,0,0.75)"},{offset:N*0.9,color:"rgba(0,0,0,0.95)"},{offset:N,color:"rgba(0,0,0,1)"},{offset:1,color:"rgba(0,0,0,1)"}]);I.draw_rect_gradient(S,O,F,B,M)}else{let O=(B-$)/B,N=I.create_linear_gradient(S,0,S,B,[{offset:0,color:"rgba(0,0,0,1)"},{offset:O,color:"rgba(0,0,0,1)"},{offset:O+(1-O)*0.1,color:"rgba(0,0,0,0.95)"},{offset:O+(1-O)*0.4,color:"rgba(0,0,0,0.75)"},{offset:O+(1-O)*0.7,color:"rgba(0,0,0,0.3)"},{offset:1,color:"rgba(0,0,0,0)"}]);I.draw_rect_gradient(S,0,F,B,N)}}I.restore(),I.restore()}get_lane(T){let I=T.data.pos,D=Math.floor(I[0]*this.key_count/512);if(K(this.mods,P.Mirror))D=this.key_count-1-D;return D}draw_note(T,I,D){let{backend:H,skin:V,key_count:F}=this,S=this.get_lane(T),U=V.mania_lane_width,R=V.mania_note_height,B=V.mania_lane_spacing,$=T.time-I,O=this.time_to_y($);if(O<-R-64)return;let N=D+S*U,M=s(V,F,S);H.set_alpha(1),H.draw_rect(N+B,O-R,U-2*B,R,M)}draw_hold_note(T,I,D){let{backend:H,skin:V,key_count:F}=this,S=T.data,U=this.get_lane(T),R=V.mania_lane_width,B=V.mania_note_height,$=V.mania_lane_spacing,O=T.time-I,N=S.end_time-I,M=this.time_to_y(O),W=this.time_to_y(N),A=D+U*R,J=s(V,F,U);if(W<-64&&M<-64)return;let Q=W,X=(O<0?V.mania_hit_position:M)-Q;if(X>0)H.set_alpha(0.9),H.draw_rect(A+$,Q,R-2*$,X,J);if(O>=0)H.set_alpha(1),H.draw_rect(A+$,M-B,R-2*$,B,J);H.set_alpha(1)}draw_judgment_line(T){let{backend:I,skin:D,key_count:H}=this,V=D.mania_lane_width,F=D.mania_hit_position;I.draw_rect(T,F-1,V*H,2,"#ffffff")}draw_lane_keys(T,I){let{backend:D,skin:H,key_count:V}=this,{mania_lane_width:F,mania_hit_position:S,mania_lane_spacing:U,mania_note_height:R}=H,B=R+5,$=new Set,O=50;for(let N of this.objects)if(T>=N.time-50&&T<=N.end_time+50)$.add(this.get_lane(N));for(let N=0;N<V;N++){let M=$.has(N),W=I+N*F,A=s(H,V,N);if(D.set_alpha(0.3),D.draw_rect(W+U,S,F-2*U,B,A),M)D.set_alpha(1),D.draw_rect(W+U,S,F-2*U,B,"#ff6666")}D.set_alpha(1)}}class VT{audio_context;audio_source=null;audio_buffer=null;gain_node;start_time=0;pause_time=0;speed=1;_is_playing=!1;_duration=0;_is_loaded=!1;constructor(T){this.audio_context=T,this.gain_node=this.audio_context.createGain(),this.gain_node.connect(this.audio_context.destination)}get is_playing(){return this._is_playing}get is_loaded(){return this._is_loaded}get duration(){return this._duration}get current_time(){if(!this._is_playing)return this.pause_time;return(this.audio_context.currentTime-this.start_time)*this.speed*1000}async load(T,I=0){this.stop();try{this.audio_buffer=await this.audio_context.decodeAudioData(T.slice(0)),this._duration=this.audio_buffer.duration*1000,this.speed=n(I),this._is_loaded=!0,this.pause_time=0}catch(D){throw console.error("Failed to decode audio data",D),D}}play(T){if(!this.audio_buffer){console.warn("[AudioController] Cannot play: not loaded");return}this.stop_source();let I=T!==void 0?T/1000:this.pause_time/1000,D=this.audio_buffer.duration,H=Math.max(0,Math.min(I,D));if(H>=D){this.pause_time=D*1000;return}this.audio_source=this.audio_context.createBufferSource(),this.audio_source.buffer=this.audio_buffer,this.audio_source.playbackRate.value=this.speed,this.audio_source.connect(this.gain_node),this.audio_source.onended=()=>{if(this._is_playing)this._is_playing=!1,this.pause_time=this._duration,this.audio_source=null},this.start_time=this.audio_context.currentTime-H/this.speed,this.audio_source.start(0,H),this._is_playing=!0}pause(){if(!this._is_playing)return;this.pause_time=this.current_time,this.stop_source(),this._is_playing=!1}seek(T){let I=Math.max(0,Math.min(T,this._duration));if(this._is_playing)this.stop_source(),this._is_playing=!1,this.pause_time=I,this.play();else this.pause_time=I}stop(){this.pause(),this.pause_time=0}get_host_time(T){return this.start_time+T/1000/this.speed}stop_source(){if(this.audio_source){try{this.audio_source.onended=null,this.audio_source.stop(),this.audio_source.disconnect()}catch{}this.audio_source=null}}set_volume(T){if(this.gain_node)this.gain_node.gain.value=Math.max(0,Math.min(1,T))}set_speed(T){if(this._is_playing){let I=this.current_time;this.speed=T,this.start_time=this.audio_context.currentTime-I/1000/T}else this.speed=T;if(this.audio_source)this.audio_source.playbackRate.value=T}dispose(){this.stop(),this.audio_buffer=null,this._is_loaded=!1,this.gain_node.disconnect()}}class FT{video=null;object_url=null;_offset=0;speed=1;get element(){return this.video}get offset(){return this._offset}async load(T,I=0,D=1){this.dispose(),this._offset=I,this.speed=D,this.video=document.createElement("video"),this.video.muted=!0,this.video.loop=!1,this.video.playsInline=!0,this.object_url=URL.createObjectURL(T),this.video.src=this.object_url,await new Promise((H,V)=>{if(!this.video)return V(Error("No video element"));this.video.onloadeddata=()=>H(),this.video.onerror=()=>V(Error("Failed to load video"))}),this.video.playbackRate=D}sync(T){if(!this.video)return;let I=(T-this._offset)/1000;if(I<0){if(!this.video.paused)this.video.pause();return}if(Math.abs(this.video.currentTime-I)>0.1)this.video.currentTime=I}play(){if(this.video&&this.video.paused)this.video.play().catch(()=>{console.log("failed to play video")})}pause(){if(this.video&&!this.video.paused)this.video.pause()}seek(T){if(!this.video)return;let I=Math.max(0,(T-this._offset)/1000);this.video.currentTime=I}set_speed(T){if(this.speed=T,this.video)this.video.playbackRate=T}dispose(){if(this.video)this.video.pause(),this.video.src="",this.video=null;if(this.object_url)URL.revokeObjectURL(this.object_url),this.object_url=null}}class ET{context;gain_node;samples=new Map;volume=1;constructor(T){this.context=T,this.gain_node=T.createGain(),this.gain_node.connect(T.destination)}set_volume(T){this.volume=Math.max(0,Math.min(1,T)),this.gain_node.gain.value=this.volume}async load_samples(T){this.samples.clear();let I=[];for(let[D,H]of T)if(D.endsWith(".wav")||D.endsWith(".mp3")||D.endsWith(".ogg"))I.push(this.context.decodeAudioData(H.slice(0)).then((V)=>{let F=D.toLowerCase().replace(/\.(wav|mp3|ogg)$/,"");this.samples.set(F,V)}).catch((V)=>{console.warn(`[HitsoundController] Failed to decode ${D}:`,V)}));await Promise.all(I)}play(T,I,D,H,V=100,F,S=0){let U=this.get_set_name(T),R=this.get_set_name(I);if(F){let B=F.toLowerCase().replace(/\.(wav|mp3|ogg)$/,"");if(this.play_buffer(B,V,S))return}if(this.play_sound(U,"hitnormal",H,V,S),D&o.Whistle)this.play_sound(R,"hitwhistle",H,V,S);if(D&o.Finish)this.play_sound(R,"hitfinish",H,V,S);if(D&o.Clap)this.play_sound(R,"hitclap",H,V,S)}play_sound(T,I,D,H,V){let F=!1;if(D>1)F=this.play_buffer(`${T}-${I}${D}`,H,V);if(!F)this.play_buffer(`${T}-${I}`,H,V)}play_buffer(T,I,D){let H=this.samples.get(T);if(!H)return!1;let V=this.context.createBufferSource();V.buffer=H;let F=this.context.createGain();return F.gain.value=I/100,V.connect(F),F.connect(this.gain_node),V.start(D),!0}get_set_name(T){switch(T){case 3:return"drum";case 2:return"soft";default:return"normal"}}dispose(){this.samples.clear(),this.gain_node.disconnect()}}class rT{backend;renderer=null;audio_context;audio;hitsounds;video=null;resources=null;animation_frame=null;skin;mods;renderer_config;start_offset;volume;listeners=new Map;_raw_osu_content="";_is_loaded=!1;next_hit_object_index=0;resize_observer=null;key_handler=null;options;constructor(T){this.options=T,this.backend=T.backend??new a,this.skin=IT(T.skin),this.mods=T.mods??0,this.renderer_config={...u,...T.renderer_config},this.calculate_layout(T.canvas.width,T.canvas.height,T.playfield_scale),this.start_offset=T.start_time??-1,this.volume=T.volume??0.5,this.backend.initialize(T.canvas,this.renderer_config.use_high_dpi);let I=window.AudioContext||window.webkitAudioContext;if(this.audio_context=new I,this.audio=new VT(this.audio_context),this.hitsounds=new ET(this.audio_context),this.audio.set_volume(this.volume),this.hitsounds.set_volume(this.volume),T.auto_resize)this.setup_auto_resize();if(T.key_bindings)this.setup_key_bindings(T.key_bindings)}async load_osz(T,I){try{let H=await new h().load_osz(T,{difficulty:I});return this.resources=H,this.setup()}catch(D){let H=D instanceof Error?D.message:String(D);return this.emit("error","INVALID_BEATMAP",H),v("INVALID_BEATMAP",H)}}async load_files(T,I){try{let D=new h;this.resources=await D.load_from_files(T,{difficulty:I});for(let[H,V]of T)if(H.endsWith(".osu")){this._raw_osu_content=typeof V==="string"?V:new TextDecoder().decode(V);break}return this.setup()}catch(D){let H=D instanceof Error?D.message:String(D);return this.emit("error","INVALID_BEATMAP",H),v("INVALID_BEATMAP",H)}}async load_hitsounds(T){try{await this.hitsounds.load_samples(T)}catch(I){console.error("[BeatmapPlayer] Failed to load hitsounds:",I)}}async load_beatmap(T,I,D,H,V){return this.resources={beatmap:T,available_difficulties:[],files:new Map,audio:I,background:D,video:H,video_offset:V},this.setup()}async load_osu_content(T,I){try{let H=new f().parse(T);return this._raw_osu_content=T,this.load_beatmap(H,I)}catch(D){let H=D instanceof Error?D.message:String(D);return this.emit("error","INVALID_BEATMAP",H),v("INVALID_BEATMAP",H)}}async setup(){if(!this.resources)return v("NOT_LOADED","No resources loaded");let{beatmap:T,audio:I,video:D,video_offset:H}=this.resources,V=n(this.mods);if(I)try{await this.audio.load(I,this.mods)}catch(F){let S=F instanceof Error?F.message:String(F);return this.emit("error","AUDIO_DECODE_ERROR",S),v("AUDIO_DECODE_ERROR",S)}if(D)this.video=new FT,await this.video.load(D,H??0,V);try{this.renderer=this.create_renderer(T),this.renderer.initialize(T)}catch(F){let S=F instanceof Error?F.message:String(F);return this.emit("error","UNSUPPORTED_MODE",S),v("UNSUPPORTED_MODE",S)}if(this.start_offset<0&&this._raw_osu_content){let F=BT(this._raw_osu_content);this.start_offset=F>0?F:this.get_last_object_time()*0.42}if(this.start_offset<0)this.start_offset=0;if(this.update_hit_index(this.start_offset),this.resources?.background)try{let F=new Image;F.src=URL.createObjectURL(this.resources.background),await F.decode(),this.renderer.set_background({source:F,width:F.width,height:F.height}),this._is_loaded=!0,requestAnimationFrame(()=>this.render_frame(this.start_offset))}catch(F){console.warn("[BeatmapPlayer] Failed to load background",F)}return this._is_loaded=!0,this.emit("loaded",T,this.resources),requestAnimationFrame(()=>this.render_frame(this.start_offset)),uT(this.resources)}create_renderer(T){switch(T.mode){case 0:return new DT(this.backend,this.skin,this.mods,this.renderer_config);case 3:return new HT(this.backend,this.skin,this.mods,this.renderer_config);case 1:case 2:default:throw Error(`Unsupported game mode: ${_[T.mode]??T.mode}`)}}get_last_object_time(){if(!this.resources?.beatmap.objects.length)return 0;let T=this.resources.beatmap.objects;return T[T.length-1].end_time}async play(){if(!this.renderer||!this._is_loaded){console.warn("[BeatmapPlayer] Cannot play: not loaded");return}if(this.audio.is_playing)return;if(this.audio_context.state==="suspended")await this.audio_context.resume();this.audio.play(this.start_offset),this.video?.play(),this.start_render_loop(),this.emit("play"),this.emit("statechange",!0)}pause(){if(!this.audio.is_playing)return;this.start_offset=this.audio.current_time,this.audio.pause(),this.video?.pause(),this.stop_render_loop(),this.emit("pause"),this.emit("statechange",!1)}set_mods(T){this.mods=T;let I=n(T);if(this.renderer?.set_mods(T),this.audio.set_speed(I),this.video?.set_speed(I),this._is_loaded)requestAnimationFrame(()=>this.render_frame(this.current_time))}seek(T){this.start_offset=Math.max(0,Math.min(T,this.duration)),this.update_hit_index(this.start_offset),this.audio.seek(this.start_offset),this.video?.seek(this.start_offset),this.emit("seek",this.start_offset),this.render_frame(this.start_offset)}async set_difficulty(T){if(!this.resources)return v("NOT_LOADED","No beatmap resources loaded");let I=this.is_playing;this.stop();try{let H=await new h().load_from_files(this.resources.files,{difficulty:T});this.resources=H;let V=this.resources.available_difficulties.find((S)=>S.version===this.resources.beatmap.version)?.filename;if(V){let S=this.resources.files.get(V);if(S)this._raw_osu_content=typeof S==="string"?S:new TextDecoder().decode(S)}let F=await this.setup();if(F.success&&I)this.play();return F}catch(D){let H=D instanceof Error?D.message:String(D);return this.emit("error","INVALID_BEATMAP",H),v("INVALID_BEATMAP",H)}}update_hit_index(T){if(!this.resources?.beatmap)return;let I=this.resources.beatmap.objects;if(this.next_hit_object_index>0&&I[this.next_hit_object_index-1].time>T)this.next_hit_object_index=0;while(this.next_hit_object_index<I.length&&I[this.next_hit_object_index].time<T)this.next_hit_object_index++}stop(){this.pause(),this.start_offset=0,this.audio.seek(0),this.update_hit_index(0),this.render_frame(0)}dispose(){if(this.stop(),this.backend.dispose(),this.audio.dispose(),this.hitsounds.dispose(),this.video?.dispose(),this.renderer?.dispose(),this.listeners.clear(),this.resize_observer)this.resize_observer.disconnect(),this.resize_observer=null;if(this.key_handler)window.removeEventListener("keydown",this.key_handler),this.key_handler=null;if(this.audio_context&&this.audio_context.state!=="closed")this.audio_context.close().catch(()=>{});this.renderer=null,this.resources=null,this._is_loaded=!1,this.listeners.clear()}get current_time(){return this.audio.current_time}get duration(){return this.audio.duration||this.get_last_object_time()}get is_playing(){return this.audio.is_playing}get is_loaded(){return this._is_loaded}get mode(){if(!this.resources)return"standard";switch(this.resources.beatmap.mode){case 1:return"taiko";case 2:return"catch";case 3:return"mania";default:return"standard"}}get beatmap(){return this.resources?.beatmap??null}get available_difficulties(){return this.resources?.available_difficulties??[]}get background(){return this.resources?.background}get config(){return this.renderer_config}resize(T,I,D){if(this.backend.resize(T,I),this.calculate_layout(T,I,D),this._is_loaded)requestAnimationFrame(()=>this.render_frame(this.current_time))}update_config(T){if(this.renderer_config={...this.renderer_config,...T},this.renderer?.update_config(this.renderer_config),this._is_loaded)requestAnimationFrame(()=>this.render_frame(this.current_time))}set_skin(T){if(this.skin=IT(T),this._is_loaded&&this.resources?.beatmap)this.renderer=this.create_renderer(this.resources.beatmap),this.renderer.initialize(this.resources.beatmap),requestAnimationFrame(()=>this.render_frame(this.current_time))}setup_auto_resize(){this.resize_observer=new ResizeObserver(()=>{let I=this.options.canvas.parentElement;if(I){let D=I.getBoundingClientRect();this.resize(D.width,D.height,this.options.playfield_scale)}}),this.resize_observer.observe(this.options.canvas.parentElement||this.options.canvas)}setup_key_bindings(T){this.key_handler=(I)=>{let D={toggle_pause:T.toggle_pause??"Space",seek_forward:T.seek_forward??"ArrowRight",seek_backward:T.seek_backward??"ArrowLeft",toggle_grid:T.toggle_grid??"g"};if(I.code===D.toggle_pause)I.preventDefault(),this.toggle_pause();else if(I.code===D.seek_forward)I.preventDefault(),this.seek(this.current_time+5000);else if(I.code===D.seek_backward)I.preventDefault(),this.seek(this.current_time-5000);else if(I.code===D.toggle_grid)this.toggle_grid()},window.addEventListener("keydown",this.key_handler)}toggle_pause(){if(!this._is_loaded)return;this.is_playing?this.pause():this.play()}toggle_grid(){if(this.renderer_config.grid_level===0)this.renderer_config.grid_level=32;else this.renderer_config.grid_level=0;this.render_frame(this.current_time)}calculate_layout(T,I,D){let F=0.9;if(typeof D==="number")F=D;let S=T*F/512,U=I*F/384,R=Math.min(S,U);if(this.renderer_config.scale=R,this.renderer_config.offset_x=Math.floor((T-512*R)/2),this.renderer_config.offset_y=Math.floor((I-384*R)/2),this.renderer)this.renderer.update_config(this.renderer_config)}set_volume(T){this.volume=T,this.audio.set_volume(T),this.hitsounds.set_volume(T)}on(T,I){if(!this.listeners.has(T))this.listeners.set(T,new Set);this.listeners.get(T).add(I)}off(T,I){this.listeners.get(T)?.delete(I)}emit(T,...I){let D=this.listeners.get(T);if(D)for(let H of D)H(...I)}start_render_loop(){if(this.animation_frame!==null)return;let T=()=>{if(!this.audio.is_playing){this.animation_frame=null;return}let I=this.audio.current_time;if(this.schedule_hitsounds(),this.render_frame(I),this.video?.sync(I),this.emit("timeupdate",I,this.duration),I>=this.duration){this.emit("ended"),this.stop_render_loop(),this.emit("statechange",!1);return}this.animation_frame=requestAnimationFrame(T)};this.animation_frame=requestAnimationFrame(T)}schedule_hitsounds(){if(!this.resources?.beatmap||!this.audio.is_playing)return;let T=this.resources.beatmap.objects,I=this.audio.current_time,H=I+100;while(this.next_hit_object_index<T.length&&T[this.next_hit_object_index].time<=H){let V=T[this.next_hit_object_index];if(V.time>=I-20)this.play_hitsound(V);this.next_hit_object_index++}}play_hitsound(T){let I=this.get_timing_point(T.time),D=I.volume,H=I.sample_set,V=I.sample_set,F=I.sample_index,S=void 0;if(T.hit_sample){let R=T.hit_sample;if(R.normal_set!==0){if(H=R.normal_set,R.addition_set===0)V=H}if(R.addition_set!==0)V=R.addition_set;if(R.index!==0)F=R.index;if(R.volume!==0)D=R.volume;S=R.filename}if(H===0)H=1;if(V===0)V=H;let U=this.audio.get_host_time(T.time);this.hitsounds.play(H,V,T.hit_sound,F,D,S,U)}get_timing_point(T){let I=this.resources?.beatmap.timing_points??[];for(let D=I.length-1;D>=0;D--)if(I[D].time<=T)return I[D];return I[0]}stop_render_loop(){if(this.animation_frame!==null)cancelAnimationFrame(this.animation_frame),this.animation_frame=null}render_frame(T){this.backend.clear(),this.renderer?.render(T)}}export{C as vec2_sub,XT as vec2_normalize,fT as vec2_mul,r as vec2_lerp,rI as vec2_len_sq,z as vec2_len,bI as vec2_dot,eT as vec2_div,mI as vec2_dist,kT as vec2_add,SI as unwrap,$I as toggle_mod,uT as ok,OI as mods_to_string,PI as mods_from_string,IT as merge_skin,k as lerp,p as is_spinner,c as is_slider,UI as is_ok,wT as is_new_combo,RT as is_hold,RI as is_err,UT as is_circle,JT as inverse_difficulty_range,K as has_mod,n as get_speed_multiplier,QT as get_rate_multiplier,s as get_mania_lane_color,j as get_combo_color,NI as get_available_mods,gT as get_adjusted_difficulty,YT as flatten_perfect,TT as flatten_linear,CT as flatten_catmull,e as flatten_bezier,OT as extract_video_info,BT as extract_preview_time,PT as extract_background_filename,AT as extract_audio_filename,v as err,jT as difficulty_range,q as clamp,WT as calculate_radius,d as calculate_preempt,MT as calculate_fade_in,tT as apply_rate_to_ar,aT as apply_mods_to_difficulty,FT as VideoController,DT as StandardRenderer,mT as SpeedChangingMods,ST as SampleSet,t as PREEMPT_RANGE,cT as PREEMPT_MIN,$T as PLAYFIELD_WIDTH,NT as PLAYFIELD_HEIGHT,h as OszLoader,P as Mods,dT as ModNightcore,iT as ModHidden,ZT as ModHardRock,sT as ModHalfTime,qT as ModEasy,nT as ModDoubleTime,HT as ManiaRenderer,o as HitSoundType,w as HitObjectType,oT as HD_FADE_OUT_MULTIPLIER,_T as HD_FADE_IN_MULTIPLIER,yT as GridLevel,_ as GameMode,vT as ErrorCode,AI as DifficultyChangingMods,zT as DEFAULT_SKIN,u as DEFAULT_RENDERER_CONFIG,a as CanvasBackend,rT as BeatmapPlayer,f as BeatmapParser,b as BaseRenderer,VT as AudioController};
|
|
3
|
+
`);for(let H of D)if(this.parse_line(H),this.section==="Events"||this.section==="TimingPoints"||this.section==="Colours"||this.section==="HitObjects")break;if(this.beatmap.ar===-1)this.beatmap.ar=this.beatmap.od;return{filename:I,title:this.beatmap.title,artist:this.beatmap.artist,version:this.beatmap.version,mode:this.beatmap.mode,ar:this.beatmap.ar,cs:this.beatmap.cs,od:this.beatmap.od,hp:this.beatmap.hp}}create_empty_beatmap(){return{format_version:1,mode:0,title:"",title_unicode:"",artist:"",artist_unicode:"",creator:"",version:"",ar:-1,cs:5,od:5,hp:5,sv:1,tick_rate:1,timing_points:[],objects:[],circle_count:0,slider_count:0,spinner_count:0,hold_count:0}}parse_line(T){if(T.startsWith(" ")||T.startsWith("_"))return;let I=T.trim();if(I.length===0||I.startsWith("//"))return;if(I.startsWith("[")&&I.endsWith("]")){this.section=I.slice(1,-1);return}let D=I.match(/osu file format v(\d+)/);if(D){this.beatmap.format_version=parseInt(D[1]);return}switch(this.section){case"General":this.parse_general(I);break;case"Metadata":this.parse_metadata(I);break;case"Difficulty":this.parse_difficulty(I);break;case"TimingPoints":this.parse_timing_point(I);break;case"HitObjects":this.parse_hit_object(I);break}}parse_general(T){let[I,D]=this.split_property(T);if(I==="Mode")this.beatmap.mode=parseInt(D)}parse_metadata(T){let[I,D]=this.split_property(T);switch(I){case"Title":this.beatmap.title=D;break;case"TitleUnicode":this.beatmap.title_unicode=D;break;case"Artist":this.beatmap.artist=D;break;case"ArtistUnicode":this.beatmap.artist_unicode=D;break;case"Creator":this.beatmap.creator=D;break;case"Version":this.beatmap.version=D;break}}parse_difficulty(T){let[I,D]=this.split_property(T),H=parseFloat(D);switch(I){case"CircleSize":this.beatmap.cs=H;break;case"OverallDifficulty":this.beatmap.od=H;break;case"ApproachRate":this.beatmap.ar=H;break;case"HPDrainRate":this.beatmap.hp=H;break;case"SliderMultiplier":this.beatmap.sv=H;break;case"SliderTickRate":this.beatmap.tick_rate=H;break}}current_beat_length=500;parse_timing_point(T){let I=T.split(",");if(I.length<2)return;let D=parseFloat(I[0]),H=parseFloat(I[1]),V=parseInt(I[3]??"0"),F=parseInt(I[4]??"0"),S=parseInt(I[5]??"100"),U=I.length>=7?I[6].trim()!=="0":!0,R=I.length>=8?(parseInt(I[7])&1)!==0:!1,B=H<0,$=B?-100/H:1;if(!B&&H>0)this.current_beat_length=H;this.beatmap.timing_points.push({time:D,ms_per_beat:H,change:U,sample_set:V,sample_index:F,volume:S,kiai:R,velocity:$,beat_length:this.current_beat_length})}parse_hit_object(T){let I=T.split(",");if(I.length<4)return;let D=parseFloat(I[0]),H=parseFloat(I[1]),V=parseFloat(I[2]),F=parseInt(I[3]),S=parseInt(I[4]??"0"),U={time:V,type:F,hit_sound:S,end_time:V,end_pos:[D,H],combo_number:0,combo_count:0,data:{pos:[D,H]}};if(F&w.Circle)this.beatmap.circle_count++,U.data={pos:[D,H]},this.parse_extras(I,5,U);else if(F&w.Slider){if(I.length<8)return;this.beatmap.slider_count++;let R=this.parse_slider_data(I,D,H);if(U.data=R,I.length>8)U.edge_sounds=I[8].split("|").map((B)=>parseInt(B));if(I.length>9)U.edge_sets=I[9].split("|").map((B)=>{let $=B.split(":");return[parseInt($[0]),parseInt($[1])]});this.parse_extras(I,10,U)}else if(F&w.Spinner){this.beatmap.spinner_count++;let R=parseInt(I[5]);U.data={end_time:R},U.end_time=R,U.end_pos=[256,192],this.parse_extras(I,6,U)}else if(F&w.Hold){this.beatmap.hold_count++;let R=parseInt(I[5].split(":")[0]);U.data={pos:[D,H],end_time:R},U.end_time=R,this.parse_extras(I,6,U)}this.beatmap.objects.push(U)}parse_extras(T,I,D){if(I<T.length){let H=T[I];if(H&&H.includes(":")){let V=H.split(":");D.hit_sample={normal_set:parseInt(V[0]),addition_set:parseInt(V[1]),index:parseInt(V[2]),volume:parseInt(V[3]),filename:V[4]||void 0}}}}parse_slider_data(T,I,D){let H=T[5].split("|"),V=H[0],F=[];for(let R=1;R<H.length;R++){let B=H[R].split(":");F.push([parseInt(B[0]),parseInt(B[1])])}let S=parseInt(T[6]),U=parseFloat(T[7]);return{pos:[I,D],path_type:V,control_points:F,repetitions:S,distance:U}}split_property(T){let I=T.indexOf(":");if(I===-1)return[T,""];return[T.slice(0,I).trim(),T.slice(I+1).trim()]}}var i=4096,BT=(T)=>{let I=T.slice(0,i).match(/PreviewTime:\s*([+-]?\d+)/);return I?parseInt(I[1]):-1},AT=(T)=>{let I=T.slice(0,i).match(/AudioFilename:\s*(.+)/);return I?I[1].trim():null},PT=(T)=>{let I=T.slice(0,i).match(/0,0,"([^"]+)"/);return I?I[1]:null},OT=(T)=>{let I=T.slice(0,i).match(/(?:Video|1),(-?\d+),"([^"]+)"/);if(!I)return null;return{offset:parseInt(I[1]),filename:I[2]}};class h{async load_osz(T,I){let D=await xT.loadAsync(T),H=new Map;for(let[V,F]of Object.entries(D.files))if(!F.dir)H.set(V,await F.async("arraybuffer"));return this.load_from_files(H,I)}async load_from_files(T,I){let D=[...T.keys()].filter((J)=>J.toLowerCase().endsWith(".osu"));if(D.length===0)throw Error("No .osu files found in beatmap");let H=new f,V=D.map((J)=>{let Q=this.to_string(T.get(J));return H.parse_info(Q,J)}),F=this.select_difficulty(D,T,I?.difficulty),S=this.to_string(T.get(F)),U=H.parse(S),R=AT(S),B=PT(S),$=OT(S),O=new Map;for(let[J,Q]of T)if(Q instanceof ArrayBuffer)O.set(J,Q);else O.set(J,new TextEncoder().encode(Q).buffer);let N;if(R)N=this.find_file(O,R);let M;if(B){let J=this.find_file(O,B);if(J)M=new Blob([J])}let W,A;if($){let J=this.find_file(O,$.filename);if(J)W=new Blob([J]),A=$.offset}return{beatmap:U,available_difficulties:V,files:O,audio:N,background:M,video:W,audio_filename:R??void 0,background_filename:B??void 0,video_filename:$?.filename,video_offset:A}}async list_difficulties(T){let I=await xT.loadAsync(T),D=[];for(let V of Object.keys(I.files))if(V.toLowerCase().endsWith(".osu"))D.push(V);let H=[];for(let V of D){let S=(await I.files[V].async("string")).match(/Version:\s*(.+)/);H.push(S?S[1].trim():V)}return H}select_difficulty(T,I,D){if(D===void 0)return T[0];if(typeof D==="number"){if(D<0||D>=T.length)throw Error(`Difficulty index ${D} out of range (0-${T.length-1})`);return T[D]}for(let H of T){let F=this.to_string(I.get(H)).match(/Version:\s*(.+)/);if(F&&F[1].trim()===D)return H}for(let H of T)if(H.toLowerCase().includes(D.toLowerCase()))return H;throw Error(`Difficulty "${D}" not found`)}find_file(T,I){if(T.has(I))return T.get(I);let D=I.toLowerCase();for(let[H,V]of T)if(H.toLowerCase()===D)return V;return}to_string(T){if(typeof T==="string")return T;return new TextDecoder().decode(T)}}var $T=512,NT=384,yT;((F)=>{F[F.None=0]="None";F[F.Large=32]="Large";F[F.Medium=16]="Medium";F[F.Small=8]="Small";F[F.Tiny=4]="Tiny"})(yT||={});var u={offset_x:64,offset_y:48,scale:1,show_playfield:!0,playfield_color:"#ffffff",playfield_opacity:0.1,grid_level:0,grid_color:"#ffffff",grid_opacity:0.35,use_high_dpi:!0};class b{backend;skin;config;mods;beatmap;objects=[];background_image=null;constructor(T,I,D=0,H=u){this.backend=T,this.skin=I,this.mods=D,this.config={...u,...H}}set_background(T){this.background_image=T}update_config(T){this.config={...this.config,...T}}dispose(){this.objects=[]}render_playfield(T,I,D,H){if(!this.config.show_playfield)return;let{backend:V,config:F}=this,S=T??512,U=I??384,R=D??0,B=H??0;V.save(),V.set_alpha(F.playfield_opacity),V.begin_path(),V.move_to(R,B),V.line_to(R+S,B),V.line_to(R+S,B+U),V.line_to(R,B+U),V.line_to(R,B),V.stroke_path(F.playfield_color,2),V.restore()}render_grid(){if(this.config.grid_level===0)return;let{backend:T,config:I}=this,D=I.grid_level;T.save(),T.set_alpha(I.grid_opacity);for(let H=0;H<=512;H+=D)T.begin_path(),T.move_to(H,0),T.line_to(H,384),T.stroke_path(I.grid_color,H%(D*4)===0?1:0.5);for(let H=0;H<=384;H+=D)T.begin_path(),T.move_to(0,H),T.line_to(512,H),T.stroke_path(I.grid_color,H%(D*4)===0?1:0.5);T.restore()}render_background(){if(!this.background_image)return;let{backend:T}=this;T.save(),T.set_alpha(0.3);let{width:I,height:D}=T,{width:H,height:V}=this.background_image;if(H>0&&V>0){let F=Math.max(I/H,D/V),S=H*F,U=V*F,R=(I-S)/2,B=(D-U)/2;T.draw_image(this.background_image,R,B,S,U)}else T.draw_image(this.background_image,0,0,I,D);T.restore()}get_visible_objects(T,I,D){let H=[];for(let V of this.objects){let F=V.time-I,S=V.end_time+D;if(T>=F&&T<=S)H.push(V)}return H}}class a{ctx;_width=0;_height=0;_dpr=1;get width(){return this._width}get height(){return this._height}initialize(T,I=!0){this._dpr=I?window.devicePixelRatio||1:1;let D=T.clientWidth||T.width,H=T.clientHeight||T.height;T.width=D*this._dpr,T.height=H*this._dpr;let V=T.getContext("2d",{alpha:!0,desynchronized:!0});if(!V)throw Error("Failed to get 2D context");this.ctx=V,this._width=D,this._height=H,V.scale(this._dpr,this._dpr),V.imageSmoothingEnabled=!0,V.imageSmoothingQuality="high"}clear(){this.ctx.save(),this.ctx.setTransform(this._dpr,0,0,this._dpr,0,0),this.ctx.clearRect(0,0,this._width,this._height),this.ctx.restore()}dispose(){}resize(T,I){this._width=T,this._height=I,this._dpr=window.devicePixelRatio||1;let D=this.ctx.canvas;D.width=T*this._dpr,D.height=I*this._dpr,D.style.width=`${T}px`,D.style.height=`${I}px`,this.ctx.resetTransform(),this.ctx.scale(this._dpr,this._dpr),this.ctx.imageSmoothingEnabled=!0,this.ctx.imageSmoothingQuality="high"}draw_circle(T,I,D,H,V,F){let S=this.ctx;if(S.beginPath(),S.arc(T,I,D,0,Math.PI*2),H&&H!=="transparent")S.fillStyle=H,S.fill();if(V&&F&&F>0)S.strokeStyle=V,S.lineWidth=F,S.stroke()}draw_arc(T,I,D,H,V,F,S,U=!1){let R=this.ctx;R.beginPath(),R.arc(T,I,D,H,V,U),R.strokeStyle=F,R.lineWidth=S,R.stroke()}draw_rect(T,I,D,H,V){this.ctx.fillStyle=V,this.ctx.fillRect(T,I,D,H)}draw_rect_gradient(T,I,D,H,V){this.ctx.fillStyle=V,this.ctx.fillRect(T,I,D,H)}create_linear_gradient(T,I,D,H,V){let F=this.ctx.createLinearGradient(T,I,D,H);for(let S of V)F.addColorStop(S.offset,S.color);return F}draw_text(T,I,D,H,V,F="left",S="alphabetic"){let U=this.ctx;U.font=H,U.fillStyle=V,U.textAlign=F,U.textBaseline=S,U.fillText(T,I,D)}begin_path(){this.ctx.beginPath()}move_to(T,I){this.ctx.moveTo(T,I)}line_to(T,I){this.ctx.lineTo(T,I)}bezier_curve_to(T,I,D,H,V,F){this.ctx.bezierCurveTo(T,I,D,H,V,F)}quadratic_curve_to(T,I,D,H){this.ctx.quadraticCurveTo(T,I,D,H)}arc_to(T,I,D,H,V,F){this.ctx.arc(T,I,D,H,V,F)}rect(T,I,D,H){this.ctx.rect(T,I,D,H)}clip(){this.ctx.clip()}stroke_path(T,I,D="butt",H="miter"){let V=this.ctx;V.strokeStyle=T,V.lineWidth=I,V.lineCap=D,V.lineJoin=H,V.stroke()}fill_path(T){this.ctx.fillStyle=T,this.ctx.fill()}save(){this.ctx.save()}restore(){this.ctx.restore()}translate(T,I){this.ctx.translate(T,I)}scale(T,I){this.ctx.scale(T,I)}rotate(T){this.ctx.rotate(T)}set_alpha(T){this.ctx.globalAlpha=T}set_shadow(T,I){this.ctx.shadowColor=T,this.ctx.shadowBlur=I}set_composite_operation(T){this.ctx.globalCompositeOperation=T}draw_image(T,I,D,H,V){if(H!==void 0&&V!==void 0)this.ctx.drawImage(T.source,I,D,H,V);else this.ctx.drawImage(T.source,I,D)}draw_image_part(T,I,D,H,V,F,S,U,R){this.ctx.drawImage(T.source,I,D,H,V,F,S,U,R)}render_slider_to_image(T,I,D,H,V,F=1,S=1){let U=1/0,R=1/0,B=-1/0,$=-1/0;for(let Z of T){if(Z[0]<U)U=Z[0];if(Z[0]>B)B=Z[0];if(Z[1]<R)R=Z[1];if(Z[1]>$)$=Z[1]}let O=I+2;U-=O,R-=O,B+=O,$+=O;let N=Math.ceil((B-U)*V),M=Math.ceil(($-R)*V);if(N<=0||M<=0)return null;let W=document.createElement("canvas");W.width=N,W.height=M;let A=W.getContext("2d");if(!A)return null;A.save(),A.scale(V,V),A.translate(-U,-R);let J=()=>{if(A.beginPath(),T.length>0){A.moveTo(T[0][0],T[0][1]);for(let Z=1;Z<T.length;Z++)A.lineTo(T[Z][0],T[Z][1])}};A.lineCap="round",A.lineJoin="round",A.globalAlpha=S,A.strokeStyle=D,A.lineWidth=I*2,J(),A.stroke();let Q=I*0.872;if(F<1)A.globalCompositeOperation="destination-out",A.globalAlpha=1,A.lineWidth=Q*2,J(),A.stroke(),A.globalCompositeOperation="source-over";return A.globalAlpha=F,A.strokeStyle=H,A.lineWidth=Q*2,J(),A.stroke(),A.restore(),{source:W,width:N,height:M,min_x:U,min_y:R}}}var t={min:1800,mid:1200,max:450},cT=450,jT=(T,I)=>{if(T>5)return I.mid+(I.max-I.mid)*(T-5)/5;if(T<5)return I.mid+(I.mid-I.min)*(T-5)/5;return I.mid},JT=(T,I)=>{if(Math.sign(T-I.mid)===Math.sign(I.max-I.mid))return(T-I.mid)/(I.max-I.mid)*5+5;return(T-I.mid)/(I.mid-I.min)*5+5},d=(T)=>jT(T,t),MT=(T)=>400*Math.min(1,T/450),pT=(T)=>{return(1-0.7*((T-5)/5))/2},WT=(T)=>pT(T)*64;var ZT={name:"Hard Rock",acronym:"HR",apply_to_difficulty(T){T.cs=Math.min(T.cs*1.3,10),T.ar=Math.min(T.ar*1.4,10),T.od=Math.min(T.od*1.4,10),T.hp=Math.min(T.hp*1.4,10)}};var qT={name:"Easy",acronym:"EZ",apply_to_difficulty(T){T.cs*=0.5,T.ar*=0.5,T.od*=0.5,T.hp*=0.5}};var nT={name:"Double Time",acronym:"DT",get_rate_multiplier:()=>1.5},dT={name:"Nightcore",acronym:"NC",get_rate_multiplier:()=>1.5};var sT={name:"Half Time",acronym:"HT",get_rate_multiplier:()=>0.75};var _T=0.4,oT=0.3,iT={name:"Hidden",acronym:"HD"};var QT=(T)=>{if(T&(P.DoubleTime|P.Nightcore))return 1.5;if(T&P.HalfTime)return 0.75;return 1},aT=(T,I)=>{if(I&P.Easy)qT.apply_to_difficulty(T);if(I&P.HardRock)ZT.apply_to_difficulty(T)},tT=(T,I)=>{if(I===1)return T;let D=d(T)/I;return JT(D,t)},gT=(T,I,D,H,V)=>{let F={cs:T,ar:I,od:D,hp:H};aT(F,V);let S=QT(V);return F.ar=tT(F.ar,S),F};var kT=(T,I)=>[T[0]+I[0],T[1]+I[1]],C=(T,I)=>[T[0]-I[0],T[1]-I[1]],fT=(T,I)=>[T[0]*I,T[1]*I],eT=(T,I)=>[T[0]/I,T[1]/I],bI=(T,I)=>T[0]*I[0]+T[1]*I[1],z=(T)=>Math.sqrt(T[0]*T[0]+T[1]*T[1]),rI=(T)=>T[0]*T[0]+T[1]*T[1],mI=(T,I)=>z(C(T,I)),XT=(T)=>{let I=z(T);return I>0?eT(T,I):[0,0]},k=(T,I,D)=>T+(I-T)*D,r=(T,I,D)=>[k(T[0],I[0],D),k(T[1],I[1],D)],q=(T,I,D)=>Math.min(D,Math.max(I,T));var e=(T,I=0.25)=>{if(T.length<2)return[...T];let D=[];return KT(T,D,I),D},KT=(T,I,D)=>{if(TI(T,D)){if(I.length===0)I.push(T[0]);I.push(T[T.length-1]);return}let H=[],V=[];DI(T,H,V),KT(H,I,D),KT(V,I,D)},TI=(T,I)=>{if(T.length<=2)return!0;let D=T[0],H=T[T.length-1];for(let V=1;V<T.length-1;V++)if(II(T[V],D,H)>I)return!1;return!0},II=(T,I,D)=>{let H=C(D,I),V=H[0]*H[0]+H[1]*H[1];if(V===0)return z(C(T,I));let F=Math.max(0,Math.min(1,((T[0]-I[0])*H[0]+(T[1]-I[1])*H[1])/V)),S=[I[0]+F*H[0],I[1]+F*H[1]];return z(C(T,S))},DI=(T,I,D)=>{let H=T.length,V=[T];for(let F=1;F<H;F++){V[F]=[];for(let S=0;S<H-F;S++)V[F][S]=r(V[F-1][S],V[F-1][S+1],0.5)}for(let F=0;F<H;F++)I.push(V[F][0]),D.push(V[H-1-F][F])},TT=(T,I,D)=>{let H=C(I,T),V=z(H);if(V===0)return[T];let F=[H[0]/V,H[1]/V],S=kT(T,fT(F,D));return[T,S]},YT=(T,I)=>{if(T.length!==3)return e(T);let[D,H,V]=T,F=HI(D,H,V);if(!F)return TT(D,V,I);let S=z(C(D,F)),U=Math.atan2(D[1]-F[1],D[0]-F[0]),R=Math.atan2(V[1]-F[1],V[0]-F[0]),$=(H[0]-D[0])*(V[1]-D[1])-(H[1]-D[1])*(V[0]-D[0])>0,O=R-U;if($&&O<0)O+=2*Math.PI;if(!$&&O>0)O-=2*Math.PI;let N=Math.abs(O)*S,M=Math.max(2,Math.ceil(Math.abs(O)*S/4)),W=[];for(let A=0;A<=M;A++){let J=A/M,Q=U+O*J*Math.min(1,I/N);W.push([F[0]+S*Math.cos(Q),F[1]+S*Math.sin(Q)])}return W},HI=(T,I,D)=>{let H=2*(T[0]*(I[1]-D[1])+I[0]*(D[1]-T[1])+D[0]*(T[1]-I[1]));if(Math.abs(H)<0.001)return null;let V=((T[0]*T[0]+T[1]*T[1])*(I[1]-D[1])+(I[0]*I[0]+I[1]*I[1])*(D[1]-T[1])+(D[0]*D[0]+D[1]*D[1])*(T[1]-I[1]))/H,F=((T[0]*T[0]+T[1]*T[1])*(D[0]-I[0])+(I[0]*I[0]+I[1]*I[1])*(T[0]-D[0])+(D[0]*D[0]+D[1]*D[1])*(I[0]-T[0]))/H;return[V,F]},CT=(T)=>{if(T.length<2)return[...T];let I=[];for(let D=0;D<T.length-1;D++){let H=T[Math.max(0,D-1)],V=T[D],F=T[D+1],S=T[Math.min(T.length-1,D+2)],U=50;for(let R=0;R<=50;R++){let B=R/50;I.push(VI(H,V,F,S,B))}}return I},VI=(T,I,D,H,V)=>{let F=V*V,S=F*V;return[0.5*(2*I[0]+(-T[0]+D[0])*V+(2*T[0]-5*I[0]+4*D[0]-H[0])*F+(-T[0]+3*I[0]-3*D[0]+H[0])*S),0.5*(2*I[1]+(-T[1]+D[1])*V+(2*T[1]-5*I[1]+4*D[1]-H[1])*F+(-T[1]+3*I[1]-3*D[1]+H[1])*S)]};var LT={1:["#d5bc00"],2:["#ffffff","#ffffff"],3:["#ffffff","#d5bc00","#ffffff"],4:["#ffffff","#dc8dba","#dc8dba","#ffffff"],5:["#ffffff","#dc8dba","#d5bc00","#dc8dba","#ffffff"],6:["#ffffff","#dc8dba","#ffffff","#ffffff","#dc8dba","#ffffff"],7:["#ffffff","#dc8dba","#ffffff","#d5bc00","#ffffff","#dc8dba","#ffffff"],8:["#d5bc00","#ffffff","#dc8dba","#ffffff","#d5bc00","#ffffff","#dc8dba","#ffffff"],9:["#ffffff","#dc8dba","#ffffff","#dc8dba","#d5bc00","#dc8dba","#ffffff","#dc8dba","#ffffff"],10:["#ffffff","#dc8dba","#d5bc00","#dc8dba","#ffffff","#ffffff","#dc8dba","#d5bc00","#dc8dba","#ffffff"]},zT={combo_colors:["0,185,0","7, 105, 227","224, 4, 38","227, 171, 2"],circle_border_width:0.13,hit_circle_opacity:0.85,approach_circle_width:0.1,slider_body_opacity:0.8,slider_border_opacity:1,slider_tick_opacity:0.75,slider_tick_size:0.1,follow_circle_factor:1.5,follow_circle_width:4,follow_circle_opacity:0.8,follow_circle_color:"#ffffffff",follow_circle_use_combo_color:!1,slider_ball_color:"#ffffff",slider_ball_opacity:1,enable_slider_ball:!0,follow_point_width:2,spinner_size:180,spinner_center_size:10,mania_lane_width:30,mania_note_height:15,mania_hit_position:364,mania_lane_spacing:1,mania_lane_colors:LT,font_family:'"Exo 2", sans-serif',hit_animation_duration:300,hit_animation_scale:1.3,enable_hit_animations:!0,enable_follow_circle_animations:!0,enable_approach_circle:!0},IT=(T)=>{if(!T)return{...zT};return{...zT,...T,mania_lane_colors:T.mania_lane_colors?{...LT,...T.mania_lane_colors}:LT}},j=(T,I,D=1)=>{return`rgba(${T.combo_colors[I%T.combo_colors.length]},${D})`},s=(T,I,D)=>{let H=T.mania_lane_colors[I]??T.mania_lane_colors[4];return H[D%H.length]??"#ffffff"};var g=(T)=>1-Math.pow(1-T,3),GT=(T)=>384-T;class DT extends b{radius=32;preempt=1200;fade_in=600;timing_points=[];slider_cache=new Map;constructor(T,I,D=0,H=u){super(T,I,D,H)}initialize(T){this.beatmap=T,this.objects=JSON.parse(JSON.stringify(T.objects)).sort((D,H)=>D.time-H.time),this.timing_points=this.process_timing_points([...T.timing_points]),this.slider_cache.clear();let I=gT(T.cs,T.ar,0,0,this.mods);this.radius=WT(I.cs),this.preempt=d(I.ar),this.fade_in=MT(this.preempt),this.preprocess_objects()}set_mods(T){if(this.mods=T,this.beatmap)this.initialize(this.beatmap)}process_timing_points(T){if(T.length===0)return T;T[0].time=0;let I=T[0].ms_per_beat;for(let D of T)if(D.ms_per_beat<0)D.ms_per_beat=I*(-D.ms_per_beat/100);else I=D.ms_per_beat;return T.reverse()}preprocess_objects(){let T=0,I=1;for(let D of this.objects){if(wT(D))T=(T+1)%this.skin.combo_colors.length,I=1;else I++;if(D.combo_number=T,D.combo_count=I,c(D)){let H=D.data;if(K(this.mods,P.HardRock))H.pos=[H.pos[0],GT(H.pos[1])],H.control_points=H.control_points.map((S)=>[S[0],GT(S[1])]);H.computed_path=this.compute_slider_path(H);let V=this.get_timing_at(D.time),F=H.distance/(100*this.beatmap.sv)*V.ms_per_beat;H.duration=F,D.end_time=D.time+F*H.repetitions,D.end_pos=this.get_slider_position(H,D.end_time-D.time,F)}else if(p(D))D.end_pos=[256,192];else{let H=D.data;if(K(this.mods,P.HardRock))H.pos=[H.pos[0],GT(H.pos[1])];D.end_pos=H.pos}}}compute_slider_path(T){if(T.path_type==="L")return TT(T.pos,T.control_points[0],T.distance);let I=[T.pos,...T.control_points];switch(T.path_type){case"P":return YT(I,T.distance);case"C":return CT(I);default:return this.flatten_multibezier(I,T.distance)}}flatten_multibezier(T,I){let D=[],H=[T[0]];for(let F=1;F<T.length;F++){let[S,U]=[T[F-1],T[F]];if(S[0]===U[0]&&S[1]===U[1]){if(H.length>1)D.push(H);H=[U]}else H.push(U)}if(H.length>1)D.push(H);let V=[];for(let F of D){let S=e(F);V.push(...S)}return this.clamp_path_to_distance(V,I)}clamp_path_to_distance(T,I){if(T.length<2)return T;let D=[T[0]],H=0;for(let V=1;V<T.length;V++){let F=z(C(T[V],T[V-1]));if(H+F>=I){let U=(I-H)/F;D.push(r(T[V-1],T[V],U));break}H+=F,D.push(T[V])}return D}get_timing_at(T){for(let I of this.timing_points)if(I.time<=T)return I;return this.timing_points[this.timing_points.length-1]}render(T){let{backend:I,config:D}=this;this.render_background(),I.save(),I.translate(D.offset_x,D.offset_y),I.scale(D.scale,D.scale),this.render_playfield(),this.render_grid();let H=this.get_visible_objects(T,this.preempt,200);for(let V=0;V<H.length-1;V++){let F=H[V],S=H[V+1];if(!p(F)&&!p(S))this.draw_follow_point(F,S,T)}H.reverse();for(let V of H)if(c(V))this.draw_slider(V,T);else if(UT(V))this.draw_hit_circle(V,T);else if(p(V))this.draw_spinner(V,T);for(let V of H){if(!K(this.mods,P.Hidden)&&T<=V.time&&this.skin.enable_approach_circle&&(c(V)||UT(V)))this.draw_approach_circle(V,T);if(c(V)&&T>V.time&&T<=V.end_time+240)this.draw_follow_circle(V,T)}I.restore()}get_slider_body_opacity(T,I){let D=T.time-this.preempt;if(K(this.mods,P.Hidden)){let V=this.preempt*0.4,F=D+V;if(I<D)return 0;if(I<F)return q((I-D)/V,0,1);let S=T.end_time-F;return 1-q((I-F)/S,0,1)}if(I<D)return 0;let H=q((I-D)/this.fade_in,0,1);if(I>T.end_time){let V=q((I-T.end_time)/200,0,1);H=1-g(V)}return q(H,0,1)}draw_approach_circle(T,I){if(K(this.mods,P.Hidden))return;let{backend:D,skin:H,radius:V,preempt:F,fade_in:S}=this,U=T.data.pos,R=T.time-F;if(I<R||I>T.time)return;let $=1+(T.time-I)/F*3,O=V*$,N=Math.min(S*2,F),M=q((I-R)/N,0,0.9);D.set_alpha(M),D.draw_circle(U[0],U[1],O,"transparent",j(H,T.combo_number,1),V*H.approach_circle_width),D.set_alpha(1)}draw_hit_circle(T,I){let{backend:D,skin:H,radius:V,fade_in:F,preempt:S}=this,U=T.data.pos,R=T.time-S,B=240;if(I<R)return;if(I>T.end_time+240)return;let $=1,O=1;if(I<T.time)if(K(this.mods,P.Hidden)){let A=this.preempt*0.4,J=R+A,Q=this.preempt*0.3;if(I<J)$=q((I-R)/A,0,1);else $=1-q((I-J)/Q,0,1)}else $=q((I-R)/this.fade_in,0,1);else{if(K(this.mods,P.Hidden))return;if(!H.enable_hit_animations)return;let A=q((I-T.end_time)/240,0,1);O=1+(H.hit_animation_scale-1)*g(A),$=1-g(A)}if($<=0)return;let N=V*O,M=N*(1-H.circle_border_width/2),W=N*H.circle_border_width;if(D.set_alpha($*H.hit_circle_opacity),D.draw_circle(U[0],U[1],M,j(H,T.combo_number,1),"rgba(255,255,255,1)",W),I<T.time){let A=V*0.8,J=A*0.05;D.draw_text(String(T.combo_count),U[0],U[1]+J,`600 ${A}px ${H.font_family}`,"rgba(255,255,255,1)","center","middle")}D.set_alpha(1)}draw_slider(T,I){let{backend:D,skin:H,radius:V}=this,F=T.data,S=F.computed_path;if(!S||S.length<2)return;let U=this.get_slider_body_opacity(T,I);if(U<=0.01)return;let B=V*0.872,$=j(H,T.combo_number,1);if(H.slider_body_opacity<1&&H.slider_border_opacity>0)this.draw_masked_slider(T,S,$,U,H.slider_body_opacity,H.slider_border_opacity);else{D.save(),D.set_alpha(U*H.slider_border_opacity),D.begin_path(),D.move_to(S[0][0],S[0][1]);for(let A=1;A<S.length;A++)D.line_to(S[A][0],S[A][1]);D.stroke_path("rgba(255,255,255,1)",V*2,"round","round"),D.set_alpha(U*H.slider_body_opacity),D.begin_path(),D.move_to(S[0][0],S[0][1]);for(let A=1;A<S.length;A++)D.line_to(S[A][0],S[A][1]);D.stroke_path($,B*2,"round","round"),D.restore(),D.set_alpha(U)}if(this.draw_slider_ticks(T,F,S,I),F.repetitions>1)this.handle_reverse_arrows(T,F,S,I);let O=T.time-this.preempt,N=150,M=0,W=1;if(K(this.mods,P.Hidden)){let A=this.preempt*0.4,J=O+A,Q=this.preempt*0.3;if(I<O)M=0;else if(I<T.time)if(I<J)M=q((I-O)/A,0,1);else M=1-q((I-J)/Q,0,1);else if(I<T.time+N){let Z=0;if(T.time<J)Z=q((T.time-O)/A,0,1);else Z=1-q((T.time-J)/Q,0,1);let X=(I-T.time)/N;M=Z*(1-g(X)),W=1+g(X)*0.4}}else if(I<O)M=0;else if(I<T.time)M=q((I-O)/this.fade_in,0,1);else if(I<T.time+N){let A=q((T.time-O)/this.fade_in,0,1),J=(I-T.time)/N;M=A*(1-g(J)),W=1+g(J)*0.4}if(M>0){let A=F.pos,J=V*(1-H.circle_border_width/2)*W,Q=V*H.circle_border_width*W;D.set_alpha(M*H.hit_circle_opacity),D.draw_circle(A[0],A[1],J,j(H,T.combo_number,1),"rgba(255,255,255,1)",Q);let Z=V*0.8*W,X=Z*0.05;D.draw_text(String(T.combo_count),A[0],A[1]+X,`600 ${Z}px ${H.font_family}`,"rgba(255,255,255,1)","center","middle")}D.set_alpha(1)}handle_reverse_arrows(T,I,D,H){let{radius:V,preempt:F,fade_in:S}=this,U=T.time-F,R=I.duration,B=1;if(K(this.mods,P.Hidden)){let M=F*0.4,W=U+M,A=F*0.3;if(H<U)B=0;else if(H<W)B=q((H-U)/M,0,1);else B=1-q((H-W)/A,0,1)}else if(H<U)B=0;else if(H<T.time)B=q((H-U)/S,0,1);if(B<=0)return;let $=Math.max(0,H-T.time),O=Math.floor($/R);if(I.repetitions-1-O>=1){let M=O%2===0;this.draw_reverse_arrow(D,M,H,B)}if(H<T.time){if(this.draw_reverse_arrow(D,!0,H,B),I.repetitions>2)this.draw_reverse_arrow(D,!1,H,B)}}draw_masked_slider(T,I,D,H,V,F){let{backend:S,config:U,radius:R}=this,B=this.slider_cache.get(T);if(B&&Math.abs(B.scale-U.scale)<0.001){if(S.save(),U.scale!==0)S.scale(1/U.scale,1/U.scale),S.translate(-U.offset_x,-U.offset_y);let A=B.image.min_x||0,J=B.image.min_y||0,Q=Math.floor(A*U.scale+U.offset_x),Z=Math.floor(J*U.scale+U.offset_y);S.set_alpha(H),S.draw_image(B.image,Q,Z),S.restore();return}let $=S.render_slider_to_image(I,R,"white",D,U.scale,V,F);if(!$)return;if(this.slider_cache.set(T,{image:$,scale:U.scale}),S.save(),U.scale!==0)S.scale(1/U.scale,1/U.scale),S.translate(-U.offset_x,-U.offset_y);let O=$.min_x||0,N=$.min_y||0,M=Math.floor(O*U.scale+U.offset_x),W=Math.floor(N*U.scale+U.offset_y);S.set_alpha(H),S.draw_image($,M,W),S.restore()}draw_slider_ticks(T,I,D,H){let{backend:V,skin:F,radius:S,preempt:U,fade_in:R}=this;if(H>T.end_time)return;let B=this.get_timing_at(T.time),$=100*this.beatmap.sv*B.velocity,O=$/B.beat_length,N=$/this.beatmap.tick_rate,M=O*10,W=I.distance,A=this.get_path_length(D);for(let J=N;J<=W;J+=N){if(J>=W-M)break;let Z=J/W*A,X=this.get_position_at_length(D,Z),Y=1;if(K(this.mods,P.Hidden)){let G=T.time+J/W*I.duration,E=G-Math.min(1000,U*0.7),x=G-U;if(H<x||H>E)Y=0;else if(H>E-200)Y=(E-H)/200;else Y=q((H-x)/R,0,1)}else{let G=T.time-U;if(H<G)Y=0;else{let x=q((H-G)/R,0,1),y=J/W*(R*0.3),L=q((H-G-y)/(R*0.5),0,1);Y=Math.min(x,L)}let E=T.time+J/W*I.duration;if(H>E){let x=(H-E)/150;Y=Math.max(0,Y*(1-x))}}if(Y>0)V.set_alpha(Y*F.slider_tick_opacity),V.draw_circle(X[0],X[1],S*F.slider_tick_size,"rgba(255,255,255,1)","rgba(255,255,255,0.1)",1)}}get_position_at_length(T,I){let D=0;for(let H=1;H<T.length;H++){let V=z(C(T[H],T[H-1]));if(D+V>=I){let F=(I-D)/V;return r(T[H-1],T[H],F)}D+=V}return T[T.length-1]}draw_reverse_arrow(T,I,D,H){let{backend:V,radius:F}=this;if(H<=0)return;let S,U;if(I){S=T[T.length-1];let y=T[T.length-1];for(let L=T.length-2;L>=0;L--){let m=T[L][0]-S[0],l=T[L][1]-S[1];if(m*m+l*l>1){y=T[L];break}}U=XT(C(y,S))}else{S=T[0];let y=T[0];for(let L=1;L<T.length;L++){let m=T[L][0]-S[0],l=T[L][1]-S[1];if(m*m+l*l>1){y=T[L];break}}U=XT(C(y,S))}let R=300,B=35,$=250,O=D%R,N=1;if(O<B)N=1+O/B*0.3;else N=1.3-(O-B)/$*0.3;let M=F*0.6*N,W=Math.atan2(U[1],U[0]),A=Math.PI/3.5,J=M*0.8,Q=M*0.25,Z=S[0]+Math.cos(W)*Q,X=S[1]+Math.sin(W)*Q,Y=Z-Math.cos(W-A)*J,G=X-Math.sin(W-A)*J,E=Z-Math.cos(W+A)*J,x=X-Math.sin(W+A)*J;V.set_alpha(H),V.begin_path(),V.move_to(Y,G),V.line_to(Z,X),V.line_to(E,x),V.stroke_path("rgba(255,255,255,1)",3*N,"round","round"),V.set_alpha(1)}draw_follow_circle(T,I){let{backend:D,skin:H,radius:V}=this,F=T.data,S=F.duration,U=S*F.repetitions,R=Math.min(I-T.time,U),B=this.get_slider_position(F,R,S),$=240;if(I>T.end_time+240)return;let N=1+Math.sin(I*0.008)*0.08,M=1,W=100;if(R<W)M=0.5+q(R/W,0,1)*0.5;let A=H.follow_circle_opacity;if(K(this.mods,P.Hidden)){let Z=T.time-this.preempt,X=this.preempt*0.4,Y=Z+X,G=this.preempt*0.3;if(I<Y)A*=q((I-Z)/X,0,1);else{let E=q((I-Y)/G,0,1);A*=1-E}}if(I>T.end_time){let Z=q((I-T.end_time)/240,0,1);A*=1-Z,M*=1+Z*0.3}if(A<=0)return;if(H.enable_slider_ball){let Z=V*0.85,X=A*(H.slider_ball_opacity/H.follow_circle_opacity);if(I>T.end_time){let Y=q((I-T.end_time)/100,0,1);X*=1-Y}if(X>0)D.set_alpha(X),D.draw_circle(B[0],B[1],Z,j(H,T.combo_number,0.7),"rgba(255,255,255,0.9)",V*0.12)}let J=V*H.follow_circle_factor*N*M,Q=H.follow_circle_use_combo_color?j(H,T.combo_number,1):H.follow_circle_color;D.set_alpha(A),D.begin_path(),D.arc_to(B[0],B[1],J,0,Math.PI*2),D.stroke_path(Q,H.follow_circle_width),D.set_alpha(1)}get_slider_position(T,I,D){let H=T.computed_path;if(!H||H.length===0)return T.pos;let V=I%(D*2),F=V<D?V/D:2-V/D;F=q(F,0,1);let S=this.get_path_length(H),U=F*S,R=0;for(let B=1;B<H.length;B++){let $=z(C(H[B],H[B-1]));if(R+$>=U){let O=(U-R)/$;return r(H[B-1],H[B],O)}R+=$}return H[H.length-1]}get_path_length(T){let I=0;for(let D=1;D<T.length;D++)I+=z(C(T[D],T[D-1]));return I}draw_spinner(T,I){let{backend:D,skin:H}=this,V=T.time-this.preempt;if(I<V)return;let F=q((I-V)/this.fade_in,0,1);if(I>T.end_time){let O=q((I-T.end_time)/200,0,1);F=1-g(O)}if(F<=0)return;let S=256,U=192,R=T.end_time-T.time,B=q((I-T.time)/R,0,1);D.set_alpha(F);let $=H.spinner_size*(1-B);if($>5)D.begin_path(),D.arc_to(S,U,$,0,Math.PI*2),D.stroke_path("rgba(255,255,255,0.6)",4);D.draw_circle(S,U,H.spinner_size,"rgba(0,0,0,0.2)"),D.draw_circle(S,U,12,"white")}draw_follow_point(T,I,D){if(K(this.mods,P.Hidden))return;if(T.combo_number!==I.combo_number)return;let{backend:H,skin:V}=this;if(D<T.end_time||D>I.time)return;let F=T.end_pos,S=I.data.pos,U=S[0]-F[0],R=S[1]-F[1];if(Math.sqrt(U*U+R*R)<48)return;let $=I.time-T.end_time,O=(D-T.end_time)/$,N=1;if(O<0.2)N=O/0.2;if(O>0.8)N=(1-O)/0.2;if(N<=0)return;let M=q(O*1.5,0,1),W=k(F[0],S[0],Math.max(0,O-0.3)),A=k(F[1],S[1],Math.max(0,O-0.3)),J=k(F[0],S[0],M),Q=k(F[1],S[1],M);H.set_alpha(N*0.6),H.begin_path(),H.move_to(W,A),H.line_to(J,Q),H.stroke_path("rgba(255,255,255,1)",V.follow_point_width,"round","round"),H.set_alpha(1)}}var hT=11485,bT=20;class HT extends b{key_count=4;scroll_time=hT/bT;hd_coverage=0.25;fi_coverage=0.6;gradient_ratio=0.2;constructor(T,I,D=0,H=u){super(T,I,D,H);this.update_scroll_time()}initialize(T){this.beatmap=T,this.objects=[...T.objects],this.key_count=Math.floor(T.cs);for(let I of this.objects)if(RT(I))I.end_time=I.data.end_time}set_mods(T){this.mods=T,this.update_scroll_time()}update_scroll_time(){let T=QT(this.mods);this.scroll_time=hT/(bT*T)}time_to_y(T){let I=this.skin.mania_hit_position,D=T/this.scroll_time;return I-D*I}render(T){let{backend:I,config:D,skin:H,key_count:V}=this;this.render_background();let F=V*H.mania_lane_width,S=Math.floor(($T-F)/2),U=H.mania_hit_position;I.save(),I.translate(D.offset_x,D.offset_y),I.scale(D.scale,D.scale),this.render_playfield(F,NT,S),this.draw_lane_keys(T,S),this.draw_judgment_line(S),I.save(),I.begin_path(),I.rect(S,0,F,U),I.clip(),I.set_alpha(0.7),I.draw_rect(S,0,F,U,"#000000"),I.set_alpha(1);for(let R of this.objects){if(R.end_time<T)continue;if(RT(R))this.draw_hold_note(R,T,S);else this.draw_note(R,T,S)}if(K(this.mods,P.Hidden)||K(this.mods,P.FadeIn)){let R=K(this.mods,P.Hidden)?this.hd_coverage:this.fi_coverage,B=U*R,$=U*this.gradient_ratio;if(K(this.mods,P.Hidden)){let O=U-B,N=$/B,M=I.create_linear_gradient(S,O,S,U,[{offset:0,color:"rgba(0,0,0,0)"},{offset:N*0.4,color:"rgba(0,0,0,0.3)"},{offset:N*0.7,color:"rgba(0,0,0,0.75)"},{offset:N*0.9,color:"rgba(0,0,0,0.95)"},{offset:N,color:"rgba(0,0,0,1)"},{offset:1,color:"rgba(0,0,0,1)"}]);I.draw_rect_gradient(S,O,F,B,M)}else{let O=(B-$)/B,N=I.create_linear_gradient(S,0,S,B,[{offset:0,color:"rgba(0,0,0,1)"},{offset:O,color:"rgba(0,0,0,1)"},{offset:O+(1-O)*0.1,color:"rgba(0,0,0,0.95)"},{offset:O+(1-O)*0.4,color:"rgba(0,0,0,0.75)"},{offset:O+(1-O)*0.7,color:"rgba(0,0,0,0.3)"},{offset:1,color:"rgba(0,0,0,0)"}]);I.draw_rect_gradient(S,0,F,B,N)}}I.restore(),I.restore()}get_lane(T){let I=T.data.pos,D=Math.floor(I[0]*this.key_count/512);if(K(this.mods,P.Mirror))D=this.key_count-1-D;return D}draw_note(T,I,D){let{backend:H,skin:V,key_count:F}=this,S=this.get_lane(T),U=V.mania_lane_width,R=V.mania_note_height,B=V.mania_lane_spacing,$=T.time-I,O=this.time_to_y($);if(O<-R-64)return;let N=D+S*U,M=s(V,F,S);H.set_alpha(1),H.draw_rect(N+B,O-R,U-2*B,R,M)}draw_hold_note(T,I,D){let{backend:H,skin:V,key_count:F}=this,S=T.data,U=this.get_lane(T),R=V.mania_lane_width,B=V.mania_note_height,$=V.mania_lane_spacing,O=T.time-I,N=S.end_time-I,M=this.time_to_y(O),W=this.time_to_y(N),A=D+U*R,J=s(V,F,U);if(W<-64&&M<-64)return;let Q=W,X=(O<0?V.mania_hit_position:M)-Q;if(X>0)H.set_alpha(0.9),H.draw_rect(A+$,Q,R-2*$,X,J);if(O>=0)H.set_alpha(1),H.draw_rect(A+$,M-B,R-2*$,B,J);H.set_alpha(1)}draw_judgment_line(T){let{backend:I,skin:D,key_count:H}=this,V=D.mania_lane_width,F=D.mania_hit_position;I.draw_rect(T,F-1,V*H,2,"#ffffff")}draw_lane_keys(T,I){let{backend:D,skin:H,key_count:V}=this,{mania_lane_width:F,mania_hit_position:S,mania_lane_spacing:U,mania_note_height:R}=H,B=R+5,$=new Set,O=50;for(let N of this.objects)if(T>=N.time-50&&T<=N.end_time+50)$.add(this.get_lane(N));for(let N=0;N<V;N++){let M=$.has(N),W=I+N*F,A=s(H,V,N);if(D.set_alpha(0.3),D.draw_rect(W+U,S,F-2*U,B,A),M)D.set_alpha(1),D.draw_rect(W+U,S,F-2*U,B,"#ff6666")}D.set_alpha(1)}}class VT{audio_context;audio_source=null;audio_buffer=null;gain_node;start_time=0;pause_time=0;speed=1;_is_playing=!1;_duration=0;_is_loaded=!1;constructor(T){this.audio_context=T,this.gain_node=this.audio_context.createGain(),this.gain_node.connect(this.audio_context.destination)}get is_playing(){return this._is_playing}get is_loaded(){return this._is_loaded}get duration(){return this._duration}get current_time(){if(!this._is_playing)return this.pause_time;return(this.audio_context.currentTime-this.start_time)*this.speed*1000}async load(T,I=0){this.stop();try{this.audio_buffer=await this.audio_context.decodeAudioData(T.slice(0)),this._duration=this.audio_buffer.duration*1000,this.speed=n(I),this._is_loaded=!0,this.pause_time=0}catch(D){throw console.error("Failed to decode audio data",D),D}}play(T){if(!this.audio_buffer){console.warn("[AudioController] Cannot play: not loaded");return}this.stop_source();let I=T!==void 0?T/1000:this.pause_time/1000,D=this.audio_buffer.duration,H=Math.max(0,Math.min(I,D));if(H>=D){this.pause_time=D*1000;return}this.audio_source=this.audio_context.createBufferSource(),this.audio_source.buffer=this.audio_buffer,this.audio_source.playbackRate.value=this.speed,this.audio_source.connect(this.gain_node),this.audio_source.onended=()=>{if(this._is_playing)this._is_playing=!1,this.pause_time=this._duration,this.audio_source=null},this.start_time=this.audio_context.currentTime-H/this.speed,this.audio_source.start(0,H),this._is_playing=!0}pause(){if(!this._is_playing)return;this.pause_time=this.current_time,this.stop_source(),this._is_playing=!1}seek(T){let I=Math.max(0,Math.min(T,this._duration));if(this._is_playing)this.stop_source(),this._is_playing=!1,this.pause_time=I,this.play();else this.pause_time=I}stop(){this.pause(),this.pause_time=0}get_host_time(T){return this.start_time+T/1000/this.speed}stop_source(){if(this.audio_source){try{this.audio_source.onended=null,this.audio_source.stop(),this.audio_source.disconnect()}catch{}this.audio_source=null}}set_volume(T){if(this.gain_node)this.gain_node.gain.value=Math.max(0,Math.min(1,T))}set_speed(T){if(this._is_playing){let I=this.current_time;this.speed=T,this.start_time=this.audio_context.currentTime-I/1000/T}else this.speed=T;if(this.audio_source)this.audio_source.playbackRate.value=T}dispose(){this.stop(),this.audio_buffer=null,this._is_loaded=!1,this.gain_node.disconnect()}}class FT{video=null;object_url=null;_offset=0;speed=1;get element(){return this.video}get offset(){return this._offset}async load(T,I=0,D=1){this.dispose(),this._offset=I,this.speed=D,this.video=document.createElement("video"),this.video.muted=!0,this.video.loop=!1,this.video.playsInline=!0,this.object_url=URL.createObjectURL(T),this.video.src=this.object_url,await new Promise((H,V)=>{if(!this.video)return V(Error("No video element"));this.video.onloadeddata=()=>H(),this.video.onerror=()=>V(Error("Failed to load video"))}),this.video.playbackRate=D}sync(T){if(!this.video)return;let I=(T-this._offset)/1000;if(I<0){if(!this.video.paused)this.video.pause();return}if(Math.abs(this.video.currentTime-I)>0.1)this.video.currentTime=I}play(){if(this.video&&this.video.paused)this.video.play().catch(()=>{console.log("failed to play video")})}pause(){if(this.video&&!this.video.paused)this.video.pause()}seek(T){if(!this.video)return;let I=Math.max(0,(T-this._offset)/1000);this.video.currentTime=I}set_speed(T){if(this.speed=T,this.video)this.video.playbackRate=T}dispose(){if(this.video)this.video.pause(),this.video.src="",this.video=null;if(this.object_url)URL.revokeObjectURL(this.object_url),this.object_url=null}}class ET{context;gain_node;samples=new Map;volume=1;constructor(T){this.context=T,this.gain_node=T.createGain(),this.gain_node.connect(T.destination)}set_volume(T){this.volume=Math.max(0,Math.min(1,T)),this.gain_node.gain.value=this.volume}async load_samples(T){this.samples.clear();let I=[];for(let[D,H]of T)if(D.endsWith(".wav")||D.endsWith(".mp3")||D.endsWith(".ogg"))I.push(this.context.decodeAudioData(H.slice(0)).then((V)=>{let F=D.toLowerCase().replace(/\.(wav|mp3|ogg)$/,"");this.samples.set(F,V)}).catch((V)=>{console.warn(`[HitsoundController] Failed to decode ${D}:`,V)}));await Promise.all(I)}play(T,I,D,H,V=100,F,S=0){let U=this.get_set_name(T),R=this.get_set_name(I);if(F){let B=F.toLowerCase().replace(/\.(wav|mp3|ogg)$/,"");if(this.play_buffer(B,V,S))return}if(this.play_sound(U,"hitnormal",H,V,S),D&o.Whistle)this.play_sound(R,"hitwhistle",H,V,S);if(D&o.Finish)this.play_sound(R,"hitfinish",H,V,S);if(D&o.Clap)this.play_sound(R,"hitclap",H,V,S)}play_sound(T,I,D,H,V){let F=!1;if(D>1)F=this.play_buffer(`${T}-${I}${D}`,H,V);if(!F)this.play_buffer(`${T}-${I}`,H,V)}play_buffer(T,I,D){let H=this.samples.get(T);if(!H)return!1;let V=this.context.createBufferSource();V.buffer=H;let F=this.context.createGain();return F.gain.value=I/100,V.connect(F),F.connect(this.gain_node),V.start(D),!0}get_set_name(T){switch(T){case 3:return"drum";case 2:return"soft";default:return"normal"}}dispose(){this.samples.clear(),this.gain_node.disconnect()}}class rT{backend;renderer=null;audio_context;audio;hitsounds;video=null;resources=null;animation_frame=null;skin;mods;renderer_config;start_offset;volume;listeners=new Map;_raw_osu_content="";_is_loaded=!1;next_hit_object_index=0;resize_observer=null;key_handler=null;options;constructor(T){this.options=T,this.backend=T.backend??new a,this.skin=IT(T.skin),this.mods=T.mods??0,this.renderer_config={...u,...T.renderer_config},this.calculate_layout(T.canvas.width,T.canvas.height,T.playfield_scale),this.start_offset=T.start_time??-1,this.volume=T.volume??0.5,this.backend.initialize(T.canvas,this.renderer_config.use_high_dpi);let I=window.AudioContext||window.webkitAudioContext;if(this.audio_context=new I,this.audio=new VT(this.audio_context),this.hitsounds=new ET(this.audio_context),this.audio.set_volume(this.volume),this.hitsounds.set_volume(this.volume),T.auto_resize)this.setup_auto_resize()}async load_osz(T,I){try{let H=await new h().load_osz(T,{difficulty:I});return this.resources=H,this.setup()}catch(D){let H=D instanceof Error?D.message:String(D);return this.emit("error","INVALID_BEATMAP",H),v("INVALID_BEATMAP",H)}}async load_files(T,I){try{let D=new h;this.resources=await D.load_from_files(T,{difficulty:I});for(let[H,V]of T)if(H.endsWith(".osu")){this._raw_osu_content=typeof V==="string"?V:new TextDecoder().decode(V);break}return this.setup()}catch(D){let H=D instanceof Error?D.message:String(D);return this.emit("error","INVALID_BEATMAP",H),v("INVALID_BEATMAP",H)}}async load_hitsounds(T){try{await this.hitsounds.load_samples(T)}catch(I){console.error("[BeatmapPlayer] Failed to load hitsounds:",I)}}async load_beatmap(T,I,D,H,V){return this.resources={beatmap:T,available_difficulties:[],files:new Map,audio:I,background:D,video:H,video_offset:V},this.setup()}async load_osu_content(T,I){try{let H=new f().parse(T);return this._raw_osu_content=T,this.load_beatmap(H,I)}catch(D){let H=D instanceof Error?D.message:String(D);return this.emit("error","INVALID_BEATMAP",H),v("INVALID_BEATMAP",H)}}async setup(){if(!this.resources)return v("NOT_LOADED","No resources loaded");let{beatmap:T,audio:I,video:D,video_offset:H}=this.resources,V=n(this.mods);if(I)try{await this.audio.load(I,this.mods)}catch(F){let S=F instanceof Error?F.message:String(F);return this.emit("error","AUDIO_DECODE_ERROR",S),v("AUDIO_DECODE_ERROR",S)}if(D)this.video=new FT,await this.video.load(D,H??0,V);try{this.renderer=this.create_renderer(T),this.renderer.initialize(T)}catch(F){let S=F instanceof Error?F.message:String(F);return this.emit("error","UNSUPPORTED_MODE",S),v("UNSUPPORTED_MODE",S)}if(this.start_offset<0&&this._raw_osu_content){let F=BT(this._raw_osu_content);this.start_offset=F>0?F:this.get_last_object_time()*0.42}if(this.start_offset<0)this.start_offset=0;if(this.update_hit_index(this.start_offset),this.resources?.background)try{let F=new Image;F.src=URL.createObjectURL(this.resources.background),await F.decode(),this.renderer.set_background({source:F,width:F.width,height:F.height}),this._is_loaded=!0,requestAnimationFrame(()=>this.render_frame(this.start_offset))}catch(F){console.warn("[BeatmapPlayer] Failed to load background",F)}return this._is_loaded=!0,this.emit("loaded",T,this.resources),requestAnimationFrame(()=>this.render_frame(this.start_offset)),uT(this.resources)}create_renderer(T){switch(T.mode){case 0:return new DT(this.backend,this.skin,this.mods,this.renderer_config);case 3:return new HT(this.backend,this.skin,this.mods,this.renderer_config);case 1:case 2:default:throw Error(`Unsupported game mode: ${_[T.mode]??T.mode}`)}}get_last_object_time(){if(!this.resources?.beatmap.objects.length)return 0;let T=this.resources.beatmap.objects;return T[T.length-1].end_time}async play(){if(!this.renderer||!this._is_loaded){console.warn("[BeatmapPlayer] Cannot play: not loaded");return}if(this.audio.is_playing)return;if(this.audio_context.state==="suspended")await this.audio_context.resume();this.audio.play(this.start_offset),this.video?.play(),this.start_render_loop(),this.emit("play"),this.emit("statechange",!0)}pause(){if(!this.audio.is_playing)return;this.start_offset=this.audio.current_time,this.audio.pause(),this.video?.pause(),this.stop_render_loop(),this.emit("pause"),this.emit("statechange",!1)}set_mods(T){this.mods=T;let I=n(T);if(this.renderer?.set_mods(T),this.audio.set_speed(I),this.video?.set_speed(I),this._is_loaded)requestAnimationFrame(()=>this.render_frame(this.current_time))}seek(T){this.start_offset=Math.max(0,Math.min(T,this.duration)),this.update_hit_index(this.start_offset),this.audio.seek(this.start_offset),this.video?.seek(this.start_offset),this.emit("seek",this.start_offset),this.render_frame(this.start_offset)}async set_difficulty(T){if(!this.resources)return v("NOT_LOADED","No beatmap resources loaded");let I=this.is_playing;this.stop();try{let H=await new h().load_from_files(this.resources.files,{difficulty:T});this.resources=H;let V=this.resources.available_difficulties.find((S)=>S.version===this.resources.beatmap.version)?.filename;if(V){let S=this.resources.files.get(V);if(S)this._raw_osu_content=typeof S==="string"?S:new TextDecoder().decode(S)}let F=await this.setup();if(F.success&&I)this.play();return F}catch(D){let H=D instanceof Error?D.message:String(D);return this.emit("error","INVALID_BEATMAP",H),v("INVALID_BEATMAP",H)}}update_hit_index(T){if(!this.resources?.beatmap)return;let I=this.resources.beatmap.objects;if(this.next_hit_object_index>0&&I[this.next_hit_object_index-1].time>T)this.next_hit_object_index=0;while(this.next_hit_object_index<I.length&&I[this.next_hit_object_index].time<T)this.next_hit_object_index++}stop(){this.pause(),this.start_offset=0,this.audio.seek(0),this.update_hit_index(0),this.render_frame(0)}dispose(){if(this.stop(),this.backend.dispose(),this.audio.dispose(),this.hitsounds.dispose(),this.video?.dispose(),this.renderer?.dispose(),this.listeners.clear(),this.resize_observer)this.resize_observer.disconnect(),this.resize_observer=null;if(this.key_handler)window.removeEventListener("keydown",this.key_handler),this.key_handler=null;if(this.audio_context&&this.audio_context.state!=="closed")this.audio_context.close().catch(()=>{});this.renderer=null,this.resources=null,this._is_loaded=!1,this.listeners.clear()}get current_time(){return this.audio.current_time}get duration(){return this.audio.duration||this.get_last_object_time()}get is_playing(){return this.audio.is_playing}get is_loaded(){return this._is_loaded}get mode(){if(!this.resources)return"standard";switch(this.resources.beatmap.mode){case 1:return"taiko";case 2:return"catch";case 3:return"mania";default:return"standard"}}get beatmap(){return this.resources?.beatmap??null}get available_difficulties(){return this.resources?.available_difficulties??[]}get background(){return this.resources?.background}get config(){return this.renderer_config}resize(T,I,D){if(this.backend.resize(T,I),this.calculate_layout(T,I,D),this._is_loaded)requestAnimationFrame(()=>this.render_frame(this.current_time))}update_config(T){if(this.renderer_config={...this.renderer_config,...T},this.renderer?.update_config(this.renderer_config),this._is_loaded)requestAnimationFrame(()=>this.render_frame(this.current_time))}set_skin(T){if(this.skin=IT(T),this._is_loaded&&this.resources?.beatmap)this.renderer=this.create_renderer(this.resources.beatmap),this.renderer.initialize(this.resources.beatmap),requestAnimationFrame(()=>this.render_frame(this.current_time))}setup_auto_resize(){this.resize_observer=new ResizeObserver(()=>{let I=this.options.canvas.parentElement;if(I){let D=I.getBoundingClientRect();this.resize(D.width,D.height,this.options.playfield_scale)}}),this.resize_observer.observe(this.options.canvas.parentElement||this.options.canvas)}toggle_pause(){if(!this._is_loaded)return;this.is_playing?this.pause():this.play()}toggle_grid(){if(this.renderer_config.grid_level===0)this.renderer_config.grid_level=32;else this.renderer_config.grid_level=0;this.render_frame(this.current_time)}calculate_layout(T,I,D){let F=0.9;if(typeof D==="number")F=D;let S=T*F/512,U=I*F/384,R=Math.min(S,U);if(this.renderer_config.scale=R,this.renderer_config.offset_x=Math.floor((T-512*R)/2),this.renderer_config.offset_y=Math.floor((I-384*R)/2),this.renderer)this.renderer.update_config(this.renderer_config)}set_volume(T){this.volume=T,this.audio.set_volume(T),this.hitsounds.set_volume(T)}on(T,I){if(!this.listeners.has(T))this.listeners.set(T,new Set);this.listeners.get(T).add(I)}off(T,I){this.listeners.get(T)?.delete(I)}emit(T,...I){let D=this.listeners.get(T);if(D)for(let H of D)H(...I)}start_render_loop(){if(this.animation_frame!==null)return;let T=()=>{if(!this.audio.is_playing){this.animation_frame=null;return}let I=this.audio.current_time;if(this.schedule_hitsounds(),this.render_frame(I),this.video?.sync(I),this.emit("timeupdate",I,this.duration),I>=this.duration){this.emit("ended"),this.stop_render_loop(),this.emit("statechange",!1);return}this.animation_frame=requestAnimationFrame(T)};this.animation_frame=requestAnimationFrame(T)}schedule_hitsounds(){if(!this.resources?.beatmap||!this.audio.is_playing)return;let T=this.resources.beatmap.objects,I=this.audio.current_time,H=I+100;while(this.next_hit_object_index<T.length&&T[this.next_hit_object_index].time<=H){let V=T[this.next_hit_object_index];if(V.time>=I-20)this.play_hitsound(V);this.next_hit_object_index++}}play_hitsound(T){let I=this.get_timing_point(T.time),D=I.volume,H=I.sample_set,V=I.sample_set,F=I.sample_index,S=void 0;if(T.hit_sample){let R=T.hit_sample;if(R.normal_set!==0){if(H=R.normal_set,R.addition_set===0)V=H}if(R.addition_set!==0)V=R.addition_set;if(R.index!==0)F=R.index;if(R.volume!==0)D=R.volume;S=R.filename}if(H===0)H=1;if(V===0)V=H;let U=this.audio.get_host_time(T.time);this.hitsounds.play(H,V,T.hit_sound,F,D,S,U)}get_timing_point(T){let I=this.resources?.beatmap.timing_points??[];for(let D=I.length-1;D>=0;D--)if(I[D].time<=T)return I[D];return I[0]}stop_render_loop(){if(this.animation_frame!==null)cancelAnimationFrame(this.animation_frame),this.animation_frame=null}render_frame(T){this.backend.clear(),this.renderer?.render(T)}}export{C as vec2_sub,XT as vec2_normalize,fT as vec2_mul,r as vec2_lerp,rI as vec2_len_sq,z as vec2_len,bI as vec2_dot,eT as vec2_div,mI as vec2_dist,kT as vec2_add,SI as unwrap,$I as toggle_mod,uT as ok,OI as mods_to_string,PI as mods_from_string,IT as merge_skin,k as lerp,p as is_spinner,c as is_slider,UI as is_ok,wT as is_new_combo,RT as is_hold,RI as is_err,UT as is_circle,JT as inverse_difficulty_range,K as has_mod,n as get_speed_multiplier,QT as get_rate_multiplier,s as get_mania_lane_color,j as get_combo_color,NI as get_available_mods,gT as get_adjusted_difficulty,YT as flatten_perfect,TT as flatten_linear,CT as flatten_catmull,e as flatten_bezier,OT as extract_video_info,BT as extract_preview_time,PT as extract_background_filename,AT as extract_audio_filename,v as err,jT as difficulty_range,q as clamp,WT as calculate_radius,d as calculate_preempt,MT as calculate_fade_in,tT as apply_rate_to_ar,aT as apply_mods_to_difficulty,FT as VideoController,DT as StandardRenderer,mT as SpeedChangingMods,ST as SampleSet,t as PREEMPT_RANGE,cT as PREEMPT_MIN,$T as PLAYFIELD_WIDTH,NT as PLAYFIELD_HEIGHT,h as OszLoader,P as Mods,dT as ModNightcore,iT as ModHidden,ZT as ModHardRock,sT as ModHalfTime,qT as ModEasy,nT as ModDoubleTime,HT as ManiaRenderer,o as HitSoundType,w as HitObjectType,oT as HD_FADE_OUT_MULTIPLIER,_T as HD_FADE_IN_MULTIPLIER,yT as GridLevel,_ as GameMode,vT as ErrorCode,AI as DifficultyChangingMods,zT as DEFAULT_SKIN,u as DEFAULT_RENDERER_CONFIG,a as CanvasBackend,rT as BeatmapPlayer,f as BeatmapParser,b as BaseRenderer,VT as AudioController};
|
|
4
4
|
|
|
5
|
-
//# debugId=
|
|
5
|
+
//# debugId=27D7FC659F0B6DFA64756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
"import { get_speed_multiplier } from \"../types/mods\";\n\nexport class AudioController {\n private audio_context: AudioContext;\n private audio_source: AudioBufferSourceNode | null = null;\n private audio_buffer: AudioBuffer | null = null;\n private gain_node: GainNode;\n\n private start_time: number = 0;\n private pause_time: number = 0;\n private speed: number = 1;\n private _is_playing: boolean = false;\n private _duration: number = 0;\n private _is_loaded: boolean = false;\n\n constructor(context: AudioContext) {\n this.audio_context = context;\n this.gain_node = this.audio_context.createGain();\n this.gain_node.connect(this.audio_context.destination);\n }\n\n get is_playing(): boolean {\n return this._is_playing;\n }\n get is_loaded(): boolean {\n return this._is_loaded;\n }\n get duration(): number {\n return this._duration;\n }\n\n get current_time(): number {\n if (!this._is_playing) {\n return this.pause_time;\n }\n return (this.audio_context.currentTime - this.start_time) * this.speed * 1000;\n }\n\n async load(data: ArrayBuffer, mods: number = 0): Promise<void> {\n this.stop();\n\n try {\n // copy buffer to avoid issues if source is detached\n this.audio_buffer = await this.audio_context.decodeAudioData(data.slice(0));\n this._duration = this.audio_buffer.duration * 1000;\n this.speed = get_speed_multiplier(mods);\n this._is_loaded = true;\n this.pause_time = 0;\n } catch (e) {\n console.error(\"Failed to decode audio data\", e);\n throw e;\n }\n }\n\n play(from_time?: number): void {\n if (!this.audio_buffer) {\n console.warn(\"[AudioController] Cannot play: not loaded\");\n return;\n }\n\n // stop current source if exists\n this.stop_source();\n\n const start_offset = from_time !== undefined ? from_time / 1000 : this.pause_time / 1000;\n\n // clamp to valid range\n const duration = this.audio_buffer.duration;\n const clamped_offset = Math.max(0, Math.min(start_offset, duration));\n\n if (clamped_offset >= duration) {\n // seeking past end\n this.pause_time = duration * 1000;\n return;\n }\n\n this.audio_source = this.audio_context.createBufferSource();\n this.audio_source.buffer = this.audio_buffer;\n this.audio_source.playbackRate.value = this.speed;\n this.audio_source.connect(this.gain_node);\n\n this.audio_source.onended = () => {\n if (this._is_playing) {\n this._is_playing = false;\n this.pause_time = this._duration;\n this.audio_source = null;\n }\n };\n\n this.start_time = this.audio_context.currentTime - clamped_offset / this.speed;\n this.audio_source.start(0, clamped_offset);\n this._is_playing = true;\n }\n\n pause(): void {\n if (!this._is_playing) return;\n\n // save current position before stopping\n this.pause_time = this.current_time;\n this.stop_source();\n this._is_playing = false;\n }\n\n seek(time_ms: number): void {\n const clamped = Math.max(0, Math.min(time_ms, this._duration));\n\n if (this._is_playing) {\n // stop and restart at new position\n this.stop_source();\n this._is_playing = false;\n this.pause_time = clamped;\n this.play();\n } else {\n this.pause_time = clamped;\n }\n }\n\n stop(): void {\n this.pause();\n this.pause_time = 0;\n }\n\n get_host_time(time_ms: number): number {\n // returns the AudioContext time corresponding to the given map time\n // current_time = (ctx_time - start_time) * speed * 1000\n // ctx_time = (current_time / 1000 / speed) + start_time\n return this.start_time + time_ms / 1000 / this.speed;\n }\n\n private stop_source(): void {\n if (this.audio_source) {\n try {\n this.audio_source.onended = null;\n this.audio_source.stop();\n this.audio_source.disconnect();\n } catch {\n // ignore errors\n }\n this.audio_source = null;\n }\n }\n\n set_volume(volume: number): void {\n if (this.gain_node) {\n this.gain_node.gain.value = Math.max(0, Math.min(1, volume));\n }\n }\n\n set_speed(speed: number): void {\n if (this._is_playing) {\n // capture current position before speed change\n const current_pos = this.current_time;\n this.speed = speed;\n // recalculate start_time for new speed\n this.start_time = this.audio_context.currentTime - current_pos / 1000 / speed;\n } else {\n this.speed = speed;\n }\n\n if (this.audio_source) {\n this.audio_source.playbackRate.value = speed;\n }\n }\n\n dispose(): void {\n this.stop();\n this.audio_buffer = null;\n this._is_loaded = false;\n\n // disconnect gain node but don't close context (shared)\n this.gain_node.disconnect();\n }\n}\n",
|
|
25
25
|
"export class VideoController {\n private video: HTMLVideoElement | null = null;\n private object_url: string | null = null;\n private _offset: number = 0;\n private speed: number = 1;\n\n get element(): HTMLVideoElement | null {\n return this.video;\n }\n\n get offset(): number {\n return this._offset;\n }\n\n async load(data: Blob, offset: number = 0, speed: number = 1): Promise<void> {\n this.dispose();\n\n this._offset = offset;\n this.speed = speed;\n\n this.video = document.createElement(\"video\");\n this.video.muted = true;\n this.video.loop = false;\n this.video.playsInline = true;\n\n this.object_url = URL.createObjectURL(data);\n this.video.src = this.object_url;\n\n await new Promise<void>((resolve, reject) => {\n if (!this.video) return reject(new Error(\"No video element\"));\n this.video.onloadeddata = () => resolve();\n this.video.onerror = () => reject(new Error(\"Failed to load video\"));\n });\n\n this.video.playbackRate = speed;\n }\n\n sync(audio_time_ms: number): void {\n if (!this.video) return;\n\n const video_time = (audio_time_ms - this._offset) / 1000;\n\n // only sync if visible (after offset)\n if (video_time < 0) {\n if (!this.video.paused) {\n this.video.pause();\n }\n return;\n }\n\n // check if video is out of sync\n const diff = Math.abs(this.video.currentTime - video_time);\n\n if (diff > 0.1) {\n this.video.currentTime = video_time;\n }\n }\n\n play(): void {\n if (this.video && this.video.paused) {\n this.video.play().catch(() => {\n console.log(\"failed to play video\");\n });\n }\n }\n\n pause(): void {\n if (this.video && !this.video.paused) {\n this.video.pause();\n }\n }\n\n seek(time_ms: number): void {\n if (!this.video) return;\n\n const video_time = Math.max(0, (time_ms - this._offset) / 1000);\n this.video.currentTime = video_time;\n }\n\n set_speed(speed: number): void {\n this.speed = speed;\n if (this.video) {\n this.video.playbackRate = speed;\n }\n }\n\n dispose(): void {\n if (this.video) {\n this.video.pause();\n this.video.src = \"\";\n this.video = null;\n }\n\n if (this.object_url) {\n URL.revokeObjectURL(this.object_url);\n this.object_url = null;\n }\n }\n}\n",
|
|
26
26
|
"import { SampleSet, HitSoundType } from \"../types/beatmap\";\n\nexport class HitsoundController {\n private context: AudioContext;\n private gain_node: GainNode;\n private samples: Map<string, AudioBuffer> = new Map();\n private volume: number = 1;\n\n constructor(context: AudioContext) {\n this.context = context;\n this.gain_node = context.createGain();\n this.gain_node.connect(context.destination);\n }\n\n set_volume(volume: number): void {\n this.volume = Math.max(0, Math.min(1, volume));\n this.gain_node.gain.value = this.volume;\n }\n\n async load_samples(files: Map<string, ArrayBuffer>): Promise<void> {\n this.samples.clear();\n\n const decode_promises: Promise<void>[] = [];\n\n for (const [name, buffer] of files) {\n if (name.endsWith(\".wav\") || name.endsWith(\".mp3\") || name.endsWith(\".ogg\")) {\n decode_promises.push(\n this.context\n .decodeAudioData(buffer.slice(0))\n .then((audio_buffer) => {\n const key = name.toLowerCase().replace(/\\.(wav|mp3|ogg)$/, \"\");\n this.samples.set(key, audio_buffer);\n })\n .catch((err) => {\n console.warn(`[HitsoundController] Failed to decode ${name}:`, err);\n })\n );\n }\n }\n\n await Promise.all(decode_promises);\n }\n\n play(\n normal_set: SampleSet,\n addition_set: SampleSet,\n hit_sound: number,\n index: number,\n volume: number = 100,\n custom_filename?: string,\n when: number = 0\n ): void {\n const normal_name = this.get_set_name(normal_set);\n const addition_name = this.get_set_name(addition_set);\n\n if (custom_filename) {\n const key = custom_filename.toLowerCase().replace(/\\.(wav|mp3|ogg)$/, \"\");\n if (this.play_buffer(key, volume, when)) return;\n }\n\n this.play_sound(normal_name, \"hitnormal\", index, volume, when);\n\n if (hit_sound & HitSoundType.Whistle) {\n this.play_sound(addition_name, \"hitwhistle\", index, volume, when);\n }\n if (hit_sound & HitSoundType.Finish) {\n this.play_sound(addition_name, \"hitfinish\", index, volume, when);\n }\n if (hit_sound & HitSoundType.Clap) {\n this.play_sound(addition_name, \"hitclap\", index, volume, when);\n }\n }\n\n private play_sound(set: string, type: string, index: number, volume: number, when: number): void {\n let played = false;\n\n if (index > 1) {\n played = this.play_buffer(`${set}-${type}${index}`, volume, when);\n }\n\n if (!played) {\n this.play_buffer(`${set}-${type}`, volume, when);\n }\n }\n\n private play_buffer(key: string, volume: number, when: number): boolean {\n const buffer = this.samples.get(key);\n if (!buffer) return false;\n\n const source = this.context.createBufferSource();\n source.buffer = buffer;\n\n const gain = this.context.createGain();\n gain.gain.value = volume / 100;\n\n source.connect(gain);\n gain.connect(this.gain_node);\n\n source.start(when);\n return true;\n }\n\n private get_set_name(set: SampleSet): string {\n switch (set) {\n case SampleSet.Drum:\n return \"drum\";\n case SampleSet.Soft:\n return \"soft\";\n default:\n return \"normal\";\n }\n }\n\n dispose(): void {\n this.samples.clear();\n this.gain_node.disconnect();\n }\n}\n",
|
|
27
|
-
"import type { IBeatmap, IHitObject, IBeatmapInfo } from \"../types/beatmap\";\nimport { GameMode, SampleSet } from \"../types/beatmap\";\nimport type { IBeatmapResources } from \"../types/resources\";\nimport { type Result, ErrorCode, ok, err } from \"../types/result\";\nimport { get_speed_multiplier } from \"../types/mods\";\nimport { OszLoader } from \"../parser/osz_loader\";\nimport { BeatmapParser, extract_preview_time } from \"../parser/beatmap_parser\";\nimport { BaseRenderer, DEFAULT_RENDERER_CONFIG, type IRendererConfig } from \"../renderer/base_renderer\";\nimport type { IRenderBackend } from \"../renderer/backend/render_backend\";\nimport { CanvasBackend } from \"../renderer/backend/canvas_backend\";\nimport { StandardRenderer } from \"../renderer/standard/standard_renderer\";\nimport { ManiaRenderer } from \"../renderer/mania/mania_renderer\";\nimport { AudioController } from \"./audio_controller\";\nimport { VideoController } from \"./video_controller\";\nimport { HitsoundController } from \"./hitsound_controller\";\nimport { type ISkinConfig, merge_skin } from \"../skin/skin_config\";\n\ntype PlayerEventMap = {\n timeupdate: [time: number, duration: number];\n ended: [];\n loaded: [beatmap: IBeatmap, resources: IBeatmapResources];\n error: [code: ErrorCode, reason: string];\n statechange: [is_playing: boolean];\n play: [];\n pause: [];\n seek: [time: number];\n};\n\ntype PlayerEvent = keyof PlayerEventMap;\n\nexport interface IKeyBindings {\n toggle_pause?: string; // default: Space\n seek_forward?: string; // default: ArrowRight\n seek_backward?: string; // default: ArrowLeft\n toggle_grid?: string; // default: g\n}\n\nexport interface IPlayerOptions {\n canvas: HTMLCanvasElement;\n skin?: Partial<ISkinConfig>;\n mods?: number;\n start_time?: number;\n autoplay?: boolean;\n volume?: number;\n backend?: IRenderBackend;\n renderer_config?: Partial<IRendererConfig>;\n playfield_scale?: number; // 0.0 to 1.0 (replaces fill_canvas)\n auto_resize?: boolean; // managed internally via ResizeObserver\n key_bindings?: IKeyBindings;\n}\n\nexport class BeatmapPlayer {\n private backend: IRenderBackend;\n private renderer: BaseRenderer | null = null;\n\n // audio system\n private audio_context: AudioContext;\n private audio: AudioController;\n private hitsounds: HitsoundController;\n private video: VideoController | null = null;\n\n private resources: IBeatmapResources | null = null;\n private animation_frame: number | null = null;\n\n private skin: ISkinConfig;\n private mods: number;\n private renderer_config: IRendererConfig;\n private start_offset: number;\n private volume: number;\n\n private listeners: Map<PlayerEvent, Set<Function>> = new Map();\n private _raw_osu_content: string = \"\";\n private _is_loaded: boolean = false;\n\n private next_hit_object_index: number = 0;\n\n private resize_observer: ResizeObserver | null = null;\n private key_handler: ((e: KeyboardEvent) => void) | null = null;\n private options: IPlayerOptions;\n\n constructor(options: IPlayerOptions) {\n this.options = options;\n this.backend = options.backend ?? new CanvasBackend();\n this.skin = merge_skin(options.skin);\n this.mods = options.mods ?? 0;\n this.renderer_config = { ...DEFAULT_RENDERER_CONFIG, ...options.renderer_config };\n\n // calculate scale and offset\n this.calculate_layout(options.canvas.width, options.canvas.height, options.playfield_scale);\n\n this.start_offset = options.start_time ?? -1;\n this.volume = options.volume ?? 0.5;\n\n // initialize backend with high dpi setting\n this.backend.initialize(options.canvas, this.renderer_config.use_high_dpi);\n\n // initialize audio system\n // @ts-ignore\n const AudioContextClass = window.AudioContext || window.webkitAudioContext;\n this.audio_context = new AudioContextClass();\n\n this.audio = new AudioController(this.audio_context);\n this.hitsounds = new HitsoundController(this.audio_context);\n\n // set initial volumes\n this.audio.set_volume(this.volume);\n this.hitsounds.set_volume(this.volume);\n\n if (options.auto_resize) {\n this.setup_auto_resize();\n }\n\n if (options.key_bindings) {\n this.setup_key_bindings(options.key_bindings);\n }\n }\n\n // load from .osz ArrayBuffer\n async load_osz(data: ArrayBuffer, difficulty?: number | string): Promise<Result<IBeatmapResources>> {\n try {\n const loader = new OszLoader();\n const result = await loader.load_osz(data, { difficulty });\n this.resources = result;\n return this.setup();\n } catch (e) {\n const reason = e instanceof Error ? e.message : String(e);\n this.emit(\"error\", ErrorCode.InvalidBeatmap, reason);\n return err(ErrorCode.InvalidBeatmap, reason);\n }\n }\n\n // load from file map (direct access)\n async load_files(files: Map<string, ArrayBuffer | string>, difficulty?: number | string): Promise<Result<IBeatmapResources>> {\n try {\n const loader = new OszLoader();\n this.resources = await loader.load_from_files(files, { difficulty });\n\n // store raw content for preview time extraction\n for (const [name, content] of files) {\n if (name.endsWith(\".osu\")) {\n this._raw_osu_content = typeof content === \"string\" ? content : new TextDecoder().decode(content);\n break;\n }\n }\n\n return this.setup();\n } catch (e) {\n const reason = e instanceof Error ? e.message : String(e);\n this.emit(\"error\", ErrorCode.InvalidBeatmap, reason);\n return err(ErrorCode.InvalidBeatmap, reason);\n }\n }\n\n async load_hitsounds(files: Map<string, ArrayBuffer>): Promise<void> {\n try {\n await this.hitsounds.load_samples(files);\n } catch (e) {\n console.error(\"[BeatmapPlayer] Failed to load hitsounds:\", e);\n }\n }\n\n async load_beatmap(\n beatmap: IBeatmap,\n audio?: ArrayBuffer,\n background?: Blob,\n video?: Blob,\n video_offset?: number\n ): Promise<Result<IBeatmapResources>> {\n this.resources = {\n beatmap,\n available_difficulties: [],\n files: new Map(),\n audio,\n background,\n video,\n video_offset\n };\n return this.setup();\n }\n\n async load_osu_content(content: string, audio?: ArrayBuffer): Promise<Result<IBeatmapResources>> {\n try {\n const parser = new BeatmapParser();\n const beatmap = parser.parse(content);\n this._raw_osu_content = content;\n return this.load_beatmap(beatmap, audio);\n } catch (e) {\n const reason = e instanceof Error ? e.message : String(e);\n this.emit(\"error\", ErrorCode.InvalidBeatmap, reason);\n return err(ErrorCode.InvalidBeatmap, reason);\n }\n }\n\n private async setup(): Promise<Result<IBeatmapResources>> {\n if (!this.resources) {\n return err(ErrorCode.NotLoaded, \"No resources loaded\");\n }\n\n const { beatmap, audio, video, video_offset } = this.resources;\n const speed = get_speed_multiplier(this.mods);\n\n // setup audio\n if (audio) {\n try {\n await this.audio.load(audio, this.mods);\n } catch (e) {\n const reason = e instanceof Error ? e.message : String(e);\n this.emit(\"error\", ErrorCode.AudioDecodeError, reason);\n return err(ErrorCode.AudioDecodeError, reason);\n }\n }\n\n // setup video\n if (video) {\n this.video = new VideoController();\n await this.video.load(video, video_offset ?? 0, speed);\n }\n\n // create renderer based on mode\n try {\n this.renderer = this.create_renderer(beatmap);\n this.renderer.initialize(beatmap);\n } catch (e) {\n const reason = e instanceof Error ? e.message : String(e);\n this.emit(\"error\", ErrorCode.UnsupportedMode, reason);\n return err(ErrorCode.UnsupportedMode, reason);\n }\n\n // determine start time from preview point\n if (this.start_offset < 0 && this._raw_osu_content) {\n const preview = extract_preview_time(this._raw_osu_content);\n this.start_offset = preview > 0 ? preview : this.get_last_object_time() * 0.42;\n }\n if (this.start_offset < 0) {\n this.start_offset = 0;\n }\n\n // ensure start index is correct\n this.update_hit_index(this.start_offset);\n\n if (this.resources?.background) {\n try {\n const img = new Image();\n img.src = URL.createObjectURL(this.resources.background);\n await img.decode();\n this.renderer.set_background({\n source: img,\n width: img.width,\n height: img.height\n });\n\n // ensure we are ready to draw\n this._is_loaded = true;\n requestAnimationFrame(() => this.render_frame(this.start_offset));\n } catch (e) {\n console.warn(\"[BeatmapPlayer] Failed to load background\", e);\n }\n }\n\n this._is_loaded = true;\n this.emit(\"loaded\", beatmap, this.resources);\n\n // final render call to be sure\n requestAnimationFrame(() => this.render_frame(this.start_offset));\n\n return ok(this.resources);\n }\n\n private create_renderer(beatmap: IBeatmap): BaseRenderer {\n switch (beatmap.mode) {\n case GameMode.Standard:\n return new StandardRenderer(this.backend, this.skin, this.mods, this.renderer_config);\n case GameMode.Mania:\n return new ManiaRenderer(this.backend, this.skin, this.mods, this.renderer_config);\n case GameMode.Taiko:\n case GameMode.Catch:\n default:\n throw new Error(`Unsupported game mode: ${GameMode[beatmap.mode] ?? beatmap.mode}`);\n }\n }\n\n private get_last_object_time(): number {\n if (!this.resources?.beatmap.objects.length) return 0;\n const objects = this.resources.beatmap.objects;\n return objects[objects.length - 1].end_time;\n }\n\n async play(): Promise<void> {\n if (!this.renderer || !this._is_loaded) {\n console.warn(\"[BeatmapPlayer] Cannot play: not loaded\");\n return;\n }\n\n if (this.audio.is_playing) {\n return;\n }\n\n // resume audio context if suspended (browser requirement)\n if (this.audio_context.state === \"suspended\") {\n await this.audio_context.resume();\n }\n\n this.audio.play(this.start_offset);\n this.video?.play();\n this.start_render_loop();\n this.emit(\"play\");\n this.emit(\"statechange\", true);\n }\n\n pause(): void {\n if (!this.audio.is_playing) return;\n\n // save current position for resume\n this.start_offset = this.audio.current_time;\n\n this.audio.pause();\n this.video?.pause();\n this.stop_render_loop();\n this.emit(\"pause\");\n this.emit(\"statechange\", false);\n }\n\n set_mods(mods: number): void {\n this.mods = mods;\n const speed = get_speed_multiplier(mods);\n\n this.renderer?.set_mods(mods);\n this.audio.set_speed(speed);\n this.video?.set_speed(speed);\n\n if (this._is_loaded) {\n requestAnimationFrame(() => this.render_frame(this.current_time));\n }\n }\n\n seek(time_ms: number): void {\n // update start offset for both playing and paused states\n this.start_offset = Math.max(0, Math.min(time_ms, this.duration));\n\n // update hit index to avoid replaying hits or missing future hits\n this.update_hit_index(this.start_offset);\n\n this.audio.seek(this.start_offset);\n this.video?.seek(this.start_offset);\n\n this.emit(\"seek\", this.start_offset);\n\n // render frame at new position\n this.render_frame(this.start_offset);\n }\n\n async set_difficulty(index: number | string): Promise<Result<IBeatmapResources>> {\n if (!this.resources) {\n return err(ErrorCode.NotLoaded, \"No beatmap resources loaded\");\n }\n\n const was_playing = this.is_playing;\n this.stop();\n\n try {\n const loader = new OszLoader();\n // preserve existing files and options, just change difficulty\n const result = await loader.load_from_files(this.resources.files, { difficulty: index });\n this.resources = result;\n\n // update raw content for preview time extraction\n const selected_file = this.resources.available_difficulties.find((d) => d.version === this.resources!.beatmap.version)?.filename;\n if (selected_file) {\n const content = this.resources.files.get(selected_file);\n if (content) {\n this._raw_osu_content = typeof content === \"string\" ? content : new TextDecoder().decode(content);\n }\n }\n\n const setup_result = await this.setup();\n\n if (setup_result.success && was_playing) {\n this.play();\n }\n\n return setup_result;\n } catch (e) {\n const reason = e instanceof Error ? e.message : String(e);\n this.emit(\"error\", ErrorCode.InvalidBeatmap, reason);\n return err(ErrorCode.InvalidBeatmap, reason);\n }\n }\n\n private update_hit_index(time: number): void {\n if (!this.resources?.beatmap) return;\n\n const objects = this.resources.beatmap.objects;\n\n // reset index if we went backwards\n if (this.next_hit_object_index > 0 && objects[this.next_hit_object_index - 1].time > time) {\n this.next_hit_object_index = 0;\n }\n\n // fast forward\n while (this.next_hit_object_index < objects.length && objects[this.next_hit_object_index].time < time) {\n this.next_hit_object_index++;\n }\n }\n\n stop(): void {\n this.pause();\n this.start_offset = 0;\n this.audio.seek(0);\n this.update_hit_index(0);\n this.render_frame(0);\n }\n\n dispose(): void {\n this.stop();\n this.backend.dispose();\n this.audio.dispose();\n this.hitsounds.dispose();\n this.video?.dispose();\n this.renderer?.dispose(); // Ensure renderer is disposed\n this.listeners.clear();\n\n if (this.resize_observer) {\n this.resize_observer.disconnect();\n this.resize_observer = null;\n }\n\n if (this.key_handler) {\n window.removeEventListener(\"keydown\", this.key_handler);\n this.key_handler = null;\n }\n\n if (this.audio_context && this.audio_context.state !== \"closed\") {\n this.audio_context.close().catch(() => {});\n }\n\n this.renderer = null;\n this.resources = null;\n this._is_loaded = false;\n this.listeners.clear();\n }\n\n // getters\n get current_time(): number {\n return this.audio.current_time;\n }\n\n get duration(): number {\n return this.audio.duration || this.get_last_object_time();\n }\n\n get is_playing(): boolean {\n return this.audio.is_playing;\n }\n\n get is_loaded(): boolean {\n return this._is_loaded;\n }\n\n get mode(): string {\n if (!this.resources) return \"standard\";\n switch (this.resources.beatmap.mode) {\n case 1:\n return \"taiko\";\n case 2:\n return \"catch\";\n case 3:\n return \"mania\";\n default:\n return \"standard\";\n }\n }\n\n get beatmap(): IBeatmap | null {\n return this.resources?.beatmap ?? null;\n }\n\n get available_difficulties(): IBeatmapInfo[] {\n return this.resources?.available_difficulties ?? [];\n }\n\n get background(): Blob | undefined {\n return this.resources?.background;\n }\n\n get config(): IRendererConfig {\n return this.renderer_config;\n }\n\n resize(width: number, height: number, playfield_scale?: number): void {\n this.backend.resize(width, height);\n this.calculate_layout(width, height, playfield_scale);\n\n if (this._is_loaded) {\n requestAnimationFrame(() => this.render_frame(this.current_time));\n }\n }\n\n update_config(config: Partial<IRendererConfig>): void {\n this.renderer_config = { ...this.renderer_config, ...config };\n this.renderer?.update_config(this.renderer_config);\n\n if (this._is_loaded) {\n requestAnimationFrame(() => this.render_frame(this.current_time));\n }\n }\n\n set_skin(skin: Partial<ISkinConfig>): void {\n this.skin = merge_skin(skin);\n\n // renderer needs to be recreated with new skin\n if (this._is_loaded && this.resources?.beatmap) {\n this.renderer = this.create_renderer(this.resources.beatmap);\n this.renderer.initialize(this.resources.beatmap);\n requestAnimationFrame(() => this.render_frame(this.current_time));\n }\n }\n\n private setup_auto_resize(): void {\n this.resize_observer = new ResizeObserver(() => {\n const canvas = this.options.canvas;\n const parent = canvas.parentElement;\n if (parent) {\n const rect = parent.getBoundingClientRect();\n // do not manually set canvas.width/height here,\n // let this.resize -> backend.resize handle it with DPR\n this.resize(rect.width, rect.height, this.options.playfield_scale);\n }\n });\n this.resize_observer.observe(this.options.canvas.parentElement || this.options.canvas);\n }\n\n private setup_key_bindings(bindings: IKeyBindings): void {\n this.key_handler = (e: KeyboardEvent) => {\n const keys = {\n toggle_pause: bindings.toggle_pause ?? \"Space\",\n seek_forward: bindings.seek_forward ?? \"ArrowRight\",\n seek_backward: bindings.seek_backward ?? \"ArrowLeft\",\n toggle_grid: bindings.toggle_grid ?? \"g\"\n };\n\n if (e.code === keys.toggle_pause) {\n e.preventDefault();\n this.toggle_pause();\n } else if (e.code === keys.seek_forward) {\n e.preventDefault();\n this.seek(this.current_time + 5000);\n } else if (e.code === keys.seek_backward) {\n e.preventDefault();\n this.seek(this.current_time - 5000);\n } else if (e.code === keys.toggle_grid) {\n this.toggle_grid();\n }\n };\n\n window.addEventListener(\"keydown\", this.key_handler);\n }\n\n toggle_pause(): void {\n if (!this._is_loaded) return;\n this.is_playing ? this.pause() : this.play();\n }\n\n toggle_grid(): void {\n if (this.renderer_config.grid_level === 0) {\n this.renderer_config.grid_level = 32;\n } else {\n this.renderer_config.grid_level = 0;\n }\n this.render_frame(this.current_time);\n }\n\n private calculate_layout(width: number, height: number, playfield_scale?: number): void {\n const target_width = 512;\n const target_height = 384;\n\n let fill = 0.9;\n if (typeof playfield_scale === \"number\") {\n fill = playfield_scale;\n }\n\n // calculate scale based on the smaller dimension to fit playfield\n const scale_x = (width * fill) / target_width;\n const scale_y = (height * fill) / target_height;\n const scale = Math.min(scale_x, scale_y);\n\n this.renderer_config.scale = scale;\n // pixel-perfect centering\n this.renderer_config.offset_x = Math.floor((width - target_width * scale) / 2);\n this.renderer_config.offset_y = Math.floor((height - target_height * scale) / 2);\n\n // propagate config to renderer\n if (this.renderer) {\n this.renderer.update_config(this.renderer_config);\n }\n }\n\n set_volume(volume: number): void {\n this.volume = volume;\n this.audio.set_volume(volume);\n this.hitsounds.set_volume(volume);\n }\n\n on<E extends PlayerEvent>(event: E, callback: (...args: PlayerEventMap[E]) => void): void {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(callback);\n }\n\n off<E extends PlayerEvent>(event: E, callback: Function): void {\n this.listeners.get(event)?.delete(callback);\n }\n\n private emit<E extends PlayerEvent>(event: E, ...args: PlayerEventMap[E]): void {\n const callbacks = this.listeners.get(event);\n if (callbacks) {\n for (const cb of callbacks) {\n (cb as Function)(...args);\n }\n }\n }\n\n private start_render_loop(): void {\n if (this.animation_frame !== null) return;\n\n const loop = () => {\n if (!this.audio.is_playing) {\n this.animation_frame = null;\n return;\n }\n\n const time = this.audio.current_time;\n\n // process hitsounds\n this.schedule_hitsounds();\n\n this.render_frame(time);\n this.video?.sync(time);\n this.emit(\"timeupdate\", time, this.duration);\n\n if (time >= this.duration) {\n this.emit(\"ended\");\n this.stop_render_loop();\n this.emit(\"statechange\", false);\n return;\n }\n\n this.animation_frame = requestAnimationFrame(loop);\n };\n\n this.animation_frame = requestAnimationFrame(loop);\n }\n\n private schedule_hitsounds(): void {\n if (!this.resources?.beatmap || !this.audio.is_playing) return;\n\n const objects = this.resources.beatmap.objects;\n const current_time = this.audio.current_time;\n const lookahead = 100;\n const schedule_window = current_time + lookahead;\n\n while (this.next_hit_object_index < objects.length && objects[this.next_hit_object_index].time <= schedule_window) {\n const obj = objects[this.next_hit_object_index];\n\n // only play if it hasn't passed by too much\n // but we rely on update_hit_index to skip old ones on seek\n if (obj.time >= current_time - 20) {\n this.play_hitsound(obj);\n }\n\n this.next_hit_object_index++;\n }\n }\n\n private play_hitsound(obj: IHitObject): void {\n const timing = this.get_timing_point(obj.time);\n\n // default values from timing point\n let volume = timing.volume;\n let normal_set = timing.sample_set;\n let addition_set = timing.sample_set; // Additions default to current set\n let index = timing.sample_index;\n let custom_filename: string | undefined = undefined;\n\n // override from HitObject specific HitSample\n if (obj.hit_sample) {\n const sample = obj.hit_sample;\n\n if (sample.normal_set !== SampleSet.Auto) {\n normal_set = sample.normal_set;\n // if normal set is explicitly set, addition set defaults to it (if Auto)\n if (sample.addition_set === SampleSet.Auto) {\n addition_set = normal_set;\n }\n }\n\n if (sample.addition_set !== SampleSet.Auto) {\n addition_set = sample.addition_set;\n }\n\n if (sample.index !== 0) index = sample.index;\n if (sample.volume !== 0) volume = sample.volume;\n custom_filename = sample.filename;\n }\n\n // fallbacks for Auto values\n if (normal_set === SampleSet.Auto) normal_set = SampleSet.Normal;\n if (addition_set === SampleSet.Auto) addition_set = normal_set;\n\n // calculate exact AudioContext time for this object\n const when = this.audio.get_host_time(obj.time);\n\n this.hitsounds.play(normal_set, addition_set, obj.hit_sound, index, volume, custom_filename, when);\n }\n\n private get_timing_point(time: number): any {\n const points = this.resources?.beatmap.timing_points ?? [];\n for (let i = points.length - 1; i >= 0; i--) {\n if (points[i].time <= time) return points[i];\n }\n return points[0]; // fallback\n }\n\n private stop_render_loop(): void {\n if (this.animation_frame !== null) {\n cancelAnimationFrame(this.animation_frame);\n this.animation_frame = null;\n }\n }\n\n private render_frame(time: number): void {\n this.backend.clear();\n this.renderer?.render(time);\n }\n}\n"
|
|
27
|
+
"import type { IBeatmap, IHitObject, IBeatmapInfo } from \"../types/beatmap\";\nimport { GameMode, SampleSet } from \"../types/beatmap\";\nimport type { IBeatmapResources } from \"../types/resources\";\nimport { type Result, ErrorCode, ok, err } from \"../types/result\";\nimport { get_speed_multiplier } from \"../types/mods\";\nimport { OszLoader } from \"../parser/osz_loader\";\nimport { BeatmapParser, extract_preview_time } from \"../parser/beatmap_parser\";\nimport { BaseRenderer, DEFAULT_RENDERER_CONFIG, type IRendererConfig } from \"../renderer/base_renderer\";\nimport type { IRenderBackend } from \"../renderer/backend/render_backend\";\nimport { CanvasBackend } from \"../renderer/backend/canvas_backend\";\nimport { StandardRenderer } from \"../renderer/standard/standard_renderer\";\nimport { ManiaRenderer } from \"../renderer/mania/mania_renderer\";\nimport { AudioController } from \"./audio_controller\";\nimport { VideoController } from \"./video_controller\";\nimport { HitsoundController } from \"./hitsound_controller\";\nimport { type ISkinConfig, merge_skin } from \"../skin/skin_config\";\n\ntype PlayerEventMap = {\n timeupdate: [time: number, duration: number];\n ended: [];\n loaded: [beatmap: IBeatmap, resources: IBeatmapResources];\n error: [code: ErrorCode, reason: string];\n statechange: [is_playing: boolean];\n play: [];\n pause: [];\n seek: [time: number];\n};\n\ntype PlayerEvent = keyof PlayerEventMap;\n\nexport interface IKeyBindings {\n toggle_pause?: string; // default: Space\n seek_forward?: string; // default: ArrowRight\n seek_backward?: string; // default: ArrowLeft\n toggle_grid?: string; // default: g\n}\n\nexport interface IPlayerOptions {\n canvas: HTMLCanvasElement;\n skin?: Partial<ISkinConfig>;\n mods?: number;\n start_time?: number;\n autoplay?: boolean;\n volume?: number;\n backend?: IRenderBackend;\n renderer_config?: Partial<IRendererConfig>;\n playfield_scale?: number; // 0.0 to 1.0 (replaces fill_canvas)\n auto_resize?: boolean; // managed internally via ResizeObserver\n}\n\nexport class BeatmapPlayer {\n private backend: IRenderBackend;\n private renderer: BaseRenderer | null = null;\n\n // audio system\n private audio_context: AudioContext;\n private audio: AudioController;\n private hitsounds: HitsoundController;\n private video: VideoController | null = null;\n\n private resources: IBeatmapResources | null = null;\n private animation_frame: number | null = null;\n\n private skin: ISkinConfig;\n private mods: number;\n private renderer_config: IRendererConfig;\n private start_offset: number;\n private volume: number;\n\n private listeners: Map<PlayerEvent, Set<Function>> = new Map();\n private _raw_osu_content: string = \"\";\n private _is_loaded: boolean = false;\n\n private next_hit_object_index: number = 0;\n\n private resize_observer: ResizeObserver | null = null;\n private key_handler: ((e: KeyboardEvent) => void) | null = null;\n private options: IPlayerOptions;\n\n constructor(options: IPlayerOptions) {\n this.options = options;\n this.backend = options.backend ?? new CanvasBackend();\n this.skin = merge_skin(options.skin);\n this.mods = options.mods ?? 0;\n this.renderer_config = { ...DEFAULT_RENDERER_CONFIG, ...options.renderer_config };\n\n // calculate scale and offset\n this.calculate_layout(options.canvas.width, options.canvas.height, options.playfield_scale);\n\n this.start_offset = options.start_time ?? -1;\n this.volume = options.volume ?? 0.5;\n\n // initialize backend with high dpi setting\n this.backend.initialize(options.canvas, this.renderer_config.use_high_dpi);\n\n // initialize audio system\n // @ts-ignore\n const AudioContextClass = window.AudioContext || window.webkitAudioContext;\n this.audio_context = new AudioContextClass();\n\n this.audio = new AudioController(this.audio_context);\n this.hitsounds = new HitsoundController(this.audio_context);\n\n // set initial volumes\n this.audio.set_volume(this.volume);\n this.hitsounds.set_volume(this.volume);\n\n if (options.auto_resize) {\n this.setup_auto_resize();\n }\n }\n\n // load from .osz ArrayBuffer\n async load_osz(data: ArrayBuffer, difficulty?: number | string): Promise<Result<IBeatmapResources>> {\n try {\n const loader = new OszLoader();\n const result = await loader.load_osz(data, { difficulty });\n this.resources = result;\n return this.setup();\n } catch (e) {\n const reason = e instanceof Error ? e.message : String(e);\n this.emit(\"error\", ErrorCode.InvalidBeatmap, reason);\n return err(ErrorCode.InvalidBeatmap, reason);\n }\n }\n\n // load from file map (direct access)\n async load_files(files: Map<string, ArrayBuffer | string>, difficulty?: number | string): Promise<Result<IBeatmapResources>> {\n try {\n const loader = new OszLoader();\n this.resources = await loader.load_from_files(files, { difficulty });\n\n // store raw content for preview time extraction\n for (const [name, content] of files) {\n if (name.endsWith(\".osu\")) {\n this._raw_osu_content = typeof content === \"string\" ? content : new TextDecoder().decode(content);\n break;\n }\n }\n\n return this.setup();\n } catch (e) {\n const reason = e instanceof Error ? e.message : String(e);\n this.emit(\"error\", ErrorCode.InvalidBeatmap, reason);\n return err(ErrorCode.InvalidBeatmap, reason);\n }\n }\n\n async load_hitsounds(files: Map<string, ArrayBuffer>): Promise<void> {\n try {\n await this.hitsounds.load_samples(files);\n } catch (e) {\n console.error(\"[BeatmapPlayer] Failed to load hitsounds:\", e);\n }\n }\n\n async load_beatmap(\n beatmap: IBeatmap,\n audio?: ArrayBuffer,\n background?: Blob,\n video?: Blob,\n video_offset?: number\n ): Promise<Result<IBeatmapResources>> {\n this.resources = {\n beatmap,\n available_difficulties: [],\n files: new Map(),\n audio,\n background,\n video,\n video_offset\n };\n return this.setup();\n }\n\n async load_osu_content(content: string, audio?: ArrayBuffer): Promise<Result<IBeatmapResources>> {\n try {\n const parser = new BeatmapParser();\n const beatmap = parser.parse(content);\n this._raw_osu_content = content;\n return this.load_beatmap(beatmap, audio);\n } catch (e) {\n const reason = e instanceof Error ? e.message : String(e);\n this.emit(\"error\", ErrorCode.InvalidBeatmap, reason);\n return err(ErrorCode.InvalidBeatmap, reason);\n }\n }\n\n private async setup(): Promise<Result<IBeatmapResources>> {\n if (!this.resources) {\n return err(ErrorCode.NotLoaded, \"No resources loaded\");\n }\n\n const { beatmap, audio, video, video_offset } = this.resources;\n const speed = get_speed_multiplier(this.mods);\n\n // setup audio\n if (audio) {\n try {\n await this.audio.load(audio, this.mods);\n } catch (e) {\n const reason = e instanceof Error ? e.message : String(e);\n this.emit(\"error\", ErrorCode.AudioDecodeError, reason);\n return err(ErrorCode.AudioDecodeError, reason);\n }\n }\n\n // setup video\n if (video) {\n this.video = new VideoController();\n await this.video.load(video, video_offset ?? 0, speed);\n }\n\n // create renderer based on mode\n try {\n this.renderer = this.create_renderer(beatmap);\n this.renderer.initialize(beatmap);\n } catch (e) {\n const reason = e instanceof Error ? e.message : String(e);\n this.emit(\"error\", ErrorCode.UnsupportedMode, reason);\n return err(ErrorCode.UnsupportedMode, reason);\n }\n\n // determine start time from preview point\n if (this.start_offset < 0 && this._raw_osu_content) {\n const preview = extract_preview_time(this._raw_osu_content);\n this.start_offset = preview > 0 ? preview : this.get_last_object_time() * 0.42;\n }\n if (this.start_offset < 0) {\n this.start_offset = 0;\n }\n\n // ensure start index is correct\n this.update_hit_index(this.start_offset);\n\n if (this.resources?.background) {\n try {\n const img = new Image();\n img.src = URL.createObjectURL(this.resources.background);\n await img.decode();\n this.renderer.set_background({\n source: img,\n width: img.width,\n height: img.height\n });\n\n // ensure we are ready to draw\n this._is_loaded = true;\n requestAnimationFrame(() => this.render_frame(this.start_offset));\n } catch (e) {\n console.warn(\"[BeatmapPlayer] Failed to load background\", e);\n }\n }\n\n this._is_loaded = true;\n this.emit(\"loaded\", beatmap, this.resources);\n\n // final render call to be sure\n requestAnimationFrame(() => this.render_frame(this.start_offset));\n\n return ok(this.resources);\n }\n\n private create_renderer(beatmap: IBeatmap): BaseRenderer {\n switch (beatmap.mode) {\n case GameMode.Standard:\n return new StandardRenderer(this.backend, this.skin, this.mods, this.renderer_config);\n case GameMode.Mania:\n return new ManiaRenderer(this.backend, this.skin, this.mods, this.renderer_config);\n case GameMode.Taiko:\n case GameMode.Catch:\n default:\n throw new Error(`Unsupported game mode: ${GameMode[beatmap.mode] ?? beatmap.mode}`);\n }\n }\n\n private get_last_object_time(): number {\n if (!this.resources?.beatmap.objects.length) return 0;\n const objects = this.resources.beatmap.objects;\n return objects[objects.length - 1].end_time;\n }\n\n async play(): Promise<void> {\n if (!this.renderer || !this._is_loaded) {\n console.warn(\"[BeatmapPlayer] Cannot play: not loaded\");\n return;\n }\n\n if (this.audio.is_playing) {\n return;\n }\n\n // resume audio context if suspended (browser requirement)\n if (this.audio_context.state === \"suspended\") {\n await this.audio_context.resume();\n }\n\n this.audio.play(this.start_offset);\n this.video?.play();\n this.start_render_loop();\n this.emit(\"play\");\n this.emit(\"statechange\", true);\n }\n\n pause(): void {\n if (!this.audio.is_playing) return;\n\n // save current position for resume\n this.start_offset = this.audio.current_time;\n\n this.audio.pause();\n this.video?.pause();\n this.stop_render_loop();\n this.emit(\"pause\");\n this.emit(\"statechange\", false);\n }\n\n set_mods(mods: number): void {\n this.mods = mods;\n const speed = get_speed_multiplier(mods);\n\n this.renderer?.set_mods(mods);\n this.audio.set_speed(speed);\n this.video?.set_speed(speed);\n\n if (this._is_loaded) {\n requestAnimationFrame(() => this.render_frame(this.current_time));\n }\n }\n\n seek(time_ms: number): void {\n // update start offset for both playing and paused states\n this.start_offset = Math.max(0, Math.min(time_ms, this.duration));\n\n // update hit index to avoid replaying hits or missing future hits\n this.update_hit_index(this.start_offset);\n\n this.audio.seek(this.start_offset);\n this.video?.seek(this.start_offset);\n\n this.emit(\"seek\", this.start_offset);\n\n // render frame at new position\n this.render_frame(this.start_offset);\n }\n\n async set_difficulty(index: number | string): Promise<Result<IBeatmapResources>> {\n if (!this.resources) {\n return err(ErrorCode.NotLoaded, \"No beatmap resources loaded\");\n }\n\n const was_playing = this.is_playing;\n this.stop();\n\n try {\n const loader = new OszLoader();\n // preserve existing files and options, just change difficulty\n const result = await loader.load_from_files(this.resources.files, { difficulty: index });\n this.resources = result;\n\n // update raw content for preview time extraction\n const selected_file = this.resources.available_difficulties.find((d) => d.version === this.resources!.beatmap.version)?.filename;\n if (selected_file) {\n const content = this.resources.files.get(selected_file);\n if (content) {\n this._raw_osu_content = typeof content === \"string\" ? content : new TextDecoder().decode(content);\n }\n }\n\n const setup_result = await this.setup();\n\n if (setup_result.success && was_playing) {\n this.play();\n }\n\n return setup_result;\n } catch (e) {\n const reason = e instanceof Error ? e.message : String(e);\n this.emit(\"error\", ErrorCode.InvalidBeatmap, reason);\n return err(ErrorCode.InvalidBeatmap, reason);\n }\n }\n\n private update_hit_index(time: number): void {\n if (!this.resources?.beatmap) return;\n\n const objects = this.resources.beatmap.objects;\n\n // reset index if we went backwards\n if (this.next_hit_object_index > 0 && objects[this.next_hit_object_index - 1].time > time) {\n this.next_hit_object_index = 0;\n }\n\n // fast forward\n while (this.next_hit_object_index < objects.length && objects[this.next_hit_object_index].time < time) {\n this.next_hit_object_index++;\n }\n }\n\n stop(): void {\n this.pause();\n this.start_offset = 0;\n this.audio.seek(0);\n this.update_hit_index(0);\n this.render_frame(0);\n }\n\n dispose(): void {\n this.stop();\n this.backend.dispose();\n this.audio.dispose();\n this.hitsounds.dispose();\n this.video?.dispose();\n this.renderer?.dispose(); // Ensure renderer is disposed\n this.listeners.clear();\n\n if (this.resize_observer) {\n this.resize_observer.disconnect();\n this.resize_observer = null;\n }\n\n if (this.key_handler) {\n window.removeEventListener(\"keydown\", this.key_handler);\n this.key_handler = null;\n }\n\n if (this.audio_context && this.audio_context.state !== \"closed\") {\n this.audio_context.close().catch(() => {});\n }\n\n this.renderer = null;\n this.resources = null;\n this._is_loaded = false;\n this.listeners.clear();\n }\n\n // getters\n get current_time(): number {\n return this.audio.current_time;\n }\n\n get duration(): number {\n return this.audio.duration || this.get_last_object_time();\n }\n\n get is_playing(): boolean {\n return this.audio.is_playing;\n }\n\n get is_loaded(): boolean {\n return this._is_loaded;\n }\n\n get mode(): string {\n if (!this.resources) return \"standard\";\n switch (this.resources.beatmap.mode) {\n case 1:\n return \"taiko\";\n case 2:\n return \"catch\";\n case 3:\n return \"mania\";\n default:\n return \"standard\";\n }\n }\n\n get beatmap(): IBeatmap | null {\n return this.resources?.beatmap ?? null;\n }\n\n get available_difficulties(): IBeatmapInfo[] {\n return this.resources?.available_difficulties ?? [];\n }\n\n get background(): Blob | undefined {\n return this.resources?.background;\n }\n\n get config(): IRendererConfig {\n return this.renderer_config;\n }\n\n resize(width: number, height: number, playfield_scale?: number): void {\n this.backend.resize(width, height);\n this.calculate_layout(width, height, playfield_scale);\n\n if (this._is_loaded) {\n requestAnimationFrame(() => this.render_frame(this.current_time));\n }\n }\n\n update_config(config: Partial<IRendererConfig>): void {\n this.renderer_config = { ...this.renderer_config, ...config };\n this.renderer?.update_config(this.renderer_config);\n\n if (this._is_loaded) {\n requestAnimationFrame(() => this.render_frame(this.current_time));\n }\n }\n\n set_skin(skin: Partial<ISkinConfig>): void {\n this.skin = merge_skin(skin);\n\n // renderer needs to be recreated with new skin\n if (this._is_loaded && this.resources?.beatmap) {\n this.renderer = this.create_renderer(this.resources.beatmap);\n this.renderer.initialize(this.resources.beatmap);\n requestAnimationFrame(() => this.render_frame(this.current_time));\n }\n }\n\n private setup_auto_resize(): void {\n this.resize_observer = new ResizeObserver(() => {\n const canvas = this.options.canvas;\n const parent = canvas.parentElement;\n if (parent) {\n const rect = parent.getBoundingClientRect();\n // do not manually set canvas.width/height here,\n // let this.resize -> backend.resize handle it with DPR\n this.resize(rect.width, rect.height, this.options.playfield_scale);\n }\n });\n this.resize_observer.observe(this.options.canvas.parentElement || this.options.canvas);\n }\n\n toggle_pause(): void {\n if (!this._is_loaded) return;\n this.is_playing ? this.pause() : this.play();\n }\n\n toggle_grid(): void {\n if (this.renderer_config.grid_level === 0) {\n this.renderer_config.grid_level = 32;\n } else {\n this.renderer_config.grid_level = 0;\n }\n this.render_frame(this.current_time);\n }\n\n private calculate_layout(width: number, height: number, playfield_scale?: number): void {\n const target_width = 512;\n const target_height = 384;\n\n let fill = 0.9;\n if (typeof playfield_scale === \"number\") {\n fill = playfield_scale;\n }\n\n // calculate scale based on the smaller dimension to fit playfield\n const scale_x = (width * fill) / target_width;\n const scale_y = (height * fill) / target_height;\n const scale = Math.min(scale_x, scale_y);\n\n this.renderer_config.scale = scale;\n // pixel-perfect centering\n this.renderer_config.offset_x = Math.floor((width - target_width * scale) / 2);\n this.renderer_config.offset_y = Math.floor((height - target_height * scale) / 2);\n\n // propagate config to renderer\n if (this.renderer) {\n this.renderer.update_config(this.renderer_config);\n }\n }\n\n set_volume(volume: number): void {\n this.volume = volume;\n this.audio.set_volume(volume);\n this.hitsounds.set_volume(volume);\n }\n\n on<E extends PlayerEvent>(event: E, callback: (...args: PlayerEventMap[E]) => void): void {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(callback);\n }\n\n off<E extends PlayerEvent>(event: E, callback: Function): void {\n this.listeners.get(event)?.delete(callback);\n }\n\n private emit<E extends PlayerEvent>(event: E, ...args: PlayerEventMap[E]): void {\n const callbacks = this.listeners.get(event);\n if (callbacks) {\n for (const cb of callbacks) {\n (cb as Function)(...args);\n }\n }\n }\n\n private start_render_loop(): void {\n if (this.animation_frame !== null) return;\n\n const loop = () => {\n if (!this.audio.is_playing) {\n this.animation_frame = null;\n return;\n }\n\n const time = this.audio.current_time;\n\n // process hitsounds\n this.schedule_hitsounds();\n\n this.render_frame(time);\n this.video?.sync(time);\n this.emit(\"timeupdate\", time, this.duration);\n\n if (time >= this.duration) {\n this.emit(\"ended\");\n this.stop_render_loop();\n this.emit(\"statechange\", false);\n return;\n }\n\n this.animation_frame = requestAnimationFrame(loop);\n };\n\n this.animation_frame = requestAnimationFrame(loop);\n }\n\n private schedule_hitsounds(): void {\n if (!this.resources?.beatmap || !this.audio.is_playing) return;\n\n const objects = this.resources.beatmap.objects;\n const current_time = this.audio.current_time;\n const lookahead = 100;\n const schedule_window = current_time + lookahead;\n\n while (this.next_hit_object_index < objects.length && objects[this.next_hit_object_index].time <= schedule_window) {\n const obj = objects[this.next_hit_object_index];\n\n // only play if it hasn't passed by too much\n // but we rely on update_hit_index to skip old ones on seek\n if (obj.time >= current_time - 20) {\n this.play_hitsound(obj);\n }\n\n this.next_hit_object_index++;\n }\n }\n\n private play_hitsound(obj: IHitObject): void {\n const timing = this.get_timing_point(obj.time);\n\n // default values from timing point\n let volume = timing.volume;\n let normal_set = timing.sample_set;\n let addition_set = timing.sample_set; // Additions default to current set\n let index = timing.sample_index;\n let custom_filename: string | undefined = undefined;\n\n // override from HitObject specific HitSample\n if (obj.hit_sample) {\n const sample = obj.hit_sample;\n\n if (sample.normal_set !== SampleSet.Auto) {\n normal_set = sample.normal_set;\n // if normal set is explicitly set, addition set defaults to it (if Auto)\n if (sample.addition_set === SampleSet.Auto) {\n addition_set = normal_set;\n }\n }\n\n if (sample.addition_set !== SampleSet.Auto) {\n addition_set = sample.addition_set;\n }\n\n if (sample.index !== 0) index = sample.index;\n if (sample.volume !== 0) volume = sample.volume;\n custom_filename = sample.filename;\n }\n\n // fallbacks for Auto values\n if (normal_set === SampleSet.Auto) normal_set = SampleSet.Normal;\n if (addition_set === SampleSet.Auto) addition_set = normal_set;\n\n // calculate exact AudioContext time for this object\n const when = this.audio.get_host_time(obj.time);\n\n this.hitsounds.play(normal_set, addition_set, obj.hit_sound, index, volume, custom_filename, when);\n }\n\n private get_timing_point(time: number): any {\n const points = this.resources?.beatmap.timing_points ?? [];\n for (let i = points.length - 1; i >= 0; i--) {\n if (points[i].time <= time) return points[i];\n }\n return points[0]; // fallback\n }\n\n private stop_render_loop(): void {\n if (this.animation_frame !== null) {\n cancelAnimationFrame(this.animation_frame);\n this.animation_frame = null;\n }\n }\n\n private render_frame(time: number): void {\n this.backend.clear();\n this.renderer?.render(time);\n }\n}\n"
|
|
28
28
|
],
|
|
29
|
-
"mappings": "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",
|
|
30
|
-
"debugId": "
|
|
29
|
+
"mappings": "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",
|
|
30
|
+
"debugId": "27D7FC659F0B6DFA64756E2164756E21",
|
|
31
31
|
"names": []
|
|
32
32
|
}
|
package/dist/player/player.d.ts
CHANGED
|
@@ -32,7 +32,6 @@ export interface IPlayerOptions {
|
|
|
32
32
|
renderer_config?: Partial<IRendererConfig>;
|
|
33
33
|
playfield_scale?: number;
|
|
34
34
|
auto_resize?: boolean;
|
|
35
|
-
key_bindings?: IKeyBindings;
|
|
36
35
|
}
|
|
37
36
|
export declare class BeatmapPlayer {
|
|
38
37
|
private backend;
|
|
@@ -85,7 +84,6 @@ export declare class BeatmapPlayer {
|
|
|
85
84
|
update_config(config: Partial<IRendererConfig>): void;
|
|
86
85
|
set_skin(skin: Partial<ISkinConfig>): void;
|
|
87
86
|
private setup_auto_resize;
|
|
88
|
-
private setup_key_bindings;
|
|
89
87
|
toggle_pause(): void;
|
|
90
88
|
toggle_grid(): void;
|
|
91
89
|
private calculate_layout;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../../src/player/player.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAc,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,KAAK,MAAM,EAAE,SAAS,EAAW,MAAM,iBAAiB,CAAC;AAIlE,OAAO,EAAyC,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACxG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAOzE,OAAO,EAAE,KAAK,WAAW,EAAc,MAAM,qBAAqB,CAAC;AAEnE,KAAK,cAAc,GAAG;IAClB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7C,KAAK,EAAE,EAAE,CAAC;IACV,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAC1D,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,WAAW,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACnC,IAAI,EAAE,EAAE,CAAC;IACT,KAAK,EAAE,EAAE,CAAC;IACV,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;CACxB,CAAC;AAEF,KAAK,WAAW,GAAG,MAAM,cAAc,CAAC;AAExC,MAAM,WAAW,YAAY;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../../src/player/player.ts"],"names":[],"mappings":"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"}
|