@rel-packages/osu-beatmap-preview 0.8.4 → 0.8.6

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.map CHANGED
@@ -19,12 +19,12 @@
19
19
  "export type Vec2 = [number, number];\n\nexport const vec2_add = (a: Vec2, b: Vec2): Vec2 => [a[0] + b[0], a[1] + b[1]];\nexport const vec2_sub = (a: Vec2, b: Vec2): Vec2 => [a[0] - b[0], a[1] - b[1]];\nexport const vec2_mul = (a: Vec2, s: number): Vec2 => [a[0] * s, a[1] * s];\nexport const vec2_div = (a: Vec2, s: number): Vec2 => [a[0] / s, a[1] / s];\nexport const vec2_dot = (a: Vec2, b: Vec2): number => a[0] * b[0] + a[1] * b[1];\nexport const vec2_len = (v: Vec2): number => Math.sqrt(v[0] * v[0] + v[1] * v[1]);\nexport const vec2_len_sq = (v: Vec2): number => v[0] * v[0] + v[1] * v[1];\nexport const vec2_dist = (a: Vec2, b: Vec2): number => vec2_len(vec2_sub(a, b));\nexport const vec2_normalize = (v: Vec2): Vec2 => {\n const len = vec2_len(v);\n return len > 0 ? vec2_div(v, len) : [0, 0];\n};\n\nexport const lerp = (a: number, b: number, t: number): number => a + (b - a) * t;\nexport const vec2_lerp = (a: Vec2, b: Vec2, t: number): Vec2 => [lerp(a[0], b[0], t), lerp(a[1], b[1], t)];\nexport const clamp = (x: number, min: number, max: number): number => Math.min(max, Math.max(min, x));\n",
20
20
  "export interface ISkinConfig {\n combo_colors: string[];\n\n // circle rendering\n circle_border_width: number;\n hit_circle_opacity: number;\n\n // approach circle\n enable_approach_circle: boolean;\n approach_circle_width: number;\n approach_circle_opacity: number;\n approach_circle_use_combo_color: boolean;\n approach_circle_color?: string;\n\n // hitburst effect\n enable_hitburst: boolean;\n hitburst_duration: number;\n hitburst_scale: number;\n hitburst_glow_enabled: boolean;\n hitburst_glow_color?: string;\n hitburst_glow_use_combo_color: boolean;\n hitburst_glow_opacity: number;\n\n // slider rendering\n slider_body_opacity: number;\n slider_border_opacity: number;\n slider_tick_opacity: number;\n slider_tick_size: number;\n slider_border_color?: string;\n slider_track_override?: string;\n slider_render_scale: number;\n\n // follow circle (slider ball outer ring)\n follow_circle_factor: number;\n follow_circle_width: number;\n follow_circle_opacity: number;\n follow_circle_color: string;\n follow_circle_use_combo_color: boolean;\n\n // slider ball (inner circle)\n slider_ball_color: string;\n slider_ball_opacity: number;\n enable_slider_ball: boolean;\n\n // follow points (dots between objects)\n follow_point_width: number;\n follow_point_shape: \"circle\" | \"line\";\n follow_point_mode: \"segments\" | \"full\";\n follow_point_length: number;\n follow_point_line_gap: number;\n\n // spinner\n spinner_size: number;\n spinner_center_size: number;\n\n // mania\n mania_lane_width: number;\n mania_note_height: number;\n mania_hit_position: number;\n mania_lane_spacing: number;\n mania_lane_colors: Record<number, string[]>;\n\n // general\n default_font?: string;\n hit_animation_duration: number;\n hit_animation_scale: number;\n\n // animation toggles\n enable_hit_animations: boolean;\n enable_follow_circle_animations: boolean;\n}\n\nconst MANIA_KEY_COLORS: Record<number, string[]> = {\n 1: [\"#d5bc00\"],\n 2: [\"#ffffff\", \"#ffffff\"],\n 3: [\"#ffffff\", \"#d5bc00\", \"#ffffff\"],\n 4: [\"#ffffff\", \"#dc8dba\", \"#dc8dba\", \"#ffffff\"],\n 5: [\"#ffffff\", \"#dc8dba\", \"#d5bc00\", \"#dc8dba\", \"#ffffff\"],\n 6: [\"#ffffff\", \"#dc8dba\", \"#ffffff\", \"#ffffff\", \"#dc8dba\", \"#ffffff\"],\n 7: [\"#ffffff\", \"#dc8dba\", \"#ffffff\", \"#d5bc00\", \"#ffffff\", \"#dc8dba\", \"#ffffff\"],\n 8: [\"#d5bc00\", \"#ffffff\", \"#dc8dba\", \"#ffffff\", \"#d5bc00\", \"#ffffff\", \"#dc8dba\", \"#ffffff\"],\n 9: [\"#ffffff\", \"#dc8dba\", \"#ffffff\", \"#dc8dba\", \"#d5bc00\", \"#dc8dba\", \"#ffffff\", \"#dc8dba\", \"#ffffff\"],\n 10: [\"#ffffff\", \"#dc8dba\", \"#d5bc00\", \"#dc8dba\", \"#ffffff\", \"#ffffff\", \"#dc8dba\", \"#d5bc00\", \"#dc8dba\", \"#ffffff\"]\n};\n\nexport const DEFAULT_SKIN: ISkinConfig = {\n combo_colors: [\"0,185,0\", \"7, 105, 227\", \"224, 4, 38\", \"227, 171, 2\"],\n\n circle_border_width: 0.12,\n hit_circle_opacity: 0.95,\n\n enable_approach_circle: true,\n approach_circle_width: 0.1,\n approach_circle_opacity: 0.5,\n approach_circle_use_combo_color: true,\n\n enable_hitburst: true,\n hitburst_duration: 180,\n hitburst_scale: 1.2,\n hitburst_glow_enabled: false,\n hitburst_glow_use_combo_color: true,\n hitburst_glow_opacity: 0.3,\n\n slider_body_opacity: 0.9,\n slider_border_opacity: 1.0,\n slider_tick_opacity: 0.75,\n slider_tick_size: 0.1,\n slider_render_scale: 2.0,\n\n follow_circle_factor: 1.5,\n follow_circle_width: 4,\n follow_circle_opacity: 0.5,\n follow_circle_color: \"#d3d3d3ff\",\n follow_circle_use_combo_color: false,\n\n slider_ball_color: \"#ffffff\",\n slider_ball_opacity: 1.0,\n enable_slider_ball: true,\n\n follow_point_width: 2,\n follow_point_shape: \"line\",\n follow_point_mode: \"full\",\n follow_point_length: 12,\n follow_point_line_gap: 0,\n\n spinner_size: 180,\n spinner_center_size: 10,\n\n mania_lane_width: 30,\n mania_note_height: 15,\n mania_hit_position: 364,\n mania_lane_spacing: 1,\n mania_lane_colors: MANIA_KEY_COLORS,\n\n default_font: '\"Trebuchet MS\", Verdana, Arial, sans-serif',\n hit_animation_duration: 240,\n hit_animation_scale: 1.2,\n\n enable_hit_animations: true,\n enable_follow_circle_animations: true\n};\n\nexport const merge_skin = (partial?: Partial<ISkinConfig>): ISkinConfig => {\n if (!partial) return { ...DEFAULT_SKIN };\n\n return {\n ...DEFAULT_SKIN,\n ...partial,\n mania_lane_colors: partial.mania_lane_colors ? { ...MANIA_KEY_COLORS, ...partial.mania_lane_colors } : MANIA_KEY_COLORS\n };\n};\n\nexport const get_combo_color = (skin: ISkinConfig, combo_number: number, alpha: number = 1): string => {\n const color = skin.combo_colors[combo_number % skin.combo_colors.length];\n return `rgba(${color},${alpha})`;\n};\n\nexport const get_mania_lane_color = (skin: ISkinConfig, key_count: number, lane: number): string => {\n const colors = skin.mania_lane_colors[key_count] ?? skin.mania_lane_colors[4];\n return colors[lane % colors.length] ?? \"#ffffff\";\n};\n",
21
21
  "export type EasingFunction = (t: number) => number;\n\nexport const Easing = {\n None: (t: number) => t,\n Out: (t: number) => 1 - Math.pow(1 - t, 2),\n In: (t: number) => t * t,\n InOut: (t: number) => (t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2),\n OutCubic: (t: number) => 1 - Math.pow(1 - t, 3),\n InCubic: (t: number) => t * t * t,\n OutQuad: (t: number) => 1 - Math.pow(1 - t, 2),\n InQuad: (t: number) => t * t,\n OutQuint: (t: number) => 1 - Math.pow(1 - t, 5),\n InQuint: (t: number) => t * t * t * t * t,\n OutElastic: (t: number) => {\n const c4 = (2 * Math.PI) / 3;\n return t === 0 ? 0 : t === 1 ? 1 : Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c4) + 1;\n }\n};\n\nexport interface Transform {\n property: \"alpha\" | \"scale\" | \"x\" | \"y\" | \"rotation\";\n start_value: number;\n end_value: number;\n start_time: number;\n end_time: number;\n easing: EasingFunction;\n loop?: boolean;\n loop_delay?: number;\n}\n\nexport class TransformSequence {\n private transforms: Transform[] = [];\n\n add(\n property: Transform[\"property\"],\n start_value: number,\n end_value: number,\n start_time: number,\n duration: number,\n easing: EasingFunction = Easing.None\n ): this {\n this.transforms.push({\n property,\n start_value,\n end_value,\n start_time,\n end_time: start_time + duration,\n easing\n });\n return this;\n }\n\n then(): this {\n return this;\n }\n\n get_value(property: Transform[\"property\"], time: number, default_value: number): number {\n let value = default_value;\n\n for (const t of this.transforms) {\n if (t.property !== property) continue;\n if (time < t.start_time) continue;\n\n if (time >= t.end_time) {\n value = t.end_value;\n } else {\n const progress = (time - t.start_time) / (t.end_time - t.start_time);\n const eased = t.easing(progress);\n value = t.start_value + (t.end_value - t.start_value) * eased;\n }\n }\n\n return value;\n }\n\n clear(): void {\n this.transforms = [];\n }\n}\n",
22
- "import type { IRenderBackend } from \"../backend/render_backend\";\nimport type { RenderHitObject } from \"../render_types\";\nimport type { ISkinConfig } from \"../../skin/skin_config\";\nimport { TransformSequence, Easing } from \"./transforms\";\n\nexport enum ArmedState {\n Idle,\n Hit,\n Miss\n}\n\nexport interface DrawableConfig {\n backend: IRenderBackend;\n skin: ISkinConfig;\n preempt: number;\n fade_in: number;\n radius: number;\n scale?: number;\n mods: number;\n}\n\nexport abstract class Drawable {\n protected backend: IRenderBackend;\n protected skin: ISkinConfig;\n\n protected hit_object: RenderHitObject;\n protected config: DrawableConfig;\n\n protected alpha = 1;\n protected scale = 1;\n protected rotation = 0;\n protected x = 0;\n protected y = 0;\n\n protected armed_state = ArmedState.Idle;\n protected transforms = new TransformSequence();\n\n protected life_time_start = 0;\n protected life_time_end = 0;\n\n constructor(hit_object: RenderHitObject, config: DrawableConfig) {\n this.hit_object = hit_object;\n this.config = config;\n this.backend = config.backend;\n this.skin = config.skin;\n\n const data = hit_object.data as { pos: [number, number] };\n this.x = data.pos[0];\n this.y = data.pos[1];\n\n this.apply_defaults();\n }\n\n protected apply_defaults(): void {\n const { hit_object, config } = this;\n const appear_time = hit_object.time - config.preempt;\n\n this.life_time_start = appear_time;\n this.life_time_end = hit_object.end_time + 800;\n }\n\n is_alive(time: number): boolean {\n return time >= this.life_time_start && time <= this.life_time_end;\n }\n\n update(time: number): void {\n this.alpha = this.transforms.get_value(\"alpha\", time, 1);\n this.scale = this.transforms.get_value(\"scale\", time, 1);\n this.rotation = this.transforms.get_value(\"rotation\", time, 0);\n\n this.update_state(time);\n }\n\n protected update_state(time: number): void {\n if (this.armed_state === ArmedState.Idle && time >= this.hit_object.time) {\n this.armed_state = ArmedState.Hit;\n // first crossing of hit time, useful for one-shot effects\n this.on_hit(time);\n }\n }\n\n protected on_hit(time: number): void {\n // override in subclasses\n }\n\n abstract render(time: number): void;\n\n // multi-pass rendering support\n render_body_pass(time: number): void {}\n render_head_pass(time: number): void {}\n\n get start_time(): number {\n return this.hit_object.time;\n }\n\n get end_time(): number {\n return this.hit_object.end_time;\n }\n\n get combo_number(): number {\n return this.hit_object.combo_number ?? 0;\n }\n\n get combo_count(): number {\n return this.hit_object.combo_count ?? 1;\n }\n\n get position(): [number, number] {\n return [this.x, this.y];\n }\n}\n",
22
+ "import type { IRenderBackend } from \"../backend/render_backend\";\nimport type { RenderHitObject } from \"../render_types\";\nimport type { ISkinConfig } from \"../../skin/skin_config\";\nimport { TransformSequence, Easing } from \"./transforms\";\n\nexport enum ArmedState {\n Idle,\n Hit,\n Miss\n}\n\nexport interface DrawableConfig {\n backend: IRenderBackend;\n skin: ISkinConfig;\n preempt: number;\n fade_in: number;\n radius: number;\n scale?: number;\n mods: number;\n}\n\nexport abstract class Drawable {\n protected backend: IRenderBackend;\n protected skin: ISkinConfig;\n\n protected hit_object: RenderHitObject;\n protected config: DrawableConfig;\n\n protected alpha = 1;\n protected scale = 1;\n protected rotation = 0;\n protected x = 0;\n protected y = 0;\n\n protected armed_state = ArmedState.Idle;\n protected transforms = new TransformSequence();\n\n protected life_time_start = 0;\n protected life_time_end = 0;\n\n constructor(hit_object: RenderHitObject, config: DrawableConfig) {\n this.hit_object = hit_object;\n this.config = config;\n this.backend = config.backend;\n this.skin = config.skin;\n\n const data = hit_object.data as { pos: [number, number] };\n this.x = data.pos[0];\n this.y = data.pos[1];\n\n this.apply_defaults();\n }\n\n protected apply_defaults(): void {\n const { hit_object, config } = this;\n const appear_time = hit_object.time - config.preempt;\n\n this.life_time_start = appear_time;\n this.life_time_end = hit_object.end_time + 800;\n }\n\n is_alive(time: number): boolean {\n return time >= this.life_time_start && time <= this.life_time_end;\n }\n\n update(time: number): void {\n this.alpha = this.transforms.get_value(\"alpha\", time, 1);\n this.scale = this.transforms.get_value(\"scale\", time, 1);\n this.rotation = this.transforms.get_value(\"rotation\", time, 0);\n\n this.update_state(time);\n }\n\n protected update_state(time: number): void {\n if (this.armed_state === ArmedState.Idle && time >= this.hit_object.time) {\n this.armed_state = ArmedState.Hit;\n // first crossing of hit time, useful for one-shot effects\n this.on_hit(time);\n }\n }\n\n protected on_hit(time: number): void {\n // override in subclasses\n }\n\n abstract render(time: number): void;\n\n // multi-pass rendering support\n render_body_pass(time: number): void {}\n render_head_pass(time: number): void {}\n dispose(): void {}\n\n get start_time(): number {\n return this.hit_object.time;\n }\n\n get end_time(): number {\n return this.hit_object.end_time;\n }\n\n get combo_number(): number {\n return this.hit_object.combo_number ?? 0;\n }\n\n get combo_count(): number {\n return this.hit_object.combo_count ?? 1;\n }\n\n get position(): [number, number] {\n return [this.x, this.y];\n }\n}\n",
23
23
  "import type { IRenderBackend } from \"../backend/render_backend\";\nimport type { DrawableConfig } from \"./drawable\";\nimport type { ISkinConfig } from \"../../skin/skin_config\";\nimport type { Vec2 } from \"../../math/vector2\";\nimport { clamp, lerp } from \"../../math/vector2\";\nimport { Easing } from \"./transforms\";\nimport { Mods, has_mod } from \"../../types/mods\";\n\ntype circle_visual_state = {\n circle_alpha: number;\n circle_scale: number;\n number_alpha: number;\n};\n\nexport class CircleVisual {\n private state: circle_visual_state = {\n circle_alpha: 0,\n circle_scale: 1,\n number_alpha: 1\n };\n\n update(time: number, hit_time: number, config: DrawableConfig): void {\n const appear_time = hit_time - config.preempt;\n\n if (time < appear_time) {\n this.reset_pre_hit_state();\n return;\n }\n\n if (time < hit_time) {\n this.update_pre_hit(time, appear_time, hit_time, config);\n return;\n }\n\n const pre_hit_alpha = get_pre_hit_alpha(hit_time, appear_time, hit_time, config);\n this.update_post_hit(time, hit_time, config, pre_hit_alpha);\n }\n\n render(backend: IRenderBackend, skin: ISkinConfig, position: Vec2, radius: number, combo_color: string, combo_count: number): void {\n const { circle_alpha, circle_scale, number_alpha } = this.state;\n\n if (circle_alpha <= 0.01) return;\n\n const scaled_radius = radius * circle_scale;\n\n if (circle_alpha > 0.01) {\n const border_width = radius * skin.circle_border_width;\n const inner_radius = radius * (1 - skin.circle_border_width / 2) * circle_scale;\n\n backend.set_alpha(circle_alpha * skin.hit_circle_opacity);\n backend.draw_circle(position[0], position[1], inner_radius, combo_color, \"rgba(255,255,255,1)\", border_width);\n\n if (number_alpha > 0.01) {\n const font_size = radius * 0.7 * circle_scale;\n backend.set_alpha(number_alpha * skin.hit_circle_opacity);\n const font_name = skin.default_font ?? '\"Trebuchet MS\", Verdana, Arial, sans-serif';\n const font = `600 ${font_size}px ${font_name}`;\n backend.draw_text(String(combo_count), position[0], position[1], font, \"rgba(255,255,255,1)\", \"center\", \"middle\");\n }\n\n backend.set_alpha(1);\n }\n\n backend.set_alpha(1);\n }\n\n get circle_alpha(): number {\n return this.state.circle_alpha;\n }\n\n private reset_pre_hit_state(): void {\n this.state.circle_alpha = 0;\n this.state.circle_scale = 1;\n this.state.number_alpha = 1;\n }\n\n private update_pre_hit(time: number, appear_time: number, hit_time: number, config: DrawableConfig): void {\n const alpha = get_pre_hit_alpha(time, appear_time, hit_time, config);\n this.state.circle_alpha = alpha;\n this.state.circle_scale = 1;\n this.state.number_alpha = alpha;\n }\n\n private update_post_hit(time: number, hit_time: number, config: DrawableConfig, pre_hit_alpha: number): void {\n const elapsed = time - hit_time;\n const { skin } = config;\n const duration = Math.max(90, skin.hit_animation_duration * 0.75);\n const fade_out_progress = clamp(elapsed / duration, 0, 1);\n\n const base_alpha = has_mod(config.mods, Mods.Hidden) ? clamp(pre_hit_alpha, 0, 1) : clamp(Math.max(pre_hit_alpha, 0.25), 0, 1);\n this.state.circle_alpha = base_alpha * (1 - Easing.OutQuad(fade_out_progress));\n\n const resize_duration = Math.max(90, duration * 0.85);\n const scale_progress = clamp(elapsed / resize_duration, 0, 1);\n this.state.circle_scale = lerp(1, skin.hit_animation_scale, Easing.OutCubic(scale_progress));\n this.state.number_alpha = this.state.circle_alpha;\n }\n}\n\nexport const get_pre_hit_alpha = (time: number, appear_time: number, hit_time: number, config: DrawableConfig): number => {\n const fade_in_progress = clamp((time - appear_time) / config.fade_in, 0, 1);\n let alpha = fade_in_progress;\n\n if (has_mod(config.mods, Mods.Hidden)) {\n const fade_out_start = hit_time - config.preempt + config.fade_in;\n const fade_out_duration = config.preempt * 0.3;\n if (time > fade_out_start) {\n const fade_out_progress = clamp((time - fade_out_start) / fade_out_duration, 0, 1);\n alpha *= 1 - fade_out_progress;\n }\n }\n\n return alpha;\n};\n",
