{"version":3,"file":"Track.cjs","sources":["../../../src/builder/Track.js"],"sourcesContent":["/**\r\n * 轨道类 - 直接使用 Layer 方式构建\r\n */\r\nimport { Scene } from './Scene.js';\r\nimport { Transition } from './Transition.js';\r\nimport { Component } from './Component.js';\r\n\r\n/**\r\n * 轨道类 - 直接创建 Layer 并添加元素，不使用 CompositionElement\r\n */\r\nexport class Track {\r\n  constructor(config = {}) {\r\n    this.builder = config.builder;\r\n    this.zIndex = config.zIndex || 0;\r\n    this.name = config.name || `Track-${this.zIndex}`;\r\n    this.width = config.width || config.builder?.config?.width || 1920;\r\n    this.height = config.height || config.builder?.config?.height || 1080;\r\n    this.fps = config.fps || config.builder?.config?.fps || 30;\r\n    this.scenes = [];\r\n    this.transitions = []; // 场景之间的转场效果\r\n    this.components = []; // 组件列表\r\n  }\r\n\r\n  /**\r\n   * 创建场景\r\n   * @param {Object} config - 场景配置 { duration, startTime, name }\r\n   * @returns {Scene} 场景实例\r\n   */\r\n  createScene(config = {}) {\r\n    // 自动计算 startTime（如果未指定，则使用当前轨道时长）\r\n    const startTime = config.startTime !== undefined \r\n      ? config.startTime \r\n      : this.getTotalDuration();\r\n    \r\n    const scene = new Scene({\r\n      ...config,\r\n      track: this,\r\n      startTime: startTime,\r\n      duration: config.duration || 5,\r\n    });\r\n    \r\n    this.scenes.push(scene);\r\n    return scene;\r\n  }\r\n\r\n  /**\r\n   * 添加转场效果\r\n   * @param {Object} config - 转场配置\r\n   * @description\r\n   * - `name`: 转场名称，取值来自 `AllTransitions`（见 `utils/transition-renderer.js`），支持内置与别名以及 `random`\r\n   * - `duration`: 转场时长（秒），默认 `0.5`\r\n   * - `easing`: 缓动函数名称，参考 `easings.js`\r\n   * - `params`: 转场参数对象（传入 gl-transitions 所需参数）\r\n   * - `fromScene`/`toScene`: 源/目标场景实例，或使用 `fromSceneIndex`/`toSceneIndex` 指定索引\r\n    * - `startTime`: 转场开始时间（秒）。注意：语义为转场的起始时刻，结束时间为 `startTime + duration`\r\n   * @returns {Track} 返回自身以支持链式调用\r\n   */\r\n  addTransition(config = {}) {\r\n    const transition = new Transition({\r\n      ...config,\r\n      track: this,\r\n    });\r\n    \r\n    this.transitions.push(transition);\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * 获取所有场景\r\n   * @returns {Array<Scene>}\r\n   */\r\n  getScenes() {\r\n    return this.scenes;\r\n  }\r\n\r\n  /**\r\n   * 计算轨道总时长\r\n   * 总时长 = 最后一个场景的结束时间 = max(scene.startTime + scene.duration)\r\n   * 注意：转场时长不应该单独加，因为转场是重叠在场景之间的\r\n   * @returns {number} 总时长（秒）\r\n   */\r\n  getTotalDuration() {\r\n    if (this.scenes.length === 0) return 0;\r\n    \r\n    // 计算所有场景的结束时间，取最大值\r\n    // 场景的结束时间 = startTime + duration\r\n    let maxEndTime = 0;\r\n    for (const scene of this.scenes) {\r\n      const sceneStartTime = scene.startTime !== undefined ? scene.startTime : 0;\r\n      const sceneEndTime = sceneStartTime + scene.duration;\r\n      if (sceneEndTime > maxEndTime) {\r\n        maxEndTime = sceneEndTime;\r\n      }\r\n    }\r\n    \r\n    return maxEndTime;\r\n  }\r\n\r\n  /**\r\n   * 添加组件\r\n   * @param {Component|Object} component - 组件实例或组件配置\r\n   * @returns {Track} 返回自身以支持链式调用\r\n   */\r\n  addComponent(component) {\r\n    // 如果传入的是配置对象，创建组件实例\r\n    if (!(component instanceof Component)) {\r\n      component = new Component(component);\r\n    }\r\n    \r\n    // 设置父容器引用\r\n    component.parent = this;\r\n    component.parentType = 'track';\r\n    \r\n    this.components.push(component);\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * 初始化轨道（预加载需要异步加载的元素）\r\n   * @returns {Promise<void>}\r\n   */\r\n  async initialize() {\r\n    // 初始化所有场景\r\n    for (const scene of this.scenes) {\r\n      if (scene.initialize) {\r\n        await scene.initialize();\r\n      }\r\n    }\r\n    \r\n    // 初始化所有组件\r\n    for (const component of this.components) {\r\n      if (component && typeof component.initialize === 'function') {\r\n        try {\r\n          await component.initialize();\r\n        } catch (err) {\r\n          console.warn(`[Track] 组件 ${component.name} 初始化失败:`, err);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 构建轨道（直接创建 Layer 并添加元素到 VideoMaker）\r\n   * @param {VideoMaker} videoMaker - VideoMaker 实例\r\n   * @returns {ElementLayer} 创建的 Layer\r\n   */\r\n  build(videoMaker) {\r\n    const totalDuration = this.getTotalDuration();\r\n    \r\n    // 为轨道创建 Layer\r\n    const layer = videoMaker.createElementLayer({\r\n      zIndex: this.zIndex,\r\n      startTime: 0,\r\n      endTime: totalDuration,\r\n    });\r\n    \r\n    // 构建所有场景，获取它们的元素\r\n    // 按 startTime 排序场景，确保场景按时间顺序处理\r\n    const sortedScenes = [...this.scenes].sort((a, b) => {\r\n      const aStartTime = a.startTime !== undefined ? a.startTime : 0;\r\n      const bStartTime = b.startTime !== undefined ? b.startTime : 0;\r\n      return aStartTime - bStartTime;\r\n    });\r\n    \r\n    let currentTime = 0;\r\n    \r\n    for (let i = 0; i < sortedScenes.length; i++) {\r\n      const scene = sortedScenes[i];\r\n      const sceneStartTime = scene.startTime !== undefined ? scene.startTime : currentTime;\r\n      \r\n      // 构建场景，返回元素实例数组\r\n      const sceneElements = scene.build(sceneStartTime);\r\n      \r\n      // 将所有元素添加到 Layer 或 VideoMaker（音频元素特殊处理）\r\n      for (const element of sceneElements) {\r\n        // 过滤无效元素（只检查 videoPath）\r\n        if (element.type === 'video' && !element.videoPath) {\r\n          //console.warn(`[Track] 跳过无效元素: video 缺少 videoPath`);\r\n          continue;\r\n        }\r\n        // 如果元素来自组件，时间已经是绝对时间，不需要再次转换\r\n        if (element._fromComponent) {\r\n          // 元素时间已经是绝对时间，直接使用\r\n          delete element._fromComponent; // 清理标记\r\n        } else {\r\n          // 设置元素的绝对时间（相对于视频开始）\r\n          // 注意：如果元素已经被处理过（标记为 _absoluteTimeSet），说明是 Track.build 第二次调用\r\n          // 此时直接跳过，避免重复累加时间\r\n          if (!element._absoluteTimeSet) {\r\n            const relativeStartTime = element.startTime || 0;\r\n            const absoluteStartTime = sceneStartTime + relativeStartTime;\r\n\r\n            // 如果是分割文本，需要在更新父元素的 startTime 之前保存相对开始时间\r\n            const parentRelativeStartTime = relativeStartTime;\r\n\r\n            element.startTime = absoluteStartTime;\r\n\r\n            // 更新元素的 endTime（基于绝对时间）\r\n            if (element.duration !== undefined) {\r\n              element.endTime = absoluteStartTime + element.duration;\r\n            } else if (element.endTime !== Infinity) {\r\n              // 如果 endTime 不是 Infinity，也需要转换为绝对时间\r\n              element.endTime = sceneStartTime + (element.endTime - relativeStartTime);\r\n            }\r\n\r\n            // 标记元素已经被处理过，防止 Track.build 多次调用时重复累加时间\r\n            element._absoluteTimeSet = true;\r\n          }\r\n\r\n          // 验证：元素的 endTime 不能超过场景的结束时间\r\n          const sceneEndTime = sceneStartTime + scene.duration;\r\n          if (element.endTime !== undefined && element.endTime > sceneEndTime) {\r\n            // console.warn(`元素 ${element.type} 的 endTime (${element.endTime}) 超过场景结束时间 (${sceneEndTime})，已截断`);\r\n            element.endTime = sceneEndTime;\r\n          }\r\n          \r\n          // 处理分割文本的时间转换\r\n          if (element.type === 'text' && element.segments && element.segments.length > 0) {\r\n            for (const segment of element.segments) {\r\n              // 更新子片段的绝对时间（相对于视频开始）\r\n              const segmentRelativeStartTime = segment.startTime || 0;\r\n              \r\n              // 计算子片段相对于父元素的偏移时间\r\n              const segmentOffset = segmentRelativeStartTime - parentRelativeStartTime;\r\n              \r\n              // 子片段的绝对时间 = 父元素的绝对时间 + 子片段相对于父元素的偏移\r\n              const segmentAbsoluteStartTime = absoluteStartTime + segmentOffset;\r\n              segment.startTime = segmentAbsoluteStartTime;\r\n              \r\n              // 更新子片段的 endTime\r\n              if (segment.duration !== undefined) {\r\n                segment.endTime = segmentAbsoluteStartTime + segment.duration;\r\n              } else if (segment.endTime !== Infinity) {\r\n                // 计算子片段的相对结束时间\r\n                const segmentRelativeEndTime = segment.endTime;\r\n                const segmentEndOffset = segmentRelativeEndTime - parentRelativeStartTime;\r\n                segment.endTime = absoluteStartTime + segmentEndOffset;\r\n              }\r\n            }\r\n          }\r\n        }\r\n        \r\n        // 音频元素需要添加到 VideoMaker 的 audioElements 数组，而不是 Layer\r\n        if (element.type === 'audio') {\r\n          // 更新音频元素的开始时间\r\n          if (element.audioStartTime === undefined) {\r\n            element.audioStartTime = 0;\r\n          }\r\n          videoMaker.addAudio(element);\r\n        } else {\r\n          // 设置元素的 canvasWidth 和 canvasHeight\r\n          element.canvasWidth = videoMaker.width;\r\n          element.canvasHeight = videoMaker.height;\r\n          \r\n          // 如果是分割文本，也需要设置子元素的 canvasWidth 和 canvasHeight\r\n          // 注意：分割文本的时间转换已经在上面处理了（对于非组件元素）\r\n          if (element.type === 'text' && element.segments && element.segments.length > 0) {\r\n            for (const segment of element.segments) {\r\n              segment.canvasWidth = videoMaker.width;\r\n              segment.canvasHeight = videoMaker.height;\r\n            }\r\n          }\r\n          \r\n          // 其他元素添加到 Layer\r\n          layer.addElement(element);\r\n        }\r\n      }\r\n      \r\n      currentTime = sceneStartTime + scene.duration;\r\n      \r\n      // 处理转场（暂时跳过，转场需要特殊处理）\r\n      // TODO: 转场效果需要重新设计\r\n    }\r\n    \r\n    // 添加所有组件的元素（组件会将其内部元素转换为绝对坐标）\r\n    for (const component of this.components) {\r\n      if (component && component.visible) {\r\n        // 计算组件的绝对开始时间\r\n        const componentAbsoluteStartTime = component.startTime !== undefined ? component.startTime : currentTime;\r\n        const componentElements = component.build(componentAbsoluteStartTime, this.width, this.height);\r\n        \r\n        // 将所有元素添加到 Layer\r\n        for (const element of componentElements) {\r\n          // 设置元素的 canvasWidth 和 canvasHeight\r\n          element.canvasWidth = videoMaker.width;\r\n          element.canvasHeight = videoMaker.height;\r\n          \r\n          // 如果是分割文本，也需要设置子元素的 canvas 尺寸\r\n          if (element.type === 'text' && element.segments && element.segments.length > 0) {\r\n            for (const segment of element.segments) {\r\n              segment.canvasWidth = videoMaker.width;\r\n              segment.canvasHeight = videoMaker.height;\r\n              \r\n              // 更新子片段的绝对时间\r\n              const segmentRelativeStartTime = segment.startTime || 0;\r\n              const segmentOffset = segmentRelativeStartTime - (element.startTime - componentAbsoluteStartTime);\r\n              segment.startTime = componentAbsoluteStartTime + segmentOffset;\r\n              \r\n              if (segment.duration !== undefined) {\r\n                segment.endTime = segment.startTime + segment.duration;\r\n              }\r\n            }\r\n          }\r\n          \r\n          // 音频元素需要添加到 VideoMaker 的 audioElements 数组\r\n          if (element.type === 'audio') {\r\n            if (element.audioStartTime === undefined) {\r\n              element.audioStartTime = 0;\r\n            }\r\n            videoMaker.addAudio(element);\r\n          } else {\r\n            // 其他元素添加到 Layer\r\n            layer.addElement(element);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return layer;\r\n  }\r\n\r\n  /**\r\n   * 销毁轨道\r\n   */\r\n  destroy() {\r\n    for (const scene of this.scenes) {\r\n      scene.destroy();\r\n    }\r\n    this.scenes = [];\r\n    this.transitions = [];\r\n    \r\n    // 销毁所有组件\r\n    for (const component of this.components) {\r\n      if (component.destroy) {\r\n        component.destroy();\r\n      }\r\n    }\r\n    this.components = [];\r\n  }\r\n}\r\n\r\n"],"names":["Scene","Transition","Component"],"mappings":"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"}