@rel-packages/osu-beatmap-preview 0.8.2 → 0.8.4
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 +4 -5
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var Tr;((s)=>{s[s.Standard=0]="Standard";s[s.Taiko=1]="Taiko";s[s.Catch=2]="Catch";s[s.Mania=3]="Mania"})(Tr||={});var Hr;((s)=>{s[s.Auto=0]="Auto";s[s.Normal=1]="Normal";s[s.Soft=2]="Soft";s[s.Drum=3]="Drum"})(Hr||={});var F={Circle:1,Slider:2,NewCombo:4,Spinner:8,ComboSkip:112,Hold:128},rr={Normal:1,Whistle:2,Finish:4,Clap:8},qr=(r)=>(r.type&F.Circle)!==0,Dr=(r)=>(r.type&F.Slider)!==0,J=(r)=>(r.type&F.Spinner)!==0,Er=(r)=>(r.type&F.Hold)!==0,Lr=(r)=>(r.type&F.NewCombo)!==0;var Zr;((f)=>{f.NoOsuFiles="NO_OSU_FILES";f.DifficultyNotFound="DIFFICULTY_NOT_FOUND";f.InvalidBeatmap="INVALID_BEATMAP";f.UnsupportedMode="UNSUPPORTED_MODE";f.AudioNotLoaded="AUDIO_NOT_LOADED";f.AudioDecodeError="AUDIO_DECODE_ERROR";f.NotLoaded="NOT_LOADED";f.Unknown="UNKNOWN"})(Zr||={});var Xr=(r)=>({success:!0,data:r}),S=(r,n)=>({success:!1,code:r,reason:n}),xn=(r)=>{if(r.success)return r.data;throw Error(`[${r.code}] ${r.reason}`)},_n=(r)=>{return r.success},jn=(r)=>{return!r.success};var a={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},mn=a.DoubleTime|a.HalfTime|a.Nightcore,re=a.HardRock|a.Easy|mn,ne=(r)=>{let n=0,e=r.toLowerCase(),t={nf:a.NoFail,ez:a.Easy,td:a.TouchDevice,hd:a.Hidden,hr:a.HardRock,sd:a.SuddenDeath,dt:a.DoubleTime,rx:a.Relax,ht:a.HalfTime,nc:a.Nightcore,fl:a.Flashlight,at:a.Autoplay,so:a.SpunOut,ap:a.Autopilot,pf:a.Perfect,fi:a.FadeIn,mr:a.Mirror};for(let s=0;s<e.length-1;s+=2){let u=e.slice(s,s+2);if(t[u])n|=t[u]}return n},ee=(r)=>{let n=[];if(r&a.NoFail)n.push("NF");if(r&a.Easy)n.push("EZ");if(r&a.Hidden)n.push("HD");if(r&a.HardRock)n.push("HR");if(r&a.SuddenDeath)n.push("SD");if(r&a.DoubleTime)n.push("DT");if(r&a.HalfTime)n.push("HT");if(r&a.Nightcore)n.push("NC");if(r&a.Flashlight)n.push("FL");if(r&a.SpunOut)n.push("SO");if(r&a.FadeIn)n.push("FI");if(r&a.Mirror)n.push("MR");let e=n.indexOf("DT"),t=n.indexOf("NC");if(e>=0&&t>=0)n.splice(e,1);return n.join("")},X=(r)=>{if(r&(a.DoubleTime|a.Nightcore))return 1.5;if(r&a.HalfTime)return 0.75;return 1},ln=[a.HardRock|a.Easy,a.DoubleTime|a.HalfTime|a.Nightcore,a.Hidden|a.FadeIn],te=(r,n)=>{if(r&n)return r&~n;let e=r;for(let t of ln)if(n&t)e&=~t;return e|n},w=(r,n)=>(r&n)!==0,se=(r)=>{let n=[{name:"Easy",acronym:"EZ",value:a.Easy},{name:"Hidden",acronym:"HD",value:a.Hidden},{name:"Double Time",acronym:"DT",value:a.DoubleTime},{name:"Half Time",acronym:"HT",value:a.HalfTime},{name:"Nightcore",acronym:"NC",value:a.Nightcore}];switch(r){case"standard":return[...n,{name:"Hard Rock",acronym:"HR",value:a.HardRock}];case"mania":return[...n,{name:"Hard Rock",acronym:"HR",value:a.HardRock},{name:"Fade In",acronym:"FI",value:a.FadeIn}];case"taiko":case"catch":return[...n,{name:"Hard Rock",acronym:"HR",value:a.HardRock}];default:return n}};import Yr from"jszip";var $=null,W=null,Wr=0,nr=!1,z=new Map,In=new URL("./osu-beatmap-parser.js",import.meta.url).toString(),Tn=()=>{if($==null)return;$.onmessage=(r)=>{let n=r.data||{},e=n.id,t=n.ok,s=n.result,u=n.error;if(typeof e!="number")return;let o=z.get(e);if(!o)return;if(z.delete(e),t){o.resolve(s);return}o.reject(Error(u||"worker request failed"))},$.onerror=(r)=>{let n=r.message||"worker crashed";nr=!1;for(let[,e]of z)e.reject(Error(n));z.clear()}},zr=(r,n,e=[])=>{if($==null)return Promise.reject(Error("wasm worker not initialized"));Wr+=1;let t=Wr;return new Promise((s,u)=>{z.set(t,{resolve:s,reject:u}),$?.postMessage({id:t,type:r,payload:n},e)})},Hn=(r)=>{return r.slice().buffer};var U=async()=>{if(nr)return;if(W)return W;return W=(async()=>{if(typeof Worker>"u")throw Error("wasm wrapper requires browser Worker support");$=new Worker(new URL("./wasm-worker.js",import.meta.url),{type:"module"}),Tn(),await zr("init",{script_url:In,global_name:"create_osu_parser",module_config:{}}),nr=!0})(),W.catch((r)=>{throw W=null,$?.terminate(),$=null,nr=!1,r})};var Y=async(r)=>{let n=Hn(r);return await zr("call",{method_name:"parse",data:n,args:[]},[n])};class q{async load_osz(r,n){await U();let e=await Yr.loadAsync(r),t=new Map;for(let[s,u]of Object.entries(e.files))if(!u.dir)t.set(s,await u.async("arraybuffer"));return this.load_from_files(t,n)}async load_from_files(r,n){await U();let e=[...r.keys()].filter((H)=>H.toLowerCase().endsWith(".osu"));if(e.length===0)throw Error("No .osu files found in beatmap");let t=await Promise.all(e.map(async(H)=>{let D=r.get(H),y=this.to_bytes(D),b=await Y(y);return{filename:H,beatmap:b}})),s=this.select_difficulty(e,t,n?.difficulty),u=r.get(s),o=this.to_bytes(u),p=await Y(o),f=p.General.AudioFilename||null,i=p.Events.background?.filename||null,m=p.Events.video?.filename||null,c=p.Events.video?.startTime??0,h=new Map;for(let[H,D]of r)if(D instanceof ArrayBuffer)h.set(H,D);else h.set(H,new TextEncoder().encode(D).buffer);let I;if(f)I=this.find_file(h,f);let T;if(i){let H=this.find_file(h,i);if(H)T=new Blob([H])}let l;if(m){let H=this.find_file(h,m);if(H)l=new Blob([H])}return{beatmap:p,available_difficulties:t,files:h,audio:I,background:T,video:l,audio_filename:f??void 0,background_filename:i??void 0,video_filename:m??void 0,video_offset:m?c:void 0}}async list_difficulties(r){let n=await Yr.loadAsync(r),e=[];for(let s of Object.keys(n.files))if(s.toLowerCase().endsWith(".osu"))e.push(s);let t=[];for(let s of e){let o=(await n.files[s].async("string")).match(/Version:\s*(.+)/);t.push(o?o[1].trim():s)}return t}select_difficulty(r,n,e){if(e===void 0)return r[0];if(typeof e==="number"){if(e<0||e>=r.length)throw Error(`Difficulty index ${e} out of range (0-${r.length-1})`);return r[e]}let t=n.find((o)=>o.beatmap.Metadata.Version===e);if(t)return t.filename;let s=e.toLowerCase(),u=n.find((o)=>o.filename.toLowerCase().includes(s)||o.beatmap.Metadata.Version.toLowerCase().includes(s));if(u)return u.filename;throw Error(`Difficulty "${e}" not found`)}find_file(r,n){if(r.has(n))return r.get(n);let e=n.toLowerCase();for(let[t,s]of r)if(t.toLowerCase()===e)return s;return}to_bytes(r){if(r instanceof ArrayBuffer)return new Uint8Array(r);return new TextEncoder().encode(r)}}var Rr=512,yr=384,gr;((u)=>{u[u.None=0]="None";u[u.Large=32]="Large";u[u.Medium=16]="Medium";u[u.Small=8]="Small";u[u.Tiny=4]="Tiny"})(gr||={});var C={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 E{backend;skin;config;mods;beatmap;objects=[];background_image=null;constructor(r,n,e=0,t=C){this.backend=r,this.skin=n,this.mods=e,this.config={...C,...t}}set_background(r){this.background_image=r}update_config(r){this.config={...this.config,...r}}precompute(){}dispose(){this.objects=[]}render_playfield(r,n,e,t){if(!this.config.show_playfield)return;let{backend:s,config:u}=this,o=r??512,p=n??384,f=e??0,i=t??0;s.save(),s.set_alpha(u.playfield_opacity),s.begin_path(),s.move_to(f,i),s.line_to(f+o,i),s.line_to(f+o,i+p),s.line_to(f,i+p),s.line_to(f,i),s.stroke_path(u.playfield_color,2),s.restore()}render_grid(){if(this.config.grid_level===0)return;let{backend:r,config:n}=this,e=n.grid_level;r.save(),r.set_alpha(n.grid_opacity);for(let t=0;t<=512;t+=e)r.begin_path(),r.move_to(t,0),r.line_to(t,384),r.stroke_path(n.grid_color,t%(e*4)===0?1:0.5);for(let t=0;t<=384;t+=e)r.begin_path(),r.move_to(0,t),r.line_to(512,t),r.stroke_path(n.grid_color,t%(e*4)===0?1:0.5);r.restore()}render_background(){if(!this.background_image)return;let{backend:r}=this;r.save(),r.set_alpha(0.3);let{width:n,height:e}=r,{width:t,height:s}=this.background_image;if(t>0&&s>0){let u=Math.max(n/t,e/s),o=t*u,p=s*u,f=(n-o)/2,i=(e-p)/2;r.draw_image(this.background_image,f,i,o,p)}else r.draw_image(this.background_image,0,0,n,e);r.restore()}get_visible_objects(r,n,e){let t=[];for(let s of this.objects){let u=s.time-n,o=s.end_time+e;if(r>=u&&r<=o)t.push(s)}return t}}class er{ctx;_width=0;_height=0;_dpr=1;is_initialized=!1;get width(){return this._width}get height(){return this._height}initialize(r,n=!0){this._dpr=n?window.devicePixelRatio||1:1;let e=r.clientWidth||r.width,t=r.clientHeight||r.height;this.apply_canvas_size(r,e,t);let s=r.getContext("2d",{alpha:!0,desynchronized:!0});if(!s)throw Error("Failed to get 2D context");this.ctx=s,this._width=e,this._height=t,this.configure_context(),this.is_initialized=!0}clear(){if(!this.is_initialized)return;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(){}begin_frame(){}end_frame(){}resize(r,n){if(!this.is_initialized)return;this._width=r,this._height=n,this._dpr=window.devicePixelRatio||1;let e=this.ctx.canvas;this.apply_canvas_size(e,r,n),this.reset_transform(),this.configure_context()}draw_circle(r,n,e,t,s,u){let o=this.ctx;if(o.beginPath(),o.arc(r,n,e,0,Math.PI*2),t&&t!=="transparent")o.fillStyle=t,o.fill();if(s&&u&&u>0)o.strokeStyle=s,o.lineWidth=u,o.stroke()}draw_arc(r,n,e,t,s,u,o,p=!1){let f=this.ctx;f.beginPath(),f.arc(r,n,e,t,s,p),f.strokeStyle=u,f.lineWidth=o,f.stroke()}draw_rect(r,n,e,t,s){this.ctx.fillStyle=s,this.ctx.fillRect(r,n,e,t)}draw_rect_gradient(r,n,e,t,s){this.ctx.fillStyle=s,this.ctx.fillRect(r,n,e,t)}create_linear_gradient(r,n,e,t,s){let u=this.ctx.createLinearGradient(r,n,e,t);for(let o of s)u.addColorStop(o.offset,o.color);return u}draw_text(r,n,e,t,s,u="left",o="alphabetic"){let p=this.ctx;p.font=t,p.fillStyle=s,p.textAlign=u,p.textBaseline=o,p.fillText(r,n,e)}measure_text(r,n){let e=this.ctx,t=e.font;e.font=n;let s=e.measureText(r);return e.font=t,s}begin_path(){this.ctx.beginPath()}move_to(r,n){this.ctx.moveTo(r,n)}line_to(r,n){this.ctx.lineTo(r,n)}draw_line(r,n,e,t,s,u,o="butt",p="miter"){this.ctx.beginPath(),this.ctx.moveTo(r,n),this.ctx.lineTo(e,t),this.ctx.strokeStyle=s,this.ctx.lineWidth=u,this.ctx.lineCap=o,this.ctx.lineJoin=p,this.ctx.stroke()}bezier_curve_to(r,n,e,t,s,u){this.ctx.bezierCurveTo(r,n,e,t,s,u)}quadratic_curve_to(r,n,e,t){this.ctx.quadraticCurveTo(r,n,e,t)}arc_to(r,n,e,t,s,u){this.ctx.arc(r,n,e,t,s,u)}rect(r,n,e,t){this.ctx.rect(r,n,e,t)}clip(){this.ctx.clip()}stroke_path(r,n,e="butt",t="miter"){let s=this.ctx;s.strokeStyle=r,s.lineWidth=n,s.lineCap=e,s.lineJoin=t,s.stroke()}fill_path(r){this.ctx.fillStyle=r,this.ctx.fill()}close_path(){this.ctx.closePath()}save(){this.ctx.save()}restore(){this.ctx.restore()}translate(r,n){this.ctx.translate(r,n)}scale(r,n){this.ctx.scale(r,n)}rotate(r){this.ctx.rotate(r)}set_alpha(r){this.ctx.globalAlpha=r}set_shadow(r,n){this.ctx.shadowColor=r,this.ctx.shadowBlur=n}set_composite_operation(r){this.ctx.globalCompositeOperation=r}set_blend_mode(r){let n={normal:"source-over",lighter:"lighter",multiply:"multiply",screen:"screen"};this.ctx.globalCompositeOperation=n[r]??"source-over"}draw_image(r,n,e,t,s){if(t!==void 0&&s!==void 0)this.ctx.drawImage(r.source,n,e,t,s);else this.ctx.drawImage(r.source,n,e)}draw_image_part(r,n,e,t,s,u,o,p,f){this.ctx.drawImage(r.source,n,e,t,s,u,o,p,f)}render_slider_to_image(r,n,e,t,s,u=1,o=1){let p=1/0,f=1/0,i=-1/0,m=-1/0;for(let y of r){if(y[0]<p)p=y[0];if(y[0]>i)i=y[0];if(y[1]<f)f=y[1];if(y[1]>m)m=y[1]}let c=n+2;p-=c,f-=c,i+=c,m+=c;let h=Math.ceil((i-p)*s),I=Math.ceil((m-f)*s);if(h<=0||I<=0)return null;let T=document.createElement("canvas");T.width=h,T.height=I;let l=T.getContext("2d");if(!l)return null;l.save(),l.scale(s,s),l.translate(-p,-f);let H=()=>{if(l.beginPath(),r.length>0){l.moveTo(r[0][0],r[0][1]);for(let y=1;y<r.length;y++)l.lineTo(r[y][0],r[y][1])}};l.lineCap="round",l.lineJoin="round",l.globalAlpha=o,l.strokeStyle=e,l.lineWidth=n*2,H(),l.stroke();let D=n*0.872;if(u<1)l.globalCompositeOperation="destination-out",l.globalAlpha=1,l.lineWidth=D*2,H(),l.stroke(),l.globalCompositeOperation="source-over";return l.globalAlpha=u,l.strokeStyle=t,l.lineWidth=D*2,H(),l.stroke(),l.restore(),{source:T,width:h,height:I,min_x:p,min_y:f}}apply_canvas_size(r,n,e){r.width=n*this._dpr,r.height=e*this._dpr,r.style.width=`${n}px`,r.style.height=`${e}px`}configure_context(){this.ctx.scale(this._dpr,this._dpr),this.ctx.imageSmoothingEnabled=!0,this.ctx.imageSmoothingQuality="high"}reset_transform(){if(this.ctx.resetTransform)this.ctx.resetTransform();else this.ctx.setTransform(1,0,0,1,0,0)}}var wr={min:1800,mid:1200,max:450};var Dn=(r,n)=>{if(r>5)return n.mid+(n.max-n.mid)*(r-5)/5;if(r<5)return n.mid+(n.mid-n.min)*(r-5)/5;return n.mid},Kr=(r,n)=>{if(Math.sign(r-n.mid)===Math.sign(n.max-n.mid))return(r-n.mid)/(n.max-n.mid)*5+5;return(r-n.mid)/(n.mid-n.min)*5+5},tr=(r)=>Dn(r,wr),Gr=(r)=>400*Math.min(1,r/450),Rn=(r)=>{return(1-0.7*((r-5)/5))/2},xr=(r)=>Rn(r)*64;var Mr={name:"Hard Rock",acronym:"HR",apply_to_difficulty(r){r.cs=Math.min(r.cs*1.3,10),r.ar=Math.min(r.ar*1.4,10),r.od=Math.min(r.od*1.4,10),r.hp=Math.min(r.hp*1.4,10)}};var br={name:"Easy",acronym:"EZ",apply_to_difficulty(r){r.cs*=0.5,r.ar*=0.5,r.od*=0.5,r.hp*=0.5}};var yn={name:"Double Time",acronym:"DT",get_rate_multiplier:()=>1.5},wn={name:"Nightcore",acronym:"NC",get_rate_multiplier:()=>1.5};var Mn={name:"Half Time",acronym:"HT",get_rate_multiplier:()=>0.75};var bn=0.4,Vn=0.3,Bn={name:"Hidden",acronym:"HD"};var Vr=(r)=>{if(r&(a.DoubleTime|a.Nightcore))return 1.5;if(r&a.HalfTime)return 0.75;return 1},Pn=(r,n)=>{if(n&a.Easy)br.apply_to_difficulty(r);if(n&a.HardRock)Mr.apply_to_difficulty(r)},dn=(r,n)=>{if(n===1)return r;let e=tr(r)/n;return Kr(e,wr)},_r=(r,n,e,t,s)=>{let u={cs:r,ar:n,od:e,hp:t};Pn(u,s);let o=Vr(s);return u.ar=dn(u.ar,o),u};var jr=(r,n)=>[r[0]+n[0],r[1]+n[1]],P=(r,n)=>[r[0]-n[0],r[1]-n[1]],kr=(r,n)=>[r[0]*n,r[1]*n];var d=(r)=>Math.sqrt(r[0]*r[0]+r[1]*r[1]);var L=(r,n,e)=>r+(n-r)*e,v=(r,n,e)=>[L(r[0],n[0],e),L(r[1],n[1],e)],R=(r,n,e)=>Math.min(e,Math.max(n,r));var Br={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"]},Pr={combo_colors:["0,185,0","7, 105, 227","224, 4, 38","227, 171, 2"],circle_border_width:0.12,hit_circle_opacity:0.95,enable_approach_circle:!0,approach_circle_width:0.1,approach_circle_opacity:0.5,approach_circle_use_combo_color:!0,enable_hitburst:!0,hitburst_duration:180,hitburst_scale:1.2,hitburst_glow_enabled:!1,hitburst_glow_use_combo_color:!0,hitburst_glow_opacity:0.3,slider_body_opacity:0.9,slider_border_opacity:1,slider_tick_opacity:0.75,slider_tick_size:0.1,slider_render_scale:2,follow_circle_factor:1.5,follow_circle_width:4,follow_circle_opacity:0.5,follow_circle_color:"#d3d3d3ff",follow_circle_use_combo_color:!1,slider_ball_color:"#ffffff",slider_ball_opacity:1,enable_slider_ball:!0,follow_point_width:2,follow_point_shape:"line",follow_point_mode:"full",follow_point_length:12,follow_point_line_gap:0,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:Br,default_font:'"Trebuchet MS", Verdana, Arial, sans-serif',hit_animation_duration:240,hit_animation_scale:1.2,enable_hit_animations:!0,enable_follow_circle_animations:!0},sr=(r)=>{if(!r)return{...Pr};return{...Pr,...r,mania_lane_colors:r.mania_lane_colors?{...Br,...r.mania_lane_colors}:Br}},O=(r,n,e=1)=>{return`rgba(${r.combo_colors[n%r.combo_colors.length]},${e})`},g=(r,n,e)=>{let t=r.mania_lane_colors[n]??r.mania_lane_colors[4];return t[e%t.length]??"#ffffff"};var M={None:(r)=>r,Out:(r)=>1-Math.pow(1-r,2),In:(r)=>r*r,InOut:(r)=>r<0.5?2*r*r:1-Math.pow(-2*r+2,2)/2,OutCubic:(r)=>1-Math.pow(1-r,3),InCubic:(r)=>r*r*r,OutQuad:(r)=>1-Math.pow(1-r,2),InQuad:(r)=>r*r,OutQuint:(r)=>1-Math.pow(1-r,5),InQuint:(r)=>r*r*r*r*r,OutElastic:(r)=>{let n=2*Math.PI/3;return r===0?0:r===1?1:Math.pow(2,-10*r)*Math.sin((r*10-0.75)*n)+1}};class dr{transforms=[];add(r,n,e,t,s,u=M.None){return this.transforms.push({property:r,start_value:n,end_value:e,start_time:t,end_time:t+s,easing:u}),this}then(){return this}get_value(r,n,e){let t=e;for(let s of this.transforms){if(s.property!==r)continue;if(n<s.start_time)continue;if(n>=s.end_time)t=s.end_value;else{let u=(n-s.start_time)/(s.end_time-s.start_time),o=s.easing(u);t=s.start_value+(s.end_value-s.start_value)*o}}return t}clear(){this.transforms=[]}}class Z{backend;skin;hit_object;config;alpha=1;scale=1;rotation=0;x=0;y=0;armed_state=0;transforms=new dr;life_time_start=0;life_time_end=0;constructor(r,n){this.hit_object=r,this.config=n,this.backend=n.backend,this.skin=n.skin;let e=r.data;this.x=e.pos[0],this.y=e.pos[1],this.apply_defaults()}apply_defaults(){let{hit_object:r,config:n}=this,e=r.time-n.preempt;this.life_time_start=e,this.life_time_end=r.end_time+800}is_alive(r){return r>=this.life_time_start&&r<=this.life_time_end}update(r){this.alpha=this.transforms.get_value("alpha",r,1),this.scale=this.transforms.get_value("scale",r,1),this.rotation=this.transforms.get_value("rotation",r,0),this.update_state(r)}update_state(r){if(this.armed_state===0&&r>=this.hit_object.time)this.armed_state=1,this.on_hit(r)}on_hit(r){}render_body_pass(r){}render_head_pass(r){}get start_time(){return this.hit_object.time}get end_time(){return this.hit_object.end_time}get combo_number(){return this.hit_object.combo_number??0}get combo_count(){return this.hit_object.combo_count??1}get position(){return[this.x,this.y]}}class K{state={circle_alpha:0,circle_scale:1,number_alpha:1};update(r,n,e){let t=n-e.preempt;if(r<t){this.reset_pre_hit_state();return}if(r<n){this.update_pre_hit(r,t,n,e);return}let s=ur(n,t,n,e);this.update_post_hit(r,n,e,s)}render(r,n,e,t,s,u){let{circle_alpha:o,circle_scale:p,number_alpha:f}=this.state;if(o<=0.01)return;let i=t*p;if(o>0.01){let m=t*n.circle_border_width,c=t*(1-n.circle_border_width/2)*p;if(r.set_alpha(o*n.hit_circle_opacity),r.draw_circle(e[0],e[1],c,s,"rgba(255,255,255,1)",m),f>0.01){let h=t*0.7*p;r.set_alpha(f*n.hit_circle_opacity);let I=n.default_font??'"Trebuchet MS", Verdana, Arial, sans-serif',T=`600 ${h}px ${I}`;r.draw_text(String(u),e[0],e[1],T,"rgba(255,255,255,1)","center","middle")}r.set_alpha(1)}r.set_alpha(1)}get circle_alpha(){return this.state.circle_alpha}reset_pre_hit_state(){this.state.circle_alpha=0,this.state.circle_scale=1,this.state.number_alpha=1}update_pre_hit(r,n,e,t){let s=ur(r,n,e,t);this.state.circle_alpha=s,this.state.circle_scale=1,this.state.number_alpha=s}update_post_hit(r,n,e,t){let s=r-n,{skin:u}=e,o=Math.max(90,u.hit_animation_duration*0.75),p=R(s/o,0,1),f=w(e.mods,a.Hidden)?R(t,0,1):R(Math.max(t,0.25),0,1);this.state.circle_alpha=f*(1-M.OutQuad(p));let i=Math.max(90,o*0.85),m=R(s/i,0,1);this.state.circle_scale=L(1,u.hit_animation_scale,M.OutCubic(m)),this.state.number_alpha=this.state.circle_alpha}}var ur=(r,n,e,t)=>{let u=R((r-n)/t.fade_in,0,1);if(w(t.mods,a.Hidden)){let o=e-t.preempt+t.fade_in,p=t.preempt*0.3;if(r>o){let f=R((r-o)/p,0,1);u*=1-f}}return u};class Fr{state={alpha:0,scale:1};update(r,n,e){if(!e.skin.enable_hitburst){this.state.alpha=0,this.state.scale=1;return}if(r<n){this.state.alpha=0,this.state.scale=1;return}let t=n-e.preempt,s=ur(n,t,n,e),u=w(e.mods,a.Hidden)?R(s,0,1):R(Math.max(s,0.25),0,1),o=r-n,p=Math.max(70,e.skin.hitburst_duration),f=R(o/p,0,1),i=1-M.OutQuint(f);this.state.alpha=w(e.mods,a.Hidden)?i*u:i,this.state.scale=L(1,e.skin.hitburst_scale,M.OutCubic(f))}render(r,n,e,t,s){if(!n.enable_hitburst)return;if(this.state.alpha<=0.01)return;if(r.set_alpha(this.state.alpha),r.draw_circle(e[0],e[1],t*this.state.scale,"rgba(255,255,255,1)","transparent",0),n.hitburst_glow_enabled){r.save(),r.set_blend_mode("lighter"),r.set_alpha(this.state.alpha*n.hitburst_glow_opacity);let u=n.hitburst_glow_use_combo_color?s:n.hitburst_glow_color??s;r.draw_circle(e[0],e[1],t*this.state.scale*1.08,u,"transparent",0),r.restore()}}}class or extends Z{visual=new K;hitburst=new Fr;constructor(r,n){super(r,n)}update(r){super.update(r),this.visual.update(r,this.hit_object.time,this.config),this.hitburst.update(r,this.hit_object.time,this.config)}render(r){let{backend:n,skin:e,config:t}=this,{radius:s}=t,u=this.position,o=O(e,this.combo_number,1);this.visual.render(n,e,u,s,o,this.combo_count),this.hitburst.render(n,e,u,s,o)}}var pr=(r)=>{let{start_time:n,span_duration:e,span_count:t,length:s,tick_distance:u,min_distance_from_end:o,get_position_at_progress:p}=r,f=[],i=[];if(s<=0||e<=0||t<=0)return{ticks:f,repeats:i};let c=Math.min(1e5,s),h=Math.min(Math.max(u,0),c),I=Math.max(0,Math.min(o,c));for(let T=0;T<t;T++){let l=n+T*e,H=T%2===1;if(h>0){let D=Fn(T,l,e,H,c,h,I,p);if(H)D.reverse();f.push(...D)}if(T<t-1){let D=(T+1)%2;i.push({pos:p(D),time:l+e,repeat_index:T,path_progress:D})}}return f.sort((T,l)=>T.time-l.time),{ticks:f,repeats:i}},Fn=(r,n,e,t,s,u,o,p)=>{let f=[];for(let i=u;i<=s;i+=u){if(i>=s-o)break;let m=i/s,c=t?1-m:m;f.push({pos:p(m),time:n+c*e,span_index:r,path_progress:m})}return f};var Sr=240,vr=1.3,Cr=35,Sn=250,vn=300,G=150,Cn=G*4;class N extends Z{slider_data;position_path;render_path;path_length;span_duration;body_alpha=0;head_visual=new K;ball_alpha=0;ball_position;follow_alpha=0;follow_scale=1;ticks=[];repeats=[];tick_distance;min_distance_from_end;cached_texture=null;cached_scale=1;tick_entries=[];tick_entries_by_start=[];constructor(r,n,e,t,s,u){super(r,n);this.slider_data=r.data;let o=Math.max(1,n.radius*0.05);this.position_path=e,this.render_path=this.resample_path(e,o),this.span_duration=t,this.tick_distance=s,this.min_distance_from_end=u;let p=this.calculate_path_length();this.path_length=this.slider_data.distance>0?this.slider_data.distance:p,this.ball_position=this.slider_data.pos,this.build_nested_objects(),this.life_time_end=r.end_time+Sr}build_nested_objects(){let{slider_data:r,path_length:n,span_duration:e,hit_object:t}=this,s=Math.max(1,r.repetitions),u=1e5,o=Math.min(1e5,r.distance>0?r.distance:n),p=R(this.tick_distance,0,o);if(o<=0||e<=0){this.ticks=[],this.repeats=[];return}let f=pr({start_time:t.time,span_duration:e,span_count:s,length:o,tick_distance:p,min_distance_from_end:this.min_distance_from_end,get_position_at_progress:(i)=>this.get_position_at_progress(i)});this.ticks=f.ticks,this.repeats=f.repeats,this.build_tick_entries()}calculate_path_length(){let r=0;for(let n=1;n<this.position_path.length;n++)r+=d(P(this.position_path[n],this.position_path[n-1]));return r}resample_path(r,n){if(r.length<2)return r.slice();let e=[r[0]],t=0,s=[];for(let m=1;m<r.length;m++){let c=d(P(r[m],r[m-1]));s.push(c),t+=c}if(t<=0)return e;let u=n,o=0,p=0;while(u<t&&p<s.length){let m=s[p],c=r[p],h=r[p+1];if(m>0&&o+m>=u){let I=(u-o)/m;e.push(v(c,h,I)),u+=n}else o+=m,p++}let f=r[r.length-1],i=e[e.length-1];if(i[0]!==f[0]||i[1]!==f[1])e.push(f);return e}update(r){super.update(r),this.calculate_ball_position(r),this.calculate_opacities(r),this.head_visual.update(r,this.hit_object.time,this.config)}calculate_ball_position(r){let{hit_object:n,span_duration:e}=this,t=300,s=300,u=2.4;if(r<n.time){this.ball_alpha=0,this.follow_alpha=0,this.follow_scale=1;return}if(r<=n.end_time){let i=r-n.time,m=Math.max(1,this.slider_data.repetitions),c=Math.min(Math.floor(i/e),m-1),h=R((i-c*e)/e,0,1),I=c%2===1?1-h:h;this.ball_position=this.get_position_at_progress(I),this.ball_alpha=1;let T=R(i/300,0,1),l=M.OutQuint(T);this.follow_alpha=l,this.follow_scale=1+1.4*l;return}let o=r-n.end_time,p=R(o/300,0,1),f=M.OutQuint(p);this.ball_alpha=1-f,this.follow_alpha=1-f,this.follow_scale=2.4-1.4*f}get_position_at_progress(r){let n=r*this.path_length;return this.get_position_at_length(n)}get_position_at_length(r){let n=0;for(let e=1;e<this.position_path.length;e++){let t=d(P(this.position_path[e],this.position_path[e-1]));if(n+t>=r){let s=(r-n)/t;return v(this.position_path[e-1],this.position_path[e],s)}n+=t}return this.position_path[this.position_path.length-1]}calculate_opacities(r){let{hit_object:n,config:e}=this,t=n.time-e.preempt,s=n.time;if(w(e.mods,a.Hidden)){let u=s-e.preempt+e.fade_in;if(r<t)this.body_alpha=0;else if(r<u)this.body_alpha=R((r-t)/e.fade_in,0,1);else if(r<=n.end_time){let o=Math.max(1,n.end_time-u);this.body_alpha=1-R((r-u)/o,0,1)}else this.body_alpha=0}else if(r<t)this.body_alpha=0;else if(r<s)this.body_alpha=R((r-t)/e.fade_in,0,1);else if(r<=n.end_time)this.body_alpha=1;else this.body_alpha=1-R((r-n.end_time)/Sr,0,1)}render(r){if(this.body_alpha<=0&&this.head_visual.circle_alpha<=0&&this.ball_alpha<=0)return;this.render_body(r),this.render_head(),this.render_ball(r)}render_body_pass(r){this.render_body(r)}render_head_pass(r){this.render_head(),this.render_reverse_arrows(r),this.render_ball(r)}render_body(r){if(this.body_alpha<=0.01||this.render_path.length<2)return;let{backend:n}=this;if(this.prepare_body_cache(),this.cached_texture&&this.cached_texture.min_x!==void 0&&this.cached_texture.min_y!==void 0){let e=this.cached_scale;n.set_alpha(this.body_alpha),n.draw_image(this.cached_texture,this.cached_texture.min_x,this.cached_texture.min_y,this.cached_texture.width/e,this.cached_texture.height/e),n.set_alpha(1)}this.render_ticks(r)}prepare_body_cache(){if(this.render_path.length<2)return;let{backend:r,skin:n,config:e}=this,{radius:t}=e,s=(e.scale??1)*(n.slider_render_scale||1);if(!this.cached_texture||this.cached_scale!==s){let u=O(n,this.combo_number,1),o=n.slider_border_color??"rgba(255,255,255,1)",p=s;this.cached_texture=r.render_slider_to_image(this.render_path,t,o,u,p,n.slider_body_opacity,n.slider_border_opacity),this.cached_scale=s}}render_ticks(r){if(this.tick_entries_by_start.length===0)return;let{backend:n,config:e,hit_object:t}=this,{radius:s}=e,u=s*0.12,o=t.time-e.preempt,p=w(e.mods,a.Hidden);for(let f of this.tick_entries_by_start){let i=f.tick,m=r-f.appear_time;if(m<0)continue;if(f.visible_end<r)continue;let c=R(m/G,0,1);if(p&&f.preempt>0){let H=Math.min(f.preempt-G,1000);if(H>0){let D=i.time-H;if(r>=D){let y=R((r-D)/H,0,1);c*=1-y}}}else if(r>i.time){let H=R((r-i.time)/G,0,1);c*=1-H}c*=this.body_alpha;let h=R(m/Cn,0,1),T=0.5+0.5*this.ease_out_elastic_half(h),l=u*T;if(c>0.01)n.set_alpha(c),n.draw_circle(i.pos[0],i.pos[1],l,"rgba(255,255,255,0.8)","transparent",0)}n.set_alpha(1)}build_tick_entries(){let{hit_object:r,config:n}=this,e=r.time-n.preempt,t=w(n.mods,a.Hidden);this.tick_entries=this.ticks.map((s)=>{let u=r.time+s.span_index*this.span_duration,o=n.preempt,p=s.span_index>0?200:o*0.66,f=(s.time-u)/2+p,i=s.time-f,m=t?s.time:s.time+G;return{tick:s,appear_time:i,visible_end:m,preempt:f}}),this.tick_entries_by_start=[...this.tick_entries].sort((s,u)=>s.appear_time-u.appear_time)}ease_out_elastic_half(r){if(r<=0)return 0;if(r>=1)return 1;let n=0.3;return Math.pow(2,-10*r)*Math.sin((r-n/4)*(2*Math.PI)/n)+1}render_reverse_arrows(r){if(this.repeats.length===0)return;let{backend:n,config:e,hit_object:t,span_duration:s}=this,{radius:u}=e,o=u*0.6;for(let p of this.repeats){let f=e.preempt;if(p.repeat_index>0)f=s*2;else f+=t.time-(t.time-e.preempt);let i=p.time-f,m=p.repeat_index%2===0;if(r<i||r>p.time+Sr)continue;let c=this.body_alpha*0.9;if(p.repeat_index===0){let D=R((r-i)/150,0,1);c*=M.OutQuint(D)}else if(r<i)c=0;if(r>p.time){let D=Math.min(300,s);c*=1-R((r-p.time)/D,0,1)}if(c<=0.01)continue;let h=this.position_path,I;if(m){let D=h.length-1;I=h[0];for(let y=D;y>=0;y--)if(Math.abs(h[y][0]-p.pos[0])>0.01||Math.abs(h[y][1]-p.pos[1])>0.01){I=h[y];break}}else{I=h[h.length-1];for(let D=0;D<h.length;D++)if(Math.abs(h[D][0]-p.pos[0])>0.01||Math.abs(h[D][1]-p.pos[1])>0.01){I=h[D];break}}let T=Math.atan2(I[1]-p.pos[1],I[0]-p.pos[0]),l=1;if(r<p.time){let D=t.time-e.preempt,y=(r-D)%vn;if(y<Cr)l=1+(vr-1)*M.Out(y/Cr);else{let b=(y-Cr)/Sn;l=vr-(vr-1)*M.Out(R(b,0,1))}}else{let D=Math.min(300,s),y=R((r-p.time)/D,0,1);l=1+0.5*M.Out(y)}let H=o*l;n.save(),n.set_alpha(c),n.translate(p.pos[0],p.pos[1]),n.rotate(T),n.begin_path(),n.move_to(H*0.8,0),n.line_to(-H*0.4,-H*0.5),n.line_to(-H*0.4,H*0.5),n.close_path(),n.fill_path("rgba(255,255,255,0.9)"),n.restore()}}render_head(){if(this.head_visual.circle_alpha<=0.01)return;let{backend:r,skin:n,config:e}=this,{radius:t}=e,s=this.slider_data.pos,u=O(n,this.combo_number,1);this.head_visual.render(r,n,s,t,u,this.combo_count)}render_ball(r){if(this.ball_alpha<=0.01&&this.follow_alpha<=0.01)return;let{backend:n,skin:e,config:t}=this,{radius:s}=t,u=this.ball_position,o=O(e,this.combo_number,0.9);if(this.follow_alpha>0.01){let p=s*this.follow_scale;n.set_alpha(this.follow_alpha*e.follow_circle_opacity),n.begin_path(),n.arc_to(u[0],u[1],p,0,Math.PI*2),n.stroke_path(e.follow_circle_color,e.follow_circle_width)}if(e.enable_slider_ball&&this.ball_alpha>0.01)n.set_alpha(this.ball_alpha*e.slider_ball_opacity),n.draw_circle(u[0],u[1],s*0.85,o,"rgba(255,255,255,0.9)",s*0.1);n.set_alpha(1)}}class Or{skin;mods;preempt;fade_in;radius;points=[];lines=[];constructor(r,n,e,t,s){this.skin=r,this.mods=n,this.preempt=e,this.fade_in=t,this.radius=s}update_settings(r,n,e,t){this.mods=r,this.preempt=n,this.fade_in=e,this.radius=t}build(r){this.points=[],this.lines=[];let n=32,e=Math.max(450,this.preempt*0.9);for(let t=0;t<r.length-1;t++){let s=r[t],u=r[t+1];if(J(s)||J(u))continue;if(s.combo_number!==u.combo_number)continue;let o=s.end_pos,p=u.data.pos,f=p[0]-o[0],i=p[1]-o[1],m=Math.sqrt(f*f+i*i);if(m<n*1.5)continue;let c=s.end_time,h=u.time-c;if(h<=0)continue;let I=m>0?1/m:0,T=[f*I,i*I],l=c-e,H=u.time-e,D=c+(H-c)*0.5,y=u.time;if(w(this.mods,a.Hidden))D=c+(H-c)*0.3,y=c+(u.time-c)*0.65;this.lines.push({start_pos:o,end_pos:p,dir:T,start_time:c,end_time:u.time,appear_time:l,grow_end_time:H,shrink_start_time:D,shrink_end_time:y});for(let b=n*1.5;b<m-n;b+=n){let B=b/m,V=s.end_time+B*h,Q=Math.max(s.end_time,V-e);if(w(this.mods,a.Hidden))V=Math.min(V,c+h*0.65);let j=[o[0]+(B-0.1)*f,o[1]+(B-0.1)*i],k=[o[0]+B*f,o[1]+B*i];this.points.push({start_pos:j,end_pos:k,dir:T,fade_in_time:Q,fade_out_time:V})}}}render(r,n,e){let t=this.skin.follow_point_shape,s=this.skin.follow_point_mode??"segments",u=this.skin.follow_point_length||this.radius*0.6,o=R(this.skin.follow_point_line_gap??0,0,0.9),p=Math.max(this.fade_in*0.15,50),f=0.2;if(s==="full")for(let i of this.lines){if(r<i.appear_time||r>i.shrink_end_time)continue;let m=0,c=i.start_pos[0],h=i.start_pos[1],I=i.end_pos[0],T=i.end_pos[1],l=Math.hypot(I-c,T-h),H=this.get_alpha_gate(r,i.start_time,i.end_time,e);if(H<=0.01)continue;let D=this.radius*1.05,y=Math.min(D,l*0.22);if(c+=i.dir[0]*y,h+=i.dir[1]*y,I-=i.dir[0]*y,T-=i.dir[1]*y,r<i.grow_end_time){let b=Math.max(1,i.grow_end_time-i.appear_time),B=R((r-i.appear_time)/b,0,1),V=M.OutQuint(B);m=V,I=c+(I-c)*V,T=h+(T-h)*V}else if(r<i.shrink_start_time)m=1;else{let b=Math.max(1,i.shrink_end_time-i.shrink_start_time),B=R((r-i.shrink_start_time)/b,0,1),V=M.InQuint(B);m=1,c=c+(I-c)*V,h=h+(T-h)*V}if(m<=0)continue;if(n.set_alpha(m*0.2*H),t==="line")if(o>0){let b=Math.hypot(I-c,T-h),B=i.dir[0],V=i.dir[1],Q=b*o/2,j=(c+I)/2,k=(h+T)/2,fn=j-B*Q,cn=k-V*Q,hn=j+B*Q,an=k+V*Q;n.draw_line(c,h,fn,cn,"rgba(255,255,255,1)",this.skin.follow_point_width,"round","round"),n.draw_line(hn,an,I,T,"rgba(255,255,255,1)",this.skin.follow_point_width,"round","round")}else n.draw_line(c,h,I,T,"rgba(255,255,255,1)",this.skin.follow_point_width,"round","round");else{let b=this.radius*0.12,B=(i.start_pos[0]+i.end_pos[0])/2,V=(i.start_pos[1]+i.end_pos[1])/2;n.draw_circle(B,V,b,"rgba(255,255,255,1)","transparent",0)}}else for(let i of this.points){if(r<i.fade_in_time||r>i.fade_out_time+p)continue;let m=0,c=1,h=i.end_pos;if(r<i.fade_in_time+p){let T=R((r-i.fade_in_time)/p,0,1),l=M.OutCubic(T);m=l,c=1.5-0.5*l,h=v(i.start_pos,i.end_pos,l)}else if(r<=i.fade_out_time)m=1,c=1,h=i.end_pos;else{let T=R((r-i.fade_out_time)/p,0,1),l=M.OutCubic(T);m=1-l,c=1,h=v(i.start_pos,i.end_pos,1-l)}if(m<=0)continue;let I=this.get_alpha_gate(r,i.fade_in_time+this.preempt,i.fade_out_time,e);if(I<=0.01)continue;if(n.set_alpha(m*0.2*I),t==="line"){let l=u*c/2,H=i.dir[0],D=i.dir[1],y=h[0]-H*l,b=h[1]-D*l,B=h[0]+H*l,V=h[1]+D*l;n.draw_line(y,b,B,V,"rgba(255,255,255,1)",this.skin.follow_point_width,"round","round")}else{let T=this.radius*0.12*c;n.draw_circle(h[0],h[1],T,"rgba(255,255,255,1)","transparent",0)}}n.set_alpha(1)}get_alpha_gate(r,n,e,t){let s=t(r,n),u=t(r,e);return R(Math.min(s,u)/0.7,0,1)}}var Ar=(r,n=0.08)=>{if(r.length<2)return[...r];let e=[];return $r(r,e,n),e},$r=(r,n,e)=>{if(On(r,e)){if(n.length===0)n.push(r[0]);n.push(r[r.length-1]);return}let t=[],s=[];An(r,t,s),$r(t,n,e),$r(s,n,e)},On=(r,n)=>{if(r.length<=2)return!0;let e=r[0],t=r[r.length-1];for(let s=1;s<r.length-1;s++)if($n(r[s],e,t)>n)return!1;return!0},$n=(r,n,e)=>{let t=P(e,n),s=t[0]*t[0]+t[1]*t[1];if(s===0)return d(P(r,n));let u=Math.max(0,Math.min(1,((r[0]-n[0])*t[0]+(r[1]-n[1])*t[1])/s)),o=[n[0]+u*t[0],n[1]+u*t[1]];return d(P(r,o))},An=(r,n,e)=>{let t=r.length,s=[r];for(let u=1;u<t;u++){s[u]=[];for(let o=0;o<t-u;o++)s[u][o]=v(s[u-1][o],s[u-1][o+1],0.5)}for(let u=0;u<t;u++)n.push(s[u][0]),e.push(s[t-1-u][u])},Nr=(r,n,e)=>{let t=P(n,r),s=d(t);if(s===0)return[r];let u=[t[0]/s,t[1]/s],o=jr(r,kr(u,e));return[r,o]},rn=(r,n)=>{if(r.length!==3)return Ar(r);let[e,t,s]=r,u=Nn(e,t,s);if(!u)return Nr(e,s,n);let o=d(P(e,u)),p=Math.atan2(e[1]-u[1],e[0]-u[0]),f=Math.atan2(s[1]-u[1],s[0]-u[0]),m=(t[0]-e[0])*(s[1]-e[1])-(t[1]-e[1])*(s[0]-e[0])>0,c=f-p;if(m&&c<0)c+=2*Math.PI;if(!m&&c>0)c-=2*Math.PI;let h=Math.abs(c)*o,I=2;if(o*2>0.1){let l=Math.abs(c),H=2*Math.acos(1-0.1/o);if(I=Math.max(2,Math.ceil(l/H)),I>=1000)I=1000}let T=[];for(let l=0;l<=I;l++){let H=l/I,D=p+c*H;T.push([u[0]+o*Math.cos(D),u[1]+o*Math.sin(D)])}return T},Nn=(r,n,e)=>{let t=2*(r[0]*(n[1]-e[1])+n[0]*(e[1]-r[1])+e[0]*(r[1]-n[1]));if(Math.abs(t)<0.001)return null;let s=((r[0]*r[0]+r[1]*r[1])*(n[1]-e[1])+(n[0]*n[0]+n[1]*n[1])*(e[1]-r[1])+(e[0]*e[0]+e[1]*e[1])*(r[1]-n[1]))/t,u=((r[0]*r[0]+r[1]*r[1])*(e[0]-n[0])+(n[0]*n[0]+n[1]*n[1])*(r[0]-e[0])+(e[0]*e[0]+e[1]*e[1])*(n[0]-r[0]))/t;return[s,u]},nn=(r)=>{if(r.length<2)return[...r];let n=[];for(let e=0;e<r.length-1;e++){let t=r[Math.max(0,e-1)],s=r[e],u=r[e+1],o=r[Math.min(r.length-1,e+2)],p=d(P(u,s)),f=Math.max(8,Math.ceil(p/3));for(let i=0;i<=f;i++){let m=i/f;n.push(Qn(t,s,u,o,m))}}return n},Qn=(r,n,e,t,s)=>{let u=s*s,o=u*s;return[0.5*(2*n[0]+(-r[0]+e[0])*s+(2*r[0]-5*n[0]+4*e[0]-t[0])*u+(-r[0]+3*n[0]-3*e[0]+t[0])*o),0.5*(2*n[1]+(-r[1]+e[1])*s+(2*r[1]-5*n[1]+4*e[1]-t[1])*u+(-r[1]+3*n[1]-3*e[1]+t[1])*o)]};var en=(r)=>{let n;if(r.path_type==="L")n=Nr(r.pos,r.control_points[0],r.distance);else{let e=[r.pos,...r.control_points];switch(r.path_type){case"P":n=rn(e,r.distance);break;case"C":n=nn(e);break;default:n=Jn(e);break}}return Un(n,r.distance)},tn=(r)=>{if(!r.computed_path||r.computed_path.length===0)return r.pos;return r.repetitions%2===0?r.pos:r.computed_path[r.computed_path.length-1]},Jn=(r)=>{let n=[],e=[r[0]];for(let s=1;s<r.length;s++){let[u,o]=[r[s-1],r[s]];if(u[0]===o[0]&&u[1]===o[1]){if(e.length>1)n.push(e);e=[o]}else e.push(o)}if(e.length>1)n.push(e);let t=[];for(let s of n)t.push(...Ar(s));return t},Un=(r,n)=>{if(r.length<2)return r;let e=[r[0]],t=0,s=null,u=!1;for(let o=1;o<r.length;o++){let p=d(P(r[o],r[o-1])),f=P(r[o],r[o-1]);if(p>0)s=[f[0]/p,f[1]/p];if(p===0)continue;if(t+p>=n){let i=n-t;e.push(v(r[o-1],r[o],i/p)),t=n,u=!0;break}t+=p,e.push(r[o])}if(!u&&t<n&&s){let o=n-t,p=e[e.length-1];e.push([p[0]+s[0]*o,p[1]+s[1]*o])}return e};var ir=(r,n,e)=>{if(r<=0)return 0;let t=n.Difficulty.SliderMultiplier;return r*e.base_beat_length/(100*t*e.sv_multiplier)},fr=(r,n)=>{let e=n.sv_multiplier||1,t=r.Difficulty.SliderMultiplier,s=r.Difficulty.SliderTickRate,u=100*t*e,o=r.version<8?1/e:1,p=u/s*o,f=u/n.base_beat_length;return{tick_distance:p,min_distance_from_end:f*10}};class x{points;index=0;last_time=Number.NEGATIVE_INFINITY;base_beat_length=600;sv_multiplier=1;constructor(r){if(this.points=r,r.length>0&&r[0].uninherited===1&&r[0].beatLength>0)this.base_beat_length=r[0].beatLength}reset(){this.index=0,this.last_time=Number.NEGATIVE_INFINITY,this.base_beat_length=600,this.sv_multiplier=1}get_state_at(r){if(this.points.length===0)return{base_beat_length:600,sv_multiplier:1};if(r<this.last_time)this.reset();for(let n=this.index;n<this.points.length;n++){let e=this.points[n];if(e.time>r)break;if(e.uninherited===1&&e.beatLength>0)this.base_beat_length=e.beatLength,this.sv_multiplier=1;else if(e.uninherited===0&&e.beatLength<0){let t=-100/e.beatLength;if(t>0)this.sv_multiplier=t}this.index=n}return this.last_time=r,this.sv_multiplier=R(this.sv_multiplier,0.1,10),{base_beat_length:this.base_beat_length,sv_multiplier:this.sv_multiplier}}}var cr=(r)=>{if(r.length===0)return r;return r.sort((n,e)=>{if(n.time!==e.time)return n.time-e.time;if(n.uninherited===e.uninherited)return 0;return n.uninherited>e.uninherited?-1:1})};var hr=(r)=>{let n=[];for(let e of r.HitObjects){let t={...e,end_time:e.endTime||e.time,end_pos:[e.x,e.y],combo_number:0,combo_count:0,data:{pos:[e.x,e.y]}};if(e.type&F.Slider){let s={pos:[e.x,e.y],path_type:e.curveType||"L",control_points:(e.curvePoints||[]).map((u)=>[u.x,u.y]),repetitions:e.slides||1,distance:e.length||0};t.data=s}else if(e.type&F.Spinner){let s=e.endTime||e.time;t.data={end_time:s},t.end_time=s,t.end_pos=[256,192]}else if(e.type&F.Hold){let s=e.endTime||e.time;t.data={pos:[e.x,e.y],end_time:s},t.end_time=s}n.push(t)}return n};var Qr=(r)=>384-r;class ar extends E{radius=32;preempt=1200;fade_in=600;timing_points=[];timing_resolver=null;drawables=[];drawable_config;follow_point_renderer;constructor(r,n,e=0,t=C){super(r,n,e,t);this.follow_point_renderer=new Or(n,e,this.preempt,this.fade_in,this.radius)}initialize(r){this.beatmap=r,this.objects=hr(r).sort((t,s)=>t.time-s.time),this.timing_points=cr([...r.TimingPoints]),this.timing_resolver=new x(this.timing_points);let n=r.Difficulty.ApproachRate>=0?r.Difficulty.ApproachRate:r.Difficulty.OverallDifficulty,e=_r(r.Difficulty.CircleSize,n,0,0,this.mods);if(this.radius=xr(e.cs),this.preempt=tr(e.ar),this.fade_in=Gr(this.preempt),w(this.mods,a.Hidden))this.fade_in=this.preempt*0.4;this.follow_point_renderer.update_settings(this.mods,this.preempt,this.fade_in,this.radius),this.preprocess_objects(),this.follow_point_renderer.build(this.objects),this.create_drawables()}set_mods(r){if(this.mods=r,this.beatmap)this.initialize(this.beatmap)}preprocess_objects(){let r=0,n=1;if(this.timing_resolver)this.timing_resolver.reset();for(let e of this.objects){if(Lr(e))r=(r+1)%this.skin.combo_colors.length,n=1;else n++;if(e.combo_number=r,e.combo_count=n,Dr(e)){let t=e.data;if(w(this.mods,a.HardRock))t.pos=[t.pos[0],Qr(t.pos[1])],t.control_points=t.control_points.map((o)=>[o[0],Qr(o[1])]);t.computed_path=en(t);let s=this.timing_resolver?.get_state_at(e.time)??{base_beat_length:600,sv_multiplier:1},u=ir(t.distance,this.beatmap,s);t.duration=u,e.end_time=e.time+u*t.repetitions,e.end_pos=tn(t)}else if(J(e))e.end_pos=[256,192];else{let t=e.data;if(w(this.mods,a.HardRock))t.pos=[t.pos[0],Qr(t.pos[1])];e.end_pos=t.pos}}}create_drawables(){this.drawables=[];let r=this.config.use_high_dpi?window.devicePixelRatio||1:1;if(this.drawable_config={backend:this.backend,skin:this.skin,preempt:this.preempt,fade_in:this.fade_in,radius:this.radius,scale:this.config.scale*r,mods:this.mods},this.timing_resolver)this.timing_resolver.reset();for(let n of this.objects)if(qr(n))this.drawables.push(new or(n,this.drawable_config));else if(Dr(n)){let e=n.data,t=e.computed_path||[],s=e.duration||0,u=this.timing_resolver?.get_state_at(n.time)??{base_beat_length:600,sv_multiplier:1},{tick_distance:o,min_distance_from_end:p}=fr(this.beatmap,u);this.drawables.push(new N(n,this.drawable_config,t,s,o,p))}}render(r){let{backend:n,config:e}=this;this.render_background(),n.save(),n.translate(e.offset_x,e.offset_y),n.scale(e.scale,e.scale),this.render_playfield(),this.render_grid();let t=[];for(let s=this.drawables.length-1;s>=0;s--){let u=this.drawables[s];if(u.is_alive(r))t.push(u)}this.follow_point_renderer.render(r,n,(s,u)=>this.get_circle_alpha(s,u));for(let s of this.objects)if(J(s)){let u=s.time-this.preempt;if(r>=u&&r<=s.end_time+200)this.draw_spinner(s,r)}for(let s of t)s.update(r);for(let s of t)if(s instanceof N)s.render_body_pass(r);for(let s of t)if(s instanceof N)s.render_head_pass(r);else s.render(r);if(!w(this.mods,a.Hidden)&&this.skin.enable_approach_circle){for(let s of t)if(r<=s.start_time)this.draw_approach_circle(s,r)}n.restore()}precompute(){for(let r of this.drawables)if(r instanceof N)r.prepare_body_cache()}draw_approach_circle(r,n){let e=r.position,t=r.start_time-this.preempt,s=Math.min(this.fade_in*2,this.preempt),o=R((n-t)/s,0,1)*this.skin.approach_circle_opacity,f=4-3*R((n-t)/this.preempt,0,1),i=O(this.skin,r.combo_number,1);this.backend.save(),this.backend.set_alpha(o),this.backend.draw_circle(e[0],e[1],this.radius*f,"transparent",i,this.radius*this.skin.approach_circle_width),this.backend.restore()}get_circle_alpha(r,n){let e=n-this.preempt;if(r<e)return 0;let t=R((r-e)/this.fade_in,0,1);if(w(this.mods,a.Hidden)){let s=n-this.preempt+this.fade_in,u=this.preempt*0.3;if(r>s){let o=R((r-s)/u,0,1);t*=1-o}}return t}draw_spinner(r,n){let e=r.time-this.preempt,t=R((n-e)/this.fade_in,0,1);if(n>r.end_time)t=1-M.OutCubic(R((n-r.end_time)/200,0,1));if(t<=0)return;let s=256,u=192,o=r.end_time-r.time,p=R((n-r.time)/o,0,1);this.backend.set_alpha(t);let f=this.skin.spinner_size*(1-p);if(f>5)this.backend.begin_path(),this.backend.arc_to(s,u,f,0,Math.PI*2),this.backend.stroke_path("rgba(255,255,255,0.6)",4);this.backend.draw_circle(s,u,this.skin.spinner_size,"rgba(0,0,0,0.2)"),this.backend.draw_circle(s,u,12,"white")}}var sn=11485,un=20;class mr extends E{key_count=4;scroll_time=sn/un;hd_coverage=0.25;fi_coverage=0.6;gradient_ratio=0.2;constructor(r,n,e=0,t=C){super(r,n,e,t);this.update_scroll_time()}initialize(r){this.beatmap=r,this.objects=hr(r),this.key_count=Math.floor(r.Difficulty.CircleSize)}set_mods(r){this.mods=r,this.update_scroll_time()}update_scroll_time(){let r=Vr(this.mods);this.scroll_time=sn/(un*r)}time_to_y(r){let n=this.skin.mania_hit_position,e=r/this.scroll_time;return n-e*n}render(r){let{backend:n,config:e,skin:t,key_count:s}=this;this.render_background();let u=s*t.mania_lane_width,o=Math.floor((Rr-u)/2),p=t.mania_hit_position;n.save(),n.translate(e.offset_x,e.offset_y),n.scale(e.scale,e.scale),this.render_playfield(u,yr,o),this.draw_lane_keys(r,o),this.draw_judgment_line(o),n.save(),n.begin_path(),n.rect(o,0,u,p),n.clip(),n.set_alpha(0.7),n.draw_rect(o,0,u,p,"#000000"),n.set_alpha(1);for(let f of this.objects){if(f.end_time<r)continue;if(Er(f))this.draw_hold_note(f,r,o);else this.draw_note(f,r,o)}if(w(this.mods,a.Hidden)||w(this.mods,a.FadeIn)){let f=w(this.mods,a.Hidden)?this.hd_coverage:this.fi_coverage,i=p*f,m=p*this.gradient_ratio;if(w(this.mods,a.Hidden)){let c=p-i,h=m/i,I=n.create_linear_gradient(o,c,o,p,[{offset:0,color:"rgba(0,0,0,0)"},{offset:h*0.4,color:"rgba(0,0,0,0.3)"},{offset:h*0.7,color:"rgba(0,0,0,0.75)"},{offset:h*0.9,color:"rgba(0,0,0,0.95)"},{offset:h,color:"rgba(0,0,0,1)"},{offset:1,color:"rgba(0,0,0,1)"}]);n.draw_rect_gradient(o,c,u,i,I)}else{let c=(i-m)/i,h=n.create_linear_gradient(o,0,o,i,[{offset:0,color:"rgba(0,0,0,1)"},{offset:c,color:"rgba(0,0,0,1)"},{offset:c+(1-c)*0.1,color:"rgba(0,0,0,0.95)"},{offset:c+(1-c)*0.4,color:"rgba(0,0,0,0.75)"},{offset:c+(1-c)*0.7,color:"rgba(0,0,0,0.3)"},{offset:1,color:"rgba(0,0,0,0)"}]);n.draw_rect_gradient(o,0,u,i,h)}}n.restore(),n.restore()}get_lane(r){let n=r.data.pos,e=Math.floor(n[0]*this.key_count/512);if(w(this.mods,a.Mirror))e=this.key_count-1-e;return e}draw_note(r,n,e){let{backend:t,skin:s,key_count:u}=this,o=this.get_lane(r),p=s.mania_lane_width,f=s.mania_note_height,i=s.mania_lane_spacing,m=r.time-n,c=this.time_to_y(m);if(c<-f-64)return;let h=e+o*p,I=g(s,u,o);t.set_alpha(1),t.draw_rect(h+i,c-f,p-2*i,f,I)}draw_hold_note(r,n,e){let{backend:t,skin:s,key_count:u}=this,o=r.data,p=this.get_lane(r),f=s.mania_lane_width,i=s.mania_note_height,m=s.mania_lane_spacing,c=r.time-n,h=o.end_time-n,I=this.time_to_y(c),T=this.time_to_y(h),l=e+p*f,H=g(s,u,p);if(T<-64&&I<-64)return;let D=T,b=(c<0?s.mania_hit_position:I)-D;if(b>0)t.set_alpha(0.9),t.draw_rect(l+m,D,f-2*m,b,H);if(c>=0)t.set_alpha(1),t.draw_rect(l+m,I-i,f-2*m,i,H);t.set_alpha(1)}draw_judgment_line(r){let{backend:n,skin:e,key_count:t}=this,s=e.mania_lane_width,u=e.mania_hit_position;n.draw_rect(r,u-1,s*t,2,"#ffffff")}draw_lane_keys(r,n){let{backend:e,skin:t,key_count:s}=this,{mania_lane_width:u,mania_hit_position:o,mania_lane_spacing:p,mania_note_height:f}=t,i=f+5,m=new Set,c=50;for(let h of this.objects)if(r>=h.time-50&&r<=h.end_time+50)m.add(this.get_lane(h));for(let h=0;h<s;h++){let I=m.has(h),T=n+h*u,l=g(t,s,h);if(e.set_alpha(0.3),e.draw_rect(T+p,o,u-2*p,i,l),I)e.set_alpha(1),e.draw_rect(T+p,o,u-2*p,i,"#ff6666")}e.set_alpha(1)}}class _{audio_context;gain_node;constructor(r){this.audio_context=r,this.gain_node=this.audio_context.createGain(),this.gain_node.connect(this.audio_context.destination)}set_volume(r){this.gain_node.gain.value=R(r,0,1)}dispose_audio_node(){this.gain_node.disconnect()}}class lr extends _{audio_source=null;audio_buffer=null;start_time=0;pause_time=0;speed=1;_is_playing=!1;_duration=0;_is_loaded=!1;constructor(r){super(r)}get is_playing(){return this._is_playing}get is_loaded(){return this._is_loaded}get duration(){return this._duration}get speed_multiplier(){return this.speed}get current_time(){if(!this._is_playing)return this.pause_time;return(this.audio_context.currentTime-this.start_time)*this.speed*1000}async load(r,n=0){this.stop();try{this.audio_buffer=await this.audio_context.decodeAudioData(r.slice(0)),this._duration=this.audio_buffer.duration*1000,this.speed=X(n),this._is_loaded=!0,this.pause_time=0}catch(e){throw console.error("Failed to decode audio data",e),e}}play(r){if(!this.audio_buffer){console.warn("[AudioController] Cannot play: not loaded");return}this.stop_source();let n=r!==void 0?r/1000:this.pause_time/1000,e=this.audio_buffer.duration,t=Math.max(0,Math.min(n,e));if(t>=e){this.pause_time=e*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-t/this.speed,this.audio_source.start(0,t),this._is_playing=!0}pause(){if(!this._is_playing)return;this.pause_time=this.current_time,this.stop_source(),this._is_playing=!1}seek(r){let n=Math.max(0,Math.min(r,this._duration));if(this._is_playing)this.stop_source(),this._is_playing=!1,this.pause_time=n,this.play();else this.pause_time=n}stop(){this.pause(),this.pause_time=0}get_host_time(r){return this.start_time+r/1000/this.speed}stop_source(){if(this.audio_source){try{this.audio_source.onended=null,this.audio_source.stop(),this.audio_source.disconnect()}catch(r){console.error("[AudioController]",r)}this.audio_source=null}}set_speed(r){if(this._is_playing){let n=this.current_time;this.speed=r,this.start_time=this.audio_context.currentTime-n/1000/r}else this.speed=r;if(this.audio_source)this.audio_source.playbackRate.value=r}dispose(){this.stop(),this.audio_buffer=null,this._is_loaded=!1,this.dispose_audio_node()}}class Ir{video=null;object_url=null;_offset=0;get element(){return this.video}get offset(){return this._offset}async load(r,n=0){this.dispose(),this._offset=n,this.video=document.createElement("video"),this.video.muted=!0,this.video.loop=!1,this.video.playsInline=!0,this.object_url=URL.createObjectURL(r),this.video.src=this.object_url,await new Promise((e,t)=>{if(!this.video)return t(Error("No video element"));this.video.onloadeddata=()=>e(),this.video.onerror=()=>t(Error("Failed to load video"))})}sync(r){if(!this.video)return;let n=(r-this._offset)/1000;if(n<0){if(!this.video.paused)this.video.pause();return}if(Math.abs(this.video.currentTime-n)>0.1)this.video.currentTime=n}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(r){if(!this.video)return;let n=Math.max(0,(r-this._offset)/1000);this.video.currentTime=n}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 A extends _{static default_samples=new Map;static default_loads=new Map;custom_samples=new Map;constructor(r){super(r)}async load_samples(r){this.custom_samples.clear(),await this.load_into_cache(r,this.custom_samples,!1)}async load_samples_from_files(r){this.custom_samples.clear(),await this.load_files_into_cache(r,this.custom_samples)}async load_default_samples(r){await this.load_into_cache(r,A.default_samples,!0)}clear(){this.custom_samples.clear()}play(r,n,e,t,s=100,u,o=0){let p=this.get_set_name(r),f=this.get_set_name(n);if(u){let i=u.toLowerCase().replace(/\.(wav|mp3|ogg)$/,"");if(this.play_buffer(i,s,o))return}if(this.play_sound(p,"hitnormal",t,s,o),e&rr.Whistle)this.play_sound(f,"hitwhistle",t,s,o);if(e&rr.Finish)this.play_sound(f,"hitfinish",t,s,o);if(e&rr.Clap)this.play_sound(f,"hitclap",t,s,o)}play_sample(r,n,e,t=100,s=0){let u=this.get_set_name(r);this.play_sound(u,n,e,t,s)}play_sound(r,n,e,t,s){let u=!1;if(e>1)u=this.play_buffer(`${r}-${n}${e}`,t,s);if(!u)this.play_buffer(`${r}-${n}`,t,s)}play_buffer(r,n,e){let t=this.custom_samples.get(r)??A.default_samples.get(r);if(!t)return!1;let s=this.audio_context.createBufferSource();s.buffer=t;let u=this.audio_context.createGain();return u.gain.value=n/100,s.connect(u),u.connect(this.gain_node),s.start(e),!0}get_set_name(r){switch(r){case 3:return"drum";case 2:return"soft";default:return"normal"}}get_sample_key_from_url(r){let e=r.split("?")[0].split("#")[0].split("/").pop();if(!e)return null;if(!e.endsWith(".wav")&&!e.endsWith(".mp3")&&!e.endsWith(".ogg"))return null;return e.toLowerCase().replace(/\.(wav|mp3|ogg)$/,"")}async load_into_cache(r,n,e){if(r.length==0)return;let t=[],s=r.map(async(u)=>{let o=this.get_sample_key_from_url(u);if(!o){t.push(u);return}if(n.has(o))return;if(!e){await this.load_single_sample(u,o,n,t);return}let p=A.default_loads.get(o);if(p){await p;return}let f=this.load_single_sample(u,o,n,t).finally(()=>{A.default_loads.delete(o)});A.default_loads.set(o,f),await f});if(await Promise.all(s),t.length>0)console.warn(`[HitsoundController] Failed to load ${t.length} hitsounds`)}async load_single_sample(r,n,e,t){try{let s=await fetch(r);if(!s.ok){t.push(r);return}let u=await s.arrayBuffer();if(u.byteLength<128){t.push(r);return}let o=await this.audio_context.decodeAudioData(u.slice(0));e.set(n,o)}catch{t.push(r)}}async load_files_into_cache(r,n){if(r.size==0)return;let e=[],t=[...r.entries()].map(async([s,u])=>{let o=this.get_sample_key_from_url(s);if(!o)return;if(n.has(o))return;if(u.byteLength<128){e.push(s);return}try{let p=await this.audio_context.decodeAudioData(u.slice(0));n.set(o,p)}catch{e.push(s)}});if(await Promise.all(t),e.length>0)console.warn(`[HitsoundController] Failed to load ${e.length} hitsounds`)}dispose(){this.custom_samples.clear(),this.dispose_audio_node()}}class Jr{files;audio_filename;background_filename;video_filename;video_offset;constructor(r){this.files=r.files,this.audio_filename=r.audio_filename,this.background_filename=r.background_filename,this.video_filename=r.video_filename,this.video_offset=r.video_offset}resolve(){let r=this.audio_filename?this.find_file(this.audio_filename):void 0,n=this.background_filename?this.find_file(this.background_filename):void 0,e=this.video_filename?this.find_file(this.video_filename):void 0;return{audio:r,background:n?new Blob([n]):void 0,video:e?new Blob([e]):void 0,video_offset:this.video_offset}}find_file(r){if(this.files.has(r))return this.files.get(r);let n=r.toLowerCase();for(let[e,t]of this.files)if(e.toLowerCase()===n)return t;return}}var qn=100,En=20;class Ur{audio;hitsounds;resources=null;timing_points=[];timing_resolver=null;audio_offset=20;next_hit_object_index=0;constructor(r,n){this.audio=r;this.hitsounds=n}set_context(r,n,e,t){this.resources=r,this.timing_points=n,this.timing_resolver=e,this.audio_offset=t,this.next_hit_object_index=0}set_audio_offset(r){this.audio_offset=r}update_hit_index(r){if(!this.resources?.beatmap)return;let n=this.resources.beatmap.HitObjects;if(this.next_hit_object_index>0&&n[this.next_hit_object_index-1].time>r)this.next_hit_object_index=0;while(this.next_hit_object_index<n.length&&n[this.next_hit_object_index].time<r)this.next_hit_object_index++}schedule_hitsounds(r){if(!this.resources?.beatmap||!this.audio.is_playing)return;let n=this.resources.beatmap.HitObjects,e=r+qn;while(this.next_hit_object_index<n.length&&n[this.next_hit_object_index].time<=e){let t=n[this.next_hit_object_index];if(t.time>=r-En)this.play_hitsound(t);this.next_hit_object_index++}}play_hitsound(r){let n=this.get_timing_point(r.time),e=this.resolve_sample_settings(n,r.hitSample);if((r.type&F.Slider)===0){this.play_node_hitsound(r.time,r.hitSound,e,e.custom_filename);return}let t=this.resources?.beatmap;if(!t)return;let s=this.timing_resolver?.get_state_at(r.time)??{base_beat_length:600,sv_multiplier:1},u=r.length??0,o=ir(u,t,s),p=Math.max(1,r.slides||1);if(o<=0||u<=0){this.play_node_hitsound(r.time,r.hitSound,e,e.custom_filename);return}let f=r.edgeSounds??[],i=r.edgeSets??[];for(let h=0;h<=p;h++){let I=r.time+o*h,T=f.length>0?f[h]??0:h==0?r.hitSound:0,l=i.length>0?i[h]:void 0,H=this.resolve_edge_sets(e,l),D=h==0?e.custom_filename:void 0;this.play_node_hitsound(I,T,{...e,...H},D)}let m=fr(t,s),c=pr({start_time:r.time,span_duration:o,span_count:p,length:u,tick_distance:m.tick_distance,min_distance_from_end:m.min_distance_from_end,get_position_at_progress:()=>[0,0]});for(let h of c.ticks){let I=this.audio.get_host_time(h.time+this.audio_offset);this.hitsounds.play_sample(e.normal_set,"slidertick",e.index,e.volume,I)}}play_node_hitsound(r,n,e,t){let s=this.audio.get_host_time(r+this.audio_offset);this.hitsounds.play(e.normal_set,e.addition_set,n,e.index,e.volume,t,s)}resolve_sample_settings(r,n){let{volume:e,sampleSet:t,sampleSet:s,sampleIndex:u}=r,o=void 0;if(n){if(n.normalSet!==0){if(t=n.normalSet,n.additionSet===0)s=t}if(n.additionSet!==0)s=n.additionSet;if(n.index!==0)u=n.index;if(n.volume!==0)e=n.volume;o=n.filename||void 0}if(t===0)t=1;if(s===0)s=t;return{normal_set:t,addition_set:s,index:u,volume:e,custom_filename:o}}resolve_edge_sets(r,n){let{normal_set:e,addition_set:t}=r;if(n){let{normalSet:s,additionSet:u}=n;if(s!==0)e=s;if(u!==0)t=u;else t=e}if(e===0)e=1;if(t===0)t=e;return{normal_set:e,addition_set:t}}get_timing_point(r){let n=this.timing_points;if(n.length==0)return{time:0,beatLength:600,meter:4,sampleSet:1,sampleIndex:1,volume:100,uninherited:1,effects:0};for(let e=n.length-1;e>=0;e--)if(n[e].time<=r)return n[e];return n[0]}}var Ln=[".wav",".mp3",".ogg"],Zn=/^(normal|soft|drum)-(hitnormal|hitwhistle|hitfinish|hitclap|slidertick|sliderslide|sliderwhistle)\d*$/i,on=(r,n,e)=>{let t=new Set;for(let o of r.HitObjects){let p=o.hitSample?.filename?.trim();if(p)t.add(p.toLowerCase())}let s=new Map,u=e?.toLowerCase();for(let[o,p]of n){let f=o.toLowerCase();if(!Xn(f))continue;if(u&&f==u)continue;let i=Wn(f),m=i.replace(/\.(wav|mp3|ogg)$/,""),c=Zn.test(m),h=t.has(i)||t.has(m)||t.has(f);if(c||h)s.set(o,p)}return s},Xn=(r)=>{for(let n of Ln)if(r.endsWith(n))return!0;return!1},Wn=(r)=>{let n=r.split("?")[0].split("#")[0];return n.split("/").pop()??n};var zn=0.42,Yn=30;class pn{backend;renderer=null;audio_context;audio;hitsounds;video=null;resources=null;animation_frame=null;skin;mods;renderer_config;start_offset;start_mode;custom_start_time;music_volume;hitsound_volume;audio_offset;background_url=null;listeners=new Map;is_loaded_flag=!1;hitsound_scheduler;timing_points=[];timing_resolver=null;resize_observer=null;key_handler=null;options;enable_fps_counter=!1;fps_frame_count=0;fps_last_update=0;current_fps=0;time_smoothing=0.1;smoothed_delta=0;max_frame_delta=100;last_timestamp=0;smooth_time=0;constructor(r){this.options=r,this.backend=r.backend??new er,this.skin=sr(r.skin),this.mods=r.mods??0,this.renderer_config={...C,...r.renderer_config},this.calculate_layout(r.canvas.width,r.canvas.height,r.playfield_scale),this.start_mode=r.start_mode??(Number.isFinite(r.start_time)?"custom":"preview"),this.custom_start_time=Number.isFinite(r.start_time)?Math.max(0,r.start_time):null,this.start_offset=0,this.music_volume=r.volume??0.5,this.hitsound_volume=r.hitsound_volume??0.25,this.audio_offset=r.audio_offset??20,this.backend.initialize(r.canvas,this.renderer_config.use_high_dpi);let n=window.AudioContext||window.webkitAudioContext;if(this.audio_context=new n,this.audio=new lr(this.audio_context),this.hitsounds=new A(this.audio_context),this.hitsound_scheduler=new Ur(this.audio,this.hitsounds),this.audio.set_volume(this.music_volume),this.hitsounds.set_volume(this.hitsound_volume),r.auto_resize)this.setup_auto_resize();this.enable_fps_counter=r.enable_fps_counter??!1,this.fps_last_update=performance.now();let e=r.time_smoothing;if(Number.isFinite(e))this.time_smoothing=Math.max(0,Math.min(1,e));let t=r.max_frame_delta;if(Number.isFinite(t))this.max_frame_delta=Math.max(10,t)}async load_osz(r,n){try{let t=await new q().load_osz(r,{difficulty:n});return this.resources=t,this.setup()}catch(e){let t=e instanceof Error?e.message:String(e);return this.emit("error","INVALID_BEATMAP",t),S("INVALID_BEATMAP",t)}}async load_files(r,n){try{let e=new q;return this.resources=await e.load_from_files(r,{difficulty:n}),this.setup()}catch(e){let t=e instanceof Error?e.message:String(e);return this.emit("error","INVALID_BEATMAP",t),S("INVALID_BEATMAP",t)}}async load_default_hitsounds(r){if(r.length==0){console.warn("[BeatmapPlayer] No default hitsound URLs were provided");return}try{await this.hitsounds.load_default_samples(r)}catch(n){console.error("[BeatmapPlayer] Failed to load default hitsounds:",n)}}async load_custom_hitsounds(r){if(r.length==0){console.warn("[BeatmapPlayer] No custom hitsound URLs were provided"),this.hitsounds.clear();return}try{await this.hitsounds.load_samples(r)}catch(n){console.error("[BeatmapPlayer] Failed to load custom hitsounds:",n)}}async load_map_custom_hitsounds(){if(!this.resources?.beatmap)return;let r=on(this.resources.beatmap,this.resources.files,this.resources.audio_filename);if(r.size==0){this.hitsounds.clear();return}try{await this.hitsounds.load_samples_from_files(r)}catch(n){console.error("[BeatmapPlayer] Failed to load map custom hitsounds:",n),this.hitsounds.clear()}}async load_beatmap(r,n,e,t,s){return this.resources={beatmap:r,available_difficulties:[],files:new Map,audio:n,background:e,video:t,video_offset:s},this.setup()}async load_osu_content(r,n){try{await U();let e=await this.parse_content(r);return this.load_beatmap(e,n)}catch(e){let t=e instanceof Error?e.message:String(e);return this.emit("error","INVALID_BEATMAP",t),S("INVALID_BEATMAP",t)}}async load_beatmap_files(r,n,e,t,s){try{await U();let u=typeof r==="string",o=r instanceof Uint8Array?r:r instanceof ArrayBuffer?new Uint8Array(r):null,p=await this.parse_content(u?r:o);return this.load_beatmap(p,n,e,t,s)}catch(u){let o=u instanceof Error?u.message:String(u);return this.emit("error","INVALID_BEATMAP",o),S("INVALID_BEATMAP",o)}}async setup(){if(!this.resources)return S("NOT_LOADED","No resources loaded");let{beatmap:r}=this.resources;this.timing_points=cr([...r.TimingPoints]),this.timing_resolver=new x(this.timing_points);let n=X(this.mods);this.resolve_assets();let{audio:e,video:t,video_offset:s}=this.resources;if(e)try{await this.audio.load(e,this.mods)}catch(u){let o=u instanceof Error?u.message:String(u);return this.emit("error","AUDIO_DECODE_ERROR",o),S("AUDIO_DECODE_ERROR",o)}if(this.hitsound_scheduler.set_context(this.resources,this.timing_points,this.timing_resolver,this.audio_offset),this.load_map_custom_hitsounds(),t)this.video=new Ir,await this.video.load(t,s??0);try{this.renderer=this.create_renderer(r),this.renderer.initialize(r),this.renderer.precompute()}catch(u){let o=u instanceof Error?u.message:String(u);return this.emit("error","UNSUPPORTED_MODE",o),S("UNSUPPORTED_MODE",o)}return this.start_offset=this.resolve_initial_start_offset(),this.hitsound_scheduler.update_hit_index(this.start_offset),this.load_background(),this.is_loaded_flag=!0,this.emit("loaded",r,this.resources),requestAnimationFrame(()=>this.render_frame(this.start_offset)),Xr(this.resources)}async load_background(){if(this.resources)this.resolve_assets();if(!this.resources?.background||!this.renderer)return;try{let r=new Image;if(this.background_url)URL.revokeObjectURL(this.background_url);this.background_url=URL.createObjectURL(this.resources.background),r.src=this.background_url,await r.decode(),this.renderer.set_background({source:r,width:r.width,height:r.height});let n=this.audio.is_playing?this.current_time:this.start_offset;requestAnimationFrame(()=>this.render_frame(n))}catch(r){console.warn("[BeatmapPlayer] Failed to load background",r)}}resolve_assets(){if(!this.resources)return;let r=new Jr(this.resources).resolve();if(!this.resources.audio&&r.audio)this.resources.audio=r.audio;if(!this.resources.background&&r.background)this.resources.background=r.background;if(!this.resources.video&&r.video)this.resources.video=r.video;if(!this.resources.video_offset&&r.video_offset)this.resources.video_offset=r.video_offset}create_renderer(r){switch(r.General.Mode){case 0:return new ar(this.backend,this.skin,this.mods,this.renderer_config);case 3:return new mr(this.backend,this.skin,this.mods,this.renderer_config);case 1:case 2:default:throw Error(`Unsupported game mode: ${Tr[r.General.Mode]??r.General.Mode}`)}}get_last_object_time(){if(!this.resources?.beatmap.HitObjects.length)return 0;let r=this.resources.beatmap.HitObjects,n=0;for(let e of r){let t=e.endTime||e.time;if(t>n)n=t}return n}resolve_preview_start_offset(){if(!this.resources?.beatmap)return 0;let r=this.resources.beatmap.General.PreviewTime;if(r>0)return r;return Math.max(0,this.get_last_object_time()*zn)}resolve_initial_start_offset(){let r=Math.max(0,this.duration);if(this.start_mode=="beginning")return 0;if(this.start_mode=="custom"){if(this.custom_start_time!==null)return Math.max(0,Math.min(this.custom_start_time,r));return Math.max(0,Math.min(this.resolve_preview_start_offset(),r))}return Math.max(0,Math.min(this.resolve_preview_start_offset(),r))}async play(){if(!this.renderer||!this.is_loaded_flag){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(Math.max(0,this.start_offset+this.audio_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=Math.max(0,this.audio.current_time-this.audio_offset),this.audio.pause(),this.video?.pause(),this.stop_render_loop(),this.emit("pause"),this.emit("statechange",!1)}set_mods(r){this.mods=r;let n=X(r);if(this.renderer?.set_mods(r),this.audio.set_speed(n),this.is_loaded_flag)requestAnimationFrame(()=>this.render_frame(this.current_time))}seek(r){this.start_offset=Math.max(0,Math.min(r,this.duration)),this.hitsound_scheduler.update_hit_index(this.start_offset),this.audio.seek(Math.max(0,this.start_offset+this.audio_offset)),this.video?.seek(this.start_offset),this.emit("seek",this.start_offset),this.render_frame(this.start_offset)}async set_difficulty(r){if(!this.resources)return S("NOT_LOADED","No beatmap resources loaded");let n=this.is_playing;this.stop();try{let t=await new q().load_from_files(this.resources.files,{difficulty:r});this.resources=t;let s=await this.setup();if(s.success&&n)this.play();return s}catch(e){let t=e instanceof Error?e.message:String(e);return this.emit("error","INVALID_BEATMAP",t),S("INVALID_BEATMAP",t)}}async parse_content(r){let n=typeof r=="string"?new TextEncoder().encode(r):r;return await Y(n)}stop(){this.pause(),this.start_offset=0,this.audio.seek(Math.max(0,this.audio_offset)),this.hitsound_scheduler.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.background_url)URL.revokeObjectURL(this.background_url),this.background_url=null;if(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_flag=!1,this.listeners.clear()}get current_time(){return Math.max(0,this.audio.current_time-this.audio_offset)}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_flag}get mode(){if(!this.resources)return"standard";switch(this.resources.beatmap.General.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(r,n,e){if(this.backend.resize(r,n),this.calculate_layout(r,n,e),this.is_loaded_flag)requestAnimationFrame(()=>this.render_frame(this.current_time))}update_config(r){if(this.renderer_config={...this.renderer_config,...r},this.renderer?.update_config(this.renderer_config),this.is_loaded_flag)requestAnimationFrame(()=>this.render_frame(this.current_time))}set_skin(r){if(this.skin=sr(r),this.is_loaded_flag&&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 n=this.options.canvas.parentElement;if(n){let e=n.getBoundingClientRect();this.resize(e.width,e.height,this.options.playfield_scale)}}),this.resize_observer.observe(this.options.canvas.parentElement||this.options.canvas)}toggle_pause(){if(!this.is_loaded_flag)return;if(this.is_playing)this.pause();else 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(r,n,e){let u=0.9;if(Number.isFinite(e))u=e;let o=r*u/512,p=n*u/384,f=Math.min(o,p);if(this.renderer_config.scale=f,this.renderer_config.offset_x=Math.floor((r-512*f)/2),this.renderer_config.offset_y=Math.floor((n-384*f)/2),this.renderer)this.renderer.update_config(this.renderer_config)}set_volume(r){this.music_volume=r,this.audio.set_volume(r)}set_hitsound_volume(r){this.hitsound_volume=r,this.hitsounds.set_volume(r)}set_offset(r){if(this.audio_offset=r,this.hitsound_scheduler.set_audio_offset(r),this.is_loaded_flag)this.seek(this.current_time)}on(r,n){if(!this.listeners.has(r))this.listeners.set(r,new Set);this.listeners.get(r).add(n)}off(r,n){this.listeners.get(r)?.delete(n)}emit(r,...n){let e=this.listeners.get(r);if(e)for(let t of e)t(...n)}start_render_loop(){if(this.animation_frame!==null)return;this.last_timestamp=performance.now(),this.smooth_time=this.audio.current_time-this.audio_offset,this.smoothed_delta=0;let r=(n)=>{if(!this.audio.is_playing){this.animation_frame=null;return}let e=Math.max(0,n-this.last_timestamp);this.last_timestamp=n;let t=Math.min(e,this.max_frame_delta);if(this.time_smoothing>0){if(this.smoothed_delta===0)this.smoothed_delta=t;else this.smoothed_delta+=(t-this.smoothed_delta)*this.time_smoothing;t=this.smoothed_delta}this.smooth_time+=t*this.audio.speed_multiplier;let s=this.audio.current_time-this.audio_offset;if(Math.abs(this.smooth_time-s)>Yn)this.smooth_time=s;else this.smooth_time+=(s-this.smooth_time)*0.1;let o=this.smooth_time;if(this.hitsound_scheduler.schedule_hitsounds(s),this.render_frame(o),this.video?.sync(o),this.emit("timeupdate",o,this.duration),o>=this.duration){this.emit("ended"),this.stop_render_loop(),this.emit("statechange",!1);return}this.animation_frame=requestAnimationFrame(r)};this.animation_frame=requestAnimationFrame(r)}stop_render_loop(){if(this.animation_frame!==null)cancelAnimationFrame(this.animation_frame),this.animation_frame=null}render_frame(r){if(this.backend.begin_frame?.(),this.backend.clear(),this.renderer?.render(r),this.enable_fps_counter){this.fps_frame_count++;let n=performance.now(),e=n-this.fps_last_update;if(e>=1000)this.current_fps=Math.round(this.fps_frame_count*1000/e),this.fps_frame_count=0,this.fps_last_update=n;let t=`14px ${this.skin.default_font??"monospace"}`;this.backend.draw_text(`${this.current_fps} FPS`,10,20,t,"rgba(255,255,255,0.8)","left","top")}this.backend.end_frame?.()}set_fps_counter(r){this.enable_fps_counter=r}}var gn=(r)=>{try{return new FontFace(r.family,r.url,{weight:r.weight,style:"normal"})}catch(n){return console.error(n),null}},Kn=async(r)=>{let n=gn(r);if(!n)return!1;try{await n.load(),document.fonts.add(n)}catch(e){return console.error(e),!1}return!0};export{xn as unwrap,te as toggle_mod,Xr as ok,ee as mods_to_string,ne as mods_from_string,sr as merge_skin,Kn as load_font,J as is_spinner,Dr as is_slider,_n as is_ok,Lr as is_new_combo,Er as is_hold,jn as is_err,qr as is_circle,w as has_mod,X as get_speed_multiplier,Vr as get_rate_multiplier,g as get_mania_lane_color,O as get_combo_color,se as get_available_mods,_r as get_adjusted_difficulty,S as err,dn as apply_rate_to_ar,Pn as apply_mods_to_difficulty,Ir as VideoController,ar as StandardRenderer,mn as SpeedChangingMods,Hr as SampleSet,Rr as PLAYFIELD_WIDTH,yr as PLAYFIELD_HEIGHT,q as OszLoader,a as Mods,wn as ModNightcore,Bn as ModHidden,Mr as ModHardRock,Mn as ModHalfTime,br as ModEasy,yn as ModDoubleTime,mr as ManiaRenderer,rr as HitSoundType,F as HitObjectType,Vn as HD_FADE_OUT_MULTIPLIER,bn as HD_FADE_IN_MULTIPLIER,gr as GridLevel,Tr as GameMode,Zr as ErrorCode,re as DifficultyChangingMods,Pr as DEFAULT_SKIN,C as DEFAULT_RENDERER_CONFIG,er as CanvasBackend,pn as BeatmapPlayer,E as BaseRenderer,lr as AudioController};
|
|
1
|
+
var hr;((e)=>{e[e.Standard=0]="Standard";e[e.Taiko=1]="Taiko";e[e.Catch=2]="Catch";e[e.Mania=3]="Mania"})(hr||={});var cr;((e)=>{e[e.Auto=0]="Auto";e[e.Normal=1]="Normal";e[e.Soft=2]="Soft";e[e.Drum=3]="Drum"})(cr||={});var S={Circle:1,Slider:2,NewCombo:4,Spinner:8,ComboSkip:112,Hold:128},g={Normal:1,Whistle:2,Finish:4,Clap:8},dr=(r)=>(r.type&S.Circle)!==0,mr=(r)=>(r.type&S.Slider)!==0,Q=(r)=>(r.type&S.Spinner)!==0,Ar=(r)=>(r.type&S.Hold)!==0,Nr=(r)=>(r.type&S.NewCombo)!==0;var Qr;((i)=>{i.NoOsuFiles="NO_OSU_FILES";i.DifficultyNotFound="DIFFICULTY_NOT_FOUND";i.InvalidBeatmap="INVALID_BEATMAP";i.UnsupportedMode="UNSUPPORTED_MODE";i.AudioNotLoaded="AUDIO_NOT_LOADED";i.AudioDecodeError="AUDIO_DECODE_ERROR";i.NotLoaded="NOT_LOADED";i.Unknown="UNKNOWN"})(Qr||={});var Jr=(r)=>({success:!0,data:r}),C=(r,n)=>({success:!1,code:r,reason:n}),En=(r)=>{if(r.success)return r.data;throw Error(`[${r.code}] ${r.reason}`)},zn=(r)=>{return r.success},Wn=(r)=>{return!r.success};var m={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},pn=m.DoubleTime|m.HalfTime|m.Nightcore,Kn=m.HardRock|m.Easy|pn,Gn=(r)=>{let n=0,t=r.toLowerCase(),s={nf:m.NoFail,ez:m.Easy,td:m.TouchDevice,hd:m.Hidden,hr:m.HardRock,sd:m.SuddenDeath,dt:m.DoubleTime,rx:m.Relax,ht:m.HalfTime,nc:m.Nightcore,fl:m.Flashlight,at:m.Autoplay,so:m.SpunOut,ap:m.Autopilot,pf:m.Perfect,fi:m.FadeIn,mr:m.Mirror};for(let e=0;e<t.length-1;e+=2){let u=t.slice(e,e+2);if(s[u])n|=s[u]}return n},gn=(r)=>{let n=[];if(r&m.NoFail)n.push("NF");if(r&m.Easy)n.push("EZ");if(r&m.Hidden)n.push("HD");if(r&m.HardRock)n.push("HR");if(r&m.SuddenDeath)n.push("SD");if(r&m.DoubleTime)n.push("DT");if(r&m.HalfTime)n.push("HT");if(r&m.Nightcore)n.push("NC");if(r&m.Flashlight)n.push("FL");if(r&m.SpunOut)n.push("SO");if(r&m.FadeIn)n.push("FI");if(r&m.Mirror)n.push("MR");let t=n.indexOf("DT"),s=n.indexOf("NC");if(t>=0&&s>=0)n.splice(t,1);return n.join("")},L=(r)=>{if(r&(m.DoubleTime|m.Nightcore))return 1.5;if(r&m.HalfTime)return 0.75;return 1},fn=[m.HardRock|m.Easy,m.DoubleTime|m.HalfTime|m.Nightcore,m.Hidden|m.FadeIn],xn=(r,n)=>{if(r&n)return r&~n;let t=r;for(let s of fn)if(n&s)t&=~s;return t|n},V=(r,n)=>(r&n)!==0,_n=(r)=>{let n=[{name:"Easy",acronym:"EZ",value:m.Easy},{name:"Hidden",acronym:"HD",value:m.Hidden},{name:"Double Time",acronym:"DT",value:m.DoubleTime},{name:"Half Time",acronym:"HT",value:m.HalfTime},{name:"Nightcore",acronym:"NC",value:m.Nightcore}];switch(r){case"standard":return[...n,{name:"Hard Rock",acronym:"HR",value:m.HardRock}];case"mania":return[...n,{name:"Hard Rock",acronym:"HR",value:m.HardRock},{name:"Fade In",acronym:"FI",value:m.FadeIn}];case"taiko":case"catch":return[...n,{name:"Hard Rock",acronym:"HR",value:m.HardRock}];default:return n}};import Ur from"jszip";import{init_wasm as qr,parse as Zr}from"@rel-packages/osu-beatmap-parser/browser";class J{async load_osz(r,n){await qr();let t=await Ur.loadAsync(r),s=new Map;for(let[e,u]of Object.entries(t.files))if(!u.dir)s.set(e,await u.async("arraybuffer"));return this.load_from_files(s,n)}async load_from_files(r,n){await qr();let t=[...r.keys()].filter((H)=>H.toLowerCase().endsWith(".osu"));if(t.length===0)throw Error("No .osu files found in beatmap");let s=await Promise.all(t.map(async(H)=>{let D=r.get(H),M=this.to_bytes(D),b=await Zr(M);return{filename:H,beatmap:b}})),e=this.select_difficulty(t,s,n?.difficulty),u=r.get(e),o=this.to_bytes(u),p=await Zr(o),i=p.General.AudioFilename||null,f=p.Events.background?.filename||null,l=p.Events.video?.filename||null,h=p.Events.video?.startTime??0,c=new Map;for(let[H,D]of r)if(D instanceof ArrayBuffer)c.set(H,D);else c.set(H,new TextEncoder().encode(D).buffer);let I;if(i)I=this.find_file(c,i);let T;if(f){let H=this.find_file(c,f);if(H)T=new Blob([H])}let a;if(l){let H=this.find_file(c,l);if(H)a=new Blob([H])}return{beatmap:p,available_difficulties:s,files:c,audio:I,background:T,video:a,audio_filename:i??void 0,background_filename:f??void 0,video_filename:l??void 0,video_offset:l?h:void 0}}async list_difficulties(r){let n=await Ur.loadAsync(r),t=[];for(let e of Object.keys(n.files))if(e.toLowerCase().endsWith(".osu"))t.push(e);let s=[];for(let e of t){let o=(await n.files[e].async("string")).match(/Version:\s*(.+)/);s.push(o?o[1].trim():e)}return s}select_difficulty(r,n,t){if(t===void 0)return r[0];if(typeof t==="number"){if(t<0||t>=r.length)throw Error(`Difficulty index ${t} out of range (0-${r.length-1})`);return r[t]}let s=n.find((o)=>o.beatmap.Metadata.Version===t);if(s)return s.filename;let e=t.toLowerCase(),u=n.find((o)=>o.filename.toLowerCase().includes(e)||o.beatmap.Metadata.Version.toLowerCase().includes(e));if(u)return u.filename;throw Error(`Difficulty "${t}" not found`)}find_file(r,n){if(r.has(n))return r.get(n);let t=n.toLowerCase();for(let[s,e]of r)if(s.toLowerCase()===t)return e;return}to_bytes(r){if(r instanceof ArrayBuffer)return new Uint8Array(r);return new TextEncoder().encode(r)}}import{init_wasm as nn,parse as Jn}from"@rel-packages/osu-beatmap-parser/browser";var lr=512,ar=384,Lr;((u)=>{u[u.None=0]="None";u[u.Large=32]="Large";u[u.Medium=16]="Medium";u[u.Small=8]="Small";u[u.Tiny=4]="Tiny"})(Lr||={});var v={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 U{backend;skin;config;mods;beatmap;objects=[];background_image=null;constructor(r,n,t=0,s=v){this.backend=r,this.skin=n,this.mods=t,this.config={...v,...s}}set_background(r){this.background_image=r}update_config(r){this.config={...this.config,...r}}precompute(){}dispose(){this.objects=[]}render_playfield(r,n,t,s){if(!this.config.show_playfield)return;let{backend:e,config:u}=this,o=r??512,p=n??384,i=t??0,f=s??0;e.save(),e.set_alpha(u.playfield_opacity),e.begin_path(),e.move_to(i,f),e.line_to(i+o,f),e.line_to(i+o,f+p),e.line_to(i,f+p),e.line_to(i,f),e.stroke_path(u.playfield_color,2),e.restore()}render_grid(){if(this.config.grid_level===0)return;let{backend:r,config:n}=this,t=n.grid_level;r.save(),r.set_alpha(n.grid_opacity);for(let s=0;s<=512;s+=t)r.begin_path(),r.move_to(s,0),r.line_to(s,384),r.stroke_path(n.grid_color,s%(t*4)===0?1:0.5);for(let s=0;s<=384;s+=t)r.begin_path(),r.move_to(0,s),r.line_to(512,s),r.stroke_path(n.grid_color,s%(t*4)===0?1:0.5);r.restore()}render_background(){if(!this.background_image)return;let{backend:r}=this;r.save(),r.set_alpha(0.3);let{width:n,height:t}=r,{width:s,height:e}=this.background_image;if(s>0&&e>0){let u=Math.max(n/s,t/e),o=s*u,p=e*u,i=(n-o)/2,f=(t-p)/2;r.draw_image(this.background_image,i,f,o,p)}else r.draw_image(this.background_image,0,0,n,t);r.restore()}get_visible_objects(r,n,t){let s=[];for(let e of this.objects){let u=e.time-n,o=e.end_time+t;if(r>=u&&r<=o)s.push(e)}return s}}class x{ctx;_width=0;_height=0;_dpr=1;is_initialized=!1;get width(){return this._width}get height(){return this._height}initialize(r,n=!0){this._dpr=n?window.devicePixelRatio||1:1;let t=r.clientWidth||r.width,s=r.clientHeight||r.height;this.apply_canvas_size(r,t,s);let e=r.getContext("2d",{alpha:!0,desynchronized:!0});if(!e)throw Error("Failed to get 2D context");this.ctx=e,this._width=t,this._height=s,this.configure_context(),this.is_initialized=!0}clear(){if(!this.is_initialized)return;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(){}begin_frame(){}end_frame(){}resize(r,n){if(!this.is_initialized)return;this._width=r,this._height=n,this._dpr=window.devicePixelRatio||1;let t=this.ctx.canvas;this.apply_canvas_size(t,r,n),this.reset_transform(),this.configure_context()}draw_circle(r,n,t,s,e,u){let o=this.ctx;if(o.beginPath(),o.arc(r,n,t,0,Math.PI*2),s&&s!=="transparent")o.fillStyle=s,o.fill();if(e&&u&&u>0)o.strokeStyle=e,o.lineWidth=u,o.stroke()}draw_arc(r,n,t,s,e,u,o,p=!1){let i=this.ctx;i.beginPath(),i.arc(r,n,t,s,e,p),i.strokeStyle=u,i.lineWidth=o,i.stroke()}draw_rect(r,n,t,s,e){this.ctx.fillStyle=e,this.ctx.fillRect(r,n,t,s)}draw_rect_gradient(r,n,t,s,e){this.ctx.fillStyle=e,this.ctx.fillRect(r,n,t,s)}create_linear_gradient(r,n,t,s,e){let u=this.ctx.createLinearGradient(r,n,t,s);for(let o of e)u.addColorStop(o.offset,o.color);return u}draw_text(r,n,t,s,e,u="left",o="alphabetic"){let p=this.ctx;p.font=s,p.fillStyle=e,p.textAlign=u,p.textBaseline=o,p.fillText(r,n,t)}measure_text(r,n){let t=this.ctx,s=t.font;t.font=n;let e=t.measureText(r);return t.font=s,e}begin_path(){this.ctx.beginPath()}move_to(r,n){this.ctx.moveTo(r,n)}line_to(r,n){this.ctx.lineTo(r,n)}draw_line(r,n,t,s,e,u,o="butt",p="miter"){this.ctx.beginPath(),this.ctx.moveTo(r,n),this.ctx.lineTo(t,s),this.ctx.strokeStyle=e,this.ctx.lineWidth=u,this.ctx.lineCap=o,this.ctx.lineJoin=p,this.ctx.stroke()}bezier_curve_to(r,n,t,s,e,u){this.ctx.bezierCurveTo(r,n,t,s,e,u)}quadratic_curve_to(r,n,t,s){this.ctx.quadraticCurveTo(r,n,t,s)}arc_to(r,n,t,s,e,u){this.ctx.arc(r,n,t,s,e,u)}rect(r,n,t,s){this.ctx.rect(r,n,t,s)}clip(){this.ctx.clip()}stroke_path(r,n,t="butt",s="miter"){let e=this.ctx;e.strokeStyle=r,e.lineWidth=n,e.lineCap=t,e.lineJoin=s,e.stroke()}fill_path(r){this.ctx.fillStyle=r,this.ctx.fill()}close_path(){this.ctx.closePath()}save(){this.ctx.save()}restore(){this.ctx.restore()}translate(r,n){this.ctx.translate(r,n)}scale(r,n){this.ctx.scale(r,n)}rotate(r){this.ctx.rotate(r)}set_alpha(r){this.ctx.globalAlpha=r}set_shadow(r,n){this.ctx.shadowColor=r,this.ctx.shadowBlur=n}set_composite_operation(r){this.ctx.globalCompositeOperation=r}set_blend_mode(r){let n={normal:"source-over",lighter:"lighter",multiply:"multiply",screen:"screen"};this.ctx.globalCompositeOperation=n[r]??"source-over"}draw_image(r,n,t,s,e){if(s!==void 0&&e!==void 0)this.ctx.drawImage(r.source,n,t,s,e);else this.ctx.drawImage(r.source,n,t)}draw_image_part(r,n,t,s,e,u,o,p,i){this.ctx.drawImage(r.source,n,t,s,e,u,o,p,i)}render_slider_to_image(r,n,t,s,e,u=1,o=1){let p=1/0,i=1/0,f=-1/0,l=-1/0;for(let M of r){if(M[0]<p)p=M[0];if(M[0]>f)f=M[0];if(M[1]<i)i=M[1];if(M[1]>l)l=M[1]}let h=n+2;p-=h,i-=h,f+=h,l+=h;let c=Math.ceil((f-p)*e),I=Math.ceil((l-i)*e);if(c<=0||I<=0)return null;let T=document.createElement("canvas");T.width=c,T.height=I;let a=T.getContext("2d");if(!a)return null;a.save(),a.scale(e,e),a.translate(-p,-i);let H=()=>{if(a.beginPath(),r.length>0){a.moveTo(r[0][0],r[0][1]);for(let M=1;M<r.length;M++)a.lineTo(r[M][0],r[M][1])}};a.lineCap="round",a.lineJoin="round",a.globalAlpha=o,a.strokeStyle=t,a.lineWidth=n*2,H(),a.stroke();let D=n*0.872;if(u<1)a.globalCompositeOperation="destination-out",a.globalAlpha=1,a.lineWidth=D*2,H(),a.stroke(),a.globalCompositeOperation="source-over";return a.globalAlpha=u,a.strokeStyle=s,a.lineWidth=D*2,H(),a.stroke(),a.restore(),{source:T,width:c,height:I,min_x:p,min_y:i}}apply_canvas_size(r,n,t){r.width=n*this._dpr,r.height=t*this._dpr,r.style.width=`${n}px`,r.style.height=`${t}px`}configure_context(){this.ctx.scale(this._dpr,this._dpr),this.ctx.imageSmoothingEnabled=!0,this.ctx.imageSmoothingQuality="high"}reset_transform(){if(this.ctx.resetTransform)this.ctx.resetTransform();else this.ctx.setTransform(1,0,0,1,0,0)}}var Ir={min:1800,mid:1200,max:450};var hn=(r,n)=>{if(r>5)return n.mid+(n.max-n.mid)*(r-5)/5;if(r<5)return n.mid+(n.mid-n.min)*(r-5)/5;return n.mid},Xr=(r,n)=>{if(Math.sign(r-n.mid)===Math.sign(n.max-n.mid))return(r-n.mid)/(n.max-n.mid)*5+5;return(r-n.mid)/(n.mid-n.min)*5+5},_=(r)=>hn(r,Ir),Er=(r)=>400*Math.min(1,r/450),cn=(r)=>{return(1-0.7*((r-5)/5))/2},zr=(r)=>cn(r)*64;var Tr={name:"Hard Rock",acronym:"HR",apply_to_difficulty(r){r.cs=Math.min(r.cs*1.3,10),r.ar=Math.min(r.ar*1.4,10),r.od=Math.min(r.od*1.4,10),r.hp=Math.min(r.hp*1.4,10)}};var Hr={name:"Easy",acronym:"EZ",apply_to_difficulty(r){r.cs*=0.5,r.ar*=0.5,r.od*=0.5,r.hp*=0.5}};var mn={name:"Double Time",acronym:"DT",get_rate_multiplier:()=>1.5},ln={name:"Nightcore",acronym:"NC",get_rate_multiplier:()=>1.5};var an={name:"Half Time",acronym:"HT",get_rate_multiplier:()=>0.75};var In=0.4,Tn=0.3,Hn={name:"Hidden",acronym:"HD"};var Dr=(r)=>{if(r&(m.DoubleTime|m.Nightcore))return 1.5;if(r&m.HalfTime)return 0.75;return 1},Dn=(r,n)=>{if(n&m.Easy)Hr.apply_to_difficulty(r);if(n&m.HardRock)Tr.apply_to_difficulty(r)},Rn=(r,n)=>{if(n===1)return r;let t=_(r)/n;return Xr(t,Ir)},Wr=(r,n,t,s,e)=>{let u={cs:r,ar:n,od:t,hp:s};Dn(u,e);let o=Dr(e);return u.ar=Rn(u.ar,o),u};var Yr=(r,n)=>[r[0]+n[0],r[1]+n[1]],w=(r,n)=>[r[0]-n[0],r[1]-n[1]],Kr=(r,n)=>[r[0]*n,r[1]*n];var F=(r)=>Math.sqrt(r[0]*r[0]+r[1]*r[1]);var q=(r,n,t)=>r+(n-r)*t,O=(r,n,t)=>[q(r[0],n[0],t),q(r[1],n[1],t)],R=(r,n,t)=>Math.min(t,Math.max(n,r));var Rr={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"]},Mr={combo_colors:["0,185,0","7, 105, 227","224, 4, 38","227, 171, 2"],circle_border_width:0.12,hit_circle_opacity:0.95,enable_approach_circle:!0,approach_circle_width:0.1,approach_circle_opacity:0.5,approach_circle_use_combo_color:!0,enable_hitburst:!0,hitburst_duration:180,hitburst_scale:1.2,hitburst_glow_enabled:!1,hitburst_glow_use_combo_color:!0,hitburst_glow_opacity:0.3,slider_body_opacity:0.9,slider_border_opacity:1,slider_tick_opacity:0.75,slider_tick_size:0.1,slider_render_scale:2,follow_circle_factor:1.5,follow_circle_width:4,follow_circle_opacity:0.5,follow_circle_color:"#d3d3d3ff",follow_circle_use_combo_color:!1,slider_ball_color:"#ffffff",slider_ball_opacity:1,enable_slider_ball:!0,follow_point_width:2,follow_point_shape:"line",follow_point_mode:"full",follow_point_length:12,follow_point_line_gap:0,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:Rr,default_font:'"Trebuchet MS", Verdana, Arial, sans-serif',hit_animation_duration:240,hit_animation_scale:1.2,enable_hit_animations:!0,enable_follow_circle_animations:!0},j=(r)=>{if(!r)return{...Mr};return{...Mr,...r,mania_lane_colors:r.mania_lane_colors?{...Rr,...r.mania_lane_colors}:Rr}},$=(r,n,t=1)=>{return`rgba(${r.combo_colors[n%r.combo_colors.length]},${t})`},X=(r,n,t)=>{let s=r.mania_lane_colors[n]??r.mania_lane_colors[4];return s[t%s.length]??"#ffffff"};var y={None:(r)=>r,Out:(r)=>1-Math.pow(1-r,2),In:(r)=>r*r,InOut:(r)=>r<0.5?2*r*r:1-Math.pow(-2*r+2,2)/2,OutCubic:(r)=>1-Math.pow(1-r,3),InCubic:(r)=>r*r*r,OutQuad:(r)=>1-Math.pow(1-r,2),InQuad:(r)=>r*r,OutQuint:(r)=>1-Math.pow(1-r,5),InQuint:(r)=>r*r*r*r*r,OutElastic:(r)=>{let n=2*Math.PI/3;return r===0?0:r===1?1:Math.pow(2,-10*r)*Math.sin((r*10-0.75)*n)+1}};class Vr{transforms=[];add(r,n,t,s,e,u=y.None){return this.transforms.push({property:r,start_value:n,end_value:t,start_time:s,end_time:s+e,easing:u}),this}then(){return this}get_value(r,n,t){let s=t;for(let e of this.transforms){if(e.property!==r)continue;if(n<e.start_time)continue;if(n>=e.end_time)s=e.end_value;else{let u=(n-e.start_time)/(e.end_time-e.start_time),o=e.easing(u);s=e.start_value+(e.end_value-e.start_value)*o}}return s}clear(){this.transforms=[]}}class Z{backend;skin;hit_object;config;alpha=1;scale=1;rotation=0;x=0;y=0;armed_state=0;transforms=new Vr;life_time_start=0;life_time_end=0;constructor(r,n){this.hit_object=r,this.config=n,this.backend=n.backend,this.skin=n.skin;let t=r.data;this.x=t.pos[0],this.y=t.pos[1],this.apply_defaults()}apply_defaults(){let{hit_object:r,config:n}=this,t=r.time-n.preempt;this.life_time_start=t,this.life_time_end=r.end_time+800}is_alive(r){return r>=this.life_time_start&&r<=this.life_time_end}update(r){this.alpha=this.transforms.get_value("alpha",r,1),this.scale=this.transforms.get_value("scale",r,1),this.rotation=this.transforms.get_value("rotation",r,0),this.update_state(r)}update_state(r){if(this.armed_state===0&&r>=this.hit_object.time)this.armed_state=1,this.on_hit(r)}on_hit(r){}render_body_pass(r){}render_head_pass(r){}get start_time(){return this.hit_object.time}get end_time(){return this.hit_object.end_time}get combo_number(){return this.hit_object.combo_number??0}get combo_count(){return this.hit_object.combo_count??1}get position(){return[this.x,this.y]}}class E{state={circle_alpha:0,circle_scale:1,number_alpha:1};update(r,n,t){let s=n-t.preempt;if(r<s){this.reset_pre_hit_state();return}if(r<n){this.update_pre_hit(r,s,n,t);return}let e=k(n,s,n,t);this.update_post_hit(r,n,t,e)}render(r,n,t,s,e,u){let{circle_alpha:o,circle_scale:p,number_alpha:i}=this.state;if(o<=0.01)return;let f=s*p;if(o>0.01){let l=s*n.circle_border_width,h=s*(1-n.circle_border_width/2)*p;if(r.set_alpha(o*n.hit_circle_opacity),r.draw_circle(t[0],t[1],h,e,"rgba(255,255,255,1)",l),i>0.01){let c=s*0.7*p;r.set_alpha(i*n.hit_circle_opacity);let I=n.default_font??'"Trebuchet MS", Verdana, Arial, sans-serif',T=`600 ${c}px ${I}`;r.draw_text(String(u),t[0],t[1],T,"rgba(255,255,255,1)","center","middle")}r.set_alpha(1)}r.set_alpha(1)}get circle_alpha(){return this.state.circle_alpha}reset_pre_hit_state(){this.state.circle_alpha=0,this.state.circle_scale=1,this.state.number_alpha=1}update_pre_hit(r,n,t,s){let e=k(r,n,t,s);this.state.circle_alpha=e,this.state.circle_scale=1,this.state.number_alpha=e}update_post_hit(r,n,t,s){let e=r-n,{skin:u}=t,o=Math.max(90,u.hit_animation_duration*0.75),p=R(e/o,0,1),i=V(t.mods,m.Hidden)?R(s,0,1):R(Math.max(s,0.25),0,1);this.state.circle_alpha=i*(1-y.OutQuad(p));let f=Math.max(90,o*0.85),l=R(e/f,0,1);this.state.circle_scale=q(1,u.hit_animation_scale,y.OutCubic(l)),this.state.number_alpha=this.state.circle_alpha}}var k=(r,n,t,s)=>{let u=R((r-n)/s.fade_in,0,1);if(V(s.mods,m.Hidden)){let o=t-s.preempt+s.fade_in,p=s.preempt*0.3;if(r>o){let i=R((r-o)/p,0,1);u*=1-i}}return u};class yr{state={alpha:0,scale:1};update(r,n,t){if(!t.skin.enable_hitburst){this.state.alpha=0,this.state.scale=1;return}if(r<n){this.state.alpha=0,this.state.scale=1;return}let s=n-t.preempt,e=k(n,s,n,t),u=V(t.mods,m.Hidden)?R(e,0,1):R(Math.max(e,0.25),0,1),o=r-n,p=Math.max(70,t.skin.hitburst_duration),i=R(o/p,0,1),f=1-y.OutQuint(i);this.state.alpha=V(t.mods,m.Hidden)?f*u:f,this.state.scale=q(1,t.skin.hitburst_scale,y.OutCubic(i))}render(r,n,t,s,e){if(!n.enable_hitburst)return;if(this.state.alpha<=0.01)return;if(r.set_alpha(this.state.alpha),r.draw_circle(t[0],t[1],s*this.state.scale,"rgba(255,255,255,1)","transparent",0),n.hitburst_glow_enabled){r.save(),r.set_blend_mode("lighter"),r.set_alpha(this.state.alpha*n.hitburst_glow_opacity);let u=n.hitburst_glow_use_combo_color?e:n.hitburst_glow_color??e;r.draw_circle(t[0],t[1],s*this.state.scale*1.08,u,"transparent",0),r.restore()}}}class rr extends Z{visual=new E;hitburst=new yr;constructor(r,n){super(r,n)}update(r){super.update(r),this.visual.update(r,this.hit_object.time,this.config),this.hitburst.update(r,this.hit_object.time,this.config)}render(r){let{backend:n,skin:t,config:s}=this,{radius:e}=s,u=this.position,o=$(t,this.combo_number,1);this.visual.render(n,t,u,e,o,this.combo_count),this.hitburst.render(n,t,u,e,o)}}var nr=(r)=>{let{start_time:n,span_duration:t,span_count:s,length:e,tick_distance:u,min_distance_from_end:o,get_position_at_progress:p}=r,i=[],f=[];if(e<=0||t<=0||s<=0)return{ticks:i,repeats:f};let h=Math.min(1e5,e),c=Math.min(Math.max(u,0),h),I=Math.max(0,Math.min(o,h));for(let T=0;T<s;T++){let a=n+T*t,H=T%2===1;if(c>0){let D=Mn(T,a,t,H,h,c,I,p);if(H)D.reverse();i.push(...D)}if(T<s-1){let D=(T+1)%2;f.push({pos:p(D),time:a+t,repeat_index:T,path_progress:D})}}return i.sort((T,a)=>T.time-a.time),{ticks:i,repeats:f}},Mn=(r,n,t,s,e,u,o,p)=>{let i=[];for(let f=u;f<=e;f+=u){if(f>=e-o)break;let l=f/e,h=s?1-l:l;i.push({pos:p(l),time:n+h*t,span_index:r,path_progress:l})}return i};var br=240,Br=1.3,Pr=35,Vn=250,yn=300,z=150,bn=z*4;class A extends Z{slider_data;position_path;render_path;path_length;span_duration;body_alpha=0;head_visual=new E;ball_alpha=0;ball_position;follow_alpha=0;follow_scale=1;ticks=[];repeats=[];tick_distance;min_distance_from_end;cached_texture=null;cached_scale=1;tick_entries=[];tick_entries_by_start=[];constructor(r,n,t,s,e,u){super(r,n);this.slider_data=r.data;let o=Math.max(1,n.radius*0.05);this.position_path=t,this.render_path=this.resample_path(t,o),this.span_duration=s,this.tick_distance=e,this.min_distance_from_end=u;let p=this.calculate_path_length();this.path_length=this.slider_data.distance>0?this.slider_data.distance:p,this.ball_position=this.slider_data.pos,this.build_nested_objects(),this.life_time_end=r.end_time+br}build_nested_objects(){let{slider_data:r,path_length:n,span_duration:t,hit_object:s}=this,e=Math.max(1,r.repetitions),u=1e5,o=Math.min(1e5,r.distance>0?r.distance:n),p=R(this.tick_distance,0,o);if(o<=0||t<=0){this.ticks=[],this.repeats=[];return}let i=nr({start_time:s.time,span_duration:t,span_count:e,length:o,tick_distance:p,min_distance_from_end:this.min_distance_from_end,get_position_at_progress:(f)=>this.get_position_at_progress(f)});this.ticks=i.ticks,this.repeats=i.repeats,this.build_tick_entries()}calculate_path_length(){let r=0;for(let n=1;n<this.position_path.length;n++)r+=F(w(this.position_path[n],this.position_path[n-1]));return r}resample_path(r,n){if(r.length<2)return r.slice();let t=[r[0]],s=0,e=[];for(let l=1;l<r.length;l++){let h=F(w(r[l],r[l-1]));e.push(h),s+=h}if(s<=0)return t;let u=n,o=0,p=0;while(u<s&&p<e.length){let l=e[p],h=r[p],c=r[p+1];if(l>0&&o+l>=u){let I=(u-o)/l;t.push(O(h,c,I)),u+=n}else o+=l,p++}let i=r[r.length-1],f=t[t.length-1];if(f[0]!==i[0]||f[1]!==i[1])t.push(i);return t}update(r){super.update(r),this.calculate_ball_position(r),this.calculate_opacities(r),this.head_visual.update(r,this.hit_object.time,this.config)}calculate_ball_position(r){let{hit_object:n,span_duration:t}=this,s=300,e=300,u=2.4;if(r<n.time){this.ball_alpha=0,this.follow_alpha=0,this.follow_scale=1;return}if(r<=n.end_time){let f=r-n.time,l=Math.max(1,this.slider_data.repetitions),h=Math.min(Math.floor(f/t),l-1),c=R((f-h*t)/t,0,1),I=h%2===1?1-c:c;this.ball_position=this.get_position_at_progress(I),this.ball_alpha=1;let T=R(f/300,0,1),a=y.OutQuint(T);this.follow_alpha=a,this.follow_scale=1+1.4*a;return}let o=r-n.end_time,p=R(o/300,0,1),i=y.OutQuint(p);this.ball_alpha=1-i,this.follow_alpha=1-i,this.follow_scale=2.4-1.4*i}get_position_at_progress(r){let n=r*this.path_length;return this.get_position_at_length(n)}get_position_at_length(r){let n=0;for(let t=1;t<this.position_path.length;t++){let s=F(w(this.position_path[t],this.position_path[t-1]));if(n+s>=r){let e=(r-n)/s;return O(this.position_path[t-1],this.position_path[t],e)}n+=s}return this.position_path[this.position_path.length-1]}calculate_opacities(r){let{hit_object:n,config:t}=this,s=n.time-t.preempt,e=n.time;if(V(t.mods,m.Hidden)){let u=e-t.preempt+t.fade_in;if(r<s)this.body_alpha=0;else if(r<u)this.body_alpha=R((r-s)/t.fade_in,0,1);else if(r<=n.end_time){let o=Math.max(1,n.end_time-u);this.body_alpha=1-R((r-u)/o,0,1)}else this.body_alpha=0}else if(r<s)this.body_alpha=0;else if(r<e)this.body_alpha=R((r-s)/t.fade_in,0,1);else if(r<=n.end_time)this.body_alpha=1;else this.body_alpha=1-R((r-n.end_time)/br,0,1)}render(r){if(this.body_alpha<=0&&this.head_visual.circle_alpha<=0&&this.ball_alpha<=0)return;this.render_body(r),this.render_head(),this.render_ball(r)}render_body_pass(r){this.render_body(r)}render_head_pass(r){this.render_head(),this.render_reverse_arrows(r),this.render_ball(r)}render_body(r){if(this.body_alpha<=0.01||this.render_path.length<2)return;let{backend:n}=this;if(this.prepare_body_cache(),this.cached_texture&&this.cached_texture.min_x!==void 0&&this.cached_texture.min_y!==void 0){let t=this.cached_scale;n.set_alpha(this.body_alpha),n.draw_image(this.cached_texture,this.cached_texture.min_x,this.cached_texture.min_y,this.cached_texture.width/t,this.cached_texture.height/t),n.set_alpha(1)}this.render_ticks(r)}prepare_body_cache(){if(this.render_path.length<2)return;let{backend:r,skin:n,config:t}=this,{radius:s}=t,e=(t.scale??1)*(n.slider_render_scale||1);if(!this.cached_texture||this.cached_scale!==e){let u=$(n,this.combo_number,1),o=n.slider_border_color??"rgba(255,255,255,1)",p=e;this.cached_texture=r.render_slider_to_image(this.render_path,s,o,u,p,n.slider_body_opacity,n.slider_border_opacity),this.cached_scale=e}}render_ticks(r){if(this.tick_entries_by_start.length===0)return;let{backend:n,config:t,hit_object:s}=this,{radius:e}=t,u=e*0.12,o=s.time-t.preempt,p=V(t.mods,m.Hidden);for(let i of this.tick_entries_by_start){let f=i.tick,l=r-i.appear_time;if(l<0)continue;if(i.visible_end<r)continue;let h=R(l/z,0,1);if(p&&i.preempt>0){let H=Math.min(i.preempt-z,1000);if(H>0){let D=f.time-H;if(r>=D){let M=R((r-D)/H,0,1);h*=1-M}}}else if(r>f.time){let H=R((r-f.time)/z,0,1);h*=1-H}h*=this.body_alpha;let c=R(l/bn,0,1),T=0.5+0.5*this.ease_out_elastic_half(c),a=u*T;if(h>0.01)n.set_alpha(h),n.draw_circle(f.pos[0],f.pos[1],a,"rgba(255,255,255,0.8)","transparent",0)}n.set_alpha(1)}build_tick_entries(){let{hit_object:r,config:n}=this,t=r.time-n.preempt,s=V(n.mods,m.Hidden);this.tick_entries=this.ticks.map((e)=>{let u=r.time+e.span_index*this.span_duration,o=n.preempt,p=e.span_index>0?200:o*0.66,i=(e.time-u)/2+p,f=e.time-i,l=s?e.time:e.time+z;return{tick:e,appear_time:f,visible_end:l,preempt:i}}),this.tick_entries_by_start=[...this.tick_entries].sort((e,u)=>e.appear_time-u.appear_time)}ease_out_elastic_half(r){if(r<=0)return 0;if(r>=1)return 1;let n=0.3;return Math.pow(2,-10*r)*Math.sin((r-n/4)*(2*Math.PI)/n)+1}render_reverse_arrows(r){if(this.repeats.length===0)return;let{backend:n,config:t,hit_object:s,span_duration:e}=this,{radius:u}=t,o=u*0.6;for(let p of this.repeats){let i=t.preempt;if(p.repeat_index>0)i=e*2;else i+=s.time-(s.time-t.preempt);let f=p.time-i,l=p.repeat_index%2===0;if(r<f||r>p.time+br)continue;let h=this.body_alpha*0.9;if(p.repeat_index===0){let D=R((r-f)/150,0,1);h*=y.OutQuint(D)}else if(r<f)h=0;if(r>p.time){let D=Math.min(300,e);h*=1-R((r-p.time)/D,0,1)}if(h<=0.01)continue;let c=this.position_path,I;if(l){let D=c.length-1;I=c[0];for(let M=D;M>=0;M--)if(Math.abs(c[M][0]-p.pos[0])>0.01||Math.abs(c[M][1]-p.pos[1])>0.01){I=c[M];break}}else{I=c[c.length-1];for(let D=0;D<c.length;D++)if(Math.abs(c[D][0]-p.pos[0])>0.01||Math.abs(c[D][1]-p.pos[1])>0.01){I=c[D];break}}let T=Math.atan2(I[1]-p.pos[1],I[0]-p.pos[0]),a=1;if(r<p.time){let D=s.time-t.preempt,M=(r-D)%yn;if(M<Pr)a=1+(Br-1)*y.Out(M/Pr);else{let b=(M-Pr)/Vn;a=Br-(Br-1)*y.Out(R(b,0,1))}}else{let D=Math.min(300,e),M=R((r-p.time)/D,0,1);a=1+0.5*y.Out(M)}let H=o*a;n.save(),n.set_alpha(h),n.translate(p.pos[0],p.pos[1]),n.rotate(T),n.begin_path(),n.move_to(H*0.8,0),n.line_to(-H*0.4,-H*0.5),n.line_to(-H*0.4,H*0.5),n.close_path(),n.fill_path("rgba(255,255,255,0.9)"),n.restore()}}render_head(){if(this.head_visual.circle_alpha<=0.01)return;let{backend:r,skin:n,config:t}=this,{radius:s}=t,e=this.slider_data.pos,u=$(n,this.combo_number,1);this.head_visual.render(r,n,e,s,u,this.combo_count)}render_ball(r){if(this.ball_alpha<=0.01&&this.follow_alpha<=0.01)return;let{backend:n,skin:t,config:s}=this,{radius:e}=s,u=this.ball_position,o=$(t,this.combo_number,0.9);if(this.follow_alpha>0.01){let p=e*this.follow_scale;n.set_alpha(this.follow_alpha*t.follow_circle_opacity),n.begin_path(),n.arc_to(u[0],u[1],p,0,Math.PI*2),n.stroke_path(t.follow_circle_color,t.follow_circle_width)}if(t.enable_slider_ball&&this.ball_alpha>0.01)n.set_alpha(this.ball_alpha*t.slider_ball_opacity),n.draw_circle(u[0],u[1],e*0.85,o,"rgba(255,255,255,0.9)",e*0.1);n.set_alpha(1)}}class wr{skin;mods;preempt;fade_in;radius;points=[];lines=[];constructor(r,n,t,s,e){this.skin=r,this.mods=n,this.preempt=t,this.fade_in=s,this.radius=e}update_settings(r,n,t,s){this.mods=r,this.preempt=n,this.fade_in=t,this.radius=s}build(r){this.points=[],this.lines=[];let n=32,t=Math.max(450,this.preempt*0.9);for(let s=0;s<r.length-1;s++){let e=r[s],u=r[s+1];if(Q(e)||Q(u))continue;if(e.combo_number!==u.combo_number)continue;let o=e.end_pos,p=u.data.pos,i=p[0]-o[0],f=p[1]-o[1],l=Math.sqrt(i*i+f*f);if(l<n*1.5)continue;let h=e.end_time,c=u.time-h;if(c<=0)continue;let I=l>0?1/l:0,T=[i*I,f*I],a=h-t,H=u.time-t,D=h+(H-h)*0.5,M=u.time;if(V(this.mods,m.Hidden))D=h+(H-h)*0.3,M=h+(u.time-h)*0.65;this.lines.push({start_pos:o,end_pos:p,dir:T,start_time:h,end_time:u.time,appear_time:a,grow_end_time:H,shrink_start_time:D,shrink_end_time:M});for(let b=n*1.5;b<l-n;b+=n){let P=b/l,B=e.end_time+P*c,N=Math.max(e.end_time,B-t);if(V(this.mods,m.Hidden))B=Math.min(B,h+c*0.65);let K=[o[0]+(P-0.1)*i,o[1]+(P-0.1)*f],G=[o[0]+P*i,o[1]+P*f];this.points.push({start_pos:K,end_pos:G,dir:T,fade_in_time:N,fade_out_time:B})}}}render(r,n,t){let s=this.skin.follow_point_shape,e=this.skin.follow_point_mode??"segments",u=this.skin.follow_point_length||this.radius*0.6,o=R(this.skin.follow_point_line_gap??0,0,0.9),p=Math.max(this.fade_in*0.15,50),i=0.2;if(e==="full")for(let f of this.lines){if(r<f.appear_time||r>f.shrink_end_time)continue;let l=0,h=f.start_pos[0],c=f.start_pos[1],I=f.end_pos[0],T=f.end_pos[1],a=Math.hypot(I-h,T-c),H=this.get_alpha_gate(r,f.start_time,f.end_time,t);if(H<=0.01)continue;let D=this.radius*1.05,M=Math.min(D,a*0.22);if(h+=f.dir[0]*M,c+=f.dir[1]*M,I-=f.dir[0]*M,T-=f.dir[1]*M,r<f.grow_end_time){let b=Math.max(1,f.grow_end_time-f.appear_time),P=R((r-f.appear_time)/b,0,1),B=y.OutQuint(P);l=B,I=h+(I-h)*B,T=c+(T-c)*B}else if(r<f.shrink_start_time)l=1;else{let b=Math.max(1,f.shrink_end_time-f.shrink_start_time),P=R((r-f.shrink_start_time)/b,0,1),B=y.InQuint(P);l=1,h=h+(I-h)*B,c=c+(T-c)*B}if(l<=0)continue;if(n.set_alpha(l*0.2*H),s==="line")if(o>0){let b=Math.hypot(I-h,T-c),P=f.dir[0],B=f.dir[1],N=b*o/2,K=(h+I)/2,G=(c+T)/2,sn=K-P*N,en=G-B*N,un=K+P*N,on=G+B*N;n.draw_line(h,c,sn,en,"rgba(255,255,255,1)",this.skin.follow_point_width,"round","round"),n.draw_line(un,on,I,T,"rgba(255,255,255,1)",this.skin.follow_point_width,"round","round")}else n.draw_line(h,c,I,T,"rgba(255,255,255,1)",this.skin.follow_point_width,"round","round");else{let b=this.radius*0.12,P=(f.start_pos[0]+f.end_pos[0])/2,B=(f.start_pos[1]+f.end_pos[1])/2;n.draw_circle(P,B,b,"rgba(255,255,255,1)","transparent",0)}}else for(let f of this.points){if(r<f.fade_in_time||r>f.fade_out_time+p)continue;let l=0,h=1,c=f.end_pos;if(r<f.fade_in_time+p){let T=R((r-f.fade_in_time)/p,0,1),a=y.OutCubic(T);l=a,h=1.5-0.5*a,c=O(f.start_pos,f.end_pos,a)}else if(r<=f.fade_out_time)l=1,h=1,c=f.end_pos;else{let T=R((r-f.fade_out_time)/p,0,1),a=y.OutCubic(T);l=1-a,h=1,c=O(f.start_pos,f.end_pos,1-a)}if(l<=0)continue;let I=this.get_alpha_gate(r,f.fade_in_time+this.preempt,f.fade_out_time,t);if(I<=0.01)continue;if(n.set_alpha(l*0.2*I),s==="line"){let a=u*h/2,H=f.dir[0],D=f.dir[1],M=c[0]-H*a,b=c[1]-D*a,P=c[0]+H*a,B=c[1]+D*a;n.draw_line(M,b,P,B,"rgba(255,255,255,1)",this.skin.follow_point_width,"round","round")}else{let T=this.radius*0.12*h;n.draw_circle(c[0],c[1],T,"rgba(255,255,255,1)","transparent",0)}}n.set_alpha(1)}get_alpha_gate(r,n,t,s){let e=s(r,n),u=s(r,t);return R(Math.min(e,u)/0.7,0,1)}}var Sr=(r,n=0.08)=>{if(r.length<2)return[...r];let t=[];return Fr(r,t,n),t},Fr=(r,n,t)=>{if(Bn(r,t)){if(n.length===0)n.push(r[0]);n.push(r[r.length-1]);return}let s=[],e=[];wn(r,s,e),Fr(s,n,t),Fr(e,n,t)},Bn=(r,n)=>{if(r.length<=2)return!0;let t=r[0],s=r[r.length-1];for(let e=1;e<r.length-1;e++)if(Pn(r[e],t,s)>n)return!1;return!0},Pn=(r,n,t)=>{let s=w(t,n),e=s[0]*s[0]+s[1]*s[1];if(e===0)return F(w(r,n));let u=Math.max(0,Math.min(1,((r[0]-n[0])*s[0]+(r[1]-n[1])*s[1])/e)),o=[n[0]+u*s[0],n[1]+u*s[1]];return F(w(r,o))},wn=(r,n,t)=>{let s=r.length,e=[r];for(let u=1;u<s;u++){e[u]=[];for(let o=0;o<s-u;o++)e[u][o]=O(e[u-1][o],e[u-1][o+1],0.5)}for(let u=0;u<s;u++)n.push(e[u][0]),t.push(e[s-1-u][u])},Cr=(r,n,t)=>{let s=w(n,r),e=F(s);if(e===0)return[r];let u=[s[0]/e,s[1]/e],o=Yr(r,Kr(u,t));return[r,o]},Gr=(r,n)=>{if(r.length!==3)return Sr(r);let[t,s,e]=r,u=Fn(t,s,e);if(!u)return Cr(t,e,n);let o=F(w(t,u)),p=Math.atan2(t[1]-u[1],t[0]-u[0]),i=Math.atan2(e[1]-u[1],e[0]-u[0]),l=(s[0]-t[0])*(e[1]-t[1])-(s[1]-t[1])*(e[0]-t[0])>0,h=i-p;if(l&&h<0)h+=2*Math.PI;if(!l&&h>0)h-=2*Math.PI;let c=Math.abs(h)*o,I=2;if(o*2>0.1){let a=Math.abs(h),H=2*Math.acos(1-0.1/o);if(I=Math.max(2,Math.ceil(a/H)),I>=1000)I=1000}let T=[];for(let a=0;a<=I;a++){let H=a/I,D=p+h*H;T.push([u[0]+o*Math.cos(D),u[1]+o*Math.sin(D)])}return T},Fn=(r,n,t)=>{let s=2*(r[0]*(n[1]-t[1])+n[0]*(t[1]-r[1])+t[0]*(r[1]-n[1]));if(Math.abs(s)<0.001)return null;let e=((r[0]*r[0]+r[1]*r[1])*(n[1]-t[1])+(n[0]*n[0]+n[1]*n[1])*(t[1]-r[1])+(t[0]*t[0]+t[1]*t[1])*(r[1]-n[1]))/s,u=((r[0]*r[0]+r[1]*r[1])*(t[0]-n[0])+(n[0]*n[0]+n[1]*n[1])*(r[0]-t[0])+(t[0]*t[0]+t[1]*t[1])*(n[0]-r[0]))/s;return[e,u]},gr=(r)=>{if(r.length<2)return[...r];let n=[];for(let t=0;t<r.length-1;t++){let s=r[Math.max(0,t-1)],e=r[t],u=r[t+1],o=r[Math.min(r.length-1,t+2)],p=F(w(u,e)),i=Math.max(8,Math.ceil(p/3));for(let f=0;f<=i;f++){let l=f/i;n.push(Sn(s,e,u,o,l))}}return n},Sn=(r,n,t,s,e)=>{let u=e*e,o=u*e;return[0.5*(2*n[0]+(-r[0]+t[0])*e+(2*r[0]-5*n[0]+4*t[0]-s[0])*u+(-r[0]+3*n[0]-3*t[0]+s[0])*o),0.5*(2*n[1]+(-r[1]+t[1])*e+(2*r[1]-5*n[1]+4*t[1]-s[1])*u+(-r[1]+3*n[1]-3*t[1]+s[1])*o)]};var xr=(r)=>{let n;if(r.path_type==="L")n=Cr(r.pos,r.control_points[0],r.distance);else{let t=[r.pos,...r.control_points];switch(r.path_type){case"P":n=Gr(t,r.distance);break;case"C":n=gr(t);break;default:n=Cn(t);break}}return On(n,r.distance)},_r=(r)=>{if(!r.computed_path||r.computed_path.length===0)return r.pos;return r.repetitions%2===0?r.pos:r.computed_path[r.computed_path.length-1]},Cn=(r)=>{let n=[],t=[r[0]];for(let e=1;e<r.length;e++){let[u,o]=[r[e-1],r[e]];if(u[0]===o[0]&&u[1]===o[1]){if(t.length>1)n.push(t);t=[o]}else t.push(o)}if(t.length>1)n.push(t);let s=[];for(let e of n)s.push(...Sr(e));return s},On=(r,n)=>{if(r.length<2)return r;let t=[r[0]],s=0,e=null,u=!1;for(let o=1;o<r.length;o++){let p=F(w(r[o],r[o-1])),i=w(r[o],r[o-1]);if(p>0)e=[i[0]/p,i[1]/p];if(p===0)continue;if(s+p>=n){let f=n-s;t.push(O(r[o-1],r[o],f/p)),s=n,u=!0;break}s+=p,t.push(r[o])}if(!u&&s<n&&e){let o=n-s,p=t[t.length-1];t.push([p[0]+e[0]*o,p[1]+e[1]*o])}return t};var tr=(r,n,t)=>{if(r<=0)return 0;let s=n.Difficulty.SliderMultiplier;return r*t.base_beat_length/(100*s*t.sv_multiplier)},sr=(r,n)=>{let t=n.sv_multiplier||1,s=r.Difficulty.SliderMultiplier,e=r.Difficulty.SliderTickRate,u=100*s*t,o=r.version<8?1/t:1,p=u/e*o,i=u/n.base_beat_length;return{tick_distance:p,min_distance_from_end:i*10}};class W{points;index=0;last_time=Number.NEGATIVE_INFINITY;base_beat_length=600;sv_multiplier=1;constructor(r){if(this.points=r,r.length>0&&r[0].uninherited===1&&r[0].beatLength>0)this.base_beat_length=r[0].beatLength}reset(){this.index=0,this.last_time=Number.NEGATIVE_INFINITY,this.base_beat_length=600,this.sv_multiplier=1}get_state_at(r){if(this.points.length===0)return{base_beat_length:600,sv_multiplier:1};if(r<this.last_time)this.reset();for(let n=this.index;n<this.points.length;n++){let t=this.points[n];if(t.time>r)break;if(t.uninherited===1&&t.beatLength>0)this.base_beat_length=t.beatLength,this.sv_multiplier=1;else if(t.uninherited===0&&t.beatLength<0){let s=-100/t.beatLength;if(s>0)this.sv_multiplier=s}this.index=n}return this.last_time=r,this.sv_multiplier=R(this.sv_multiplier,0.1,10),{base_beat_length:this.base_beat_length,sv_multiplier:this.sv_multiplier}}}var er=(r)=>{if(r.length===0)return r;return r.sort((n,t)=>{if(n.time!==t.time)return n.time-t.time;if(n.uninherited===t.uninherited)return 0;return n.uninherited>t.uninherited?-1:1})};var ur=(r)=>{let n=[];for(let t of r.HitObjects){let s={...t,end_time:t.endTime||t.time,end_pos:[t.x,t.y],combo_number:0,combo_count:0,data:{pos:[t.x,t.y]}};if(t.type&S.Slider){let e={pos:[t.x,t.y],path_type:t.curveType||"L",control_points:(t.curvePoints||[]).map((u)=>[u.x,u.y]),repetitions:t.slides||1,distance:t.length||0};s.data=e}else if(t.type&S.Spinner){let e=t.endTime||t.time;s.data={end_time:e},s.end_time=e,s.end_pos=[256,192]}else if(t.type&S.Hold){let e=t.endTime||t.time;s.data={pos:[t.x,t.y],end_time:e},s.end_time=e}n.push(s)}return n};var Or=(r)=>384-r;class or extends U{radius=32;preempt=1200;fade_in=600;timing_points=[];timing_resolver=null;drawables=[];drawable_config;follow_point_renderer;constructor(r,n,t=0,s=v){super(r,n,t,s);this.follow_point_renderer=new wr(n,t,this.preempt,this.fade_in,this.radius)}initialize(r){this.beatmap=r,this.objects=ur(r).sort((s,e)=>s.time-e.time),this.timing_points=er([...r.TimingPoints]),this.timing_resolver=new W(this.timing_points);let n=r.Difficulty.ApproachRate>=0?r.Difficulty.ApproachRate:r.Difficulty.OverallDifficulty,t=Wr(r.Difficulty.CircleSize,n,0,0,this.mods);if(this.radius=zr(t.cs),this.preempt=_(t.ar),this.fade_in=Er(this.preempt),V(this.mods,m.Hidden))this.fade_in=this.preempt*0.4;this.follow_point_renderer.update_settings(this.mods,this.preempt,this.fade_in,this.radius),this.preprocess_objects(),this.follow_point_renderer.build(this.objects),this.create_drawables()}set_mods(r){if(this.mods=r,this.beatmap)this.initialize(this.beatmap)}preprocess_objects(){let r=0,n=1;if(this.timing_resolver)this.timing_resolver.reset();for(let t of this.objects){if(Nr(t))r=(r+1)%this.skin.combo_colors.length,n=1;else n++;if(t.combo_number=r,t.combo_count=n,mr(t)){let s=t.data;if(V(this.mods,m.HardRock))s.pos=[s.pos[0],Or(s.pos[1])],s.control_points=s.control_points.map((o)=>[o[0],Or(o[1])]);s.computed_path=xr(s);let e=this.timing_resolver?.get_state_at(t.time)??{base_beat_length:600,sv_multiplier:1},u=tr(s.distance,this.beatmap,e);s.duration=u,t.end_time=t.time+u*s.repetitions,t.end_pos=_r(s)}else if(Q(t))t.end_pos=[256,192];else{let s=t.data;if(V(this.mods,m.HardRock))s.pos=[s.pos[0],Or(s.pos[1])];t.end_pos=s.pos}}}create_drawables(){this.drawables=[];let r=this.config.use_high_dpi?window.devicePixelRatio||1:1;if(this.drawable_config={backend:this.backend,skin:this.skin,preempt:this.preempt,fade_in:this.fade_in,radius:this.radius,scale:this.config.scale*r,mods:this.mods},this.timing_resolver)this.timing_resolver.reset();for(let n of this.objects)if(dr(n))this.drawables.push(new rr(n,this.drawable_config));else if(mr(n)){let t=n.data,s=t.computed_path||[],e=t.duration||0,u=this.timing_resolver?.get_state_at(n.time)??{base_beat_length:600,sv_multiplier:1},{tick_distance:o,min_distance_from_end:p}=sr(this.beatmap,u);this.drawables.push(new A(n,this.drawable_config,s,e,o,p))}}render(r){let{backend:n,config:t}=this;this.render_background(),n.save(),n.translate(t.offset_x,t.offset_y),n.scale(t.scale,t.scale),this.render_playfield(),this.render_grid();let s=[];for(let e=this.drawables.length-1;e>=0;e--){let u=this.drawables[e];if(u.is_alive(r))s.push(u)}this.follow_point_renderer.render(r,n,(e,u)=>this.get_circle_alpha(e,u));for(let e of this.objects)if(Q(e)){let u=e.time-this.preempt;if(r>=u&&r<=e.end_time+200)this.draw_spinner(e,r)}for(let e of s)e.update(r);for(let e of s)if(e instanceof A)e.render_body_pass(r);for(let e of s)if(e instanceof A)e.render_head_pass(r);else e.render(r);if(!V(this.mods,m.Hidden)&&this.skin.enable_approach_circle){for(let e of s)if(r<=e.start_time)this.draw_approach_circle(e,r)}n.restore()}precompute(){for(let r of this.drawables)if(r instanceof A)r.prepare_body_cache()}draw_approach_circle(r,n){let t=r.position,s=r.start_time-this.preempt,e=Math.min(this.fade_in*2,this.preempt),o=R((n-s)/e,0,1)*this.skin.approach_circle_opacity,i=4-3*R((n-s)/this.preempt,0,1),f=$(this.skin,r.combo_number,1);this.backend.save(),this.backend.set_alpha(o),this.backend.draw_circle(t[0],t[1],this.radius*i,"transparent",f,this.radius*this.skin.approach_circle_width),this.backend.restore()}get_circle_alpha(r,n){let t=n-this.preempt;if(r<t)return 0;let s=R((r-t)/this.fade_in,0,1);if(V(this.mods,m.Hidden)){let e=n-this.preempt+this.fade_in,u=this.preempt*0.3;if(r>e){let o=R((r-e)/u,0,1);s*=1-o}}return s}draw_spinner(r,n){let t=r.time-this.preempt,s=R((n-t)/this.fade_in,0,1);if(n>r.end_time)s=1-y.OutCubic(R((n-r.end_time)/200,0,1));if(s<=0)return;let e=256,u=192,o=r.end_time-r.time,p=R((n-r.time)/o,0,1);this.backend.set_alpha(s);let i=this.skin.spinner_size*(1-p);if(i>5)this.backend.begin_path(),this.backend.arc_to(e,u,i,0,Math.PI*2),this.backend.stroke_path("rgba(255,255,255,0.6)",4);this.backend.draw_circle(e,u,this.skin.spinner_size,"rgba(0,0,0,0.2)"),this.backend.draw_circle(e,u,12,"white")}}var jr=11485,kr=20;class pr extends U{key_count=4;scroll_time=jr/kr;hd_coverage=0.25;fi_coverage=0.6;gradient_ratio=0.2;constructor(r,n,t=0,s=v){super(r,n,t,s);this.update_scroll_time()}initialize(r){this.beatmap=r,this.objects=ur(r),this.key_count=Math.floor(r.Difficulty.CircleSize)}set_mods(r){this.mods=r,this.update_scroll_time()}update_scroll_time(){let r=Dr(this.mods);this.scroll_time=jr/(kr*r)}time_to_y(r){let n=this.skin.mania_hit_position,t=r/this.scroll_time;return n-t*n}render(r){let{backend:n,config:t,skin:s,key_count:e}=this;this.render_background();let u=e*s.mania_lane_width,o=Math.floor((lr-u)/2),p=s.mania_hit_position;n.save(),n.translate(t.offset_x,t.offset_y),n.scale(t.scale,t.scale),this.render_playfield(u,ar,o),this.draw_lane_keys(r,o),this.draw_judgment_line(o),n.save(),n.begin_path(),n.rect(o,0,u,p),n.clip(),n.set_alpha(0.7),n.draw_rect(o,0,u,p,"#000000"),n.set_alpha(1);for(let i of this.objects){if(i.end_time<r)continue;if(Ar(i))this.draw_hold_note(i,r,o);else this.draw_note(i,r,o)}if(V(this.mods,m.Hidden)||V(this.mods,m.FadeIn)){let i=V(this.mods,m.Hidden)?this.hd_coverage:this.fi_coverage,f=p*i,l=p*this.gradient_ratio;if(V(this.mods,m.Hidden)){let h=p-f,c=l/f,I=n.create_linear_gradient(o,h,o,p,[{offset:0,color:"rgba(0,0,0,0)"},{offset:c*0.4,color:"rgba(0,0,0,0.3)"},{offset:c*0.7,color:"rgba(0,0,0,0.75)"},{offset:c*0.9,color:"rgba(0,0,0,0.95)"},{offset:c,color:"rgba(0,0,0,1)"},{offset:1,color:"rgba(0,0,0,1)"}]);n.draw_rect_gradient(o,h,u,f,I)}else{let h=(f-l)/f,c=n.create_linear_gradient(o,0,o,f,[{offset:0,color:"rgba(0,0,0,1)"},{offset:h,color:"rgba(0,0,0,1)"},{offset:h+(1-h)*0.1,color:"rgba(0,0,0,0.95)"},{offset:h+(1-h)*0.4,color:"rgba(0,0,0,0.75)"},{offset:h+(1-h)*0.7,color:"rgba(0,0,0,0.3)"},{offset:1,color:"rgba(0,0,0,0)"}]);n.draw_rect_gradient(o,0,u,f,c)}}n.restore(),n.restore()}get_lane(r){let n=r.data.pos,t=Math.floor(n[0]*this.key_count/512);if(V(this.mods,m.Mirror))t=this.key_count-1-t;return t}draw_note(r,n,t){let{backend:s,skin:e,key_count:u}=this,o=this.get_lane(r),p=e.mania_lane_width,i=e.mania_note_height,f=e.mania_lane_spacing,l=r.time-n,h=this.time_to_y(l);if(h<-i-64)return;let c=t+o*p,I=X(e,u,o);s.set_alpha(1),s.draw_rect(c+f,h-i,p-2*f,i,I)}draw_hold_note(r,n,t){let{backend:s,skin:e,key_count:u}=this,o=r.data,p=this.get_lane(r),i=e.mania_lane_width,f=e.mania_note_height,l=e.mania_lane_spacing,h=r.time-n,c=o.end_time-n,I=this.time_to_y(h),T=this.time_to_y(c),a=t+p*i,H=X(e,u,p);if(T<-64&&I<-64)return;let D=T,b=(h<0?e.mania_hit_position:I)-D;if(b>0)s.set_alpha(0.9),s.draw_rect(a+l,D,i-2*l,b,H);if(h>=0)s.set_alpha(1),s.draw_rect(a+l,I-f,i-2*l,f,H);s.set_alpha(1)}draw_judgment_line(r){let{backend:n,skin:t,key_count:s}=this,e=t.mania_lane_width,u=t.mania_hit_position;n.draw_rect(r,u-1,e*s,2,"#ffffff")}draw_lane_keys(r,n){let{backend:t,skin:s,key_count:e}=this,{mania_lane_width:u,mania_hit_position:o,mania_lane_spacing:p,mania_note_height:i}=s,f=i+5,l=new Set,h=50;for(let c of this.objects)if(r>=c.time-50&&r<=c.end_time+50)l.add(this.get_lane(c));for(let c=0;c<e;c++){let I=l.has(c),T=n+c*u,a=X(s,e,c);if(t.set_alpha(0.3),t.draw_rect(T+p,o,u-2*p,f,a),I)t.set_alpha(1),t.draw_rect(T+p,o,u-2*p,f,"#ff6666")}t.set_alpha(1)}}class Y{audio_context;gain_node;constructor(r){this.audio_context=r,this.gain_node=this.audio_context.createGain(),this.gain_node.connect(this.audio_context.destination)}set_volume(r){this.gain_node.gain.value=R(r,0,1)}dispose_audio_node(){this.gain_node.disconnect()}}class fr extends Y{audio_source=null;audio_buffer=null;start_time=0;pause_time=0;speed=1;_is_playing=!1;_duration=0;_is_loaded=!1;constructor(r){super(r)}get is_playing(){return this._is_playing}get is_loaded(){return this._is_loaded}get duration(){return this._duration}get speed_multiplier(){return this.speed}get current_time(){if(!this._is_playing)return this.pause_time;return(this.audio_context.currentTime-this.start_time)*this.speed*1000}async load(r,n=0){this.stop();try{this.audio_buffer=await this.audio_context.decodeAudioData(r.slice(0)),this._duration=this.audio_buffer.duration*1000,this.speed=L(n),this._is_loaded=!0,this.pause_time=0}catch(t){throw console.error("Failed to decode audio data",t),t}}play(r){if(!this.audio_buffer){console.warn("[AudioController] Cannot play: not loaded");return}this.stop_source();let n=r!==void 0?r/1000:this.pause_time/1000,t=this.audio_buffer.duration,s=Math.max(0,Math.min(n,t));if(s>=t){this.pause_time=t*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-s/this.speed,this.audio_source.start(0,s),this._is_playing=!0}pause(){if(!this._is_playing)return;this.pause_time=this.current_time,this.stop_source(),this._is_playing=!1}seek(r){let n=Math.max(0,Math.min(r,this._duration));if(this._is_playing)this.stop_source(),this._is_playing=!1,this.pause_time=n,this.play();else this.pause_time=n}stop(){this.pause(),this.pause_time=0}get_host_time(r){return this.start_time+r/1000/this.speed}stop_source(){if(this.audio_source){try{this.audio_source.onended=null,this.audio_source.stop(),this.audio_source.disconnect()}catch(r){console.error("[AudioController]",r)}this.audio_source=null}}set_speed(r){if(this._is_playing){let n=this.current_time;this.speed=r,this.start_time=this.audio_context.currentTime-n/1000/r}else this.speed=r;if(this.audio_source)this.audio_source.playbackRate.value=r}dispose(){this.stop(),this.audio_buffer=null,this._is_loaded=!1,this.dispose_audio_node()}}class ir{video=null;object_url=null;_offset=0;get element(){return this.video}get offset(){return this._offset}async load(r,n=0){this.dispose(),this._offset=n,this.video=document.createElement("video"),this.video.muted=!0,this.video.loop=!1,this.video.playsInline=!0,this.object_url=URL.createObjectURL(r),this.video.src=this.object_url,await new Promise((t,s)=>{if(!this.video)return s(Error("No video element"));this.video.onloadeddata=()=>t(),this.video.onerror=()=>s(Error("Failed to load video"))})}sync(r){if(!this.video)return;let n=(r-this._offset)/1000;if(n<0){if(!this.video.paused)this.video.pause();return}if(Math.abs(this.video.currentTime-n)>0.1)this.video.currentTime=n}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(r){if(!this.video)return;let n=Math.max(0,(r-this._offset)/1000);this.video.currentTime=n}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 d extends Y{static default_samples=new Map;static default_loads=new Map;custom_samples=new Map;constructor(r){super(r)}async load_samples(r){this.custom_samples.clear(),await this.load_into_cache(r,this.custom_samples,!1)}async load_samples_from_files(r){this.custom_samples.clear(),await this.load_files_into_cache(r,this.custom_samples)}async load_default_samples(r){await this.load_into_cache(r,d.default_samples,!0)}clear(){this.custom_samples.clear()}play(r,n,t,s,e=100,u,o=0){let p=this.get_set_name(r),i=this.get_set_name(n);if(u){let f=u.toLowerCase().replace(/\.(wav|mp3|ogg)$/,"");if(this.play_buffer(f,e,o))return}if(this.play_sound(p,"hitnormal",s,e,o),t&g.Whistle)this.play_sound(i,"hitwhistle",s,e,o);if(t&g.Finish)this.play_sound(i,"hitfinish",s,e,o);if(t&g.Clap)this.play_sound(i,"hitclap",s,e,o)}play_sample(r,n,t,s=100,e=0){let u=this.get_set_name(r);this.play_sound(u,n,t,s,e)}play_sound(r,n,t,s,e){let u=!1;if(t>1)u=this.play_buffer(`${r}-${n}${t}`,s,e);if(!u)this.play_buffer(`${r}-${n}`,s,e)}play_buffer(r,n,t){let s=this.custom_samples.get(r)??d.default_samples.get(r);if(!s)return!1;let e=this.audio_context.createBufferSource();e.buffer=s;let u=this.audio_context.createGain();return u.gain.value=n/100,e.connect(u),u.connect(this.gain_node),e.start(t),!0}get_set_name(r){switch(r){case 3:return"drum";case 2:return"soft";default:return"normal"}}get_sample_key_from_url(r){let t=r.split("?")[0].split("#")[0].split("/").pop();if(!t)return null;if(!t.endsWith(".wav")&&!t.endsWith(".mp3")&&!t.endsWith(".ogg"))return null;return t.toLowerCase().replace(/\.(wav|mp3|ogg)$/,"")}async load_into_cache(r,n,t){if(r.length==0)return;let s=[],e=r.map(async(u)=>{let o=this.get_sample_key_from_url(u);if(!o){s.push(u);return}if(n.has(o))return;if(!t){await this.load_single_sample(u,o,n,s);return}let p=d.default_loads.get(o);if(p){await p;return}let i=this.load_single_sample(u,o,n,s).finally(()=>{d.default_loads.delete(o)});d.default_loads.set(o,i),await i});if(await Promise.all(e),s.length>0)console.warn(`[HitsoundController] Failed to load ${s.length} hitsounds`)}async load_single_sample(r,n,t,s){try{let e=await fetch(r);if(!e.ok){s.push(r);return}let u=await e.arrayBuffer();if(u.byteLength<128){s.push(r);return}let o=await this.audio_context.decodeAudioData(u.slice(0));t.set(n,o)}catch{s.push(r)}}async load_files_into_cache(r,n){if(r.size==0)return;let t=[],s=[...r.entries()].map(async([e,u])=>{let o=this.get_sample_key_from_url(e);if(!o)return;if(n.has(o))return;if(u.byteLength<128){t.push(e);return}try{let p=await this.audio_context.decodeAudioData(u.slice(0));n.set(o,p)}catch{t.push(e)}});if(await Promise.all(s),t.length>0)console.warn(`[HitsoundController] Failed to load ${t.length} hitsounds`)}dispose(){this.custom_samples.clear(),this.dispose_audio_node()}}class vr{files;audio_filename;background_filename;video_filename;video_offset;constructor(r){this.files=r.files,this.audio_filename=r.audio_filename,this.background_filename=r.background_filename,this.video_filename=r.video_filename,this.video_offset=r.video_offset}resolve(){let r=this.audio_filename?this.find_file(this.audio_filename):void 0,n=this.background_filename?this.find_file(this.background_filename):void 0,t=this.video_filename?this.find_file(this.video_filename):void 0;return{audio:r,background:n?new Blob([n]):void 0,video:t?new Blob([t]):void 0,video_offset:this.video_offset}}find_file(r){if(this.files.has(r))return this.files.get(r);let n=r.toLowerCase();for(let[t,s]of this.files)if(t.toLowerCase()===n)return s;return}}var vn=100,$n=20;class $r{audio;hitsounds;resources=null;timing_points=[];timing_resolver=null;audio_offset=20;next_hit_object_index=0;constructor(r,n){this.audio=r;this.hitsounds=n}set_context(r,n,t,s){this.resources=r,this.timing_points=n,this.timing_resolver=t,this.audio_offset=s,this.next_hit_object_index=0}set_audio_offset(r){this.audio_offset=r}update_hit_index(r){if(!this.resources?.beatmap)return;let n=this.resources.beatmap.HitObjects;if(this.next_hit_object_index>0&&n[this.next_hit_object_index-1].time>r)this.next_hit_object_index=0;while(this.next_hit_object_index<n.length&&n[this.next_hit_object_index].time<r)this.next_hit_object_index++}schedule_hitsounds(r){if(!this.resources?.beatmap||!this.audio.is_playing)return;let n=this.resources.beatmap.HitObjects,t=r+vn;while(this.next_hit_object_index<n.length&&n[this.next_hit_object_index].time<=t){let s=n[this.next_hit_object_index];if(s.time>=r-$n)this.play_hitsound(s);this.next_hit_object_index++}}play_hitsound(r){let n=this.get_timing_point(r.time),t=this.resolve_sample_settings(n,r.hitSample);if((r.type&S.Slider)===0){this.play_node_hitsound(r.time,r.hitSound,t,t.custom_filename);return}let s=this.resources?.beatmap;if(!s)return;let e=this.timing_resolver?.get_state_at(r.time)??{base_beat_length:600,sv_multiplier:1},u=r.length??0,o=tr(u,s,e),p=Math.max(1,r.slides||1);if(o<=0||u<=0){this.play_node_hitsound(r.time,r.hitSound,t,t.custom_filename);return}let i=r.edgeSounds??[],f=r.edgeSets??[];for(let c=0;c<=p;c++){let I=r.time+o*c,T=i.length>0?i[c]??0:c==0?r.hitSound:0,a=f.length>0?f[c]:void 0,H=this.resolve_edge_sets(t,a),D=c==0?t.custom_filename:void 0;this.play_node_hitsound(I,T,{...t,...H},D)}let l=sr(s,e),h=nr({start_time:r.time,span_duration:o,span_count:p,length:u,tick_distance:l.tick_distance,min_distance_from_end:l.min_distance_from_end,get_position_at_progress:()=>[0,0]});for(let c of h.ticks){let I=this.audio.get_host_time(c.time+this.audio_offset);this.hitsounds.play_sample(t.normal_set,"slidertick",t.index,t.volume,I)}}play_node_hitsound(r,n,t,s){let e=this.audio.get_host_time(r+this.audio_offset);this.hitsounds.play(t.normal_set,t.addition_set,n,t.index,t.volume,s,e)}resolve_sample_settings(r,n){let{volume:t,sampleSet:s,sampleSet:e,sampleIndex:u}=r,o=void 0;if(n){if(n.normalSet!==0){if(s=n.normalSet,n.additionSet===0)e=s}if(n.additionSet!==0)e=n.additionSet;if(n.index!==0)u=n.index;if(n.volume!==0)t=n.volume;o=n.filename||void 0}if(s===0)s=1;if(e===0)e=s;return{normal_set:s,addition_set:e,index:u,volume:t,custom_filename:o}}resolve_edge_sets(r,n){let{normal_set:t,addition_set:s}=r;if(n){let{normalSet:e,additionSet:u}=n;if(e!==0)t=e;if(u!==0)s=u;else s=t}if(t===0)t=1;if(s===0)s=t;return{normal_set:t,addition_set:s}}get_timing_point(r){let n=this.timing_points;if(n.length==0)return{time:0,beatLength:600,meter:4,sampleSet:1,sampleIndex:1,volume:100,uninherited:1,effects:0};for(let t=n.length-1;t>=0;t--)if(n[t].time<=r)return n[t];return n[0]}}var dn=[".wav",".mp3",".ogg"],An=/^(normal|soft|drum)-(hitnormal|hitwhistle|hitfinish|hitclap|slidertick|sliderslide|sliderwhistle)\d*$/i,rn=(r,n,t)=>{let s=new Set;for(let o of r.HitObjects){let p=o.hitSample?.filename?.trim();if(p)s.add(p.toLowerCase())}let e=new Map,u=t?.toLowerCase();for(let[o,p]of n){let i=o.toLowerCase();if(!Nn(i))continue;if(u&&i==u)continue;let f=Qn(i),l=f.replace(/\.(wav|mp3|ogg)$/,""),h=An.test(l),c=s.has(f)||s.has(l)||s.has(i);if(h||c)e.set(o,p)}return e},Nn=(r)=>{for(let n of dn)if(r.endsWith(n))return!0;return!1},Qn=(r)=>{let n=r.split("?")[0].split("#")[0];return n.split("/").pop()??n};var Un=0.42,qn=30;class tn{backend;renderer=null;audio_context;audio;hitsounds;video=null;resources=null;animation_frame=null;skin;mods;renderer_config;start_offset;start_mode;custom_start_time;music_volume;hitsound_volume;audio_offset;background_url=null;listeners=new Map;is_loaded_flag=!1;hitsound_scheduler;timing_points=[];timing_resolver=null;resize_observer=null;key_handler=null;options;enable_fps_counter=!1;fps_frame_count=0;fps_last_update=0;current_fps=0;time_smoothing=0.1;smoothed_delta=0;max_frame_delta=100;last_timestamp=0;smooth_time=0;constructor(r){this.options=r,this.backend=r.backend??new x,this.skin=j(r.skin),this.mods=r.mods??0,this.renderer_config={...v,...r.renderer_config},this.calculate_layout(r.canvas.width,r.canvas.height,r.playfield_scale),this.start_mode=r.start_mode??(Number.isFinite(r.start_time)?"custom":"preview"),this.custom_start_time=Number.isFinite(r.start_time)?Math.max(0,r.start_time):null,this.start_offset=0,this.music_volume=r.volume??0.5,this.hitsound_volume=r.hitsound_volume??0.25,this.audio_offset=r.audio_offset??20,this.backend.initialize(r.canvas,this.renderer_config.use_high_dpi);let n=window.AudioContext||window.webkitAudioContext;if(this.audio_context=new n,this.audio=new fr(this.audio_context),this.hitsounds=new d(this.audio_context),this.hitsound_scheduler=new $r(this.audio,this.hitsounds),this.audio.set_volume(this.music_volume),this.hitsounds.set_volume(this.hitsound_volume),r.auto_resize)this.setup_auto_resize();this.enable_fps_counter=r.enable_fps_counter??!1,this.fps_last_update=performance.now();let t=r.time_smoothing;if(Number.isFinite(t))this.time_smoothing=Math.max(0,Math.min(1,t));let s=r.max_frame_delta;if(Number.isFinite(s))this.max_frame_delta=Math.max(10,s)}async load_osz(r,n){try{let s=await new J().load_osz(r,{difficulty:n});return this.resources=s,this.setup()}catch(t){let s=t instanceof Error?t.message:String(t);return this.emit("error","INVALID_BEATMAP",s),C("INVALID_BEATMAP",s)}}async load_files(r,n){try{let t=new J;return this.resources=await t.load_from_files(r,{difficulty:n}),this.setup()}catch(t){let s=t instanceof Error?t.message:String(t);return this.emit("error","INVALID_BEATMAP",s),C("INVALID_BEATMAP",s)}}async load_default_hitsounds(r){if(r.length==0){console.warn("[BeatmapPlayer] No default hitsound URLs were provided");return}try{await this.hitsounds.load_default_samples(r)}catch(n){console.error("[BeatmapPlayer] Failed to load default hitsounds:",n)}}async load_custom_hitsounds(r){if(r.length==0){console.warn("[BeatmapPlayer] No custom hitsound URLs were provided"),this.hitsounds.clear();return}try{await this.hitsounds.load_samples(r)}catch(n){console.error("[BeatmapPlayer] Failed to load custom hitsounds:",n)}}async load_map_custom_hitsounds(){if(!this.resources?.beatmap)return;let r=rn(this.resources.beatmap,this.resources.files,this.resources.audio_filename);if(r.size==0){this.hitsounds.clear();return}try{await this.hitsounds.load_samples_from_files(r)}catch(n){console.error("[BeatmapPlayer] Failed to load map custom hitsounds:",n),this.hitsounds.clear()}}async load_beatmap(r,n,t,s,e){return this.resources={beatmap:r,available_difficulties:[],files:new Map,audio:n,background:t,video:s,video_offset:e},this.setup()}async load_osu_content(r,n){try{await nn();let t=await this.parse_content(r);return this.load_beatmap(t,n)}catch(t){let s=t instanceof Error?t.message:String(t);return this.emit("error","INVALID_BEATMAP",s),C("INVALID_BEATMAP",s)}}async load_beatmap_files(r,n,t,s,e){try{await nn();let u=typeof r==="string",o=r instanceof Uint8Array?r:r instanceof ArrayBuffer?new Uint8Array(r):null,p=await this.parse_content(u?r:o);return this.load_beatmap(p,n,t,s,e)}catch(u){let o=u instanceof Error?u.message:String(u);return this.emit("error","INVALID_BEATMAP",o),C("INVALID_BEATMAP",o)}}async setup(){if(!this.resources)return C("NOT_LOADED","No resources loaded");let{beatmap:r}=this.resources;this.timing_points=er([...r.TimingPoints]),this.timing_resolver=new W(this.timing_points);let n=L(this.mods);this.resolve_assets();let{audio:t,video:s,video_offset:e}=this.resources;if(t)try{await this.audio.load(t,this.mods)}catch(u){let o=u instanceof Error?u.message:String(u);return this.emit("error","AUDIO_DECODE_ERROR",o),C("AUDIO_DECODE_ERROR",o)}if(this.hitsound_scheduler.set_context(this.resources,this.timing_points,this.timing_resolver,this.audio_offset),this.load_map_custom_hitsounds(),s)this.video=new ir,await this.video.load(s,e??0);try{this.renderer=this.create_renderer(r),this.renderer.initialize(r),this.renderer.precompute()}catch(u){let o=u instanceof Error?u.message:String(u);return this.emit("error","UNSUPPORTED_MODE",o),C("UNSUPPORTED_MODE",o)}return this.start_offset=this.resolve_initial_start_offset(),this.hitsound_scheduler.update_hit_index(this.start_offset),this.load_background(),this.is_loaded_flag=!0,this.emit("loaded",r,this.resources),requestAnimationFrame(()=>this.render_frame(this.start_offset)),Jr(this.resources)}async load_background(){if(this.resources)this.resolve_assets();if(!this.resources?.background||!this.renderer)return;try{let r=new Image;if(this.background_url)URL.revokeObjectURL(this.background_url);this.background_url=URL.createObjectURL(this.resources.background),r.src=this.background_url,await r.decode(),this.renderer.set_background({source:r,width:r.width,height:r.height});let n=this.audio.is_playing?this.current_time:this.start_offset;requestAnimationFrame(()=>this.render_frame(n))}catch(r){console.warn("[BeatmapPlayer] Failed to load background",r)}}resolve_assets(){if(!this.resources)return;let r=new vr(this.resources).resolve();if(!this.resources.audio&&r.audio)this.resources.audio=r.audio;if(!this.resources.background&&r.background)this.resources.background=r.background;if(!this.resources.video&&r.video)this.resources.video=r.video;if(!this.resources.video_offset&&r.video_offset)this.resources.video_offset=r.video_offset}create_renderer(r){switch(r.General.Mode){case 0:return new or(this.backend,this.skin,this.mods,this.renderer_config);case 3:return new pr(this.backend,this.skin,this.mods,this.renderer_config);case 1:case 2:default:throw Error(`Unsupported game mode: ${hr[r.General.Mode]??r.General.Mode}`)}}get_last_object_time(){if(!this.resources?.beatmap.HitObjects.length)return 0;let r=this.resources.beatmap.HitObjects,n=0;for(let t of r){let s=t.endTime||t.time;if(s>n)n=s}return n}resolve_preview_start_offset(){if(!this.resources?.beatmap)return 0;let r=this.resources.beatmap.General.PreviewTime;if(r>0)return r;return Math.max(0,this.get_last_object_time()*Un)}resolve_initial_start_offset(){let r=Math.max(0,this.duration);if(this.start_mode=="beginning")return 0;if(this.start_mode=="custom"){if(this.custom_start_time!==null)return Math.max(0,Math.min(this.custom_start_time,r));return Math.max(0,Math.min(this.resolve_preview_start_offset(),r))}return Math.max(0,Math.min(this.resolve_preview_start_offset(),r))}async play(){if(!this.renderer||!this.is_loaded_flag){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(Math.max(0,this.start_offset+this.audio_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=Math.max(0,this.audio.current_time-this.audio_offset),this.audio.pause(),this.video?.pause(),this.stop_render_loop(),this.emit("pause"),this.emit("statechange",!1)}set_mods(r){this.mods=r;let n=L(r);if(this.renderer?.set_mods(r),this.audio.set_speed(n),this.is_loaded_flag)requestAnimationFrame(()=>this.render_frame(this.current_time))}seek(r){this.start_offset=Math.max(0,Math.min(r,this.duration)),this.hitsound_scheduler.update_hit_index(this.start_offset),this.audio.seek(Math.max(0,this.start_offset+this.audio_offset)),this.video?.seek(this.start_offset),this.emit("seek",this.start_offset),this.render_frame(this.start_offset)}async set_difficulty(r){if(!this.resources)return C("NOT_LOADED","No beatmap resources loaded");let n=this.is_playing;this.stop();try{let s=await new J().load_from_files(this.resources.files,{difficulty:r});this.resources=s;let e=await this.setup();if(e.success&&n)this.play();return e}catch(t){let s=t instanceof Error?t.message:String(t);return this.emit("error","INVALID_BEATMAP",s),C("INVALID_BEATMAP",s)}}async parse_content(r){let n=typeof r=="string"?new TextEncoder().encode(r):r;return await Jn(n)}stop(){this.pause(),this.start_offset=0,this.audio.seek(Math.max(0,this.audio_offset)),this.hitsound_scheduler.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.background_url)URL.revokeObjectURL(this.background_url),this.background_url=null;if(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_flag=!1,this.listeners.clear()}get current_time(){return Math.max(0,this.audio.current_time-this.audio_offset)}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_flag}get mode(){if(!this.resources)return"standard";switch(this.resources.beatmap.General.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(r,n,t){if(this.backend.resize(r,n),this.calculate_layout(r,n,t),this.is_loaded_flag)requestAnimationFrame(()=>this.render_frame(this.current_time))}update_config(r){if(this.renderer_config={...this.renderer_config,...r},this.renderer?.update_config(this.renderer_config),this.is_loaded_flag)requestAnimationFrame(()=>this.render_frame(this.current_time))}set_skin(r){if(this.skin=j(r),this.is_loaded_flag&&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 n=this.options.canvas.parentElement;if(n){let t=n.getBoundingClientRect();this.resize(t.width,t.height,this.options.playfield_scale)}}),this.resize_observer.observe(this.options.canvas.parentElement||this.options.canvas)}toggle_pause(){if(!this.is_loaded_flag)return;if(this.is_playing)this.pause();else 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(r,n,t){let u=0.9;if(Number.isFinite(t))u=t;let o=r*u/512,p=n*u/384,i=Math.min(o,p);if(this.renderer_config.scale=i,this.renderer_config.offset_x=Math.floor((r-512*i)/2),this.renderer_config.offset_y=Math.floor((n-384*i)/2),this.renderer)this.renderer.update_config(this.renderer_config)}set_volume(r){this.music_volume=r,this.audio.set_volume(r)}set_hitsound_volume(r){this.hitsound_volume=r,this.hitsounds.set_volume(r)}set_offset(r){if(this.audio_offset=r,this.hitsound_scheduler.set_audio_offset(r),this.is_loaded_flag)this.seek(this.current_time)}on(r,n){if(!this.listeners.has(r))this.listeners.set(r,new Set);this.listeners.get(r).add(n)}off(r,n){this.listeners.get(r)?.delete(n)}emit(r,...n){let t=this.listeners.get(r);if(t)for(let s of t)s(...n)}start_render_loop(){if(this.animation_frame!==null)return;this.last_timestamp=performance.now(),this.smooth_time=this.audio.current_time-this.audio_offset,this.smoothed_delta=0;let r=(n)=>{if(!this.audio.is_playing){this.animation_frame=null;return}let t=Math.max(0,n-this.last_timestamp);this.last_timestamp=n;let s=Math.min(t,this.max_frame_delta);if(this.time_smoothing>0){if(this.smoothed_delta===0)this.smoothed_delta=s;else this.smoothed_delta+=(s-this.smoothed_delta)*this.time_smoothing;s=this.smoothed_delta}this.smooth_time+=s*this.audio.speed_multiplier;let e=this.audio.current_time-this.audio_offset;if(Math.abs(this.smooth_time-e)>qn)this.smooth_time=e;else this.smooth_time+=(e-this.smooth_time)*0.1;let o=this.smooth_time;if(this.hitsound_scheduler.schedule_hitsounds(e),this.render_frame(o),this.video?.sync(o),this.emit("timeupdate",o,this.duration),o>=this.duration){this.emit("ended"),this.stop_render_loop(),this.emit("statechange",!1);return}this.animation_frame=requestAnimationFrame(r)};this.animation_frame=requestAnimationFrame(r)}stop_render_loop(){if(this.animation_frame!==null)cancelAnimationFrame(this.animation_frame),this.animation_frame=null}render_frame(r){if(this.backend.begin_frame?.(),this.backend.clear(),this.renderer?.render(r),this.enable_fps_counter){this.fps_frame_count++;let n=performance.now(),t=n-this.fps_last_update;if(t>=1000)this.current_fps=Math.round(this.fps_frame_count*1000/t),this.fps_frame_count=0,this.fps_last_update=n;let s=`14px ${this.skin.default_font??"monospace"}`;this.backend.draw_text(`${this.current_fps} FPS`,10,20,s,"rgba(255,255,255,0.8)","left","top")}this.backend.end_frame?.()}set_fps_counter(r){this.enable_fps_counter=r}}var Zn=(r)=>{try{return new FontFace(r.family,r.url,{weight:r.weight,style:"normal"})}catch(n){return console.error(n),null}},Ln=async(r)=>{let n=Zn(r);if(!n)return!1;try{await n.load(),document.fonts.add(n)}catch(t){return console.error(t),!1}return!0};export{En as unwrap,xn as toggle_mod,Jr as ok,gn as mods_to_string,Gn as mods_from_string,j as merge_skin,Ln as load_font,Q as is_spinner,mr as is_slider,zn as is_ok,Nr as is_new_combo,Ar as is_hold,Wn as is_err,dr as is_circle,V as has_mod,L as get_speed_multiplier,Dr as get_rate_multiplier,X as get_mania_lane_color,$ as get_combo_color,_n as get_available_mods,Wr as get_adjusted_difficulty,C as err,Rn as apply_rate_to_ar,Dn as apply_mods_to_difficulty,ir as VideoController,or as StandardRenderer,pn as SpeedChangingMods,cr as SampleSet,lr as PLAYFIELD_WIDTH,ar as PLAYFIELD_HEIGHT,J as OszLoader,m as Mods,ln as ModNightcore,Hn as ModHidden,Tr as ModHardRock,an as ModHalfTime,Hr as ModEasy,mn as ModDoubleTime,pr as ManiaRenderer,g as HitSoundType,S as HitObjectType,Tn as HD_FADE_OUT_MULTIPLIER,In as HD_FADE_IN_MULTIPLIER,Lr as GridLevel,hr as GameMode,Qr as ErrorCode,Kn as DifficultyChangingMods,Mr as DEFAULT_SKIN,v as DEFAULT_RENDERER_CONFIG,x as CanvasBackend,tn as BeatmapPlayer,U as BaseRenderer,fr as AudioController};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=FE92E800DF3E93F364756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/types/beatmap.ts", "../src/types/result.ts", "../src/types/mods.ts", "../src/parser/osz_loader.ts", "../
|
|
3
|
+
"sources": ["../src/types/beatmap.ts", "../src/types/result.ts", "../src/types/mods.ts", "../src/parser/osz_loader.ts", "../src/player/player.ts", "../src/renderer/base_renderer.ts", "../src/renderer/backend/canvas_backend.ts", "../src/math/difficulty.ts", "../src/mods/hard_rock.ts", "../src/mods/easy.ts", "../src/mods/double_time.ts", "../src/mods/half_time.ts", "../src/mods/hidden.ts", "../src/mods/mods.ts", "../src/math/vector2.ts", "../src/skin/skin_config.ts", "../src/renderer/drawable/transforms.ts", "../src/renderer/drawable/drawable.ts", "../src/renderer/drawable/circle_visual.ts", "../src/renderer/drawable/hit_burst.ts", "../src/renderer/drawable/drawable_hit_circle.ts", "../src/renderer/standard/slider_events.ts", "../src/renderer/drawable/drawable_slider.ts", "../src/renderer/standard/follow_points.ts", "../src/math/curves.ts", "../src/renderer/standard/slider_path.ts", "../src/renderer/standard/slider_math.ts", "../src/renderer/standard/timing_state.ts", "../src/beatmap/timing.ts", "../src/renderer/render_objects.ts", "../src/renderer/standard/standard_renderer.ts", "../src/renderer/mania/mania_renderer.ts", "../src/player/audio_node_controller.ts", "../src/player/audio_controller.ts", "../src/player/video_controller.ts", "../src/player/hitsound_controller.ts", "../src/player/beatmap_assets.ts", "../src/player/player_hitsound_scheduler.ts", "../src/player/hitsound_file_collector.ts", "../src/fonts.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { OsuFileFormat, HitObject, TimingPoint, HitSample, CurvePoint } from \"@rel-packages/osu-beatmap-parser\";\n\n// game modes\nexport enum GameMode {\n Standard = 0,\n Taiko = 1,\n Catch = 2,\n Mania = 3\n}\n\nexport type IBeatmap = OsuFileFormat;\nexport type IHitObject = HitObject;\nexport type ITimingPoint = TimingPoint;\nexport type IHitSample = HitSample;\nexport type ICurvePoint = CurvePoint;\n\nexport interface IBeatmapInfo {\n filename: string;\n title: string;\n artist: string;\n version: string;\n mode: GameMode;\n ar: number;\n cs: number;\n od: number;\n hp: number;\n}\n\nexport enum SampleSet {\n Auto = 0,\n Normal = 1,\n Soft = 2,\n Drum = 3\n}\n\nexport const HitObjectType = {\n Circle: 1 << 0,\n Slider: 1 << 1,\n NewCombo: 1 << 2,\n Spinner: 1 << 3,\n ComboSkip: (1 << 4) | (1 << 5) | (1 << 6),\n Hold: 1 << 7\n} as const;\n\nexport const HitSoundType = {\n Normal: 1 << 0,\n Whistle: 1 << 1,\n Finish: 1 << 2,\n Clap: 1 << 3\n} as const;\n\nexport const is_circle = (obj: IHitObject): boolean => (obj.type & HitObjectType.Circle) !== 0;\nexport const is_slider = (obj: IHitObject): boolean => (obj.type & HitObjectType.Slider) !== 0;\nexport const is_spinner = (obj: IHitObject): boolean => (obj.type & HitObjectType.Spinner) !== 0;\nexport const is_hold = (obj: IHitObject): boolean => (obj.type & HitObjectType.Hold) !== 0;\nexport const is_new_combo = (obj: IHitObject): boolean => (obj.type & HitObjectType.NewCombo) !== 0;\n",
|
|
6
6
|
"export enum ErrorCode {\n NoOsuFiles = \"NO_OSU_FILES\",\n DifficultyNotFound = \"DIFFICULTY_NOT_FOUND\",\n InvalidBeatmap = \"INVALID_BEATMAP\",\n UnsupportedMode = \"UNSUPPORTED_MODE\",\n\n // audio errors\n AudioNotLoaded = \"AUDIO_NOT_LOADED\",\n AudioDecodeError = \"AUDIO_DECODE_ERROR\",\n\n // general\n NotLoaded = \"NOT_LOADED\",\n Unknown = \"UNKNOWN\"\n}\n\nexport type Result<T> = { success: true; data: T } | { success: false; code: ErrorCode; reason: string };\n\nexport const ok = <T>(data: T): Result<T> => ({ success: true, data });\n\nexport const err = <T>(code: ErrorCode, reason: string): Result<T> => ({\n success: false,\n code,\n reason\n});\n\nexport const unwrap = <T>(result: Result<T>): T => {\n if (result.success) return result.data;\n throw new Error(`[${result.code}] ${result.reason}`);\n};\n\nexport const is_ok = <T>(result: Result<T>): result is { success: true; data: T } => {\n return result.success;\n};\n\nexport const is_err = <T>(result: Result<T>): result is { success: false; code: ErrorCode; reason: string } => {\n return !result.success;\n};\n",
|
|
7
7
|
"export const Mods = {\n None: 0,\n NoFail: 1 << 0,\n Easy: 1 << 1,\n TouchDevice: 1 << 2,\n Hidden: 1 << 3,\n HardRock: 1 << 4,\n SuddenDeath: 1 << 5,\n DoubleTime: 1 << 6,\n Relax: 1 << 7,\n HalfTime: 1 << 8,\n Nightcore: 1 << 9,\n Flashlight: 1 << 10,\n Autoplay: 1 << 11,\n SpunOut: 1 << 12,\n Autopilot: 1 << 13,\n Perfect: 1 << 14,\n FadeIn: 1 << 23,\n Mirror: 1 << 30\n} as const;\n\nexport const SpeedChangingMods = Mods.DoubleTime | Mods.HalfTime | Mods.Nightcore;\nexport const DifficultyChangingMods = Mods.HardRock | Mods.Easy | SpeedChangingMods;\n\nexport const mods_from_string = (str: string): number => {\n let mask = 0;\n const lower = str.toLowerCase();\n const mod_map: Record<string, number> = {\n nf: Mods.NoFail,\n ez: Mods.Easy,\n td: Mods.TouchDevice,\n hd: Mods.Hidden,\n hr: Mods.HardRock,\n sd: Mods.SuddenDeath,\n dt: Mods.DoubleTime,\n rx: Mods.Relax,\n ht: Mods.HalfTime,\n nc: Mods.Nightcore,\n fl: Mods.Flashlight,\n at: Mods.Autoplay,\n so: Mods.SpunOut,\n ap: Mods.Autopilot,\n pf: Mods.Perfect,\n fi: Mods.FadeIn,\n mr: Mods.Mirror\n };\n\n for (let i = 0; i < lower.length - 1; i += 2) {\n const mod = lower.slice(i, i + 2);\n if (mod_map[mod]) {\n mask |= mod_map[mod];\n }\n }\n\n return mask;\n};\n\nexport const mods_to_string = (mods: number): string => {\n const names: string[] = [];\n\n if (mods & Mods.NoFail) names.push(\"NF\");\n if (mods & Mods.Easy) names.push(\"EZ\");\n if (mods & Mods.Hidden) names.push(\"HD\");\n if (mods & Mods.HardRock) names.push(\"HR\");\n if (mods & Mods.SuddenDeath) names.push(\"SD\");\n if (mods & Mods.DoubleTime) names.push(\"DT\");\n if (mods & Mods.HalfTime) names.push(\"HT\");\n if (mods & Mods.Nightcore) names.push(\"NC\");\n if (mods & Mods.Flashlight) names.push(\"FL\");\n if (mods & Mods.SpunOut) names.push(\"SO\");\n if (mods & Mods.FadeIn) names.push(\"FI\");\n if (mods & Mods.Mirror) names.push(\"MR\");\n\n const idx_dt = names.indexOf(\"DT\");\n const idx_nc = names.indexOf(\"NC\");\n\n if (idx_dt >= 0 && idx_nc >= 0) {\n names.splice(idx_dt, 1);\n }\n\n return names.join(\"\");\n};\n\nexport const get_speed_multiplier = (mods: number): number => {\n if (mods & (Mods.DoubleTime | Mods.Nightcore)) return 1.5;\n if (mods & Mods.HalfTime) return 0.75;\n return 1.0;\n};\n\nconst EXCLUSIVE_MOD_GROUPS = [Mods.HardRock | Mods.Easy, Mods.DoubleTime | Mods.HalfTime | Mods.Nightcore, Mods.Hidden | Mods.FadeIn];\n\nexport const toggle_mod = (current: number, mod: number): number => {\n // turn off\n if (current & mod) {\n return current & ~mod;\n }\n\n // turn on\n let result = current;\n\n for (const group of EXCLUSIVE_MOD_GROUPS) {\n if (mod & group) {\n result &= ~group;\n }\n }\n\n return result | mod;\n};\n\nexport const has_mod = (mods: number, mod: number): boolean => (mods & mod) !== 0;\n\nexport type GameModeType = \"standard\" | \"mania\" | \"taiko\" | \"catch\";\n\nexport interface IModInfo {\n name: string;\n acronym: string;\n value: number;\n}\n\nexport const get_available_mods = (mode: GameModeType): IModInfo[] => {\n const common: IModInfo[] = [\n { name: \"Easy\", acronym: \"EZ\", value: Mods.Easy },\n { name: \"Hidden\", acronym: \"HD\", value: Mods.Hidden },\n { name: \"Double Time\", acronym: \"DT\", value: Mods.DoubleTime },\n { name: \"Half Time\", acronym: \"HT\", value: Mods.HalfTime },\n { name: \"Nightcore\", acronym: \"NC\", value: Mods.Nightcore }\n ];\n\n switch (mode) {\n case \"standard\":\n return [...common, { name: \"Hard Rock\", acronym: \"HR\", value: Mods.HardRock }];\n\n case \"mania\":\n return [...common, { name: \"Hard Rock\", acronym: \"HR\", value: Mods.HardRock }, { name: \"Fade In\", acronym: \"FI\", value: Mods.FadeIn }];\n\n case \"taiko\":\n case \"catch\":\n return [...common, { name: \"Hard Rock\", acronym: \"HR\", value: Mods.HardRock }];\n\n default:\n return common;\n }\n};\n",
|
|
8
8
|
"import JSZip from \"jszip\";\nimport type { IBeatmap } from \"../types/beatmap\";\nimport type { IBeatmapResources } from \"../types/resources\";\nimport { init_wasm, parse as wasm_parse } from \"@rel-packages/osu-beatmap-parser/browser\";\n\nexport interface IOszLoaderOptions {\n // select difficulty by index or version name\n difficulty?: number | string;\n}\n\nexport class OszLoader {\n async load_osz(data: ArrayBuffer, options?: IOszLoaderOptions): Promise<IBeatmapResources> {\n await init_wasm();\n const zip = await JSZip.loadAsync(data);\n const files = new Map<string, ArrayBuffer>();\n\n for (const [name, file] of Object.entries(zip.files)) {\n if (!file.dir) {\n files.set(name, await file.async(\"arraybuffer\"));\n }\n }\n\n return this.load_from_files(files, options);\n }\n\n async load_from_files(files: Map<string, ArrayBuffer | string>, options?: IOszLoaderOptions): Promise<IBeatmapResources> {\n await init_wasm();\n // find all .osu files\n const osu_files = [...files.keys()].filter((f) => f.toLowerCase().endsWith(\".osu\"));\n\n if (osu_files.length === 0) {\n throw new Error(\"No .osu files found in beatmap\");\n }\n\n // parse difficulties\n const available_difficulties = await Promise.all(\n osu_files.map(async (file) => {\n const content = files.get(file)!;\n const data = this.to_bytes(content);\n const beatmap = (await wasm_parse(data)) as IBeatmap;\n return { filename: file, beatmap };\n })\n );\n\n // select difficulty\n const selected_file = this.select_difficulty(osu_files, available_difficulties, options?.difficulty);\n const osu_content = files.get(selected_file)!;\n const osu_bytes = this.to_bytes(osu_content);\n\n // parse full beatmap (async via worker)\n const beatmap = (await wasm_parse(osu_bytes)) as IBeatmap;\n\n const audio_filename = beatmap.General.AudioFilename || null;\n const background_filename = beatmap.Events.background?.filename || null;\n const video_filename = beatmap.Events.video?.filename || null;\n const video_offset = beatmap.Events.video?.startTime ?? 0;\n\n // convert files map to ArrayBuffer only\n const array_buffer_files = new Map<string, ArrayBuffer>();\n for (const [name, content] of files) {\n if (content instanceof ArrayBuffer) {\n array_buffer_files.set(name, content);\n } else {\n array_buffer_files.set(name, new TextEncoder().encode(content).buffer as ArrayBuffer);\n }\n }\n\n // extract audio\n let audio: ArrayBuffer | undefined;\n\n if (audio_filename) {\n audio = this.find_file(array_buffer_files, audio_filename);\n }\n\n // extract background\n let background: Blob | undefined;\n\n if (background_filename) {\n const bg_data = this.find_file(array_buffer_files, background_filename);\n if (bg_data) {\n background = new Blob([bg_data]);\n }\n }\n\n // extract video\n let video: Blob | undefined;\n\n if (video_filename) {\n const video_data = this.find_file(array_buffer_files, video_filename);\n if (video_data) {\n video = new Blob([video_data]);\n }\n }\n\n return {\n beatmap,\n available_difficulties,\n files: array_buffer_files,\n audio,\n background,\n video,\n audio_filename: audio_filename ?? undefined,\n background_filename: background_filename ?? undefined,\n video_filename: video_filename ?? undefined,\n video_offset: video_filename ? video_offset : undefined\n };\n }\n\n async list_difficulties(data: ArrayBuffer): Promise<string[]> {\n const zip = await JSZip.loadAsync(data);\n const osu_files: string[] = [];\n\n for (const name of Object.keys(zip.files)) {\n if (name.toLowerCase().endsWith(\".osu\")) {\n osu_files.push(name);\n }\n }\n\n const difficulties: string[] = [];\n\n for (const file of osu_files) {\n const content = await zip.files[file].async(\"string\");\n const version_match = content.match(/Version:\\s*(.+)/);\n difficulties.push(version_match ? version_match[1].trim() : file);\n }\n\n return difficulties;\n }\n\n private select_difficulty(osu_files: string[], difficulties: { filename: string; beatmap: IBeatmap }[], selector?: number | string): string {\n // no selector: use first file\n if (selector === undefined) {\n return osu_files[0];\n }\n\n // number: select by index\n if (typeof selector === \"number\") {\n if (selector < 0 || selector >= osu_files.length) {\n throw new Error(`Difficulty index ${selector} out of range (0-${osu_files.length - 1})`);\n }\n return osu_files[selector];\n }\n\n // string: search by version name\n const exact_match = difficulties.find((diff) => diff.beatmap.Metadata.Version === selector);\n if (exact_match) {\n return exact_match.filename;\n }\n\n // fallback: partial match against filename or version\n const lower_selector = selector.toLowerCase();\n const partial_match = difficulties.find(\n (diff) => diff.filename.toLowerCase().includes(lower_selector) || diff.beatmap.Metadata.Version.toLowerCase().includes(lower_selector)\n );\n if (partial_match) {\n return partial_match.filename;\n }\n\n throw new Error(`Difficulty \"${selector}\" not found`);\n }\n\n private find_file(files: Map<string, ArrayBuffer>, filename: string): ArrayBuffer | undefined {\n // exact match\n if (files.has(filename)) {\n return files.get(filename);\n }\n\n // case-insensitive search\n const lower = filename.toLowerCase();\n for (const [name, data] of files) {\n if (name.toLowerCase() === lower) {\n return data;\n }\n }\n\n return undefined;\n }\n\n private to_bytes(data: ArrayBuffer | string): Uint8Array {\n if (data instanceof ArrayBuffer) return new Uint8Array(data);\n return new TextEncoder().encode(data);\n }\n}\n",
|
|
9
|
-
"var o=null,n=null,w=0,i=!1,a=new Map,d=new URL(\"./osu-beatmap-parser.js\",import.meta.url).toString(),_=()=>{if(o==null)return;o.onmessage=(r)=>{let e=r.data||{},t=e.id,s=e.ok,c=e.result,p=e.error;if(typeof t!=\"number\")return;let m=a.get(t);if(!m)return;if(a.delete(t),s){m.resolve(c);return}m.reject(Error(p||\"worker request failed\"))},o.onerror=(r)=>{let e=r.message||\"worker crashed\";i=!1;for(let[,t]of a)t.reject(Error(e));a.clear()}},l=(r,e,t=[])=>{if(o==null)return Promise.reject(Error(\"wasm worker not initialized\"));w+=1;let s=w;return new Promise((c,p)=>{a.set(s,{resolve:c,reject:p}),o?.postMessage({id:s,type:r,payload:e},t)})},u=(r)=>{return r.slice().buffer},g=()=>{return o!=null&&i},y=async()=>{if(i)return;if(n)return n;return n=(async()=>{if(typeof Worker>\"u\")throw Error(\"wasm wrapper requires browser Worker support\");o=new Worker(new URL(\"./wasm-worker.js\",import.meta.url),{type:\"module\"}),_(),await l(\"init\",{script_url:d,global_name:\"create_osu_parser\",module_config:{}}),i=!0})(),n.catch((r)=>{throw n=null,o?.terminate(),o=null,i=!1,r})},f=async(r,e)=>{let t=u(r);return await l(\"call\",{method_name:\"get_property\",data:t,args:[e]},[t])},k=async(r,e)=>{let t=u(r);return await l(\"call\",{method_name:\"get_properties\",data:t,args:[e]},[t])},h=async(r,e)=>{let t=u(r);return await l(\"call\",{method_name:\"get_section\",data:t,args:[e]},[t])},v=async(r)=>{let e=u(r);return await l(\"call\",{method_name:\"parse\",data:e,args:[]},[e])},b={init_wasm:y,is_wasm_ready:g,get_property:f,get_properties:k,get_section:h,parse:v},E=b;export{v as parse,g as is_wasm_ready,y as init_wasm,h as get_section,f as get_property,k as get_properties,E as default};\n",
|
|
9
|
+
"import type { IBeatmap, ITimingPoint } from \"../types/beatmap\";\nimport { GameMode } 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 { init_wasm, parse as wasm_parse } from \"@rel-packages/osu-beatmap-parser/browser\";\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\";\nimport { BeatmapAssets } from \"./beatmap_assets\";\nimport { process_timing_points } from \"../beatmap/timing\";\nimport { TimingStateResolver } from \"../renderer/standard/timing_state\";\nimport { PlayerHitsoundScheduler } from \"./player_hitsound_scheduler\";\nimport { collect_map_custom_hitsound_files } from \"./hitsound_file_collector\";\n\nconst PREVIEW_FALLBACK_RATIO = 0.42;\nconst RESYNC_THRESHOLD_MS = 30;\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 type StartMode = \"preview\" | \"beginning\" | \"custom\";\n\nexport interface IPlayerOptions {\n canvas: HTMLCanvasElement;\n skin?: Partial<ISkinConfig>;\n mods?: number;\n start_mode?: StartMode;\n start_time?: number;\n autoplay?: boolean;\n volume?: number;\n hitsound_volume?: number;\n audio_offset?: number;\n backend?: IRenderBackend;\n renderer_config?: Partial<IRendererConfig>;\n playfield_scale?: number;\n auto_resize?: boolean;\n enable_fps_counter?: boolean;\n time_smoothing?: number;\n max_frame_delta?: number;\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 start_mode: StartMode;\n private custom_start_time: number | null;\n private music_volume: number;\n private hitsound_volume: number;\n private audio_offset: number;\n private background_url: string | null = null;\n\n private listeners: Map<PlayerEvent, Set<Function>> = new Map();\n private is_loaded_flag: boolean = false;\n\n private hitsound_scheduler: PlayerHitsoundScheduler;\n private timing_points: ITimingPoint[] = [];\n private timing_resolver: TimingStateResolver | null = null;\n\n private resize_observer: ResizeObserver | null = null;\n private key_handler: ((e: KeyboardEvent) => void) | null = null;\n private options: IPlayerOptions;\n\n // fps tracking\n private enable_fps_counter = false;\n private fps_frame_count = 0;\n private fps_last_update = 0;\n private current_fps = 0;\n private time_smoothing = 0.1;\n private smoothed_delta = 0;\n private max_frame_delta = 100;\n\n private last_timestamp: number = 0;\n private smooth_time: number = 0;\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_mode = options.start_mode ?? (Number.isFinite(options.start_time) ? \"custom\" : \"preview\");\n this.custom_start_time = Number.isFinite(options.start_time) ? Math.max(0, options.start_time as number) : null;\n this.start_offset = 0;\n this.music_volume = options.volume ?? 0.5;\n this.hitsound_volume = options.hitsound_volume ?? 0.25;\n this.audio_offset = options.audio_offset ?? 20;\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 audio_context_class = window.AudioContext || window.webkitAudioContext;\n this.audio_context = new audio_context_class();\n\n this.audio = new AudioController(this.audio_context);\n this.hitsounds = new HitsoundController(this.audio_context);\n this.hitsound_scheduler = new PlayerHitsoundScheduler(this.audio, this.hitsounds);\n\n // set initial volumes\n this.audio.set_volume(this.music_volume);\n this.hitsounds.set_volume(this.hitsound_volume);\n\n if (options.auto_resize) {\n this.setup_auto_resize();\n }\n\n this.enable_fps_counter = options.enable_fps_counter ?? false;\n this.fps_last_update = performance.now();\n\n const time_smoothing = options.time_smoothing;\n if (Number.isFinite(time_smoothing)) {\n this.time_smoothing = Math.max(0, Math.min(1, time_smoothing as number));\n }\n\n const max_frame_delta = options.max_frame_delta;\n if (Number.isFinite(max_frame_delta)) {\n this.max_frame_delta = Math.max(10, max_frame_delta as number);\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 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_default_hitsounds(urls: string[]): Promise<void> {\n if (urls.length == 0) {\n console.warn(\"[BeatmapPlayer] No default hitsound URLs were provided\");\n return;\n }\n\n try {\n await this.hitsounds.load_default_samples(urls);\n } catch (e) {\n console.error(\"[BeatmapPlayer] Failed to load default hitsounds:\", e);\n }\n }\n\n async load_custom_hitsounds(urls: string[]): Promise<void> {\n if (urls.length == 0) {\n console.warn(\"[BeatmapPlayer] No custom hitsound URLs were provided\");\n this.hitsounds.clear();\n return;\n }\n\n try {\n await this.hitsounds.load_samples(urls);\n } catch (e) {\n console.error(\"[BeatmapPlayer] Failed to load custom hitsounds:\", e);\n }\n }\n\n private async load_map_custom_hitsounds(): Promise<void> {\n if (!this.resources?.beatmap) {\n return;\n }\n\n const files = collect_map_custom_hitsound_files(this.resources.beatmap, this.resources.files, this.resources.audio_filename);\n if (files.size == 0) {\n this.hitsounds.clear();\n return;\n }\n\n try {\n await this.hitsounds.load_samples_from_files(files);\n } catch (e) {\n console.error(\"[BeatmapPlayer] Failed to load map custom hitsounds:\", e);\n this.hitsounds.clear();\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 await init_wasm();\n const beatmap = await this.parse_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 async load_beatmap_files(\n osu_content: string | Uint8Array | ArrayBuffer,\n audio: ArrayBuffer,\n background?: Blob,\n video?: Blob,\n video_offset?: number\n ): Promise<Result<IBeatmapResources>> {\n try {\n await init_wasm();\n const is_string = typeof osu_content === \"string\";\n const bytes = osu_content instanceof Uint8Array ? osu_content : osu_content instanceof ArrayBuffer ? new Uint8Array(osu_content) : null;\n const beatmap = await this.parse_content(is_string ? osu_content : (bytes as Uint8Array));\n\n return this.load_beatmap(beatmap, audio, background, video, video_offset);\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 } = this.resources;\n this.timing_points = process_timing_points([...beatmap.TimingPoints]);\n this.timing_resolver = new TimingStateResolver(this.timing_points);\n const speed = get_speed_multiplier(this.mods);\n this.resolve_assets();\n\n const { audio, video, video_offset } = this.resources;\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 this.hitsound_scheduler.set_context(this.resources, this.timing_points, this.timing_resolver, this.audio_offset);\n void this.load_map_custom_hitsounds();\n\n // setup video\n if (video) {\n this.video = new VideoController();\n await this.video.load(video, video_offset ?? 0);\n }\n\n // create renderer based on mode\n try {\n this.renderer = this.create_renderer(beatmap);\n this.renderer.initialize(beatmap);\n this.renderer.precompute();\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 this.start_offset = this.resolve_initial_start_offset();\n\n this.hitsound_scheduler.update_hit_index(this.start_offset);\n void this.load_background();\n\n this.is_loaded_flag = true;\n this.emit(\"loaded\", beatmap, this.resources);\n requestAnimationFrame(() => this.render_frame(this.start_offset));\n\n return ok(this.resources);\n }\n\n async load_background(): Promise<void> {\n if (this.resources) {\n this.resolve_assets();\n }\n if (!this.resources?.background || !this.renderer) {\n return;\n }\n\n try {\n const img = new Image();\n if (this.background_url) {\n URL.revokeObjectURL(this.background_url);\n }\n this.background_url = URL.createObjectURL(this.resources.background);\n img.src = this.background_url;\n await img.decode();\n this.renderer.set_background({\n source: img,\n width: img.width,\n height: img.height\n });\n\n const target_time = this.audio.is_playing ? this.current_time : this.start_offset;\n requestAnimationFrame(() => this.render_frame(target_time));\n } catch (e) {\n console.warn(\"[BeatmapPlayer] Failed to load background\", e);\n }\n }\n\n private resolve_assets(): void {\n if (!this.resources) {\n return;\n }\n\n const assets = new BeatmapAssets(this.resources).resolve();\n if (!this.resources.audio && assets.audio) {\n this.resources.audio = assets.audio;\n }\n if (!this.resources.background && assets.background) {\n this.resources.background = assets.background;\n }\n if (!this.resources.video && assets.video) {\n this.resources.video = assets.video;\n }\n if (!this.resources.video_offset && assets.video_offset) {\n this.resources.video_offset = assets.video_offset;\n }\n }\n\n private create_renderer(beatmap: IBeatmap): BaseRenderer {\n switch (beatmap.General.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.General.Mode] ?? beatmap.General.Mode}`);\n }\n }\n\n private get_last_object_time(): number {\n if (!this.resources?.beatmap.HitObjects.length) {\n return 0;\n }\n const objects = this.resources.beatmap.HitObjects;\n let max_time = 0;\n for (const obj of objects) {\n const end_time = obj.endTime || obj.time;\n if (end_time > max_time) max_time = end_time;\n }\n return max_time;\n }\n\n private resolve_preview_start_offset(): number {\n if (!this.resources?.beatmap) {\n return 0;\n }\n\n const preview = this.resources.beatmap.General.PreviewTime;\n if (preview > 0) {\n return preview;\n }\n\n return Math.max(0, this.get_last_object_time() * PREVIEW_FALLBACK_RATIO);\n }\n\n private resolve_initial_start_offset(): number {\n const max_duration = Math.max(0, this.duration);\n\n if (this.start_mode == \"beginning\") {\n return 0;\n }\n\n if (this.start_mode == \"custom\") {\n if (this.custom_start_time !== null) {\n return Math.max(0, Math.min(this.custom_start_time, max_duration));\n }\n\n return Math.max(0, Math.min(this.resolve_preview_start_offset(), max_duration));\n }\n\n return Math.max(0, Math.min(this.resolve_preview_start_offset(), max_duration));\n }\n\n async play(): Promise<void> {\n if (!this.renderer || !this.is_loaded_flag) {\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(Math.max(0, this.start_offset + this.audio_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) {\n return;\n }\n\n // save current position for resume\n this.start_offset = Math.max(0, this.audio.current_time - this.audio_offset);\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\n if (this.is_loaded_flag) {\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 this.hitsound_scheduler.update_hit_index(this.start_offset);\n\n this.audio.seek(Math.max(0, this.start_offset + this.audio_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 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 async parse_content(content: string | Uint8Array): Promise<IBeatmap> {\n const data = typeof content == \"string\" ? new TextEncoder().encode(content) : content;\n return (await wasm_parse(data)) as IBeatmap;\n }\n\n stop(): void {\n this.pause();\n this.start_offset = 0;\n this.audio.seek(Math.max(0, this.audio_offset));\n this.hitsound_scheduler.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();\n\n if (this.background_url) {\n URL.revokeObjectURL(this.background_url);\n this.background_url = null;\n }\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_flag = false;\n this.listeners.clear();\n }\n\n // getters\n get current_time(): number {\n return Math.max(0, this.audio.current_time - this.audio_offset);\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_flag;\n }\n\n get mode(): string {\n if (!this.resources) {\n return \"standard\";\n }\n switch (this.resources.beatmap.General.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(): { filename: string; beatmap: IBeatmap }[] {\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_flag) {\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_flag) {\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_flag && 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_flag) {\n return;\n }\n if (this.is_playing) {\n this.pause();\n } else {\n this.play();\n }\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 (Number.isFinite(playfield_scale)) {\n fill = playfield_scale as number;\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.music_volume = volume;\n this.audio.set_volume(volume);\n }\n\n set_hitsound_volume(volume: number): void {\n this.hitsound_volume = volume;\n this.hitsounds.set_volume(volume);\n }\n\n set_offset(offset_ms: number): void {\n this.audio_offset = offset_ms;\n this.hitsound_scheduler.set_audio_offset(offset_ms);\n if (this.is_loaded_flag) {\n this.seek(this.current_time);\n }\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) {\n return;\n }\n\n this.last_timestamp = performance.now();\n this.smooth_time = this.audio.current_time - this.audio_offset;\n this.smoothed_delta = 0;\n\n const loop = (timestamp: number) => {\n if (!this.audio.is_playing) {\n this.animation_frame = null;\n return;\n }\n\n // smooth time follows render delta but is nudged toward audio clock to prevent drift\n const raw_delta = Math.max(0, timestamp - this.last_timestamp);\n this.last_timestamp = timestamp;\n\n let delta = Math.min(raw_delta, this.max_frame_delta);\n if (this.time_smoothing > 0) {\n if (this.smoothed_delta === 0) {\n this.smoothed_delta = delta;\n } else {\n this.smoothed_delta += (delta - this.smoothed_delta) * this.time_smoothing;\n }\n delta = this.smoothed_delta;\n }\n\n // advance smooth time by delta * speed\n this.smooth_time += delta * this.audio.speed_multiplier;\n\n // resync with audio clock if deviation is too large (> 30ms)\n // or periodically to prevent drift\n const actual_audio_time = this.audio.current_time - this.audio_offset;\n const deviation = Math.abs(this.smooth_time - actual_audio_time);\n\n if (deviation > RESYNC_THRESHOLD_MS) {\n this.smooth_time = actual_audio_time;\n } else {\n // slowly nudge smooth_time towards actual_audio_time to prevent drift\n this.smooth_time += (actual_audio_time - this.smooth_time) * 0.1;\n }\n\n const time = this.smooth_time;\n\n this.hitsound_scheduler.schedule_hitsounds(actual_audio_time);\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 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.begin_frame?.();\n this.backend.clear();\n this.renderer?.render(time);\n\n // fps tracking\n if (this.enable_fps_counter) {\n this.fps_frame_count++;\n const now = performance.now();\n const delta = now - this.fps_last_update;\n\n if (delta >= 1000) {\n this.current_fps = Math.round((this.fps_frame_count * 1000) / delta);\n this.fps_frame_count = 0;\n this.fps_last_update = now;\n }\n\n const fps_font = `14px ${this.skin.default_font ?? \"monospace\"}`;\n this.backend.draw_text(`${this.current_fps} FPS`, 10, 20, fps_font, \"rgba(255,255,255,0.8)\", \"left\", \"top\");\n }\n\n this.backend.end_frame?.();\n }\n\n set_fps_counter(enabled: boolean): void {\n this.enable_fps_counter = enabled;\n }\n}\n",
|
|
10
10
|
"import type { IRenderBackend, RenderImage } from \"./backend/render_backend\";\nimport type { IBeatmap } from \"../types/beatmap\";\nimport type { RenderHitObject } from \"./render_types\";\nimport type { ISkinConfig } from \"../skin/skin_config\";\n\n// osu! playfield is 512x384 in osu! pixels\nexport const PLAYFIELD_WIDTH = 512;\nexport const PLAYFIELD_HEIGHT = 384;\n\n// grid levels (osu! editor)\nexport enum GridLevel {\n None = 0,\n Large = 32,\n Medium = 16,\n Small = 8,\n Tiny = 4\n}\n\nexport interface IRendererConfig {\n // playfield offset from canvas origin\n offset_x: number;\n offset_y: number;\n\n // scale factor for playfield\n scale: number;\n\n // show playfield border\n show_playfield: boolean;\n playfield_color: string;\n playfield_opacity: number;\n\n // grid overlay\n grid_level: GridLevel;\n grid_color: string;\n grid_opacity: number;\n\n // high DPI rendering (device pixel ratio)\n use_high_dpi: boolean;\n}\n\nexport const DEFAULT_RENDERER_CONFIG: IRendererConfig = {\n offset_x: 64,\n offset_y: 48,\n scale: 1,\n\n show_playfield: true,\n playfield_color: \"#ffffff\",\n playfield_opacity: 0.1,\n\n grid_level: GridLevel.None,\n grid_color: \"#ffffff\",\n grid_opacity: 0.35,\n\n use_high_dpi: true\n};\n\nexport abstract class BaseRenderer {\n protected backend: IRenderBackend;\n protected skin: ISkinConfig;\n protected config: IRendererConfig;\n protected mods: number;\n\n protected beatmap!: IBeatmap;\n protected objects: RenderHitObject[] = [];\n protected background_image: RenderImage | null = null;\n\n constructor(backend: IRenderBackend, skin: ISkinConfig, mods: number = 0, config: IRendererConfig = DEFAULT_RENDERER_CONFIG) {\n this.backend = backend;\n this.skin = skin;\n this.mods = mods;\n this.config = { ...DEFAULT_RENDERER_CONFIG, ...config };\n }\n\n set_background(image: RenderImage | null): void {\n this.background_image = image;\n }\n\n update_config(config: Partial<IRendererConfig>): void {\n this.config = { ...this.config, ...config };\n }\n\n abstract initialize(beatmap: IBeatmap): void;\n abstract render(time: number): void;\n\n // update mods and recalculate difficulty attributes\n abstract set_mods(mods: number): void;\n\n precompute(): void {}\n\n dispose(): void {\n this.objects = [];\n }\n\n // render playfield border\n protected render_playfield(custom_w?: number, custom_h?: number, custom_x?: number, custom_y?: number): void {\n if (!this.config.show_playfield) return;\n\n const { backend, config } = this;\n const w = custom_w ?? PLAYFIELD_WIDTH;\n const h = custom_h ?? PLAYFIELD_HEIGHT;\n const x = custom_x ?? 0;\n const y = custom_y ?? 0;\n\n backend.save();\n backend.set_alpha(config.playfield_opacity);\n\n // draw border box\n backend.begin_path();\n backend.move_to(x, y);\n backend.line_to(x + w, y);\n backend.line_to(x + w, y + h);\n backend.line_to(x, y + h);\n backend.line_to(x, y);\n backend.stroke_path(config.playfield_color, 2);\n\n backend.restore();\n }\n\n // render grid overlay\n protected render_grid(): void {\n if (this.config.grid_level === GridLevel.None) return;\n\n const { backend, config } = this;\n const spacing = config.grid_level as number;\n\n backend.save();\n backend.set_alpha(config.grid_opacity);\n\n // vertical lines\n for (let x = 0; x <= PLAYFIELD_WIDTH; x += spacing) {\n backend.begin_path();\n backend.move_to(x, 0);\n backend.line_to(x, PLAYFIELD_HEIGHT);\n backend.stroke_path(config.grid_color, x % (spacing * 4) === 0 ? 1 : 0.5);\n }\n\n // horizontal lines\n for (let y = 0; y <= PLAYFIELD_HEIGHT; y += spacing) {\n backend.begin_path();\n backend.move_to(0, y);\n backend.line_to(PLAYFIELD_WIDTH, y);\n backend.stroke_path(config.grid_color, y % (spacing * 4) === 0 ? 1 : 0.5);\n }\n\n backend.restore();\n }\n\n protected render_background(): void {\n if (!this.background_image) return;\n\n const { backend } = this;\n backend.save();\n backend.set_alpha(0.3); // dim background\n\n const canvas_w = backend.width;\n const canvas_h = backend.height;\n const { width: img_w, height: img_h } = this.background_image;\n\n if (img_w > 0 && img_h > 0) {\n // maintain aspect ratio but fill the entire area\n const scale = Math.max(canvas_w / img_w, canvas_h / img_h);\n const draw_w = img_w * scale;\n const draw_h = img_h * scale;\n const x = (canvas_w - draw_w) / 2;\n const y = (canvas_h - draw_h) / 2;\n\n backend.draw_image(this.background_image, x, y, draw_w, draw_h);\n } else {\n backend.draw_image(this.background_image, 0, 0, canvas_w, canvas_h);\n }\n\n backend.restore();\n }\n\n protected get_visible_objects(time: number, preempt: number, fade_out: number): RenderHitObject[] {\n const visible: RenderHitObject[] = [];\n\n for (const obj of this.objects) {\n const appear_time = obj.time - preempt;\n const disappear_time = obj.end_time + fade_out;\n\n if (time >= appear_time && time <= disappear_time) {\n visible.push(obj);\n }\n }\n\n return visible;\n }\n}\n",
|
|
11
11
|
"import type { IRenderBackend, GradientStop, RenderImage, LineCap, LineJoin, TextAlign, TextBaseline, CompositeOperation } from \"./render_backend\";\n\nexport class CanvasBackend implements IRenderBackend {\n private ctx!: CanvasRenderingContext2D;\n private _width: number = 0;\n private _height: number = 0;\n private _dpr: number = 1;\n private is_initialized = false;\n\n get width(): number {\n return this._width;\n }\n get height(): number {\n return this._height;\n }\n\n initialize(container: HTMLCanvasElement, use_high_dpi: boolean = true): void {\n this._dpr = use_high_dpi ? window.devicePixelRatio || 1 : 1;\n\n const display_width = container.clientWidth || container.width;\n const display_height = container.clientHeight || container.height;\n\n this.apply_canvas_size(container, display_width, display_height);\n\n const ctx = container.getContext(\"2d\", {\n alpha: true,\n desynchronized: true\n });\n\n if (!ctx) {\n throw new Error(\"Failed to get 2D context\");\n }\n\n this.ctx = ctx;\n this._width = display_width;\n this._height = display_height;\n\n this.configure_context();\n this.is_initialized = true;\n }\n\n clear(): void {\n if (!this.is_initialized) {\n return;\n }\n this.ctx.save();\n this.ctx.setTransform(this._dpr, 0, 0, this._dpr, 0, 0);\n this.ctx.clearRect(0, 0, this._width, this._height);\n this.ctx.restore();\n }\n\n dispose(): void {\n // no-op for canvas\n }\n\n begin_frame(): void {}\n\n end_frame(): void {}\n\n resize(width: number, height: number): void {\n if (!this.is_initialized) {\n return;\n }\n this._width = width;\n this._height = height;\n this._dpr = window.devicePixelRatio || 1;\n\n const canvas = this.ctx.canvas;\n this.apply_canvas_size(canvas, width, height);\n this.reset_transform();\n this.configure_context();\n }\n\n draw_circle(x: number, y: number, radius: number, fill_color: string, stroke_color?: string, stroke_width?: number): void {\n const ctx = this.ctx;\n ctx.beginPath();\n ctx.arc(x, y, radius, 0, Math.PI * 2);\n\n if (fill_color && fill_color !== \"transparent\") {\n ctx.fillStyle = fill_color;\n ctx.fill();\n }\n\n if (stroke_color && stroke_width && stroke_width > 0) {\n ctx.strokeStyle = stroke_color;\n ctx.lineWidth = stroke_width;\n ctx.stroke();\n }\n }\n\n draw_arc(\n x: number,\n y: number,\n radius: number,\n start_angle: number,\n end_angle: number,\n stroke_color: string,\n stroke_width: number,\n ccw: boolean = false\n ): void {\n const ctx = this.ctx;\n ctx.beginPath();\n ctx.arc(x, y, radius, start_angle, end_angle, ccw);\n ctx.strokeStyle = stroke_color;\n ctx.lineWidth = stroke_width;\n ctx.stroke();\n }\n\n draw_rect(x: number, y: number, width: number, height: number, fill_color: string): void {\n this.ctx.fillStyle = fill_color;\n this.ctx.fillRect(x, y, width, height);\n }\n\n draw_rect_gradient(x: number, y: number, width: number, height: number, gradient: any): void {\n this.ctx.fillStyle = gradient;\n this.ctx.fillRect(x, y, width, height);\n }\n\n create_linear_gradient(x0: number, y0: number, x1: number, y1: number, stops: GradientStop[]): any {\n const gradient = this.ctx.createLinearGradient(x0, y0, x1, y1);\n for (const stop of stops) {\n gradient.addColorStop(stop.offset, stop.color);\n }\n return gradient;\n }\n\n draw_text(\n text: string,\n x: number,\n y: number,\n font: string,\n fill_color: string,\n align: TextAlign = \"left\",\n baseline: TextBaseline = \"alphabetic\"\n ): void {\n const ctx = this.ctx;\n ctx.font = font;\n ctx.fillStyle = fill_color;\n ctx.textAlign = align as CanvasTextAlign;\n ctx.textBaseline = baseline as CanvasTextBaseline;\n ctx.fillText(text, x, y);\n }\n\n measure_text(text: string, font: string): TextMetrics | null {\n const ctx = this.ctx;\n const prev = ctx.font;\n ctx.font = font;\n const metrics = ctx.measureText(text);\n ctx.font = prev;\n return metrics;\n }\n\n begin_path(): void {\n this.ctx.beginPath();\n }\n\n move_to(x: number, y: number): void {\n this.ctx.moveTo(x, y);\n }\n\n line_to(x: number, y: number): void {\n this.ctx.lineTo(x, y);\n }\n\n draw_line(x0: number, y0: number, x1: number, y1: number, color: string, width: number, cap: LineCap = \"butt\", join: LineJoin = \"miter\"): void {\n this.ctx.beginPath();\n this.ctx.moveTo(x0, y0);\n this.ctx.lineTo(x1, y1);\n this.ctx.strokeStyle = color;\n this.ctx.lineWidth = width;\n this.ctx.lineCap = cap;\n this.ctx.lineJoin = join;\n this.ctx.stroke();\n }\n\n bezier_curve_to(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void {\n this.ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n }\n\n quadratic_curve_to(cpx: number, cpy: number, x: number, y: number): void {\n this.ctx.quadraticCurveTo(cpx, cpy, x, y);\n }\n\n arc_to(x: number, y: number, radius: number, start: number, end: number, ccw?: boolean): void {\n this.ctx.arc(x, y, radius, start, end, ccw);\n }\n\n rect(x: number, y: number, width: number, height: number): void {\n this.ctx.rect(x, y, width, height);\n }\n\n clip(): void {\n this.ctx.clip();\n }\n\n stroke_path(color: string, width: number, cap: LineCap = \"butt\", join: LineJoin = \"miter\"): void {\n const ctx = this.ctx;\n ctx.strokeStyle = color;\n ctx.lineWidth = width;\n ctx.lineCap = cap;\n ctx.lineJoin = join;\n ctx.stroke();\n }\n\n fill_path(color: string): void {\n this.ctx.fillStyle = color;\n this.ctx.fill();\n }\n\n close_path(): void {\n this.ctx.closePath();\n }\n\n save(): void {\n this.ctx.save();\n }\n\n restore(): void {\n this.ctx.restore();\n }\n\n translate(x: number, y: number): void {\n this.ctx.translate(x, y);\n }\n\n scale(x: number, y: number): void {\n this.ctx.scale(x, y);\n }\n\n rotate(angle: number): void {\n this.ctx.rotate(angle);\n }\n\n set_alpha(alpha: number): void {\n this.ctx.globalAlpha = alpha;\n }\n\n set_shadow(color: string, blur: number): void {\n this.ctx.shadowColor = color;\n this.ctx.shadowBlur = blur;\n }\n\n set_composite_operation(op: CompositeOperation): void {\n this.ctx.globalCompositeOperation = op;\n }\n\n set_blend_mode(mode: \"normal\" | \"lighter\" | \"multiply\" | \"screen\"): void {\n const ops: Record<string, GlobalCompositeOperation> = {\n normal: \"source-over\",\n lighter: \"lighter\",\n multiply: \"multiply\",\n screen: \"screen\"\n };\n this.ctx.globalCompositeOperation = ops[mode] ?? \"source-over\";\n }\n\n draw_image(image: RenderImage, x: number, y: number, width?: number, height?: number): void {\n if (width !== undefined && height !== undefined) {\n this.ctx.drawImage(image.source, x, y, width, height);\n } else {\n this.ctx.drawImage(image.source, x, y);\n }\n }\n\n draw_image_part(image: RenderImage, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void;\n draw_image_part(image: RenderImage, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void {\n this.ctx.drawImage(image.source, sx, sy, sw, sh, dx, dy, dw, dh);\n }\n\n render_slider_to_image(\n path: [number, number][],\n radius: number,\n border_color: string,\n body_color: string,\n scale: number,\n body_opacity: number = 1.0,\n border_opacity: number = 1.0\n ): RenderImage | null {\n let min_x = Infinity,\n min_y = Infinity,\n max_x = -Infinity,\n max_y = -Infinity;\n for (const p of path) {\n if (p[0] < min_x) min_x = p[0];\n if (p[0] > max_x) max_x = p[0];\n if (p[1] < min_y) min_y = p[1];\n if (p[1] > max_y) max_y = p[1];\n }\n\n const padding = radius + 2;\n min_x -= padding;\n min_y -= padding;\n max_x += padding;\n max_y += padding;\n\n const width = Math.ceil((max_x - min_x) * scale);\n const height = Math.ceil((max_y - min_y) * scale);\n\n if (width <= 0 || height <= 0) return null;\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return null;\n\n ctx.save();\n ctx.scale(scale, scale);\n ctx.translate(-min_x, -min_y);\n\n const draw_path = () => {\n ctx.beginPath();\n if (path.length > 0) {\n ctx.moveTo(path[0][0], path[0][1]);\n for (let i = 1; i < path.length; i++) {\n ctx.lineTo(path[i][0], path[i][1]);\n }\n }\n };\n\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n\n // draw full border\n ctx.globalAlpha = border_opacity;\n ctx.strokeStyle = border_color;\n ctx.lineWidth = radius * 2;\n draw_path();\n ctx.stroke();\n\n // if body is semi-transparent, we MUST mask out the center of the border\n // to prevent it from bleeding through the body\n const body_radius = radius * 0.872;\n if (body_opacity < 1.0) {\n ctx.globalCompositeOperation = \"destination-out\";\n ctx.globalAlpha = 1.0;\n ctx.lineWidth = body_radius * 2;\n draw_path();\n ctx.stroke();\n ctx.globalCompositeOperation = \"source-over\";\n }\n\n // draw body\n ctx.globalAlpha = body_opacity;\n ctx.strokeStyle = body_color;\n ctx.lineWidth = body_radius * 2;\n\n draw_path();\n\n ctx.stroke();\n ctx.restore();\n\n return {\n source: canvas,\n width,\n height,\n min_x,\n min_y\n };\n }\n\n private apply_canvas_size(canvas: HTMLCanvasElement, width: number, height: number): void {\n canvas.width = width * this._dpr;\n canvas.height = height * this._dpr;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n }\n\n private configure_context(): void {\n this.ctx.scale(this._dpr, this._dpr);\n this.ctx.imageSmoothingEnabled = true;\n this.ctx.imageSmoothingQuality = \"high\";\n }\n\n private reset_transform(): void {\n if (this.ctx.resetTransform) {\n this.ctx.resetTransform();\n } else {\n this.ctx.setTransform(1, 0, 0, 1, 0, 0);\n }\n }\n}\n",
|
|
12
12
|
"export interface IDifficultyRange {\n min: number;\n mid: number;\n max: number;\n}\n\nexport const PREEMPT_RANGE: IDifficultyRange = { min: 1800, mid: 1200, max: 450 };\nexport const PREEMPT_MIN = 450;\n\nexport const difficulty_range = (difficulty: number, range: IDifficultyRange): number => {\n if (difficulty > 5) {\n return range.mid + ((range.max - range.mid) * (difficulty - 5)) / 5;\n }\n if (difficulty < 5) {\n return range.mid + ((range.mid - range.min) * (difficulty - 5)) / 5;\n }\n return range.mid;\n};\n\nexport const inverse_difficulty_range = (value: number, range: IDifficultyRange): number => {\n const toward_max = Math.sign(value - range.mid) === Math.sign(range.max - range.mid);\n if (toward_max) return ((value - range.mid) / (range.max - range.mid)) * 5 + 5;\n return ((value - range.mid) / (range.mid - range.min)) * 5 + 5;\n};\n\nexport const calculate_preempt = (ar: number): number => difficulty_range(ar, PREEMPT_RANGE);\nexport const calculate_fade_in = (preempt: number): number => 400 * Math.min(1, preempt / PREEMPT_MIN);\n\nexport const calculate_scale = (cs: number): number => {\n const normalized = (cs - 5) / 5; // maps [0, 10] to [-1, 1]\n return (1 - 0.7 * normalized) / 2;\n};\n\nexport const calculate_radius = (cs: number): number => calculate_scale(cs) * 64;\n",
|
|
@@ -41,10 +41,9 @@
|
|
|
41
41
|
"import type { IBeatmapResources } from \"../types/resources\";\n\ntype ResolvedAssets = {\n audio?: ArrayBuffer;\n background?: Blob;\n video?: Blob;\n video_offset?: number;\n};\n\nexport class BeatmapAssets {\n private files: Map<string, ArrayBuffer>;\n private audio_filename?: string;\n private background_filename?: string;\n private video_filename?: string;\n private video_offset?: number;\n\n constructor(resources: IBeatmapResources) {\n this.files = resources.files;\n this.audio_filename = resources.audio_filename;\n this.background_filename = resources.background_filename;\n this.video_filename = resources.video_filename;\n this.video_offset = resources.video_offset;\n }\n\n resolve(): ResolvedAssets {\n const audio = this.audio_filename ? this.find_file(this.audio_filename) : undefined;\n const background_data = this.background_filename ? this.find_file(this.background_filename) : undefined;\n const video_data = this.video_filename ? this.find_file(this.video_filename) : undefined;\n\n return {\n audio,\n background: background_data ? new Blob([background_data]) : undefined,\n video: video_data ? new Blob([video_data]) : undefined,\n video_offset: this.video_offset\n };\n }\n\n private find_file(filename: string): ArrayBuffer | undefined {\n if (this.files.has(filename)) {\n return this.files.get(filename);\n }\n\n const lower = filename.toLowerCase();\n\n for (const [name, data] of this.files) {\n if (name.toLowerCase() === lower) {\n return data;\n }\n }\n\n return undefined;\n }\n}\n",
|
|
42
42
|
"import type { ITimingPoint, IHitObject, IHitSample } from \"../types/beatmap\";\nimport { SampleSet, HitObjectType } from \"../types/beatmap\";\nimport type { IBeatmapResources } from \"../types/resources\";\nimport { calculate_slider_duration, calculate_tick_spacing } from \"../renderer/standard/slider_math\";\nimport { generate_slider_events } from \"../renderer/standard/slider_events\";\nimport { TimingStateResolver } from \"../renderer/standard/timing_state\";\nimport { AudioController } from \"./audio_controller\";\nimport { HitsoundController } from \"./hitsound_controller\";\n\nconst HITSOUND_LOOKAHEAD_MS = 100;\nconst HIT_WINDOW_MS = 20;\n\ntype SampleSettings = {\n normal_set: SampleSet;\n addition_set: SampleSet;\n index: number;\n volume: number;\n custom_filename?: string;\n};\n\nexport class PlayerHitsoundScheduler {\n private resources: IBeatmapResources | null = null;\n private timing_points: ITimingPoint[] = [];\n private timing_resolver: TimingStateResolver | null = null;\n private audio_offset: number = 20;\n private next_hit_object_index: number = 0;\n\n constructor(\n private audio: AudioController,\n private hitsounds: HitsoundController\n ) {}\n\n set_context(\n resources: IBeatmapResources | null,\n timing_points: ITimingPoint[],\n timing_resolver: TimingStateResolver | null,\n audio_offset: number\n ): void {\n this.resources = resources;\n this.timing_points = timing_points;\n this.timing_resolver = timing_resolver;\n this.audio_offset = audio_offset;\n this.next_hit_object_index = 0;\n }\n\n set_audio_offset(offset_ms: number): void {\n this.audio_offset = offset_ms;\n }\n\n update_hit_index(time: number): void {\n if (!this.resources?.beatmap) {\n return;\n }\n\n const objects = this.resources.beatmap.HitObjects;\n\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 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 schedule_hitsounds(time: number): void {\n if (!this.resources?.beatmap || !this.audio.is_playing) {\n return;\n }\n\n const objects = this.resources.beatmap.HitObjects;\n const schedule_window = time + HITSOUND_LOOKAHEAD_MS;\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 if (obj.time >= time - HIT_WINDOW_MS) {\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 const base = this.resolve_sample_settings(timing, obj.hitSample);\n\n if ((obj.type & HitObjectType.Slider) === 0) {\n this.play_node_hitsound(obj.time, obj.hitSound, base, base.custom_filename);\n return;\n }\n\n const beatmap = this.resources?.beatmap;\n if (!beatmap) {\n return;\n }\n\n const timing_state = this.timing_resolver?.get_state_at(obj.time) ?? { base_beat_length: 600, sv_multiplier: 1 };\n const length = obj.length ?? 0;\n const span_duration = calculate_slider_duration(length, beatmap, timing_state);\n const span_count = Math.max(1, obj.slides || 1);\n\n if (span_duration <= 0 || length <= 0) {\n this.play_node_hitsound(obj.time, obj.hitSound, base, base.custom_filename);\n return;\n }\n\n const edge_sounds = obj.edgeSounds ?? [];\n const edge_sets = obj.edgeSets ?? [];\n\n for (let i = 0; i <= span_count; i++) {\n const node_time = obj.time + span_duration * i;\n const node_sound = edge_sounds.length > 0 ? (edge_sounds[i] ?? 0) : i == 0 ? obj.hitSound : 0;\n const node_sets = edge_sets.length > 0 ? edge_sets[i] : undefined;\n const resolved = this.resolve_edge_sets(base, node_sets);\n const custom = i == 0 ? base.custom_filename : undefined;\n this.play_node_hitsound(node_time, node_sound, { ...base, ...resolved }, custom);\n }\n\n const spacing = calculate_tick_spacing(beatmap, timing_state);\n const events = generate_slider_events({\n start_time: obj.time,\n span_duration,\n span_count,\n length,\n tick_distance: spacing.tick_distance,\n min_distance_from_end: spacing.min_distance_from_end,\n get_position_at_progress: () => [0, 0]\n });\n\n for (const tick of events.ticks) {\n const when = this.audio.get_host_time(tick.time + this.audio_offset);\n this.hitsounds.play_sample(base.normal_set, \"slidertick\", base.index, base.volume, when);\n }\n }\n\n private play_node_hitsound(time: number, hit_sound: number, sample: SampleSettings, custom_filename?: string): void {\n const when = this.audio.get_host_time(time + this.audio_offset);\n this.hitsounds.play(sample.normal_set, sample.addition_set, hit_sound, sample.index, sample.volume, custom_filename, when);\n }\n\n private resolve_sample_settings(timing: ITimingPoint, hit_sample?: IHitSample): SampleSettings {\n let volume = timing.volume;\n let normal_set = timing.sampleSet as SampleSet;\n let addition_set = timing.sampleSet as SampleSet;\n let index = timing.sampleIndex;\n let custom_filename: string | undefined = undefined;\n\n if (hit_sample) {\n if (hit_sample.normalSet !== SampleSet.Auto) {\n normal_set = hit_sample.normalSet as SampleSet;\n if (hit_sample.additionSet === SampleSet.Auto) {\n addition_set = normal_set;\n }\n }\n\n if (hit_sample.additionSet !== SampleSet.Auto) {\n addition_set = hit_sample.additionSet as SampleSet;\n }\n\n if (hit_sample.index !== 0) {\n index = hit_sample.index;\n }\n if (hit_sample.volume !== 0) {\n volume = hit_sample.volume;\n }\n custom_filename = hit_sample.filename || undefined;\n }\n\n if (normal_set === SampleSet.Auto) {\n normal_set = SampleSet.Normal;\n }\n if (addition_set === SampleSet.Auto) {\n addition_set = normal_set;\n }\n\n return { normal_set, addition_set, index, volume, custom_filename };\n }\n\n private resolve_edge_sets(\n base: { normal_set: SampleSet; addition_set: SampleSet },\n edge_set?: { normalSet: number; additionSet: number }\n ): {\n normal_set: SampleSet;\n addition_set: SampleSet;\n } {\n let normal_set = base.normal_set;\n let addition_set = base.addition_set;\n\n if (edge_set) {\n const edge_normal = edge_set.normalSet as SampleSet;\n const edge_add = edge_set.additionSet as SampleSet;\n\n if (edge_normal !== SampleSet.Auto) {\n normal_set = edge_normal;\n }\n if (edge_add !== SampleSet.Auto) {\n addition_set = edge_add;\n } else {\n addition_set = normal_set;\n }\n }\n\n if (normal_set === SampleSet.Auto) {\n normal_set = SampleSet.Normal;\n }\n if (addition_set === SampleSet.Auto) {\n addition_set = normal_set;\n }\n\n return { normal_set, addition_set };\n }\n\n private get_timing_point(time: number): ITimingPoint {\n const points = this.timing_points;\n if (points.length == 0) {\n return {\n time: 0,\n beatLength: 600,\n meter: 4,\n sampleSet: SampleSet.Normal,\n sampleIndex: 1,\n volume: 100,\n uninherited: 1,\n effects: 0\n };\n }\n\n for (let i = points.length - 1; i >= 0; i--) {\n if (points[i].time <= time) {\n return points[i];\n }\n }\n return points[0];\n }\n}\n",
|
|
43
43
|
"import type { IBeatmap } from \"../types/beatmap\";\n\nconst AUDIO_FILE_EXTENSIONS = [\".wav\", \".mp3\", \".ogg\"];\nconst DEFAULT_HITSOUND_FILE_PATTERN = /^(normal|soft|drum)-(hitnormal|hitwhistle|hitfinish|hitclap|slidertick|sliderslide|sliderwhistle)\\d*$/i;\n\nexport const collect_map_custom_hitsound_files = (\n beatmap: IBeatmap,\n files: Map<string, ArrayBuffer>,\n audio_filename?: string\n): Map<string, ArrayBuffer> => {\n const custom_names: Set<string> = new Set();\n\n for (const obj of beatmap.HitObjects) {\n const filename = obj.hitSample?.filename?.trim();\n if (filename) {\n custom_names.add(filename.toLowerCase());\n }\n }\n\n const selected: Map<string, ArrayBuffer> = new Map();\n const audio_name = audio_filename?.toLowerCase();\n\n for (const [path, data] of files) {\n const lower_path = path.toLowerCase();\n if (!is_audio_file(lower_path)) {\n continue;\n }\n\n if (audio_name && lower_path == audio_name) {\n continue;\n }\n\n const file_name = get_base_file_name(lower_path);\n const sample_key = file_name.replace(/\\.(wav|mp3|ogg)$/, \"\");\n const matches_default_pattern = DEFAULT_HITSOUND_FILE_PATTERN.test(sample_key);\n const is_referenced_custom = custom_names.has(file_name) || custom_names.has(sample_key) || custom_names.has(lower_path);\n\n if (matches_default_pattern || is_referenced_custom) {\n selected.set(path, data);\n }\n }\n\n return selected;\n};\n\nconst is_audio_file = (path: string): boolean => {\n for (const ext of AUDIO_FILE_EXTENSIONS) {\n if (path.endsWith(ext)) {\n return true;\n }\n }\n return false;\n};\n\nconst get_base_file_name = (path: string): string => {\n const clean = path.split(\"?\")[0].split(\"#\")[0];\n const file_name = clean.split(\"/\").pop();\n return file_name ?? clean;\n};\n",
|
|
44
|
-
"import type { IBeatmap, ITimingPoint } from \"../types/beatmap\";\nimport { GameMode } 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 { init_wasm, parse as wasm_parse } from \"@rel-packages/osu-beatmap-parser/browser\";\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\";\nimport { BeatmapAssets } from \"./beatmap_assets\";\nimport { process_timing_points } from \"../beatmap/timing\";\nimport { TimingStateResolver } from \"../renderer/standard/timing_state\";\nimport { PlayerHitsoundScheduler } from \"./player_hitsound_scheduler\";\nimport { collect_map_custom_hitsound_files } from \"./hitsound_file_collector\";\n\nconst PREVIEW_FALLBACK_RATIO = 0.42;\nconst RESYNC_THRESHOLD_MS = 30;\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 type StartMode = \"preview\" | \"beginning\" | \"custom\";\n\nexport interface IPlayerOptions {\n canvas: HTMLCanvasElement;\n skin?: Partial<ISkinConfig>;\n mods?: number;\n start_mode?: StartMode;\n start_time?: number;\n autoplay?: boolean;\n volume?: number;\n hitsound_volume?: number;\n audio_offset?: number;\n backend?: IRenderBackend;\n renderer_config?: Partial<IRendererConfig>;\n playfield_scale?: number;\n auto_resize?: boolean;\n enable_fps_counter?: boolean;\n time_smoothing?: number;\n max_frame_delta?: number;\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 start_mode: StartMode;\n private custom_start_time: number | null;\n private music_volume: number;\n private hitsound_volume: number;\n private audio_offset: number;\n private background_url: string | null = null;\n\n private listeners: Map<PlayerEvent, Set<Function>> = new Map();\n private is_loaded_flag: boolean = false;\n\n private hitsound_scheduler: PlayerHitsoundScheduler;\n private timing_points: ITimingPoint[] = [];\n private timing_resolver: TimingStateResolver | null = null;\n\n private resize_observer: ResizeObserver | null = null;\n private key_handler: ((e: KeyboardEvent) => void) | null = null;\n private options: IPlayerOptions;\n\n // fps tracking\n private enable_fps_counter = false;\n private fps_frame_count = 0;\n private fps_last_update = 0;\n private current_fps = 0;\n private time_smoothing = 0.1;\n private smoothed_delta = 0;\n private max_frame_delta = 100;\n\n private last_timestamp: number = 0;\n private smooth_time: number = 0;\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_mode = options.start_mode ?? (Number.isFinite(options.start_time) ? \"custom\" : \"preview\");\n this.custom_start_time = Number.isFinite(options.start_time) ? Math.max(0, options.start_time as number) : null;\n this.start_offset = 0;\n this.music_volume = options.volume ?? 0.5;\n this.hitsound_volume = options.hitsound_volume ?? 0.25;\n this.audio_offset = options.audio_offset ?? 20;\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 audio_context_class = window.AudioContext || window.webkitAudioContext;\n this.audio_context = new audio_context_class();\n\n this.audio = new AudioController(this.audio_context);\n this.hitsounds = new HitsoundController(this.audio_context);\n this.hitsound_scheduler = new PlayerHitsoundScheduler(this.audio, this.hitsounds);\n\n // set initial volumes\n this.audio.set_volume(this.music_volume);\n this.hitsounds.set_volume(this.hitsound_volume);\n\n if (options.auto_resize) {\n this.setup_auto_resize();\n }\n\n this.enable_fps_counter = options.enable_fps_counter ?? false;\n this.fps_last_update = performance.now();\n\n const time_smoothing = options.time_smoothing;\n if (Number.isFinite(time_smoothing)) {\n this.time_smoothing = Math.max(0, Math.min(1, time_smoothing as number));\n }\n\n const max_frame_delta = options.max_frame_delta;\n if (Number.isFinite(max_frame_delta)) {\n this.max_frame_delta = Math.max(10, max_frame_delta as number);\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 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_default_hitsounds(urls: string[]): Promise<void> {\n if (urls.length == 0) {\n console.warn(\"[BeatmapPlayer] No default hitsound URLs were provided\");\n return;\n }\n\n try {\n await this.hitsounds.load_default_samples(urls);\n } catch (e) {\n console.error(\"[BeatmapPlayer] Failed to load default hitsounds:\", e);\n }\n }\n\n async load_custom_hitsounds(urls: string[]): Promise<void> {\n if (urls.length == 0) {\n console.warn(\"[BeatmapPlayer] No custom hitsound URLs were provided\");\n this.hitsounds.clear();\n return;\n }\n\n try {\n await this.hitsounds.load_samples(urls);\n } catch (e) {\n console.error(\"[BeatmapPlayer] Failed to load custom hitsounds:\", e);\n }\n }\n\n private async load_map_custom_hitsounds(): Promise<void> {\n if (!this.resources?.beatmap) {\n return;\n }\n\n const files = collect_map_custom_hitsound_files(this.resources.beatmap, this.resources.files, this.resources.audio_filename);\n if (files.size == 0) {\n this.hitsounds.clear();\n return;\n }\n\n try {\n await this.hitsounds.load_samples_from_files(files);\n } catch (e) {\n console.error(\"[BeatmapPlayer] Failed to load map custom hitsounds:\", e);\n this.hitsounds.clear();\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 await init_wasm();\n const beatmap = await this.parse_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 async load_beatmap_files(\n osu_content: string | Uint8Array | ArrayBuffer,\n audio: ArrayBuffer,\n background?: Blob,\n video?: Blob,\n video_offset?: number\n ): Promise<Result<IBeatmapResources>> {\n try {\n await init_wasm();\n const is_string = typeof osu_content === \"string\";\n const bytes = osu_content instanceof Uint8Array ? osu_content : osu_content instanceof ArrayBuffer ? new Uint8Array(osu_content) : null;\n const beatmap = await this.parse_content(is_string ? osu_content : (bytes as Uint8Array));\n\n return this.load_beatmap(beatmap, audio, background, video, video_offset);\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 } = this.resources;\n this.timing_points = process_timing_points([...beatmap.TimingPoints]);\n this.timing_resolver = new TimingStateResolver(this.timing_points);\n const speed = get_speed_multiplier(this.mods);\n this.resolve_assets();\n\n const { audio, video, video_offset } = this.resources;\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 this.hitsound_scheduler.set_context(this.resources, this.timing_points, this.timing_resolver, this.audio_offset);\n void this.load_map_custom_hitsounds();\n\n // setup video\n if (video) {\n this.video = new VideoController();\n await this.video.load(video, video_offset ?? 0);\n }\n\n // create renderer based on mode\n try {\n this.renderer = this.create_renderer(beatmap);\n this.renderer.initialize(beatmap);\n this.renderer.precompute();\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 this.start_offset = this.resolve_initial_start_offset();\n\n this.hitsound_scheduler.update_hit_index(this.start_offset);\n void this.load_background();\n\n this.is_loaded_flag = true;\n this.emit(\"loaded\", beatmap, this.resources);\n requestAnimationFrame(() => this.render_frame(this.start_offset));\n\n return ok(this.resources);\n }\n\n async load_background(): Promise<void> {\n if (this.resources) {\n this.resolve_assets();\n }\n if (!this.resources?.background || !this.renderer) {\n return;\n }\n\n try {\n const img = new Image();\n if (this.background_url) {\n URL.revokeObjectURL(this.background_url);\n }\n this.background_url = URL.createObjectURL(this.resources.background);\n img.src = this.background_url;\n await img.decode();\n this.renderer.set_background({\n source: img,\n width: img.width,\n height: img.height\n });\n\n const target_time = this.audio.is_playing ? this.current_time : this.start_offset;\n requestAnimationFrame(() => this.render_frame(target_time));\n } catch (e) {\n console.warn(\"[BeatmapPlayer] Failed to load background\", e);\n }\n }\n\n private resolve_assets(): void {\n if (!this.resources) {\n return;\n }\n\n const assets = new BeatmapAssets(this.resources).resolve();\n if (!this.resources.audio && assets.audio) {\n this.resources.audio = assets.audio;\n }\n if (!this.resources.background && assets.background) {\n this.resources.background = assets.background;\n }\n if (!this.resources.video && assets.video) {\n this.resources.video = assets.video;\n }\n if (!this.resources.video_offset && assets.video_offset) {\n this.resources.video_offset = assets.video_offset;\n }\n }\n\n private create_renderer(beatmap: IBeatmap): BaseRenderer {\n switch (beatmap.General.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.General.Mode] ?? beatmap.General.Mode}`);\n }\n }\n\n private get_last_object_time(): number {\n if (!this.resources?.beatmap.HitObjects.length) {\n return 0;\n }\n const objects = this.resources.beatmap.HitObjects;\n let max_time = 0;\n for (const obj of objects) {\n const end_time = obj.endTime || obj.time;\n if (end_time > max_time) max_time = end_time;\n }\n return max_time;\n }\n\n private resolve_preview_start_offset(): number {\n if (!this.resources?.beatmap) {\n return 0;\n }\n\n const preview = this.resources.beatmap.General.PreviewTime;\n if (preview > 0) {\n return preview;\n }\n\n return Math.max(0, this.get_last_object_time() * PREVIEW_FALLBACK_RATIO);\n }\n\n private resolve_initial_start_offset(): number {\n const max_duration = Math.max(0, this.duration);\n\n if (this.start_mode == \"beginning\") {\n return 0;\n }\n\n if (this.start_mode == \"custom\") {\n if (this.custom_start_time !== null) {\n return Math.max(0, Math.min(this.custom_start_time, max_duration));\n }\n\n return Math.max(0, Math.min(this.resolve_preview_start_offset(), max_duration));\n }\n\n return Math.max(0, Math.min(this.resolve_preview_start_offset(), max_duration));\n }\n\n async play(): Promise<void> {\n if (!this.renderer || !this.is_loaded_flag) {\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(Math.max(0, this.start_offset + this.audio_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) {\n return;\n }\n\n // save current position for resume\n this.start_offset = Math.max(0, this.audio.current_time - this.audio_offset);\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\n if (this.is_loaded_flag) {\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 this.hitsound_scheduler.update_hit_index(this.start_offset);\n\n this.audio.seek(Math.max(0, this.start_offset + this.audio_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 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 async parse_content(content: string | Uint8Array): Promise<IBeatmap> {\n const data = typeof content == \"string\" ? new TextEncoder().encode(content) : content;\n return (await wasm_parse(data)) as IBeatmap;\n }\n\n stop(): void {\n this.pause();\n this.start_offset = 0;\n this.audio.seek(Math.max(0, this.audio_offset));\n this.hitsound_scheduler.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();\n\n if (this.background_url) {\n URL.revokeObjectURL(this.background_url);\n this.background_url = null;\n }\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_flag = false;\n this.listeners.clear();\n }\n\n // getters\n get current_time(): number {\n return Math.max(0, this.audio.current_time - this.audio_offset);\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_flag;\n }\n\n get mode(): string {\n if (!this.resources) {\n return \"standard\";\n }\n switch (this.resources.beatmap.General.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(): { filename: string; beatmap: IBeatmap }[] {\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_flag) {\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_flag) {\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_flag && 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_flag) {\n return;\n }\n if (this.is_playing) {\n this.pause();\n } else {\n this.play();\n }\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 (Number.isFinite(playfield_scale)) {\n fill = playfield_scale as number;\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.music_volume = volume;\n this.audio.set_volume(volume);\n }\n\n set_hitsound_volume(volume: number): void {\n this.hitsound_volume = volume;\n this.hitsounds.set_volume(volume);\n }\n\n set_offset(offset_ms: number): void {\n this.audio_offset = offset_ms;\n this.hitsound_scheduler.set_audio_offset(offset_ms);\n if (this.is_loaded_flag) {\n this.seek(this.current_time);\n }\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) {\n return;\n }\n\n this.last_timestamp = performance.now();\n this.smooth_time = this.audio.current_time - this.audio_offset;\n this.smoothed_delta = 0;\n\n const loop = (timestamp: number) => {\n if (!this.audio.is_playing) {\n this.animation_frame = null;\n return;\n }\n\n // smooth time follows render delta but is nudged toward audio clock to prevent drift\n const raw_delta = Math.max(0, timestamp - this.last_timestamp);\n this.last_timestamp = timestamp;\n\n let delta = Math.min(raw_delta, this.max_frame_delta);\n if (this.time_smoothing > 0) {\n if (this.smoothed_delta === 0) {\n this.smoothed_delta = delta;\n } else {\n this.smoothed_delta += (delta - this.smoothed_delta) * this.time_smoothing;\n }\n delta = this.smoothed_delta;\n }\n\n // advance smooth time by delta * speed\n this.smooth_time += delta * this.audio.speed_multiplier;\n\n // resync with audio clock if deviation is too large (> 30ms)\n // or periodically to prevent drift\n const actual_audio_time = this.audio.current_time - this.audio_offset;\n const deviation = Math.abs(this.smooth_time - actual_audio_time);\n\n if (deviation > RESYNC_THRESHOLD_MS) {\n this.smooth_time = actual_audio_time;\n } else {\n // slowly nudge smooth_time towards actual_audio_time to prevent drift\n this.smooth_time += (actual_audio_time - this.smooth_time) * 0.1;\n }\n\n const time = this.smooth_time;\n\n this.hitsound_scheduler.schedule_hitsounds(actual_audio_time);\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 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.begin_frame?.();\n this.backend.clear();\n this.renderer?.render(time);\n\n // fps tracking\n if (this.enable_fps_counter) {\n this.fps_frame_count++;\n const now = performance.now();\n const delta = now - this.fps_last_update;\n\n if (delta >= 1000) {\n this.current_fps = Math.round((this.fps_frame_count * 1000) / delta);\n this.fps_frame_count = 0;\n this.fps_last_update = now;\n }\n\n const fps_font = `14px ${this.skin.default_font ?? \"monospace\"}`;\n this.backend.draw_text(`${this.current_fps} FPS`, 10, 20, fps_font, \"rgba(255,255,255,0.8)\", \"left\", \"top\");\n }\n\n this.backend.end_frame?.();\n }\n\n set_fps_counter(enabled: boolean): void {\n this.enable_fps_counter = enabled;\n }\n}\n",
|
|
45
44
|
"import { fontSpec } from \"./types/fonts\";\n\nconst build_font = (spec: fontSpec): FontFace | null => {\n try {\n return new FontFace(spec.family, spec.url, { weight: spec.weight, style: \"normal\" });\n } catch (err) {\n console.error(err);\n return null;\n }\n};\n\nexport const load_font = async (spec: fontSpec): Promise<boolean> => {\n const result = build_font(spec);\n\n if (!result) {\n return false;\n }\n\n try {\n await result.load();\n document.fonts.add(result);\n } catch (err) {\n console.error(err);\n return false;\n }\n\n return true;\n};\n"
|
|
46
45
|
],
|
|
47
|
-
"mappings": "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",
|
|
48
|
-
"debugId": "
|
|
46
|
+
"mappings": "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",
|
|
47
|
+
"debugId": "FE92E800DF3E93F364756E2164756E21",
|
|
49
48
|
"names": []
|
|
50
49
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rel-packages/osu-beatmap-preview",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.4",
|
|
4
4
|
"description": "one of the beatmap preview of all time",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"example": "cd example && bun run dev"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@rel-packages/osu-beatmap-parser": "^1.5.
|
|
29
|
+
"@rel-packages/osu-beatmap-parser": "^1.5.6",
|
|
30
30
|
"jszip": "^3.10.1"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|