24
24
  "import type { IRenderBackend } from \"../backend/render_backend\";\nimport type { DrawableConfig } from \"./drawable\";\nimport type { ISkinConfig } from \"../../skin/skin_config\";\nimport type { Vec2 } from \"../../math/vector2\";\nimport { clamp, lerp } from \"../../math/vector2\";\nimport { Easing } from \"./transforms\";\nimport { Mods, has_mod } from \"../../types/mods\";\nimport { get_pre_hit_alpha } from \"./circle_visual\";\n\ntype hit_burst_state = {\n alpha: number;\n scale: number;\n};\n\nexport class HitBurstEffect {\n private state: hit_burst_state = {\n alpha: 0,\n scale: 1\n };\n\n update(time: number, hit_time: number, config: DrawableConfig): void {\n if (!config.skin.enable_hitburst) {\n this.state.alpha = 0;\n this.state.scale = 1;\n return;\n }\n\n if (time < hit_time) {\n this.state.alpha = 0;\n this.state.scale = 1;\n return;\n }\n\n const appear_time = hit_time - config.preempt;\n const pre_hit_alpha = get_pre_hit_alpha(hit_time, appear_time, hit_time, config);\n const base_alpha = has_mod(config.mods, Mods.Hidden) ? clamp(pre_hit_alpha, 0, 1) : clamp(Math.max(pre_hit_alpha, 0.25), 0, 1);\n\n const elapsed = time - hit_time;\n const duration = Math.max(70, config.skin.hitburst_duration);\n const progress = clamp(elapsed / duration, 0, 1);\n const burst_alpha = 1 - Easing.OutQuint(progress);\n this.state.alpha = has_mod(config.mods, Mods.Hidden) ? burst_alpha * base_alpha : burst_alpha;\n this.state.scale = lerp(1, config.skin.hitburst_scale, Easing.OutCubic(progress));\n }\n\n render(backend: IRenderBackend, skin: ISkinConfig, position: Vec2, radius: number, combo_color: string): void {\n if (!skin.enable_hitburst) return;\n if (this.state.alpha <= 0.01) return;\n\n backend.set_alpha(this.state.alpha);\n backend.draw_circle(position[0], position[1], radius * this.state.scale, \"rgba(255,255,255,1)\", \"transparent\", 0);\n\n if (skin.hitburst_glow_enabled) {\n backend.save();\n backend.set_blend_mode(\"lighter\");\n backend.set_alpha(this.state.alpha * skin.hitburst_glow_opacity);\n const glow_color = skin.hitburst_glow_use_combo_color ? combo_color : (skin.hitburst_glow_color ?? combo_color);\n backend.draw_circle(position[0], position[1], radius * this.state.scale * 1.08, glow_color, \"transparent\", 0);\n backend.restore();\n }\n }\n}\n",
25
25
  "import type { RenderHitObject } from \"../render_types\";\nimport { Drawable, type DrawableConfig } from \"./drawable\";\nimport { CircleVisual } from \"./circle_visual\";\nimport { HitBurstEffect } from \"./hit_burst\";\nimport { get_combo_color } from \"../../skin/skin_config\";\n\nexport class DrawableHitCircle extends Drawable {\n private visual = new CircleVisual();\n private hitburst = new HitBurstEffect();\n\n constructor(hit_object: RenderHitObject, config: DrawableConfig) {\n super(hit_object, config);\n }\n\n update(time: number): void {\n super.update(time);\n this.visual.update(time, this.hit_object.time, this.config);\n this.hitburst.update(time, this.hit_object.time, this.config);\n }\n\n render(time: number): void {\n const { backend, skin, config } = this;\n const { radius } = config;\n const pos = this.position;\n const combo_color = get_combo_color(skin, this.combo_number, 1);\n\n this.visual.render(backend, skin, pos, radius, combo_color, this.combo_count);\n this.hitburst.render(backend, skin, pos, radius, combo_color);\n }\n}\n",
26
26
  "import type { Vec2 } from \"../../math/vector2\";\n\nexport type SliderTickEvent = {\n pos: Vec2;\n time: number;\n span_index: number;\n path_progress: number;\n};\n\nexport type SliderRepeatEvent = {\n pos: Vec2;\n time: number;\n repeat_index: number;\n path_progress: number;\n};\n\ntype SliderEventInputs = {\n start_time: number;\n span_duration: number;\n span_count: number;\n length: number;\n tick_distance: number;\n min_distance_from_end: number;\n get_position_at_progress: (progress: number) => Vec2;\n};\n\nexport const generate_slider_events = (inputs: SliderEventInputs): { ticks: SliderTickEvent[]; repeats: SliderRepeatEvent[] } => {\n const { start_time, span_duration, span_count, length, tick_distance, min_distance_from_end, get_position_at_progress } = inputs;\n const ticks: SliderTickEvent[] = [];\n const repeats: SliderRepeatEvent[] = [];\n\n if (length <= 0 || span_duration <= 0 || span_count <= 0) {\n return { ticks, repeats };\n }\n\n const max_length = 100000;\n const clamped_length = Math.min(max_length, length);\n const clamped_tick_distance = Math.min(Math.max(tick_distance, 0), clamped_length);\n const clamped_min_distance = Math.max(0, Math.min(min_distance_from_end, clamped_length));\n\n for (let span = 0; span < span_count; span++) {\n const span_start_time = start_time + span * span_duration;\n const reversed = span % 2 === 1;\n\n if (clamped_tick_distance > 0) {\n const span_ticks = generate_ticks(\n span,\n span_start_time,\n span_duration,\n reversed,\n clamped_length,\n clamped_tick_distance,\n clamped_min_distance,\n get_position_at_progress\n );\n if (reversed) {\n span_ticks.reverse();\n }\n ticks.push(...span_ticks);\n }\n\n if (span < span_count - 1) {\n const path_progress = (span + 1) % 2;\n repeats.push({\n pos: get_position_at_progress(path_progress),\n time: span_start_time + span_duration,\n repeat_index: span,\n path_progress\n });\n }\n }\n\n ticks.sort((a, b) => a.time - b.time);\n\n return { ticks, repeats };\n};\n\nconst generate_ticks = (\n span_index: number,\n span_start_time: number,\n span_duration: number,\n reversed: boolean,\n length: number,\n tick_distance: number,\n min_distance_from_end: number,\n get_position_at_progress: (progress: number) => Vec2\n): SliderTickEvent[] => {\n const ticks: SliderTickEvent[] = [];\n\n for (let d = tick_distance; d <= length; d += tick_distance) {\n if (d >= length - min_distance_from_end) break;\n\n const path_progress = d / length;\n const time_progress = reversed ? 1 - path_progress : path_progress;\n\n ticks.push({\n pos: get_position_at_progress(path_progress),\n time: span_start_time + time_progress * span_duration,\n span_index,\n path_progress\n });\n }\n\n return ticks;\n};\n",
27
- "import type { RenderHitObject, RenderSliderData } from \"../render_types\";\nimport type { RenderImage } from \"../backend/render_backend\";\nimport { Drawable, type DrawableConfig } from \"./drawable\";\nimport { CircleVisual } from \"./circle_visual\";\nimport { Easing } from \"./transforms\";\nimport { get_combo_color } from \"../../skin/skin_config\";\nimport { clamp, vec2_len, vec2_sub, vec2_lerp, type Vec2 } from \"../../math/vector2\";\nimport { Mods, has_mod } from \"../../types/mods\";\nimport { generate_slider_events, type SliderRepeatEvent, type SliderTickEvent } from \"../standard/slider_events\";\n\nconst FADE_OUT_DURATION = 240;\nconst ARROW_SCALE_AMOUNT = 1.3;\nconst ARROW_MOVE_OUT_DURATION = 35;\nconst ARROW_MOVE_IN_DURATION = 250;\nconst ARROW_TOTAL_CYCLE = 300;\nconst TICK_ANIM_DURATION = 150;\nconst TICK_SCALE_DURATION = TICK_ANIM_DURATION * 4;\n\ntype TickEntry = {\n tick: SliderTickEvent;\n appear_time: number;\n visible_end: number;\n preempt: number;\n};\n\nexport class DrawableSlider extends Drawable {\n private slider_data: RenderSliderData;\n private position_path: Vec2[];\n private render_path: Vec2[];\n private path_length: number;\n private span_duration: number;\n\n private body_alpha = 0;\n private head_visual = new CircleVisual();\n private ball_alpha = 0;\n private ball_position: Vec2;\n private follow_alpha = 0;\n private follow_scale = 1;\n\n private ticks: SliderTickEvent[] = [];\n private repeats: SliderRepeatEvent[] = [];\n private tick_distance: number;\n private min_distance_from_end: number;\n private cached_texture: RenderImage | null = null;\n private cached_scale: number = 1;\n private tick_entries: TickEntry[] = [];\n private tick_entries_by_start: TickEntry[] = [];\n\n constructor(\n hit_object: RenderHitObject,\n config: DrawableConfig,\n path: Vec2[],\n span_duration: number,\n tick_distance: number,\n min_distance_from_end: number\n ) {\n super(hit_object, config);\n this.slider_data = hit_object.data as RenderSliderData;\n const resample_step = Math.max(1, config.radius * 0.05);\n this.position_path = path;\n this.render_path = this.resample_path(path, resample_step);\n this.span_duration = span_duration;\n this.tick_distance = tick_distance;\n this.min_distance_from_end = min_distance_from_end;\n const calculated_length = this.calculate_path_length();\n this.path_length = this.slider_data.distance > 0 ? this.slider_data.distance : calculated_length;\n this.ball_position = this.slider_data.pos;\n\n this.build_nested_objects();\n\n this.life_time_end = hit_object.end_time + FADE_OUT_DURATION;\n }\n\n private build_nested_objects(): void {\n const { slider_data, path_length, span_duration, hit_object } = this;\n const span_count = Math.max(1, slider_data.repetitions);\n const max_length = 100000;\n const length = Math.min(max_length, slider_data.distance > 0 ? slider_data.distance : path_length);\n const tick_distance = clamp(this.tick_distance, 0, length);\n\n if (length <= 0 || span_duration <= 0) {\n this.ticks = [];\n this.repeats = [];\n return;\n }\n\n // ticks/repeats are derived in slider space so render timing is stable across mods\n const result = generate_slider_events({\n start_time: hit_object.time,\n span_duration,\n span_count,\n length,\n tick_distance,\n min_distance_from_end: this.min_distance_from_end,\n get_position_at_progress: (progress) => this.get_position_at_progress(progress)\n });\n\n this.ticks = result.ticks;\n this.repeats = result.repeats;\n this.build_tick_entries();\n }\n private calculate_path_length(): number {\n let length = 0;\n for (let i = 1; i < this.position_path.length; i++) {\n length += vec2_len(vec2_sub(this.position_path[i], this.position_path[i - 1]));\n }\n return length;\n }\n\n private resample_path(path: Vec2[], step: number): Vec2[] {\n if (path.length < 2) return path.slice();\n\n const result: Vec2[] = [path[0]];\n let total_length = 0;\n const seg_lengths: number[] = [];\n\n for (let i = 1; i < path.length; i++) {\n const len = vec2_len(vec2_sub(path[i], path[i - 1]));\n seg_lengths.push(len);\n total_length += len;\n }\n\n if (total_length <= 0) return result;\n\n let target = step;\n let acc = 0;\n let seg_index = 0;\n\n while (target < total_length && seg_index < seg_lengths.length) {\n const seg_len = seg_lengths[seg_index];\n const a = path[seg_index];\n const b = path[seg_index + 1];\n\n if (seg_len > 0 && acc + seg_len >= target) {\n const t = (target - acc) / seg_len;\n result.push(vec2_lerp(a, b, t));\n target += step;\n } else {\n acc += seg_len;\n seg_index++;\n }\n }\n\n const last = path[path.length - 1];\n const last_added = result[result.length - 1];\n if (last_added[0] !== last[0] || last_added[1] !== last[1]) {\n result.push(last);\n }\n\n return result;\n }\n\n update(time: number): void {\n super.update(time);\n this.calculate_ball_position(time);\n this.calculate_opacities(time);\n this.head_visual.update(time, this.hit_object.time, this.config);\n }\n\n private calculate_ball_position(time: number): void {\n const { hit_object, span_duration } = this;\n const FOLLOW_IN_DURATION = 300;\n const FOLLOW_OUT_DURATION = 300;\n const FOLLOW_AREA = 2.4;\n\n // before slider starts\n if (time < hit_object.time) {\n this.ball_alpha = 0;\n this.follow_alpha = 0;\n this.follow_scale = 1;\n return;\n }\n\n // during slider\n if (time <= hit_object.end_time) {\n const elapsed = time - hit_object.time;\n const span_count = Math.max(1, this.slider_data.repetitions);\n const span_index = Math.min(Math.floor(elapsed / span_duration), span_count - 1);\n const span_progress = clamp((elapsed - span_index * span_duration) / span_duration, 0, 1);\n const t = span_index % 2 === 1 ? 1 - span_progress : span_progress;\n\n this.ball_position = this.get_position_at_progress(t);\n this.ball_alpha = 1;\n\n // follow circle animates in with OutQuint\n const follow_in_progress = clamp(elapsed / FOLLOW_IN_DURATION, 0, 1);\n const eased_in = Easing.OutQuint(follow_in_progress);\n this.follow_alpha = eased_in;\n this.follow_scale = 1 + (FOLLOW_AREA - 1) * eased_in;\n return;\n }\n\n // after slider ends - animate out\n const time_since_end = time - hit_object.end_time;\n const fade_progress = clamp(time_since_end / FOLLOW_OUT_DURATION, 0, 1);\n const eased_out = Easing.OutQuint(fade_progress);\n\n this.ball_alpha = 1 - eased_out;\n this.follow_alpha = 1 - eased_out;\n this.follow_scale = FOLLOW_AREA - (FOLLOW_AREA - 1) * eased_out;\n }\n\n private get_position_at_progress(progress: number): Vec2 {\n const target_length = progress * this.path_length;\n return this.get_position_at_length(target_length);\n }\n\n private get_position_at_length(target_length: number): Vec2 {\n let accumulated = 0;\n for (let i = 1; i < this.position_path.length; i++) {\n const segment_length = vec2_len(vec2_sub(this.position_path[i], this.position_path[i - 1]));\n if (accumulated + segment_length >= target_length) {\n const local_t = (target_length - accumulated) / segment_length;\n return vec2_lerp(this.position_path[i - 1], this.position_path[i], local_t);\n }\n accumulated += segment_length;\n }\n return this.position_path[this.position_path.length - 1];\n }\n\n private calculate_opacities(time: number): void {\n const { hit_object, config } = this;\n const appear_time = hit_object.time - config.preempt;\n const hit_time = hit_object.time;\n\n if (has_mod(config.mods, Mods.Hidden)) {\n const fade_out_start = hit_time - config.preempt + config.fade_in;\n if (time < appear_time) {\n this.body_alpha = 0;\n } else if (time < fade_out_start) {\n this.body_alpha = clamp((time - appear_time) / config.fade_in, 0, 1);\n } else if (time <= hit_object.end_time) {\n const denom = Math.max(1, hit_object.end_time - fade_out_start);\n this.body_alpha = 1 - clamp((time - fade_out_start) / denom, 0, 1);\n } else {\n this.body_alpha = 0;\n }\n } else {\n // body: fade in over fade_in, then fade out 240ms after end\n if (time < appear_time) {\n this.body_alpha = 0;\n } else if (time < hit_time) {\n this.body_alpha = clamp((time - appear_time) / config.fade_in, 0, 1);\n } else if (time <= hit_object.end_time) {\n this.body_alpha = 1;\n } else {\n this.body_alpha = 1 - clamp((time - hit_object.end_time) / FADE_OUT_DURATION, 0, 1);\n }\n }\n }\n\n render(time: number): void {\n if (this.body_alpha <= 0 && this.head_visual.circle_alpha <= 0 && this.ball_alpha <= 0) {\n return;\n }\n\n this.render_body(time);\n this.render_head();\n this.render_ball(time);\n }\n\n render_body_pass(time: number): void {\n this.render_body(time);\n }\n\n render_head_pass(time: number): void {\n this.render_head();\n this.render_reverse_arrows(time);\n this.render_ball(time);\n }\n\n private render_body(time: number): void {\n if (this.body_alpha <= 0.01 || this.render_path.length < 2) return;\n\n const { backend } = this;\n this.prepare_body_cache();\n\n if (this.cached_texture && this.cached_texture.min_x !== undefined && this.cached_texture.min_y !== undefined) {\n const scale = this.cached_scale;\n backend.set_alpha(this.body_alpha);\n backend.draw_image(\n this.cached_texture,\n this.cached_texture.min_x,\n this.cached_texture.min_y,\n this.cached_texture.width / scale,\n this.cached_texture.height / scale\n );\n backend.set_alpha(1);\n }\n\n this.render_ticks(time);\n }\n\n prepare_body_cache(): void {\n if (this.render_path.length < 2) {\n return;\n }\n\n const { backend, skin, config } = this;\n const { radius } = config;\n\n const render_scale = (config.scale ?? 1) * (skin.slider_render_scale || 1);\n\n if (!this.cached_texture || this.cached_scale !== render_scale) {\n const body_color = get_combo_color(skin, this.combo_number, 1);\n const border_color = skin.slider_border_color ?? \"rgba(255,255,255,1)\";\n const scale = render_scale;\n\n this.cached_texture = backend.render_slider_to_image(\n this.render_path,\n radius,\n border_color,\n body_color,\n scale,\n skin.slider_body_opacity,\n skin.slider_border_opacity\n );\n this.cached_scale = render_scale;\n }\n }\n\n private render_ticks(time: number): void {\n if (this.tick_entries_by_start.length === 0) return;\n\n const { backend, config, hit_object } = this;\n const { radius } = config;\n\n const base_tick_radius = radius * 0.12;\n const appear_time = hit_object.time - config.preempt;\n\n const hidden = has_mod(config.mods, Mods.Hidden);\n\n for (const entry of this.tick_entries_by_start) {\n const tick = entry.tick;\n\n // calculate when this tick became visible\n const elapsed_since_appear = time - entry.appear_time;\n\n if (elapsed_since_appear < 0) continue;\n if (entry.visible_end < time) continue;\n\n // fade in over TICK_ANIM_DURATION\n let tick_alpha = clamp(elapsed_since_appear / TICK_ANIM_DURATION, 0, 1);\n\n if (hidden && entry.preempt > 0) {\n const hidden_fade_duration = Math.min(entry.preempt - TICK_ANIM_DURATION, 1000);\n if (hidden_fade_duration > 0) {\n const fade_out_start = tick.time - hidden_fade_duration;\n if (time >= fade_out_start) {\n const fade_out_progress = clamp((time - fade_out_start) / hidden_fade_duration, 0, 1);\n tick_alpha *= 1 - fade_out_progress;\n }\n }\n } else if (time > tick.time) {\n const fade_out_progress = clamp((time - tick.time) / TICK_ANIM_DURATION, 0, 1);\n tick_alpha *= 1 - fade_out_progress;\n }\n\n tick_alpha *= this.body_alpha;\n\n // scale from 0.5 to 1.0 over TICK_SCALE_DURATION with elastic out\n const scale_progress = clamp(elapsed_since_appear / TICK_SCALE_DURATION, 0, 1);\n const elastic_value = this.ease_out_elastic_half(scale_progress);\n const tick_scale = 0.5 + 0.5 * elastic_value;\n const tick_radius = base_tick_radius * tick_scale;\n\n if (tick_alpha > 0.01) {\n backend.set_alpha(tick_alpha);\n backend.draw_circle(tick.pos[0], tick.pos[1], tick_radius, \"rgba(255,255,255,0.8)\", \"transparent\", 0);\n }\n }\n\n backend.set_alpha(1);\n }\n\n private build_tick_entries(): void {\n const { hit_object, config } = this;\n const appear_time = hit_object.time - config.preempt;\n const hidden = has_mod(config.mods, Mods.Hidden);\n\n this.tick_entries = this.ticks.map((tick) => {\n const span_start_time = hit_object.time + tick.span_index * this.span_duration;\n const base_preempt = config.preempt;\n const offset = tick.span_index > 0 ? 200 : base_preempt * 0.66;\n const time_preempt = (tick.time - span_start_time) / 2 + offset;\n const tick_appear_time = tick.time - time_preempt;\n const visible_end = hidden ? tick.time : tick.time + TICK_ANIM_DURATION;\n return {\n tick,\n appear_time: tick_appear_time,\n visible_end,\n preempt: time_preempt\n };\n });\n\n this.tick_entries_by_start = [...this.tick_entries].sort((a, b) => a.appear_time - b.appear_time);\n }\n\n private ease_out_elastic_half(t: number): number {\n if (t <= 0) return 0;\n if (t >= 1) return 1;\n const p = 0.3;\n return Math.pow(2, -10 * t) * Math.sin(((t - p / 4) * (2 * Math.PI)) / p) + 1;\n }\n\n private render_reverse_arrows(time: number): void {\n if (this.repeats.length === 0) return;\n\n const { backend, config, hit_object, span_duration } = this;\n const { radius } = config;\n const arrow_size = radius * 0.6;\n\n for (const repeat of this.repeats) {\n // the first repeat appears with the slider.\n // subsequent repeats appear exactly 2 * SpanDuration before they are hit.\n let time_preempt = config.preempt;\n if (repeat.repeat_index > 0) {\n time_preempt = span_duration * 2;\n } else {\n // the first repeat appears when the slider appears\n time_preempt += hit_object.time - (hit_object.time - config.preempt);\n }\n\n const appear_time = repeat.time - time_preempt;\n const is_at_end = repeat.repeat_index % 2 === 0;\n\n // dont show if not in range\n if (time < appear_time || time > repeat.time + FADE_OUT_DURATION) continue;\n\n // fade in logic: first repeat fades with slider, others pop in\n let alpha = this.body_alpha * 0.9;\n if (repeat.repeat_index === 0) {\n const fade_in_progress = clamp((time - appear_time) / 150, 0, 1);\n alpha *= Easing.OutQuint(fade_in_progress);\n } else {\n // pop in (TimeFadeIn = 0)\n if (time < appear_time) alpha = 0;\n }\n\n if (time > repeat.time) {\n // fade out after hit\n const anim_duration = Math.min(300, span_duration);\n alpha *= 1 - clamp((time - repeat.time) / anim_duration, 0, 1);\n }\n\n if (alpha <= 0.01) continue;\n\n // calculate arrow direction\n const curve = this.position_path;\n let aim_rotation_vector: Vec2;\n\n if (is_at_end) {\n // arrow at end pointing back\n const search_start = curve.length - 1;\n aim_rotation_vector = curve[0];\n\n for (let i = search_start; i >= 0; i--) {\n if (Math.abs(curve[i][0] - repeat.pos[0]) > 0.01 || Math.abs(curve[i][1] - repeat.pos[1]) > 0.01) {\n aim_rotation_vector = curve[i];\n break;\n }\n }\n } else {\n // arrow at start pointing forward\n aim_rotation_vector = curve[curve.length - 1];\n\n for (let i = 0; i < curve.length; i++) {\n if (Math.abs(curve[i][0] - repeat.pos[0]) > 0.01 || Math.abs(curve[i][1] - repeat.pos[1]) > 0.01) {\n aim_rotation_vector = curve[i];\n break;\n }\n }\n }\n\n const angle = Math.atan2(aim_rotation_vector[1] - repeat.pos[1], aim_rotation_vector[0] - repeat.pos[0]);\n\n // calculate pulsing scale\n let scale = 1.0;\n if (time < repeat.time) {\n const animation_start = hit_object.time - config.preempt;\n const loop_time = (time - animation_start) % ARROW_TOTAL_CYCLE;\n if (loop_time < ARROW_MOVE_OUT_DURATION) {\n scale = 1 + (ARROW_SCALE_AMOUNT - 1) * Easing.Out(loop_time / ARROW_MOVE_OUT_DURATION);\n } else {\n const in_progress = (loop_time - ARROW_MOVE_OUT_DURATION) / ARROW_MOVE_IN_DURATION;\n scale = ARROW_SCALE_AMOUNT - (ARROW_SCALE_AMOUNT - 1) * Easing.Out(clamp(in_progress, 0, 1));\n }\n } else {\n // after hit: scale up\n const anim_duration = Math.min(300, span_duration);\n const progress = clamp((time - repeat.time) / anim_duration, 0, 1);\n scale = 1 + 0.5 * Easing.Out(progress);\n }\n\n const scaled_arrow_size = arrow_size * scale;\n\n backend.save();\n backend.set_alpha(alpha);\n backend.translate(repeat.pos[0], repeat.pos[1]);\n backend.rotate(angle);\n\n backend.begin_path();\n backend.move_to(scaled_arrow_size * 0.8, 0);\n backend.line_to(-scaled_arrow_size * 0.4, -scaled_arrow_size * 0.5);\n backend.line_to(-scaled_arrow_size * 0.4, scaled_arrow_size * 0.5);\n backend.close_path();\n backend.fill_path(\"rgba(255,255,255,0.9)\");\n\n backend.restore();\n }\n }\n\n private render_head(): void {\n if (this.head_visual.circle_alpha <= 0.01) return;\n\n const { backend, skin, config } = this;\n const { radius } = config;\n const pos = this.slider_data.pos;\n const combo_color = get_combo_color(skin, this.combo_number, 1);\n\n this.head_visual.render(backend, skin, pos, radius, combo_color, this.combo_count);\n }\n\n private render_ball(time: number): void {\n if (this.ball_alpha <= 0.01 && this.follow_alpha <= 0.01) return;\n\n const { backend, skin, config } = this;\n const { radius } = config;\n const pos = this.ball_position;\n const combo_color = get_combo_color(skin, this.combo_number, 0.9);\n\n // follow circle with smooth scale animation\n if (this.follow_alpha > 0.01) {\n const follow_size = radius * this.follow_scale;\n\n backend.set_alpha(this.follow_alpha * skin.follow_circle_opacity);\n backend.begin_path();\n backend.arc_to(pos[0], pos[1], follow_size, 0, Math.PI * 2);\n backend.stroke_path(skin.follow_circle_color, skin.follow_circle_width);\n }\n\n // slider ball\n if (skin.enable_slider_ball && this.ball_alpha > 0.01) {\n backend.set_alpha(this.ball_alpha * skin.slider_ball_opacity);\n backend.draw_circle(pos[0], pos[1], radius * 0.85, combo_color, \"rgba(255,255,255,0.9)\", radius * 0.1);\n }\n\n backend.set_alpha(1);\n }\n}\n",
27
+ "import type { RenderHitObject, RenderSliderData } from \"../render_types\";\nimport type { RenderImage } from \"../backend/render_backend\";\nimport { Drawable, type DrawableConfig } from \"./drawable\";\nimport { CircleVisual } from \"./circle_visual\";\nimport { Easing } from \"./transforms\";\nimport { get_combo_color } from \"../../skin/skin_config\";\nimport { clamp, vec2_len, vec2_sub, vec2_lerp, type Vec2 } from \"../../math/vector2\";\nimport { Mods, has_mod } from \"../../types/mods\";\nimport { generate_slider_events, type SliderRepeatEvent, type SliderTickEvent } from \"../standard/slider_events\";\n\nconst FADE_OUT_DURATION = 240;\nconst ARROW_SCALE_AMOUNT = 1.3;\nconst ARROW_MOVE_OUT_DURATION = 35;\nconst ARROW_MOVE_IN_DURATION = 250;\nconst ARROW_TOTAL_CYCLE = 300;\nconst TICK_ANIM_DURATION = 150;\nconst TICK_SCALE_DURATION = TICK_ANIM_DURATION * 4;\n\ntype TickEntry = {\n tick: SliderTickEvent;\n appear_time: number;\n visible_end: number;\n preempt: number;\n};\n\nexport class DrawableSlider extends Drawable {\n private slider_data: RenderSliderData;\n private position_path: Vec2[];\n private render_path: Vec2[];\n private path_length: number;\n private span_duration: number;\n\n private body_alpha = 0;\n private head_visual = new CircleVisual();\n private ball_alpha = 0;\n private ball_position: Vec2;\n private follow_alpha = 0;\n private follow_scale = 1;\n\n private ticks: SliderTickEvent[] = [];\n private repeats: SliderRepeatEvent[] = [];\n private tick_distance: number;\n private min_distance_from_end: number;\n private cached_texture: RenderImage | null = null;\n private cached_scale: number = 1;\n private tick_entries: TickEntry[] = [];\n private tick_entries_by_start: TickEntry[] = [];\n\n constructor(\n hit_object: RenderHitObject,\n config: DrawableConfig,\n path: Vec2[],\n span_duration: number,\n tick_distance: number,\n min_distance_from_end: number\n ) {\n super(hit_object, config);\n this.slider_data = hit_object.data as RenderSliderData;\n const resample_step = Math.max(1, config.radius * 0.05);\n this.position_path = path;\n this.render_path = this.resample_path(path, resample_step);\n this.span_duration = span_duration;\n this.tick_distance = tick_distance;\n this.min_distance_from_end = min_distance_from_end;\n const calculated_length = this.calculate_path_length();\n this.path_length = this.slider_data.distance > 0 ? this.slider_data.distance : calculated_length;\n this.ball_position = this.slider_data.pos;\n\n this.build_nested_objects();\n\n this.life_time_end = hit_object.end_time + FADE_OUT_DURATION;\n }\n\n private build_nested_objects(): void {\n const { slider_data, path_length, span_duration, hit_object } = this;\n const span_count = Math.max(1, slider_data.repetitions);\n const max_length = 100000;\n const length = Math.min(max_length, slider_data.distance > 0 ? slider_data.distance : path_length);\n const tick_distance = clamp(this.tick_distance, 0, length);\n\n if (length <= 0 || span_duration <= 0) {\n this.ticks = [];\n this.repeats = [];\n return;\n }\n\n // ticks/repeats are derived in slider space so render timing is stable across mods\n const result = generate_slider_events({\n start_time: hit_object.time,\n span_duration,\n span_count,\n length,\n tick_distance,\n min_distance_from_end: this.min_distance_from_end,\n get_position_at_progress: (progress) => this.get_position_at_progress(progress)\n });\n\n this.ticks = result.ticks;\n this.repeats = result.repeats;\n this.build_tick_entries();\n }\n private calculate_path_length(): number {\n let length = 0;\n for (let i = 1; i < this.position_path.length; i++) {\n length += vec2_len(vec2_sub(this.position_path[i], this.position_path[i - 1]));\n }\n return length;\n }\n\n private resample_path(path: Vec2[], step: number): Vec2[] {\n if (path.length < 2) return path.slice();\n\n const result: Vec2[] = [path[0]];\n let total_length = 0;\n const seg_lengths: number[] = [];\n\n for (let i = 1; i < path.length; i++) {\n const len = vec2_len(vec2_sub(path[i], path[i - 1]));\n seg_lengths.push(len);\n total_length += len;\n }\n\n if (total_length <= 0) return result;\n\n let target = step;\n let acc = 0;\n let seg_index = 0;\n\n while (target < total_length && seg_index < seg_lengths.length) {\n const seg_len = seg_lengths[seg_index];\n const a = path[seg_index];\n const b = path[seg_index + 1];\n\n if (seg_len > 0 && acc + seg_len >= target) {\n const t = (target - acc) / seg_len;\n result.push(vec2_lerp(a, b, t));\n target += step;\n } else {\n acc += seg_len;\n seg_index++;\n }\n }\n\n const last = path[path.length - 1];\n const last_added = result[result.length - 1];\n if (last_added[0] !== last[0] || last_added[1] !== last[1]) {\n result.push(last);\n }\n\n return result;\n }\n\n update(time: number): void {\n super.update(time);\n this.calculate_ball_position(time);\n this.calculate_opacities(time);\n this.head_visual.update(time, this.hit_object.time, this.config);\n }\n\n private calculate_ball_position(time: number): void {\n const { hit_object, span_duration } = this;\n const FOLLOW_IN_DURATION = 300;\n const FOLLOW_OUT_DURATION = 300;\n const FOLLOW_AREA = 2.4;\n\n // before slider starts\n if (time < hit_object.time) {\n this.ball_alpha = 0;\n this.follow_alpha = 0;\n this.follow_scale = 1;\n return;\n }\n\n // during slider\n if (time <= hit_object.end_time) {\n const elapsed = time - hit_object.time;\n const span_count = Math.max(1, this.slider_data.repetitions);\n const span_index = Math.min(Math.floor(elapsed / span_duration), span_count - 1);\n const span_progress = clamp((elapsed - span_index * span_duration) / span_duration, 0, 1);\n const t = span_index % 2 === 1 ? 1 - span_progress : span_progress;\n\n this.ball_position = this.get_position_at_progress(t);\n this.ball_alpha = 1;\n\n // follow circle animates in with OutQuint\n const follow_in_progress = clamp(elapsed / FOLLOW_IN_DURATION, 0, 1);\n const eased_in = Easing.OutQuint(follow_in_progress);\n this.follow_alpha = eased_in;\n this.follow_scale = 1 + (FOLLOW_AREA - 1) * eased_in;\n return;\n }\n\n // after slider ends - animate out\n const time_since_end = time - hit_object.end_time;\n const fade_progress = clamp(time_since_end / FOLLOW_OUT_DURATION, 0, 1);\n const eased_out = Easing.OutQuint(fade_progress);\n\n this.ball_alpha = 1 - eased_out;\n this.follow_alpha = 1 - eased_out;\n this.follow_scale = FOLLOW_AREA - (FOLLOW_AREA - 1) * eased_out;\n }\n\n private get_position_at_progress(progress: number): Vec2 {\n const target_length = progress * this.path_length;\n return this.get_position_at_length(target_length);\n }\n\n private get_position_at_length(target_length: number): Vec2 {\n let accumulated = 0;\n for (let i = 1; i < this.position_path.length; i++) {\n const segment_length = vec2_len(vec2_sub(this.position_path[i], this.position_path[i - 1]));\n if (accumulated + segment_length >= target_length) {\n const local_t = (target_length - accumulated) / segment_length;\n return vec2_lerp(this.position_path[i - 1], this.position_path[i], local_t);\n }\n accumulated += segment_length;\n }\n return this.position_path[this.position_path.length - 1];\n }\n\n private calculate_opacities(time: number): void {\n const { hit_object, config } = this;\n const appear_time = hit_object.time - config.preempt;\n const hit_time = hit_object.time;\n\n if (has_mod(config.mods, Mods.Hidden)) {\n const fade_out_start = hit_time - config.preempt + config.fade_in;\n if (time < appear_time) {\n this.body_alpha = 0;\n } else if (time < fade_out_start) {\n this.body_alpha = clamp((time - appear_time) / config.fade_in, 0, 1);\n } else if (time <= hit_object.end_time) {\n const denom = Math.max(1, hit_object.end_time - fade_out_start);\n this.body_alpha = 1 - clamp((time - fade_out_start) / denom, 0, 1);\n } else {\n this.body_alpha = 0;\n }\n } else {\n // body: fade in over fade_in, then fade out 240ms after end\n if (time < appear_time) {\n this.body_alpha = 0;\n } else if (time < hit_time) {\n this.body_alpha = clamp((time - appear_time) / config.fade_in, 0, 1);\n } else if (time <= hit_object.end_time) {\n this.body_alpha = 1;\n } else {\n this.body_alpha = 1 - clamp((time - hit_object.end_time) / FADE_OUT_DURATION, 0, 1);\n }\n }\n }\n\n render(time: number): void {\n if (this.body_alpha <= 0 && this.head_visual.circle_alpha <= 0 && this.ball_alpha <= 0) {\n return;\n }\n\n this.render_body(time);\n this.render_head();\n this.render_ball(time);\n }\n\n render_body_pass(time: number): void {\n this.render_body(time);\n }\n\n render_head_pass(time: number): void {\n this.render_head();\n this.render_reverse_arrows(time);\n this.render_ball(time);\n }\n\n private render_body(time: number): void {\n if (this.body_alpha <= 0.01 || this.render_path.length < 2) return;\n\n const { backend } = this;\n this.prepare_body_cache();\n\n if (this.cached_texture && this.cached_texture.min_x !== undefined && this.cached_texture.min_y !== undefined) {\n const scale = this.cached_scale;\n backend.set_alpha(this.body_alpha);\n backend.draw_image(\n this.cached_texture,\n this.cached_texture.min_x,\n this.cached_texture.min_y,\n this.cached_texture.width / scale,\n this.cached_texture.height / scale\n );\n backend.set_alpha(1);\n }\n\n this.render_ticks(time);\n }\n\n prepare_body_cache(): void {\n if (this.render_path.length < 2) {\n return;\n }\n\n const { backend, skin, config } = this;\n const { radius } = config;\n\n const render_scale = (config.scale ?? 1) * (skin.slider_render_scale || 1);\n\n if (!this.cached_texture || this.cached_scale !== render_scale) {\n const body_color = get_combo_color(skin, this.combo_number, 1);\n const border_color = skin.slider_border_color ?? \"rgba(255,255,255,1)\";\n const scale = render_scale;\n\n this.cached_texture = backend.render_slider_to_image(\n this.render_path,\n radius,\n border_color,\n body_color,\n scale,\n skin.slider_body_opacity,\n skin.slider_border_opacity\n );\n this.cached_scale = render_scale;\n }\n }\n\n dispose(): void {\n if (this.cached_texture?.source instanceof HTMLCanvasElement) {\n this.cached_texture.source.width = 0;\n this.cached_texture.source.height = 0;\n }\n\n this.cached_texture = null;\n this.position_path = [];\n this.render_path = [];\n this.ticks = [];\n this.repeats = [];\n this.tick_entries = [];\n this.tick_entries_by_start = [];\n }\n\n private render_ticks(time: number): void {\n if (this.tick_entries_by_start.length === 0) return;\n\n const { backend, config, hit_object } = this;\n const { radius } = config;\n\n const base_tick_radius = radius * 0.12;\n const appear_time = hit_object.time - config.preempt;\n\n const hidden = has_mod(config.mods, Mods.Hidden);\n\n for (const entry of this.tick_entries_by_start) {\n const tick = entry.tick;\n\n // calculate when this tick became visible\n const elapsed_since_appear = time - entry.appear_time;\n\n if (elapsed_since_appear < 0) continue;\n if (entry.visible_end < time) continue;\n\n // fade in over TICK_ANIM_DURATION\n let tick_alpha = clamp(elapsed_since_appear / TICK_ANIM_DURATION, 0, 1);\n\n if (hidden && entry.preempt > 0) {\n const hidden_fade_duration = Math.min(entry.preempt - TICK_ANIM_DURATION, 1000);\n if (hidden_fade_duration > 0) {\n const fade_out_start = tick.time - hidden_fade_duration;\n if (time >= fade_out_start) {\n const fade_out_progress = clamp((time - fade_out_start) / hidden_fade_duration, 0, 1);\n tick_alpha *= 1 - fade_out_progress;\n }\n }\n } else if (time > tick.time) {\n const fade_out_progress = clamp((time - tick.time) / TICK_ANIM_DURATION, 0, 1);\n tick_alpha *= 1 - fade_out_progress;\n }\n\n tick_alpha *= this.body_alpha;\n\n // scale from 0.5 to 1.0 over TICK_SCALE_DURATION with elastic out\n const scale_progress = clamp(elapsed_since_appear / TICK_SCALE_DURATION, 0, 1);\n const elastic_value = this.ease_out_elastic_half(scale_progress);\n const tick_scale = 0.5 + 0.5 * elastic_value;\n const tick_radius = base_tick_radius * tick_scale;\n\n if (tick_alpha > 0.01) {\n backend.set_alpha(tick_alpha);\n backend.draw_circle(tick.pos[0], tick.pos[1], tick_radius, \"rgba(255,255,255,0.8)\", \"transparent\", 0);\n }\n }\n\n backend.set_alpha(1);\n }\n\n private build_tick_entries(): void {\n const { hit_object, config } = this;\n const appear_time = hit_object.time - config.preempt;\n const hidden = has_mod(config.mods, Mods.Hidden);\n\n this.tick_entries = this.ticks.map((tick) => {\n const span_start_time = hit_object.time + tick.span_index * this.span_duration;\n const base_preempt = config.preempt;\n const offset = tick.span_index > 0 ? 200 : base_preempt * 0.66;\n const time_preempt = (tick.time - span_start_time) / 2 + offset;\n const tick_appear_time = tick.time - time_preempt;\n const visible_end = hidden ? tick.time : tick.time + TICK_ANIM_DURATION;\n return {\n tick,\n appear_time: tick_appear_time,\n visible_end,\n preempt: time_preempt\n };\n });\n\n this.tick_entries_by_start = [...this.tick_entries].sort((a, b) => a.appear_time - b.appear_time);\n }\n\n private ease_out_elastic_half(t: number): number {\n if (t <= 0) return 0;\n if (t >= 1) return 1;\n const p = 0.3;\n return Math.pow(2, -10 * t) * Math.sin(((t - p / 4) * (2 * Math.PI)) / p) + 1;\n }\n\n private render_reverse_arrows(time: number): void {\n if (this.repeats.length === 0) return;\n\n const { backend, config, hit_object, span_duration } = this;\n const { radius } = config;\n const arrow_size = radius * 0.6;\n\n for (const repeat of this.repeats) {\n // the first repeat appears with the slider.\n // subsequent repeats appear exactly 2 * SpanDuration before they are hit.\n let time_preempt = config.preempt;\n if (repeat.repeat_index > 0) {\n time_preempt = span_duration * 2;\n } else {\n // the first repeat appears when the slider appears\n time_preempt += hit_object.time - (hit_object.time - config.preempt);\n }\n\n const appear_time = repeat.time - time_preempt;\n const is_at_end = repeat.repeat_index % 2 === 0;\n\n // dont show if not in range\n if (time < appear_time || time > repeat.time + FADE_OUT_DURATION) continue;\n\n // fade in logic: first repeat fades with slider, others pop in\n let alpha = this.body_alpha * 0.9;\n if (repeat.repeat_index === 0) {\n const fade_in_progress = clamp((time - appear_time) / 150, 0, 1);\n alpha *= Easing.OutQuint(fade_in_progress);\n } else {\n // pop in (TimeFadeIn = 0)\n if (time < appear_time) alpha = 0;\n }\n\n if (time > repeat.time) {\n // fade out after hit\n const anim_duration = Math.min(300, span_duration);\n alpha *= 1 - clamp((time - repeat.time) / anim_duration, 0, 1);\n }\n\n if (alpha <= 0.01) continue;\n\n // calculate arrow direction\n const curve = this.position_path;\n let aim_rotation_vector: Vec2;\n\n if (is_at_end) {\n // arrow at end pointing back\n const search_start = curve.length - 1;\n aim_rotation_vector = curve[0];\n\n for (let i = search_start; i >= 0; i--) {\n if (Math.abs(curve[i][0] - repeat.pos[0]) > 0.01 || Math.abs(curve[i][1] - repeat.pos[1]) > 0.01) {\n aim_rotation_vector = curve[i];\n break;\n }\n }\n } else {\n // arrow at start pointing forward\n aim_rotation_vector = curve[curve.length - 1];\n\n for (let i = 0; i < curve.length; i++) {\n if (Math.abs(curve[i][0] - repeat.pos[0]) > 0.01 || Math.abs(curve[i][1] - repeat.pos[1]) > 0.01) {\n aim_rotation_vector = curve[i];\n break;\n }\n }\n }\n\n const angle = Math.atan2(aim_rotation_vector[1] - repeat.pos[1], aim_rotation_vector[0] - repeat.pos[0]);\n\n // calculate pulsing scale\n let scale = 1.0;\n if (time < repeat.time) {\n const animation_start = hit_object.time - config.preempt;\n const loop_time = (time - animation_start) % ARROW_TOTAL_CYCLE;\n if (loop_time < ARROW_MOVE_OUT_DURATION) {\n scale = 1 + (ARROW_SCALE_AMOUNT - 1) * Easing.Out(loop_time / ARROW_MOVE_OUT_DURATION);\n } else {\n const in_progress = (loop_time - ARROW_MOVE_OUT_DURATION) / ARROW_MOVE_IN_DURATION;\n scale = ARROW_SCALE_AMOUNT - (ARROW_SCALE_AMOUNT - 1) * Easing.Out(clamp(in_progress, 0, 1));\n }\n } else {\n // after hit: scale up\n const anim_duration = Math.min(300, span_duration);\n const progress = clamp((time - repeat.time) / anim_duration, 0, 1);\n scale = 1 + 0.5 * Easing.Out(progress);\n }\n\n const scaled_arrow_size = arrow_size * scale;\n\n backend.save();\n backend.set_alpha(alpha);\n backend.translate(repeat.pos[0], repeat.pos[1]);\n backend.rotate(angle);\n\n backend.begin_path();\n backend.move_to(scaled_arrow_size * 0.8, 0);\n backend.line_to(-scaled_arrow_size * 0.4, -scaled_arrow_size * 0.5);\n backend.line_to(-scaled_arrow_size * 0.4, scaled_arrow_size * 0.5);\n backend.close_path();\n backend.fill_path(\"rgba(255,255,255,0.9)\");\n\n backend.restore();\n }\n }\n\n private render_head(): void {\n if (this.head_visual.circle_alpha <= 0.01) return;\n\n const { backend, skin, config } = this;\n const { radius } = config;\n const pos = this.slider_data.pos;\n const combo_color = get_combo_color(skin, this.combo_number, 1);\n\n this.head_visual.render(backend, skin, pos, radius, combo_color, this.combo_count);\n }\n\n private render_ball(time: number): void {\n if (this.ball_alpha <= 0.01 && this.follow_alpha <= 0.01) return;\n\n const { backend, skin, config } = this;\n const { radius } = config;\n const pos = this.ball_position;\n const combo_color = get_combo_color(skin, this.combo_number, 0.9);\n\n // follow circle with smooth scale animation\n if (this.follow_alpha > 0.01) {\n const follow_size = radius * this.follow_scale;\n\n backend.set_alpha(this.follow_alpha * skin.follow_circle_opacity);\n backend.begin_path();\n backend.arc_to(pos[0], pos[1], follow_size, 0, Math.PI * 2);\n backend.stroke_path(skin.follow_circle_color, skin.follow_circle_width);\n }\n\n // slider ball\n if (skin.enable_slider_ball && this.ball_alpha > 0.01) {\n backend.set_alpha(this.ball_alpha * skin.slider_ball_opacity);\n backend.draw_circle(pos[0], pos[1], radius * 0.85, combo_color, \"rgba(255,255,255,0.9)\", radius * 0.1);\n }\n\n backend.set_alpha(1);\n }\n}\n",
28
28
  "import type { RenderHitObject } from \"../render_types\";\nimport type { IRenderBackend } from \"../backend/render_backend\";\nimport type { ISkinConfig } from \"../../skin/skin_config\";\nimport { Mods, has_mod } from \"../../types/mods\";\nimport { clamp, vec2_lerp, type Vec2 } from \"../../math/vector2\";\nimport { Easing } from \"../drawable/transforms\";\nimport { is_spinner } from \"../../types/beatmap\";\n\ntype FollowPoint = {\n start_pos: Vec2;\n end_pos: Vec2;\n dir: Vec2;\n fade_in_time: number;\n fade_out_time: number;\n};\n\ntype FollowLine = {\n start_pos: Vec2;\n end_pos: Vec2;\n dir: Vec2;\n start_time: number;\n end_time: number;\n appear_time: number;\n grow_end_time: number;\n shrink_start_time: number;\n shrink_end_time: number;\n};\n\nexport class FollowPointRenderer {\n private skin: ISkinConfig;\n private mods: number;\n private preempt: number;\n private fade_in: number;\n private radius: number;\n private points: FollowPoint[] = [];\n private lines: FollowLine[] = [];\n\n constructor(skin: ISkinConfig, mods: number, preempt: number, fade_in: number, radius: number) {\n this.skin = skin;\n this.mods = mods;\n this.preempt = preempt;\n this.fade_in = fade_in;\n this.radius = radius;\n }\n\n update_settings(mods: number, preempt: number, fade_in: number, radius: number): void {\n this.mods = mods;\n this.preempt = preempt;\n this.fade_in = fade_in;\n this.radius = radius;\n }\n\n build(objects: RenderHitObject[]): void {\n this.points = [];\n this.lines = [];\n\n const SPACING = 32;\n const preempt = Math.max(450, this.preempt * 0.9);\n\n for (let i = 0; i < objects.length - 1; i++) {\n const prev = objects[i];\n const next = objects[i + 1];\n\n if (is_spinner(prev) || is_spinner(next)) continue;\n if (prev.combo_number !== next.combo_number) continue;\n\n const start_pos = prev.end_pos;\n const end_pos = (next.data as { pos: Vec2 }).pos;\n const dx = end_pos[0] - start_pos[0];\n const dy = end_pos[1] - start_pos[1];\n const distance = Math.sqrt(dx * dx + dy * dy);\n if (distance < SPACING * 1.5) continue;\n\n const start_time = prev.end_time;\n const duration = next.time - start_time;\n if (duration <= 0) continue;\n\n const inv_distance = distance > 0 ? 1 / distance : 0;\n const dir: Vec2 = [dx * inv_distance, dy * inv_distance];\n\n const appear_time = start_time - preempt;\n const grow_end_time = next.time - preempt;\n let shrink_start_time = start_time + (grow_end_time - start_time) * 0.5;\n let shrink_end_time = next.time;\n\n if (has_mod(this.mods, Mods.Hidden)) {\n shrink_start_time = start_time + (grow_end_time - start_time) * 0.3;\n shrink_end_time = start_time + (next.time - start_time) * 0.65;\n }\n\n this.lines.push({\n start_pos,\n end_pos,\n dir,\n start_time,\n end_time: next.time,\n appear_time,\n grow_end_time,\n shrink_start_time,\n shrink_end_time\n });\n\n for (let d = SPACING * 1.5; d < distance - SPACING; d += SPACING) {\n const fraction = d / distance;\n let fade_out_time = prev.end_time + fraction * duration;\n const fade_in_time = Math.max(prev.end_time, fade_out_time - preempt);\n if (has_mod(this.mods, Mods.Hidden)) {\n fade_out_time = Math.min(fade_out_time, start_time + duration * 0.65);\n }\n\n const point_start: Vec2 = [start_pos[0] + (fraction - 0.1) * dx, start_pos[1] + (fraction - 0.1) * dy];\n const point_end: Vec2 = [start_pos[0] + fraction * dx, start_pos[1] + fraction * dy];\n\n this.points.push({\n start_pos: point_start,\n end_pos: point_end,\n dir,\n fade_in_time,\n fade_out_time\n });\n }\n }\n }\n\n render(time: number, backend: IRenderBackend, get_circle_alpha: (time: number, hit_time: number) => number): void {\n const shape = this.skin.follow_point_shape;\n const mode = this.skin.follow_point_mode ?? \"segments\";\n const line_length = this.skin.follow_point_length || this.radius * 0.6;\n const gap_ratio = clamp(this.skin.follow_point_line_gap ?? 0, 0, 0.9);\n\n const fade_duration = Math.max(this.fade_in * 0.15, 50);\n const alpha_mul = 0.2;\n\n if (mode === \"full\") {\n for (const line of this.lines) {\n if (time < line.appear_time || time > line.shrink_end_time) continue;\n\n let alpha = 0;\n let x0 = line.start_pos[0];\n let y0 = line.start_pos[1];\n let x1 = line.end_pos[0];\n let y1 = line.end_pos[1];\n\n const line_len = Math.hypot(x1 - x0, y1 - y0);\n const alpha_gate = this.get_alpha_gate(time, line.start_time, line.end_time, get_circle_alpha);\n if (alpha_gate <= 0.01) continue;\n\n const inset_base = this.radius * 1.05;\n const inset = Math.min(inset_base, line_len * 0.22);\n x0 += line.dir[0] * inset;\n y0 += line.dir[1] * inset;\n x1 -= line.dir[0] * inset;\n y1 -= line.dir[1] * inset;\n\n if (time < line.grow_end_time) {\n const duration = Math.max(1, line.grow_end_time - line.appear_time);\n const progress = clamp((time - line.appear_time) / duration, 0, 1);\n const eased = Easing.OutQuint(progress);\n alpha = eased;\n x1 = x0 + (x1 - x0) * eased;\n y1 = y0 + (y1 - y0) * eased;\n } else if (time < line.shrink_start_time) {\n alpha = 1;\n } else {\n const duration = Math.max(1, line.shrink_end_time - line.shrink_start_time);\n const progress = clamp((time - line.shrink_start_time) / duration, 0, 1);\n const eased = Easing.InQuint(progress);\n alpha = 1;\n x0 = x0 + (x1 - x0) * eased;\n y0 = y0 + (y1 - y0) * eased;\n }\n\n if (alpha <= 0) continue;\n\n backend.set_alpha(alpha * alpha_mul * alpha_gate);\n\n if (shape === \"line\") {\n if (gap_ratio > 0) {\n const len = Math.hypot(x1 - x0, y1 - y0);\n const dir_x = line.dir[0];\n const dir_y = line.dir[1];\n const gap_half = (len * gap_ratio) / 2;\n const mid_x = (x0 + x1) / 2;\n const mid_y = (y0 + y1) / 2;\n const gx0 = mid_x - dir_x * gap_half;\n const gy0 = mid_y - dir_y * gap_half;\n const gx1 = mid_x + dir_x * gap_half;\n const gy1 = mid_y + dir_y * gap_half;\n\n backend.draw_line(x0, y0, gx0, gy0, \"rgba(255,255,255,1)\", this.skin.follow_point_width, \"round\", \"round\");\n backend.draw_line(gx1, gy1, x1, y1, \"rgba(255,255,255,1)\", this.skin.follow_point_width, \"round\", \"round\");\n } else {\n backend.draw_line(x0, y0, x1, y1, \"rgba(255,255,255,1)\", this.skin.follow_point_width, \"round\", \"round\");\n }\n } else {\n const radius = this.radius * 0.12;\n const x = (line.start_pos[0] + line.end_pos[0]) / 2;\n const y = (line.start_pos[1] + line.end_pos[1]) / 2;\n backend.draw_circle(x, y, radius, \"rgba(255,255,255,1)\", \"transparent\", 0);\n }\n }\n } else {\n for (const point of this.points) {\n if (time < point.fade_in_time || time > point.fade_out_time + fade_duration) continue;\n\n let alpha = 0;\n let scale = 1;\n let pos = point.end_pos;\n\n if (time < point.fade_in_time + fade_duration) {\n const fade_in_progress = clamp((time - point.fade_in_time) / fade_duration, 0, 1);\n const eased = Easing.OutCubic(fade_in_progress);\n alpha = eased;\n scale = 1.5 - 0.5 * eased;\n pos = vec2_lerp(point.start_pos, point.end_pos, eased);\n } else if (time <= point.fade_out_time) {\n alpha = 1;\n scale = 1;\n pos = point.end_pos;\n } else {\n const fade_out_progress = clamp((time - point.fade_out_time) / fade_duration, 0, 1);\n const eased = Easing.OutCubic(fade_out_progress);\n alpha = 1 - eased;\n scale = 1;\n pos = vec2_lerp(point.start_pos, point.end_pos, 1 - eased);\n }\n\n if (alpha <= 0) continue;\n\n const alpha_gate = this.get_alpha_gate(time, point.fade_in_time + this.preempt, point.fade_out_time, get_circle_alpha);\n if (alpha_gate <= 0.01) continue;\n\n backend.set_alpha(alpha * alpha_mul * alpha_gate);\n\n if (shape === \"line\") {\n const len = line_length * scale;\n const half = len / 2;\n const dir_x = point.dir[0];\n const dir_y = point.dir[1];\n const x0 = pos[0] - dir_x * half;\n const y0 = pos[1] - dir_y * half;\n const x1 = pos[0] + dir_x * half;\n const y1 = pos[1] + dir_y * half;\n\n backend.draw_line(x0, y0, x1, y1, \"rgba(255,255,255,1)\", this.skin.follow_point_width, \"round\", \"round\");\n } else {\n const radius = this.radius * 0.12 * scale;\n backend.draw_circle(pos[0], pos[1], radius, \"rgba(255,255,255,1)\", \"transparent\", 0);\n }\n }\n }\n\n backend.set_alpha(1);\n }\n\n private get_alpha_gate(time: number, start_time: number, end_time: number, get_circle_alpha: (time: number, hit_time: number) => number): number {\n const start_alpha = get_circle_alpha(time, start_time);\n const end_alpha = get_circle_alpha(time, end_time);\n return clamp(Math.min(start_alpha, end_alpha) / 0.7, 0, 1);\n }\n}\n",
29
29
  "import { type Vec2, vec2_add, vec2_sub, vec2_mul, vec2_len, vec2_lerp } from \"./vector2\";\n\nexport const flatten_bezier = (points: Vec2[], tolerance: number = 0.08): Vec2[] => {\n if (points.length < 2) return [...points];\n\n const result: Vec2[] = [];\n flatten_bezier_recursive(points, result, tolerance);\n return result;\n};\n\nconst flatten_bezier_recursive = (points: Vec2[], output: Vec2[], tolerance: number): void => {\n if (is_flat_enough(points, tolerance)) {\n if (output.length === 0) {\n output.push(points[0]);\n }\n output.push(points[points.length - 1]);\n return;\n }\n\n const left: Vec2[] = [];\n const right: Vec2[] = [];\n subdivide_bezier(points, left, right);\n\n flatten_bezier_recursive(left, output, tolerance);\n flatten_bezier_recursive(right, output, tolerance);\n};\n\nconst is_flat_enough = (points: Vec2[], tolerance: number): boolean => {\n if (points.length <= 2) return true;\n\n // check if all middle points are close enough to the line from first to last\n const start = points[0];\n const end = points[points.length - 1];\n\n for (let i = 1; i < points.length - 1; i++) {\n if (point_to_line_dist(points[i], start, end) > tolerance) {\n return false;\n }\n }\n return true;\n};\n\nconst point_to_line_dist = (point: Vec2, line_start: Vec2, line_end: Vec2): number => {\n const line = vec2_sub(line_end, line_start);\n const len_sq = line[0] * line[0] + line[1] * line[1];\n\n if (len_sq === 0) return vec2_len(vec2_sub(point, line_start));\n\n const t = Math.max(0, Math.min(1, ((point[0] - line_start[0]) * line[0] + (point[1] - line_start[1]) * line[1]) / len_sq));\n\n const proj: Vec2 = [line_start[0] + t * line[0], line_start[1] + t * line[1]];\n\n return vec2_len(vec2_sub(point, proj));\n};\n\nconst subdivide_bezier = (points: Vec2[], left: Vec2[], right: Vec2[]): void => {\n const n = points.length;\n const midpoints: Vec2[][] = [points];\n\n for (let i = 1; i < n; i++) {\n midpoints[i] = [];\n for (let j = 0; j < n - i; j++) {\n midpoints[i][j] = vec2_lerp(midpoints[i - 1][j], midpoints[i - 1][j + 1], 0.5);\n }\n }\n\n for (let i = 0; i < n; i++) {\n left.push(midpoints[i][0]);\n right.push(midpoints[n - 1 - i][i]);\n }\n};\n\nexport const flatten_linear = (start: Vec2, end: Vec2, distance: number): Vec2[] => {\n const dir = vec2_sub(end, start);\n const len = vec2_len(dir);\n\n if (len === 0) return [start];\n\n const normalized: Vec2 = [dir[0] / len, dir[1] / len];\n const actual_end: Vec2 = vec2_add(start, vec2_mul(normalized, distance));\n\n return [start, actual_end];\n};\n\nexport const flatten_perfect = (points: Vec2[], distance: number): Vec2[] => {\n if (points.length !== 3) {\n // fallback to bezier if not exactly 3 points\n return flatten_bezier(points);\n }\n\n const [a, b, c] = points;\n\n // find circle center using 3 points\n const center = find_circle_center(a, b, c);\n if (!center) {\n // points are collinear, treat as linear\n return flatten_linear(a, c, distance);\n }\n\n const radius = vec2_len(vec2_sub(a, center));\n const start_angle = Math.atan2(a[1] - center[1], a[0] - center[0]);\n const end_angle = Math.atan2(c[1] - center[1], c[0] - center[0]);\n\n // determine direction (clockwise or counter-clockwise)\n const cross = (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n const ccw = cross > 0;\n\n // calculate arc length and clamp to distance\n let arc_angle = end_angle - start_angle;\n if (ccw && arc_angle < 0) arc_angle += 2 * Math.PI;\n if (!ccw && arc_angle > 0) arc_angle -= 2 * Math.PI;\n\n const arc_length = Math.abs(arc_angle) * radius;\n\n // match osu! arc approximation (max error ~= 0.1)\n let num_points = 2;\n if (radius * 2 > 0.1) {\n const theta_range = Math.abs(arc_angle);\n const step = 2 * Math.acos(1 - 0.1 / radius);\n num_points = Math.max(2, Math.ceil(theta_range / step));\n if (num_points >= 1000) {\n num_points = 1000;\n }\n }\n const result: Vec2[] = [];\n\n for (let i = 0; i <= num_points; i++) {\n const t = i / num_points;\n const angle = start_angle + arc_angle * t;\n result.push([center[0] + radius * Math.cos(angle), center[1] + radius * Math.sin(angle)]);\n }\n\n return result;\n};\n\nconst find_circle_center = (a: Vec2, b: Vec2, c: Vec2): Vec2 | null => {\n const d = 2 * (a[0] * (b[1] - c[1]) + b[0] * (c[1] - a[1]) + c[0] * (a[1] - b[1]));\n\n if (Math.abs(d) < 0.001) return null; // collinear\n\n const ux =\n ((a[0] * a[0] + a[1] * a[1]) * (b[1] - c[1]) + (b[0] * b[0] + b[1] * b[1]) * (c[1] - a[1]) + (c[0] * c[0] + c[1] * c[1]) * (a[1] - b[1])) / d;\n const uy =\n ((a[0] * a[0] + a[1] * a[1]) * (c[0] - b[0]) + (b[0] * b[0] + b[1] * b[1]) * (a[0] - c[0]) + (c[0] * c[0] + c[1] * c[1]) * (b[0] - a[0])) / d;\n\n return [ux, uy];\n};\n\nexport const flatten_catmull = (points: Vec2[]): Vec2[] => {\n if (points.length < 2) return [...points];\n\n const result: Vec2[] = [];\n\n for (let i = 0; i < points.length - 1; i++) {\n const p0 = points[Math.max(0, i - 1)];\n const p1 = points[i];\n const p2 = points[i + 1];\n const p3 = points[Math.min(points.length - 1, i + 2)];\n\n const segment_length = vec2_len(vec2_sub(p2, p1));\n const segments = Math.max(8, Math.ceil(segment_length / 3));\n for (let j = 0; j <= segments; j++) {\n const t = j / segments;\n result.push(catmull_point(p0, p1, p2, p3, t));\n }\n }\n\n return result;\n};\n\nconst catmull_point = (p0: Vec2, p1: Vec2, p2: Vec2, p3: Vec2, t: number): Vec2 => {\n const t2 = t * t;\n const t3 = t2 * t;\n\n return [\n 0.5 * (2 * p1[0] + (-p0[0] + p2[0]) * t + (2 * p0[0] - 5 * p1[0] + 4 * p2[0] - p3[0]) * t2 + (-p0[0] + 3 * p1[0] - 3 * p2[0] + p3[0]) * t3),\n 0.5 * (2 * p1[1] + (-p0[1] + p2[1]) * t + (2 * p0[1] - 5 * p1[1] + 4 * p2[1] - p3[1]) * t2 + (-p0[1] + 3 * p1[1] - 3 * p2[1] + p3[1]) * t3)\n ];\n};\n",
30
30
  "import type { RenderSliderData } from \"../render_types\";\nimport { flatten_bezier, flatten_linear, flatten_perfect, flatten_catmull } from \"../../math/curves\";\nimport { vec2_len, vec2_sub, vec2_lerp, type Vec2 } from \"../../math/vector2\";\n\nexport const compute_slider_path = (slider: RenderSliderData): Vec2[] => {\n let points: Vec2[];\n\n if (slider.path_type === \"L\") {\n points = flatten_linear(slider.pos, slider.control_points[0], slider.distance);\n } else {\n const all_points: Vec2[] = [slider.pos, ...slider.control_points];\n\n switch (slider.path_type) {\n case \"P\":\n points = flatten_perfect(all_points, slider.distance);\n break;\n case \"C\":\n points = flatten_catmull(all_points);\n break;\n default:\n points = flatten_multibezier(all_points);\n break;\n }\n }\n\n return clamp_path_to_distance(points, slider.distance);\n};\n\nexport const get_slider_end_position = (slider: RenderSliderData): Vec2 => {\n if (!slider.computed_path || slider.computed_path.length === 0) return slider.pos;\n return slider.repetitions % 2 === 0 ? slider.pos : slider.computed_path[slider.computed_path.length - 1];\n};\n\nconst flatten_multibezier = (points: Vec2[]): Vec2[] => {\n const segments: Vec2[][] = [];\n let current: Vec2[] = [points[0]];\n\n for (let i = 1; i < points.length; i++) {\n const [prev, cur] = [points[i - 1], points[i]];\n\n if (prev[0] === cur[0] && prev[1] === cur[1]) {\n if (current.length > 1) segments.push(current);\n current = [cur];\n } else {\n current.push(cur);\n }\n }\n\n if (current.length > 1) segments.push(current);\n\n const all_points: Vec2[] = [];\n\n for (const segment of segments) {\n all_points.push(...flatten_bezier(segment));\n }\n\n return all_points;\n};\n\nconst clamp_path_to_distance = (path: Vec2[], max_distance: number): Vec2[] => {\n if (path.length < 2) return path;\n const result: Vec2[] = [path[0]];\n let distance = 0;\n let last_dir: Vec2 | null = null;\n let reached_limit = false;\n\n for (let i = 1; i < path.length; i++) {\n const segment_length = vec2_len(vec2_sub(path[i], path[i - 1]));\n const dir = vec2_sub(path[i], path[i - 1]);\n if (segment_length > 0) {\n last_dir = [dir[0] / segment_length, dir[1] / segment_length];\n }\n\n if (segment_length === 0) {\n continue;\n }\n\n if (distance + segment_length >= max_distance) {\n const remaining = max_distance - distance;\n result.push(vec2_lerp(path[i - 1], path[i], remaining / segment_length));\n distance = max_distance;\n reached_limit = true;\n break;\n }\n\n distance += segment_length;\n result.push(path[i]);\n }\n\n if (!reached_limit && distance < max_distance && last_dir) {\n const remaining = max_distance - distance;\n const last_point = result[result.length - 1];\n result.push([last_point[0] + last_dir[0] * remaining, last_point[1] + last_dir[1] * remaining]);\n }\n return result;\n};\n",
@@ -32,10 +32,10 @@
32
32
  "import type { ITimingPoint } from \"../../types/beatmap\";\nimport { clamp } from \"../../math/vector2\";\n\nexport type TimingState = {\n base_beat_length: number;\n sv_multiplier: number;\n};\n\nexport class TimingStateResolver {\n private points: ITimingPoint[];\n private index = 0;\n private last_time = Number.NEGATIVE_INFINITY;\n private base_beat_length = 600;\n private sv_multiplier = 1;\n\n constructor(points: ITimingPoint[]) {\n this.points = points;\n if (points.length > 0 && points[0].uninherited === 1 && points[0].beatLength > 0) {\n this.base_beat_length = points[0].beatLength;\n }\n }\n\n reset(): void {\n this.index = 0;\n this.last_time = Number.NEGATIVE_INFINITY;\n this.base_beat_length = 600;\n this.sv_multiplier = 1;\n }\n\n get_state_at(time: number): TimingState {\n if (this.points.length === 0) {\n return { base_beat_length: 600, sv_multiplier: 1 };\n }\n\n if (time < this.last_time) {\n this.reset();\n }\n\n for (let i = this.index; i < this.points.length; i++) {\n const point = this.points[i];\n if (point.time > time) break;\n\n if (point.uninherited === 1 && point.beatLength > 0) {\n // red line: updates base beat length and resets sv multiplier\n this.base_beat_length = point.beatLength;\n this.sv_multiplier = 1;\n } else if (point.uninherited === 0 && point.beatLength < 0) {\n // green line: negative beatLength encodes slider velocity\n const velocity = -100 / point.beatLength;\n if (velocity > 0) {\n this.sv_multiplier = velocity;\n }\n }\n\n this.index = i;\n }\n\n this.last_time = time;\n this.sv_multiplier = clamp(this.sv_multiplier, 0.1, 10);\n\n return {\n base_beat_length: this.base_beat_length,\n sv_multiplier: this.sv_multiplier\n };\n }\n}\n",
33
33
  "import type { ITimingPoint } from \"../types/beatmap\";\n\nexport const process_timing_points = (points: ITimingPoint[]): ITimingPoint[] => {\n if (points.length === 0) {\n return points;\n }\n\n return points.sort((a, b) => {\n if (a.time !== b.time) return a.time - b.time;\n if (a.uninherited === b.uninherited) return 0;\n return a.uninherited > b.uninherited ? -1 : 1;\n });\n};\n",
34
34
  "import type { IBeatmap } from \"../types/beatmap\";\nimport { HitObjectType } from \"../types/beatmap\";\nimport type { RenderHitObject, RenderCircleData, RenderSliderData, RenderSpinnerData, RenderHoldData, SliderPathType } from \"./render_types\";\n\nexport const build_render_objects = (beatmap: IBeatmap): RenderHitObject[] => {\n const objects: RenderHitObject[] = [];\n\n for (const ho of beatmap.HitObjects) {\n const base: RenderHitObject = {\n ...ho,\n end_time: ho.endTime || ho.time,\n end_pos: [ho.x, ho.y],\n combo_number: 0,\n combo_count: 0,\n data: { pos: [ho.x, ho.y] } as RenderCircleData\n };\n\n if (ho.type & HitObjectType.Slider) {\n const slider_data: RenderSliderData = {\n pos: [ho.x, ho.y],\n path_type: (ho.curveType || \"L\") as SliderPathType,\n control_points: (ho.curvePoints || []).map((p) => [p.x, p.y] as [number, number]),\n repetitions: ho.slides || 1,\n distance: ho.length || 0\n };\n base.data = slider_data;\n } else if (ho.type & HitObjectType.Spinner) {\n const end_time = ho.endTime || ho.time;\n base.data = { end_time } as RenderSpinnerData;\n base.end_time = end_time;\n base.end_pos = [256, 192];\n } else if (ho.type & HitObjectType.Hold) {\n const end_time = ho.endTime || ho.time;\n base.data = { pos: [ho.x, ho.y], end_time } as RenderHoldData;\n base.end_time = end_time;\n }\n\n objects.push(base);\n }\n\n return objects;\n};\n",
35
- "import type { IBeatmap, ITimingPoint } from \"../../types/beatmap\";\nimport { is_circle, is_slider, is_spinner, is_new_combo } from \"../../types/beatmap\";\nimport { Mods, has_mod } from \"../../types/mods\";\nimport { calculate_preempt, calculate_fade_in, calculate_radius } from \"../../math/difficulty\";\nimport { get_adjusted_difficulty } from \"../../mods\";\nimport { clamp, type Vec2 } from \"../../math/vector2\";\nimport { BaseRenderer, type IRendererConfig, DEFAULT_RENDERER_CONFIG } from \"../base_renderer\";\nimport type { IRenderBackend } from \"../backend/render_backend\";\nimport type { ISkinConfig } from \"../../skin/skin_config\";\nimport { get_combo_color } from \"../../skin/skin_config\";\nimport { Drawable, DrawableHitCircle, DrawableSlider, type DrawableConfig } from \"../drawable\";\nimport { Easing } from \"../drawable/transforms\";\nimport { FollowPointRenderer } from \"./follow_points\";\nimport { compute_slider_path, get_slider_end_position } from \"./slider_path\";\nimport { calculate_slider_duration, calculate_tick_spacing } from \"./slider_math\";\nimport { TimingStateResolver } from \"./timing_state\";\nimport { process_timing_points } from \"../../beatmap/timing\";\nimport type { RenderHitObject, RenderSliderData } from \"../render_types\";\nimport { build_render_objects } from \"../render_objects\";\n\nconst flip_y = (y: number): number => 384 - y;\n\nexport class StandardRenderer extends BaseRenderer {\n private radius = 32;\n private preempt = 1200;\n private fade_in = 600;\n private timing_points: ITimingPoint[] = [];\n private timing_resolver: TimingStateResolver | null = null;\n\n private drawables: Drawable[] = [];\n private drawable_config!: DrawableConfig;\n private follow_point_renderer: FollowPointRenderer;\n\n constructor(backend: IRenderBackend, skin: ISkinConfig, mods: number = 0, config: IRendererConfig = DEFAULT_RENDERER_CONFIG) {\n super(backend, skin, mods, config);\n this.follow_point_renderer = new FollowPointRenderer(skin, mods, this.preempt, this.fade_in, this.radius);\n }\n\n initialize(beatmap: IBeatmap): void {\n this.beatmap = beatmap;\n this.objects = build_render_objects(beatmap).sort((a: RenderHitObject, b: RenderHitObject) => a.time - b.time);\n this.timing_points = process_timing_points([...beatmap.TimingPoints]);\n this.timing_resolver = new TimingStateResolver(this.timing_points);\n\n const ar = beatmap.Difficulty.ApproachRate >= 0 ? beatmap.Difficulty.ApproachRate : beatmap.Difficulty.OverallDifficulty;\n const difficulty = get_adjusted_difficulty(beatmap.Difficulty.CircleSize, ar, 0, 0, this.mods);\n this.radius = calculate_radius(difficulty.cs);\n this.preempt = calculate_preempt(difficulty.ar);\n this.fade_in = calculate_fade_in(this.preempt);\n if (has_mod(this.mods, Mods.Hidden)) {\n this.fade_in = this.preempt * 0.4;\n }\n\n this.follow_point_renderer.update_settings(this.mods, this.preempt, this.fade_in, this.radius);\n\n this.preprocess_objects();\n this.follow_point_renderer.build(this.objects);\n this.create_drawables();\n }\n\n set_mods(mods: number): void {\n this.mods = mods;\n if (this.beatmap) {\n this.initialize(this.beatmap);\n }\n }\n\n private preprocess_objects(): void {\n let combo_number = 0;\n let combo_count = 1;\n if (this.timing_resolver) {\n this.timing_resolver.reset();\n }\n\n for (const obj of this.objects) {\n if (is_new_combo(obj)) {\n combo_number = (combo_number + 1) % this.skin.combo_colors.length;\n combo_count = 1;\n } else {\n combo_count++;\n }\n obj.combo_number = combo_number;\n obj.combo_count = combo_count;\n\n if (is_slider(obj)) {\n const data = obj.data as RenderSliderData;\n\n if (has_mod(this.mods, Mods.HardRock)) {\n data.pos = [data.pos[0], flip_y(data.pos[1])];\n data.control_points = data.control_points.map((p) => [p[0], flip_y(p[1])] as [number, number]);\n }\n\n data.computed_path = compute_slider_path(data);\n\n const timing_state = this.timing_resolver?.get_state_at(obj.time) ?? { base_beat_length: 600, sv_multiplier: 1 };\n const duration = calculate_slider_duration(data.distance, this.beatmap, timing_state);\n\n data.duration = duration;\n obj.end_time = obj.time + duration * data.repetitions;\n obj.end_pos = get_slider_end_position(data);\n } else if (is_spinner(obj)) {\n obj.end_pos = [256, 192];\n } else {\n const data = obj.data as { pos: Vec2 };\n if (has_mod(this.mods, Mods.HardRock)) {\n data.pos = [data.pos[0], flip_y(data.pos[1])];\n }\n obj.end_pos = data.pos;\n }\n }\n }\n\n private create_drawables(): void {\n this.drawables = [];\n const dpr = this.config.use_high_dpi ? window.devicePixelRatio || 1 : 1;\n this.drawable_config = {\n backend: this.backend,\n skin: this.skin,\n preempt: this.preempt,\n fade_in: this.fade_in,\n radius: this.radius,\n scale: this.config.scale * dpr,\n mods: this.mods\n };\n\n if (this.timing_resolver) {\n this.timing_resolver.reset();\n }\n\n for (const obj of this.objects) {\n if (is_circle(obj)) {\n this.drawables.push(new DrawableHitCircle(obj, this.drawable_config));\n } else if (is_slider(obj)) {\n const data = obj.data as RenderSliderData;\n const path = data.computed_path || [];\n const span_duration = data.duration || 0;\n\n const timing_state = this.timing_resolver?.get_state_at(obj.time) ?? { base_beat_length: 600, sv_multiplier: 1 };\n const { tick_distance, min_distance_from_end } = calculate_tick_spacing(this.beatmap, timing_state);\n\n this.drawables.push(new DrawableSlider(obj, this.drawable_config, path, span_duration, tick_distance, min_distance_from_end));\n }\n }\n }\n\n render(time: number): void {\n const { backend, config } = this;\n\n this.render_background();\n backend.save();\n backend.translate(config.offset_x, config.offset_y);\n backend.scale(config.scale, config.scale);\n this.render_playfield();\n this.render_grid();\n\n const visible_drawables: Drawable[] = [];\n for (let i = this.drawables.length - 1; i >= 0; i--) {\n const drawable = this.drawables[i];\n if (drawable.is_alive(time)) {\n visible_drawables.push(drawable);\n }\n }\n\n this.follow_point_renderer.render(time, backend, (t, hit_time) => this.get_circle_alpha(t, hit_time));\n\n for (const obj of this.objects) {\n if (is_spinner(obj)) {\n const appear_time = obj.time - this.preempt;\n if (time >= appear_time && time <= obj.end_time + 200) {\n this.draw_spinner(obj, time);\n }\n }\n }\n\n for (const drawable of visible_drawables) {\n drawable.update(time);\n }\n\n for (const drawable of visible_drawables) {\n if (drawable instanceof DrawableSlider) {\n drawable.render_body_pass(time);\n }\n }\n\n for (const drawable of visible_drawables) {\n if (drawable instanceof DrawableSlider) {\n drawable.render_head_pass(time);\n } else {\n drawable.render(time);\n }\n }\n\n if (!has_mod(this.mods, Mods.Hidden) && this.skin.enable_approach_circle) {\n for (const drawable of visible_drawables) {\n if (time <= drawable.start_time) {\n this.draw_approach_circle(drawable, time);\n }\n }\n }\n\n backend.restore();\n }\n\n precompute(): void {\n for (const drawable of this.drawables) {\n if (drawable instanceof DrawableSlider) {\n drawable.prepare_body_cache();\n }\n }\n }\n\n private draw_approach_circle(drawable: Drawable, time: number): void {\n const pos = drawable.position;\n const appear_time = drawable.start_time - this.preempt;\n\n const fade_duration = Math.min(this.fade_in * 2, this.preempt);\n const fade_progress = clamp((time - appear_time) / fade_duration, 0, 1);\n const opacity = fade_progress * this.skin.approach_circle_opacity;\n\n const scale_progress = clamp((time - appear_time) / this.preempt, 0, 1);\n const scale = 4 - 3 * scale_progress;\n\n const combo_color = get_combo_color(this.skin, drawable.combo_number, 1);\n\n this.backend.save();\n this.backend.set_alpha(opacity);\n this.backend.draw_circle(pos[0], pos[1], this.radius * scale, \"transparent\", combo_color, this.radius * this.skin.approach_circle_width);\n this.backend.restore();\n }\n\n private get_circle_alpha(time: number, hit_time: number): number {\n const appear_time = hit_time - this.preempt;\n if (time < appear_time) return 0;\n\n let alpha = clamp((time - appear_time) / this.fade_in, 0, 1);\n\n if (has_mod(this.mods, Mods.Hidden)) {\n const fade_out_start = hit_time - this.preempt + this.fade_in;\n const fade_out_duration = this.preempt * 0.3;\n if (time > fade_out_start) {\n const fade_out_progress = clamp((time - fade_out_start) / fade_out_duration, 0, 1);\n alpha *= 1 - fade_out_progress;\n }\n }\n\n return alpha;\n }\n\n private draw_spinner(obj: RenderHitObject, time: number): void {\n const appear_time = obj.time - this.preempt;\n let opacity = clamp((time - appear_time) / this.fade_in, 0, 1);\n\n if (time > obj.end_time) {\n opacity = 1 - Easing.OutCubic(clamp((time - obj.end_time) / 200, 0, 1));\n }\n if (opacity <= 0) return;\n\n const x = 256;\n const y = 192;\n const duration = obj.end_time - obj.time;\n const progress = clamp((time - obj.time) / duration, 0, 1);\n\n this.backend.set_alpha(opacity);\n const approach_size = this.skin.spinner_size * (1 - progress);\n\n if (approach_size > 5) {\n this.backend.begin_path();\n this.backend.arc_to(x, y, approach_size, 0, Math.PI * 2);\n this.backend.stroke_path(\"rgba(255,255,255,0.6)\", 4);\n }\n\n this.backend.draw_circle(x, y, this.skin.spinner_size, \"rgba(0,0,0,0.2)\");\n this.backend.draw_circle(x, y, 12, \"white\");\n }\n}\n",
35
+ "import type { IBeatmap, ITimingPoint } from \"../../types/beatmap\";\nimport { is_circle, is_slider, is_spinner, is_new_combo } from \"../../types/beatmap\";\nimport { Mods, has_mod } from \"../../types/mods\";\nimport { calculate_preempt, calculate_fade_in, calculate_radius } from \"../../math/difficulty\";\nimport { get_adjusted_difficulty } from \"../../mods\";\nimport { clamp, type Vec2 } from \"../../math/vector2\";\nimport { BaseRenderer, type IRendererConfig, DEFAULT_RENDERER_CONFIG } from \"../base_renderer\";\nimport type { IRenderBackend } from \"../backend/render_backend\";\nimport type { ISkinConfig } from \"../../skin/skin_config\";\nimport { get_combo_color } from \"../../skin/skin_config\";\nimport { Drawable, DrawableHitCircle, DrawableSlider, type DrawableConfig } from \"../drawable\";\nimport { Easing } from \"../drawable/transforms\";\nimport { FollowPointRenderer } from \"./follow_points\";\nimport { compute_slider_path, get_slider_end_position } from \"./slider_path\";\nimport { calculate_slider_duration, calculate_tick_spacing } from \"./slider_math\";\nimport { TimingStateResolver } from \"./timing_state\";\nimport { process_timing_points } from \"../../beatmap/timing\";\nimport type { RenderHitObject, RenderSliderData } from \"../render_types\";\nimport { build_render_objects } from \"../render_objects\";\n\nconst flip_y = (y: number): number => 384 - y;\n\nexport class StandardRenderer extends BaseRenderer {\n private radius = 32;\n private preempt = 1200;\n private fade_in = 600;\n private timing_points: ITimingPoint[] = [];\n private timing_resolver: TimingStateResolver | null = null;\n\n private drawables: Drawable[] = [];\n private drawable_config!: DrawableConfig;\n private follow_point_renderer: FollowPointRenderer;\n\n constructor(backend: IRenderBackend, skin: ISkinConfig, mods: number = 0, config: IRendererConfig = DEFAULT_RENDERER_CONFIG) {\n super(backend, skin, mods, config);\n this.follow_point_renderer = new FollowPointRenderer(skin, mods, this.preempt, this.fade_in, this.radius);\n }\n\n initialize(beatmap: IBeatmap): void {\n this.release_drawables();\n\n this.beatmap = beatmap;\n this.objects = build_render_objects(beatmap).sort((a: RenderHitObject, b: RenderHitObject) => a.time - b.time);\n this.timing_points = process_timing_points([...beatmap.TimingPoints]);\n this.timing_resolver = new TimingStateResolver(this.timing_points);\n\n const ar = beatmap.Difficulty.ApproachRate >= 0 ? beatmap.Difficulty.ApproachRate : beatmap.Difficulty.OverallDifficulty;\n const difficulty = get_adjusted_difficulty(beatmap.Difficulty.CircleSize, ar, 0, 0, this.mods);\n this.radius = calculate_radius(difficulty.cs);\n this.preempt = calculate_preempt(difficulty.ar);\n this.fade_in = calculate_fade_in(this.preempt);\n if (has_mod(this.mods, Mods.Hidden)) {\n this.fade_in = this.preempt * 0.4;\n }\n\n this.follow_point_renderer.update_settings(this.mods, this.preempt, this.fade_in, this.radius);\n\n this.preprocess_objects();\n this.follow_point_renderer.build(this.objects);\n this.create_drawables();\n }\n\n set_mods(mods: number): void {\n this.mods = mods;\n if (this.beatmap) {\n this.initialize(this.beatmap);\n }\n }\n\n private preprocess_objects(): void {\n let combo_number = 0;\n let combo_count = 1;\n if (this.timing_resolver) {\n this.timing_resolver.reset();\n }\n\n for (const obj of this.objects) {\n if (is_new_combo(obj)) {\n combo_number = (combo_number + 1) % this.skin.combo_colors.length;\n combo_count = 1;\n } else {\n combo_count++;\n }\n obj.combo_number = combo_number;\n obj.combo_count = combo_count;\n\n if (is_slider(obj)) {\n const data = obj.data as RenderSliderData;\n\n if (has_mod(this.mods, Mods.HardRock)) {\n data.pos = [data.pos[0], flip_y(data.pos[1])];\n data.control_points = data.control_points.map((p) => [p[0], flip_y(p[1])] as [number, number]);\n }\n\n data.computed_path = compute_slider_path(data);\n\n const timing_state = this.timing_resolver?.get_state_at(obj.time) ?? { base_beat_length: 600, sv_multiplier: 1 };\n const duration = calculate_slider_duration(data.distance, this.beatmap, timing_state);\n\n data.duration = duration;\n obj.end_time = obj.time + duration * data.repetitions;\n obj.end_pos = get_slider_end_position(data);\n } else if (is_spinner(obj)) {\n obj.end_pos = [256, 192];\n } else {\n const data = obj.data as { pos: Vec2 };\n if (has_mod(this.mods, Mods.HardRock)) {\n data.pos = [data.pos[0], flip_y(data.pos[1])];\n }\n obj.end_pos = data.pos;\n }\n }\n }\n\n private create_drawables(): void {\n this.release_drawables();\n const dpr = this.config.use_high_dpi ? window.devicePixelRatio || 1 : 1;\n this.drawable_config = {\n backend: this.backend,\n skin: this.skin,\n preempt: this.preempt,\n fade_in: this.fade_in,\n radius: this.radius,\n scale: this.config.scale * dpr,\n mods: this.mods\n };\n\n if (this.timing_resolver) {\n this.timing_resolver.reset();\n }\n\n for (const obj of this.objects) {\n if (is_circle(obj)) {\n this.drawables.push(new DrawableHitCircle(obj, this.drawable_config));\n } else if (is_slider(obj)) {\n const data = obj.data as RenderSliderData;\n const path = data.computed_path || [];\n const span_duration = data.duration || 0;\n\n const timing_state = this.timing_resolver?.get_state_at(obj.time) ?? { base_beat_length: 600, sv_multiplier: 1 };\n const { tick_distance, min_distance_from_end } = calculate_tick_spacing(this.beatmap, timing_state);\n\n this.drawables.push(new DrawableSlider(obj, this.drawable_config, path, span_duration, tick_distance, min_distance_from_end));\n }\n }\n }\n\n render(time: number): void {\n const { backend, config } = this;\n\n this.render_background();\n backend.save();\n backend.translate(config.offset_x, config.offset_y);\n backend.scale(config.scale, config.scale);\n this.render_playfield();\n this.render_grid();\n\n const visible_drawables: Drawable[] = [];\n for (let i = this.drawables.length - 1; i >= 0; i--) {\n const drawable = this.drawables[i];\n if (drawable.is_alive(time)) {\n visible_drawables.push(drawable);\n }\n }\n\n this.follow_point_renderer.render(time, backend, (t, hit_time) => this.get_circle_alpha(t, hit_time));\n\n for (const obj of this.objects) {\n if (is_spinner(obj)) {\n const appear_time = obj.time - this.preempt;\n if (time >= appear_time && time <= obj.end_time + 200) {\n this.draw_spinner(obj, time);\n }\n }\n }\n\n for (const drawable of visible_drawables) {\n drawable.update(time);\n }\n\n for (const drawable of visible_drawables) {\n if (drawable instanceof DrawableSlider) {\n drawable.render_body_pass(time);\n }\n }\n\n for (const drawable of visible_drawables) {\n if (drawable instanceof DrawableSlider) {\n drawable.render_head_pass(time);\n } else {\n drawable.render(time);\n }\n }\n\n if (!has_mod(this.mods, Mods.Hidden) && this.skin.enable_approach_circle) {\n for (const drawable of visible_drawables) {\n if (time <= drawable.start_time) {\n this.draw_approach_circle(drawable, time);\n }\n }\n }\n\n backend.restore();\n }\n\n precompute(): void {\n // avoid precomputing all slider textures on load.\n // they are prepared lazily in render_body for visible sliders.\n }\n\n dispose(): void {\n this.release_drawables();\n this.timing_points = [];\n this.timing_resolver = null;\n super.dispose();\n }\n\n private release_drawables(): void {\n for (const drawable of this.drawables) {\n drawable.dispose();\n }\n this.drawables = [];\n }\n\n private draw_approach_circle(drawable: Drawable, time: number): void {\n const pos = drawable.position;\n const appear_time = drawable.start_time - this.preempt;\n\n const fade_duration = Math.min(this.fade_in * 2, this.preempt);\n const fade_progress = clamp((time - appear_time) / fade_duration, 0, 1);\n const opacity = fade_progress * this.skin.approach_circle_opacity;\n\n const scale_progress = clamp((time - appear_time) / this.preempt, 0, 1);\n const scale = 4 - 3 * scale_progress;\n\n const combo_color = get_combo_color(this.skin, drawable.combo_number, 1);\n\n this.backend.save();\n this.backend.set_alpha(opacity);\n this.backend.draw_circle(pos[0], pos[1], this.radius * scale, \"transparent\", combo_color, this.radius * this.skin.approach_circle_width);\n this.backend.restore();\n }\n\n private get_circle_alpha(time: number, hit_time: number): number {\n const appear_time = hit_time - this.preempt;\n if (time < appear_time) return 0;\n\n let alpha = clamp((time - appear_time) / this.fade_in, 0, 1);\n\n if (has_mod(this.mods, Mods.Hidden)) {\n const fade_out_start = hit_time - this.preempt + this.fade_in;\n const fade_out_duration = this.preempt * 0.3;\n if (time > fade_out_start) {\n const fade_out_progress = clamp((time - fade_out_start) / fade_out_duration, 0, 1);\n alpha *= 1 - fade_out_progress;\n }\n }\n\n return alpha;\n }\n\n private draw_spinner(obj: RenderHitObject, time: number): void {\n const appear_time = obj.time - this.preempt;\n let opacity = clamp((time - appear_time) / this.fade_in, 0, 1);\n\n if (time > obj.end_time) {\n opacity = 1 - Easing.OutCubic(clamp((time - obj.end_time) / 200, 0, 1));\n }\n if (opacity <= 0) return;\n\n const x = 256;\n const y = 192;\n const duration = obj.end_time - obj.time;\n const progress = clamp((time - obj.time) / duration, 0, 1);\n\n this.backend.set_alpha(opacity);\n const approach_size = this.skin.spinner_size * (1 - progress);\n\n if (approach_size > 5) {\n this.backend.begin_path();\n this.backend.arc_to(x, y, approach_size, 0, Math.PI * 2);\n this.backend.stroke_path(\"rgba(255,255,255,0.6)\", 4);\n }\n\n this.backend.draw_circle(x, y, this.skin.spinner_size, \"rgba(0,0,0,0.2)\");\n this.backend.draw_circle(x, y, 12, \"white\");\n }\n}\n",
36
36
  "import type { IBeatmap } from \"../../types/beatmap\";\nimport { is_hold } from \"../../types/beatmap\";\nimport { Mods, has_mod } from \"../../types/mods\";\nimport { get_rate_multiplier } from \"../../mods\";\nimport { BaseRenderer, type IRendererConfig, DEFAULT_RENDERER_CONFIG, PLAYFIELD_WIDTH, PLAYFIELD_HEIGHT } from \"../base_renderer\";\nimport type { IRenderBackend } from \"../backend/render_backend\";\nimport type { ISkinConfig } from \"../../skin/skin_config\";\nimport { get_mania_lane_color } from \"../../skin/skin_config\";\nimport type { RenderHitObject, RenderHoldData } from \"../render_types\";\nimport { build_render_objects } from \"../render_objects\";\n\nconst MAX_TIME_RANGE = 11485;\nconst BASE_SCROLL_SPEED = 20;\n\nexport class ManiaRenderer extends BaseRenderer {\n private key_count: number = 4;\n private scroll_time: number = MAX_TIME_RANGE / BASE_SCROLL_SPEED;\n private hd_coverage: number = 0.25; // bottom 25% for hidden\n private fi_coverage: number = 0.6; // top 60% for fade-in\n private gradient_ratio: number = 0.2; // fade region is 20% of playfield height\n\n constructor(backend: IRenderBackend, skin: ISkinConfig, mods: number = 0, config: IRendererConfig = DEFAULT_RENDERER_CONFIG) {\n super(backend, skin, mods, config);\n this.update_scroll_time();\n }\n\n initialize(beatmap: IBeatmap): void {\n this.beatmap = beatmap;\n this.objects = build_render_objects(beatmap);\n this.key_count = Math.floor(beatmap.Difficulty.CircleSize);\n }\n\n set_mods(mods: number): void {\n this.mods = mods;\n this.update_scroll_time();\n }\n\n private update_scroll_time(): void {\n const rate = get_rate_multiplier(this.mods);\n this.scroll_time = MAX_TIME_RANGE / (BASE_SCROLL_SPEED * rate);\n }\n\n private time_to_y(time_diff: number): number {\n const hit_pos = this.skin.mania_hit_position;\n const progress = time_diff / this.scroll_time;\n return hit_pos - progress * hit_pos;\n }\n\n render(time: number): void {\n const { backend, config, skin, key_count } = this;\n\n this.render_background();\n\n const total_width = key_count * skin.mania_lane_width;\n const x_offset = Math.floor((PLAYFIELD_WIDTH - total_width) / 2);\n const hit_pos = skin.mania_hit_position;\n\n backend.save();\n backend.translate(config.offset_x, config.offset_y);\n backend.scale(config.scale, config.scale);\n\n this.render_playfield(total_width, PLAYFIELD_HEIGHT, x_offset);\n\n // draw lane keys at judgment line\n this.draw_lane_keys(time, x_offset);\n this.draw_judgment_line(x_offset);\n\n // clip notes to playfield above judgment line\n backend.save();\n backend.begin_path();\n backend.rect(x_offset, 0, total_width, hit_pos);\n backend.clip();\n\n // dim background for lanes\n backend.set_alpha(0.7);\n backend.draw_rect(x_offset, 0, total_width, hit_pos, \"#000000\");\n backend.set_alpha(1);\n\n // draw visible objects (those that haven't ended yet)\n for (const obj of this.objects) {\n if (obj.end_time < time) {\n continue;\n }\n\n if (is_hold(obj)) {\n this.draw_hold_note(obj, time, x_offset);\n } else {\n this.draw_note(obj, time, x_offset);\n }\n }\n\n // draw cover overlay for hd/fadein\n if (has_mod(this.mods, Mods.Hidden) || has_mod(this.mods, Mods.FadeIn)) {\n const coverage_ratio = has_mod(this.mods, Mods.Hidden) ? this.hd_coverage : this.fi_coverage;\n const total_h = hit_pos * coverage_ratio;\n const grad_h = hit_pos * this.gradient_ratio;\n\n if (has_mod(this.mods, Mods.Hidden)) {\n const start_y = hit_pos - total_h;\n const fade_end = grad_h / total_h;\n\n const gradient = backend.create_linear_gradient(x_offset, start_y, x_offset, hit_pos, [\n { offset: 0.0, color: \"rgba(0,0,0,0)\" },\n { offset: fade_end * 0.4, color: \"rgba(0,0,0,0.3)\" },\n { offset: fade_end * 0.7, color: \"rgba(0,0,0,0.75)\" },\n { offset: fade_end * 0.9, color: \"rgba(0,0,0,0.95)\" },\n { offset: fade_end, color: \"rgba(0,0,0,1)\" },\n { offset: 1.0, color: \"rgba(0,0,0,1)\" }\n ]);\n backend.draw_rect_gradient(x_offset, start_y, total_width, total_h, gradient);\n } else {\n const fade_start = (total_h - grad_h) / total_h;\n const gradient = backend.create_linear_gradient(x_offset, 0, x_offset, total_h, [\n { offset: 0.0, color: \"rgba(0,0,0,1)\" },\n { offset: fade_start, color: \"rgba(0,0,0,1)\" },\n { offset: fade_start + (1 - fade_start) * 0.1, color: \"rgba(0,0,0,0.95)\" },\n { offset: fade_start + (1 - fade_start) * 0.4, color: \"rgba(0,0,0,0.75)\" },\n { offset: fade_start + (1 - fade_start) * 0.7, color: \"rgba(0,0,0,0.3)\" },\n { offset: 1.0, color: \"rgba(0,0,0,0)\" }\n ]);\n backend.draw_rect_gradient(x_offset, 0, total_width, total_h, gradient);\n }\n }\n backend.restore();\n backend.restore();\n }\n\n private get_lane(obj: RenderHitObject): number {\n const pos = (obj.data as { pos: [number, number] }).pos;\n let lane = Math.floor((pos[0] * this.key_count) / 512);\n\n if (has_mod(this.mods, Mods.Mirror)) {\n lane = this.key_count - 1 - lane;\n }\n\n return lane;\n }\n\n private draw_note(obj: RenderHitObject, time: number, x_offset: number): void {\n const { backend, skin, key_count } = this;\n const lane = this.get_lane(obj);\n\n const lane_width = skin.mania_lane_width;\n const note_height = skin.mania_note_height;\n const spacing = skin.mania_lane_spacing;\n\n // calculate Y position from time difference\n const time_diff = obj.time - time;\n const y = this.time_to_y(time_diff);\n\n // skip if note is too far above screen\n if (y < -note_height - 64) {\n return;\n }\n\n const x = x_offset + lane * lane_width;\n const color = get_mania_lane_color(skin, key_count, lane);\n\n backend.set_alpha(1.0);\n backend.draw_rect(x + spacing, y - note_height, lane_width - 2 * spacing, note_height, color);\n }\n\n private draw_hold_note(obj: RenderHitObject, time: number, x_offset: number): void {\n const { backend, skin, key_count } = this;\n const data = obj.data as RenderHoldData;\n const lane = this.get_lane(obj);\n\n const lane_width = skin.mania_lane_width;\n const note_height = skin.mania_note_height;\n const spacing = skin.mania_lane_spacing;\n\n // calculate head and tail Y positions\n const head_time_diff = obj.time - time;\n const tail_time_diff = data.end_time - time;\n\n const head_y = this.time_to_y(head_time_diff);\n const tail_y = this.time_to_y(tail_time_diff);\n\n const x = x_offset + lane * lane_width;\n const color = get_mania_lane_color(skin, key_count, lane);\n\n // skip if entirely off screen\n if (tail_y < -64 && head_y < -64) {\n return;\n }\n\n // draw body (from tail to judgment line or head, whichever is lower)\n const body_top = tail_y;\n const body_bottom = head_time_diff < 0 ? skin.mania_hit_position : head_y;\n const body_height = body_bottom - body_top;\n\n if (body_height > 0) {\n backend.set_alpha(0.9);\n backend.draw_rect(x + spacing, body_top, lane_width - 2 * spacing, body_height, color);\n }\n\n // only draw head if not yet hit (before hit time)\n if (head_time_diff >= 0) {\n backend.set_alpha(1.0);\n backend.draw_rect(x + spacing, head_y - note_height, lane_width - 2 * spacing, note_height, color);\n }\n\n backend.set_alpha(1); // reset after hold note\n }\n\n private draw_judgment_line(x_offset: number): void {\n const { backend, skin, key_count } = this;\n const lane_width = skin.mania_lane_width;\n const hit_pos = skin.mania_hit_position;\n\n backend.draw_rect(x_offset, hit_pos - 1, lane_width * key_count, 2, \"#ffffff\");\n }\n\n private draw_lane_keys(time: number, x_offset: number): void {\n const { backend, skin, key_count } = this;\n const { mania_lane_width: lane_width, mania_hit_position: hit_pos, mania_lane_spacing: spacing, mania_note_height: note_height } = skin;\n const key_height = note_height + 5;\n\n const pressed = new Set<number>();\n const HIT_WINDOW = 50;\n\n for (const obj of this.objects) {\n if (time >= obj.time - HIT_WINDOW && time <= obj.end_time + HIT_WINDOW) {\n pressed.add(this.get_lane(obj));\n }\n }\n\n for (let i = 0; i < key_count; i++) {\n const is_pressed = pressed.has(i);\n const x = x_offset + i * lane_width;\n const color = get_mania_lane_color(skin, key_count, i);\n\n backend.set_alpha(0.3);\n backend.draw_rect(x + spacing, hit_pos, lane_width - 2 * spacing, key_height, color);\n\n if (is_pressed) {\n backend.set_alpha(1.0);\n backend.draw_rect(x + spacing, hit_pos, lane_width - 2 * spacing, key_height, \"#ff6666\");\n }\n }\n\n backend.set_alpha(1);\n }\n}\n",
37
37
  "import { clamp } from \"@/math/vector2\";\n\nexport class AudioNodeController {\n protected audio_context: AudioContext;\n protected gain_node: GainNode;\n\n constructor(context: AudioContext) {\n this.audio_context = context;\n this.gain_node = this.audio_context.createGain();\n this.gain_node.connect(this.audio_context.destination);\n }\n\n set_volume(volume: number): void {\n this.gain_node.gain.value = clamp(volume, 0, 1);\n }\n\n protected dispose_audio_node(): void {\n this.gain_node.disconnect();\n }\n}\n",
38
- "import { get_speed_multiplier } from \"../types/mods\";\nimport { AudioNodeController } from \"./audio_node_controller\";\n\nexport class AudioController extends AudioNodeController {\n private audio_source: AudioBufferSourceNode | null = null;\n private audio_buffer: AudioBuffer | null = null;\n\n private start_time: number = 0;\n private pause_time: number = 0;\n private speed: number = 1;\n private _is_playing: boolean = false;\n private _duration: number = 0;\n private _is_loaded: boolean = false;\n\n constructor(context: AudioContext) {\n super(context);\n }\n\n get is_playing(): boolean {\n return this._is_playing;\n }\n get is_loaded(): boolean {\n return this._is_loaded;\n }\n get duration(): number {\n return this._duration;\n }\n get speed_multiplier(): number {\n return this.speed;\n }\n\n get current_time(): number {\n if (!this._is_playing) {\n return this.pause_time;\n }\n return (this.audio_context.currentTime - this.start_time) * this.speed * 1000;\n }\n\n async load(data: ArrayBuffer, mods: number = 0): Promise<void> {\n this.stop();\n\n try {\n // copy buffer to avoid issues if source is detached\n this.audio_buffer = await this.audio_context.decodeAudioData(data.slice(0));\n this._duration = this.audio_buffer.duration * 1000;\n this.speed = get_speed_multiplier(mods);\n this._is_loaded = true;\n this.pause_time = 0;\n } catch (e) {\n console.error(\"Failed to decode audio data\", e);\n throw e;\n }\n }\n\n play(from_time?: number): void {\n if (!this.audio_buffer) {\n console.warn(\"[AudioController] Cannot play: not loaded\");\n return;\n }\n\n // stop current source if exists\n this.stop_source();\n\n const start_offset = from_time !== undefined ? from_time / 1000 : this.pause_time / 1000;\n\n // clamp to valid range\n const duration = this.audio_buffer.duration;\n const clamped_offset = Math.max(0, Math.min(start_offset, duration));\n\n if (clamped_offset >= duration) {\n // seeking past end\n this.pause_time = duration * 1000;\n return;\n }\n\n this.audio_source = this.audio_context.createBufferSource();\n this.audio_source.buffer = this.audio_buffer;\n this.audio_source.playbackRate.value = this.speed;\n this.audio_source.connect(this.gain_node);\n\n this.audio_source.onended = () => {\n if (this._is_playing) {\n this._is_playing = false;\n this.pause_time = this._duration;\n this.audio_source = null;\n }\n };\n\n this.start_time = this.audio_context.currentTime - clamped_offset / this.speed;\n this.audio_source.start(0, clamped_offset);\n this._is_playing = true;\n }\n\n pause(): void {\n if (!this._is_playing) return;\n\n // save current position before stopping\n this.pause_time = this.current_time;\n this.stop_source();\n this._is_playing = false;\n }\n\n seek(time_ms: number): void {\n const clamped = Math.max(0, Math.min(time_ms, this._duration));\n\n if (this._is_playing) {\n // stop and restart at new position\n this.stop_source();\n this._is_playing = false;\n this.pause_time = clamped;\n this.play();\n } else {\n this.pause_time = clamped;\n }\n }\n\n stop(): void {\n this.pause();\n this.pause_time = 0;\n }\n\n get_host_time(time_ms: number): number {\n // returns the AudioContext time corresponding to the given map time\n // current_time = (ctx_time - start_time) * speed * 1000\n // ctx_time = (current_time / 1000 / speed) + start_time\n return this.start_time + time_ms / 1000 / this.speed;\n }\n\n private stop_source(): void {\n if (this.audio_source) {\n try {\n this.audio_source.onended = null;\n this.audio_source.stop();\n this.audio_source.disconnect();\n } catch (err) {\n console.error(\"[AudioController]\", err as string);\n }\n this.audio_source = null;\n }\n }\n\n set_speed(speed: number): void {\n if (this._is_playing) {\n // capture current position before speed change\n const current_pos = this.current_time;\n this.speed = speed;\n // recalculate start_time for new speed\n this.start_time = this.audio_context.currentTime - current_pos / 1000 / speed;\n } else {\n this.speed = speed;\n }\n\n if (this.audio_source) {\n this.audio_source.playbackRate.value = speed;\n }\n }\n\n dispose(): void {\n this.stop();\n this.audio_buffer = null;\n this._is_loaded = false;\n\n // disconnect gain node but don't close context (shared)\n this.dispose_audio_node();\n }\n}\n",
38
+ "import { get_speed_multiplier } from \"../types/mods\";\nimport { AudioNodeController } from \"./audio_node_controller\";\n\nexport class AudioController extends AudioNodeController {\n private audio_element: HTMLAudioElement | null = null;\n private media_source_node: MediaElementAudioSourceNode | null = null;\n private object_url: string | null = null;\n\n private pause_time: number = 0;\n private speed: number = 1;\n private _is_playing: boolean = false;\n private _duration: number = 0;\n private _is_loaded: boolean = false;\n\n constructor(context: AudioContext) {\n super(context);\n }\n\n get is_playing(): boolean {\n return this._is_playing;\n }\n get is_loaded(): boolean {\n return this._is_loaded;\n }\n get duration(): number {\n return this._duration;\n }\n get speed_multiplier(): number {\n return this.speed;\n }\n\n get current_time(): number {\n if (!this.audio_element) {\n return this.pause_time;\n }\n\n if (!this._is_playing) {\n return this.pause_time;\n }\n\n return this.audio_element.currentTime * 1000;\n }\n\n async load(data: ArrayBuffer, mods: number = 0): Promise<void> {\n this.stop();\n this.release_media();\n\n try {\n this.speed = get_speed_multiplier(mods);\n\n const blob = new Blob([data]);\n const object_url = URL.createObjectURL(blob);\n const audio_element = new Audio(object_url);\n audio_element.preload = \"metadata\";\n audio_element.playbackRate = this.speed;\n audio_element.preservesPitch = false;\n\n this.audio_element = audio_element;\n this.object_url = object_url;\n\n this.media_source_node = this.audio_context.createMediaElementSource(audio_element);\n this.media_source_node.connect(this.gain_node);\n\n await new Promise<void>((resolve, reject) => {\n const on_loaded_metadata = () => {\n audio_element.removeEventListener(\"loadedmetadata\", on_loaded_metadata);\n audio_element.removeEventListener(\"error\", on_error);\n resolve();\n };\n\n const on_error = () => {\n audio_element.removeEventListener(\"loadedmetadata\", on_loaded_metadata);\n audio_element.removeEventListener(\"error\", on_error);\n reject(new Error(\"Failed to load audio metadata\"));\n };\n\n audio_element.addEventListener(\"loadedmetadata\", on_loaded_metadata, { once: true });\n audio_element.addEventListener(\"error\", on_error, { once: true });\n });\n\n this._duration = Math.max(0, (this.audio_element.duration || 0) * 1000);\n this._is_loaded = true;\n this.pause_time = 0;\n\n this.audio_element.onended = () => {\n this._is_playing = false;\n this.pause_time = this._duration;\n };\n } catch (e) {\n console.error(\"Failed to load audio data\", e);\n this.release_media();\n throw e;\n }\n }\n\n async play(from_time?: number): Promise<void> {\n if (!this.audio_element) {\n console.warn(\"[AudioController] Cannot play: not loaded\");\n return;\n }\n\n const start_offset = from_time !== undefined ? from_time / 1000 : this.pause_time / 1000;\n const duration = this.audio_element.duration || this._duration / 1000;\n const clamped_offset = Math.max(0, Math.min(start_offset, duration));\n\n if (clamped_offset >= duration) {\n this.pause_time = duration * 1000;\n return;\n }\n\n this.audio_element.currentTime = clamped_offset;\n this.audio_element.playbackRate = this.speed;\n\n try {\n await this.audio_element.play();\n this._is_playing = true;\n } catch (error) {\n this._is_playing = false;\n throw error;\n }\n }\n\n pause(): void {\n if (!this.audio_element || !this._is_playing) return;\n\n this.pause_time = this.current_time;\n this.audio_element.pause();\n this._is_playing = false;\n }\n\n seek(time_ms: number): void {\n const clamped = Math.max(0, Math.min(time_ms, this._duration));\n\n this.pause_time = clamped;\n\n if (!this.audio_element) {\n return;\n }\n\n this.audio_element.currentTime = clamped / 1000;\n }\n\n stop(): void {\n this.pause();\n this.pause_time = 0;\n\n if (this.audio_element) {\n this.audio_element.currentTime = 0;\n }\n }\n\n get_host_time(time_ms: number): number {\n const delta_ms = time_ms - this.current_time;\n return this.audio_context.currentTime + delta_ms / 1000 / this.speed;\n }\n\n set_speed(speed: number): void {\n this.speed = speed;\n\n if (this.audio_element) {\n this.audio_element.playbackRate = speed;\n }\n }\n\n dispose(): void {\n this.stop();\n this.release_media();\n this._is_loaded = false;\n this._duration = 0;\n this.pause_time = 0;\n this._is_playing = false;\n\n this.dispose_audio_node();\n }\n\n private release_media(): void {\n if (this.audio_element) {\n this.audio_element.pause();\n this.audio_element.onended = null;\n this.audio_element.src = \"\";\n this.audio_element.load();\n this.audio_element = null;\n }\n\n if (this.media_source_node) {\n this.media_source_node.disconnect();\n this.media_source_node = null;\n }\n\n if (this.object_url) {\n URL.revokeObjectURL(this.object_url);\n this.object_url = null;\n }\n }\n}\n",
39
39
  "export class VideoController {\n private video: HTMLVideoElement | null = null;\n private object_url: string | null = null;\n private _offset: number = 0;\n\n get element(): HTMLVideoElement | null {\n return this.video;\n }\n\n get offset(): number {\n return this._offset;\n }\n\n async load(data: Blob, offset: number = 0): Promise<void> {\n this.dispose();\n\n this._offset = offset;\n\n this.video = document.createElement(\"video\");\n this.video.muted = true;\n this.video.loop = false;\n this.video.playsInline = true;\n\n this.object_url = URL.createObjectURL(data);\n this.video.src = this.object_url;\n\n await new Promise<void>((resolve, reject) => {\n if (!this.video) {\n return reject(new Error(\"No video element\"));\n }\n\n this.video.onloadeddata = () => resolve();\n this.video.onerror = () => reject(new Error(\"Failed to load video\"));\n });\n }\n\n sync(audio_time_ms: number): void {\n if (!this.video) return;\n\n const video_time = (audio_time_ms - this._offset) / 1000;\n\n // only sync if visible (after offset)\n if (video_time < 0) {\n if (!this.video.paused) {\n this.video.pause();\n }\n return;\n }\n\n // check if video is out of sync\n const diff = Math.abs(this.video.currentTime - video_time);\n\n if (diff > 0.1) {\n this.video.currentTime = video_time;\n }\n }\n\n play(): void {\n if (this.video && this.video.paused) {\n this.video.play().catch(() => {\n console.log(\"failed to play video\");\n });\n }\n }\n\n pause(): void {\n if (this.video && !this.video.paused) {\n this.video.pause();\n }\n }\n\n seek(time_ms: number): void {\n if (!this.video) return;\n\n const video_time = Math.max(0, (time_ms - this._offset) / 1000);\n this.video.currentTime = video_time;\n }\n\n dispose(): void {\n if (this.video) {\n this.video.pause();\n this.video.src = \"\";\n this.video = null;\n }\n\n if (this.object_url) {\n URL.revokeObjectURL(this.object_url);\n this.object_url = null;\n }\n }\n}\n",
40
40
  "import { SampleSet, HitSoundType } from \"../types/beatmap\";\nimport { AudioNodeController } from \"./audio_node_controller\";\n\nexport class HitsoundController extends AudioNodeController {\n private static default_samples: Map<string, AudioBuffer> = new Map();\n private static default_loads: Map<string, Promise<void>> = new Map();\n private custom_samples: Map<string, AudioBuffer> = new Map();\n\n constructor(context: AudioContext) {\n super(context);\n }\n\n async load_samples(urls: string[]): Promise<void> {\n this.custom_samples.clear();\n await this.load_into_cache(urls, this.custom_samples, false);\n }\n\n async load_samples_from_files(files: Map<string, ArrayBuffer>): Promise<void> {\n this.custom_samples.clear();\n await this.load_files_into_cache(files, this.custom_samples);\n }\n\n async load_default_samples(urls: string[]): Promise<void> {\n await this.load_into_cache(urls, HitsoundController.default_samples, true);\n }\n\n clear(): void {\n this.custom_samples.clear();\n }\n\n play(\n normal_set: SampleSet,\n addition_set: SampleSet,\n hit_sound: number,\n index: number,\n volume: number = 100,\n custom_filename?: string,\n when: number = 0\n ): void {\n const normal_name = this.get_set_name(normal_set);\n const addition_name = this.get_set_name(addition_set);\n\n if (custom_filename) {\n const key = custom_filename.toLowerCase().replace(/\\.(wav|mp3|ogg)$/, \"\");\n if (this.play_buffer(key, volume, when)) return;\n }\n\n this.play_sound(normal_name, \"hitnormal\", index, volume, when);\n\n if (hit_sound & HitSoundType.Whistle) {\n this.play_sound(addition_name, \"hitwhistle\", index, volume, when);\n }\n if (hit_sound & HitSoundType.Finish) {\n this.play_sound(addition_name, \"hitfinish\", index, volume, when);\n }\n if (hit_sound & HitSoundType.Clap) {\n this.play_sound(addition_name, \"hitclap\", index, volume, when);\n }\n }\n\n play_sample(set: SampleSet, sample_name: string, index: number, volume: number = 100, when: number = 0): void {\n const set_name = this.get_set_name(set);\n this.play_sound(set_name, sample_name, index, volume, when);\n }\n\n private play_sound(set: string, type: string, index: number, volume: number, when: number): void {\n let played = false;\n\n if (index > 1) {\n played = this.play_buffer(`${set}-${type}${index}`, volume, when);\n }\n\n if (!played) {\n this.play_buffer(`${set}-${type}`, volume, when);\n }\n }\n\n private play_buffer(key: string, volume: number, when: number): boolean {\n const buffer = this.custom_samples.get(key) ?? HitsoundController.default_samples.get(key);\n if (!buffer) return false;\n\n const source = this.audio_context.createBufferSource();\n source.buffer = buffer;\n\n const gain = this.audio_context.createGain();\n gain.gain.value = volume / 100;\n\n source.connect(gain);\n gain.connect(this.gain_node);\n\n source.start(when);\n return true;\n }\n\n private get_set_name(set: SampleSet): string {\n switch (set) {\n case SampleSet.Drum:\n return \"drum\";\n case SampleSet.Soft:\n return \"soft\";\n default:\n return \"normal\";\n }\n }\n\n private get_sample_key_from_url(url: string): string | null {\n const clean_url = url.split(\"?\")[0].split(\"#\")[0];\n const file_name = clean_url.split(\"/\").pop();\n if (!file_name) {\n return null;\n }\n if (!file_name.endsWith(\".wav\") && !file_name.endsWith(\".mp3\") && !file_name.endsWith(\".ogg\")) {\n return null;\n }\n return file_name.toLowerCase().replace(/\\.(wav|mp3|ogg)$/, \"\");\n }\n\n private async load_into_cache(urls: string[], target: Map<string, AudioBuffer>, use_shared_loads: boolean): Promise<void> {\n if (urls.length == 0) {\n return;\n }\n\n const failed: string[] = [];\n const load_tasks = urls.map(async (url) => {\n const key = this.get_sample_key_from_url(url);\n if (!key) {\n failed.push(url);\n return;\n }\n\n if (target.has(key)) {\n return;\n }\n\n if (!use_shared_loads) {\n await this.load_single_sample(url, key, target, failed);\n return;\n }\n\n const pending = HitsoundController.default_loads.get(key);\n if (pending) {\n await pending;\n return;\n }\n\n const task = this.load_single_sample(url, key, target, failed).finally(() => {\n HitsoundController.default_loads.delete(key);\n });\n HitsoundController.default_loads.set(key, task);\n await task;\n });\n\n await Promise.all(load_tasks);\n\n if (failed.length > 0) {\n console.warn(`[HitsoundController] Failed to load ${failed.length} hitsounds`);\n }\n }\n\n private async load_single_sample(url: string, key: string, target: Map<string, AudioBuffer>, failed: string[]): Promise<void> {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n failed.push(url);\n return;\n }\n\n const data = await response.arrayBuffer();\n if (data.byteLength < 128) {\n failed.push(url);\n return;\n }\n\n const audio_buffer = await this.audio_context.decodeAudioData(data.slice(0));\n target.set(key, audio_buffer);\n } catch {\n failed.push(url);\n }\n }\n\n private async load_files_into_cache(files: Map<string, ArrayBuffer>, target: Map<string, AudioBuffer>): Promise<void> {\n if (files.size == 0) {\n return;\n }\n\n const failed: string[] = [];\n const load_tasks = [...files.entries()].map(async ([name, data]) => {\n const key = this.get_sample_key_from_url(name);\n if (!key) {\n return;\n }\n\n if (target.has(key)) {\n return;\n }\n\n if (data.byteLength < 128) {\n failed.push(name);\n return;\n }\n\n try {\n const audio_buffer = await this.audio_context.decodeAudioData(data.slice(0));\n target.set(key, audio_buffer);\n } catch {\n failed.push(name);\n }\n });\n\n await Promise.all(load_tasks);\n\n if (failed.length > 0) {\n console.warn(`[HitsoundController] Failed to load ${failed.length} hitsounds`);\n }\n }\n\n dispose(): void {\n this.custom_samples.clear();\n this.dispose_audio_node();\n }\n}\n",
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",
@@ -43,7 +43,7 @@
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
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"
45
45
  ],
46
- "mappings": "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",
47
- "debugId": "FE92E800DF3E93F364756E2164756E21",
46
+ "mappings": "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",
47
+ "debugId": "B9D937DC4146A37864756E2164756E21",
48
48
  "names": []
49
49
  }