共享播放模型
共享地图核心现在提供 Rust 播放计算,桌面相机、轨迹和线动画已复用该模型。浏览器、桌面与独立动态库的共同轨迹播放门面已接通;scenePlayback/sceneRoutePlayback 为 true,sceneLinePlayback/sceneTracks 为 true,见线动画与样式曲线。当前可用的共同场景生命周期、静态资源和时钟见场景时钟。
Rust 使用
以下完整例子只计算位置,坐标属于调用方选择的平面,不自动转换坐标系。需要实际渲染时,使用完整原生渲染例子。该例子在地图核心仓库执行:
cargo run --locked -p sqs-map --example shared_playback_model -- /tmp/playback-frames
它使用实际 MapSession,渲染并保存9帧,验证位置、暂停、完成、隐藏和输出失败。它是调用方驱动模型的 Rust 示例,独立于已接通的地图持有 C/JavaScript 轨迹播放接口。
use sqs_map::playback::{Completion, Playback, RouteTrack};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let route = RouteTrack::new(vec![[0., 0.], [10., 20.]], vec![0., 1000.])?;
let mut current = Playback::new(route.duration_ms(), false, 0.)?;
current.play()?;
let round = current.epoch();
let mut candidate = current.clone();
candidate.advance(500., true)?;
let frame = route.sample(candidate.position_ms())?;
assert_eq!(frame.position, [5., 10.]);
// 先由宿主接受目标帧,成功后再发布候选;失败时丢弃候选。
current = candidate;
current.pause();
assert!(!current.advance(1000., true)?);
assert_eq!(current.completion(round), Completion::Pending);
current.play()?;
current.advance(500., true)?;
assert_eq!(current.completion(round), Completion::Completed);
Ok(())
}
播放和资源规则
时间单位是毫秒;宿主注入单调时间差。暂停不累计,恢复保持位置;新轮次让旧完成等待返回取消。循环不会自然完成;停止、资源失效或移除应由宿主结束等待。owner 停止保留已经完成的有限轮次;显式播放停止取消该轮次。只在调用者明确等待时保留等待请求,脚本退出后宿主持有的数据和模型由宿主管理。
轨迹准备接收2至100000点及严格递增、从零开始的时间数组,最长一天;采样按时间插值,停留点保留,方向按最短角度平滑过渡。RouteTrack 的点是宿主平面,不是默认经纬度;桌面仍负责投影转换。
LineTiming 通过 serde 接收 durationMs、delayMs、loop、direction、easing 和 fill。方向支持 forward/reverse/alternate,easing 支持 linear/ease-in-out,fill 支持 forwards/none。Tracks 接收 color/opacity/widthScale 曲线,每种最多32个键,offset 从0至1严格递增,颜色使用 #RRGGBB 或 #RRGGBBAA,透明度0至1、宽度比例0至8。反序列化即验证,准备成功后数据不可任意突变。
脚本语法和平台范围
公共相机继续优先使用 map.easeTo、map.flyTo,参考 MapLibre AnimationOptions 的 duration/easing 语义。场景拥有的轨迹、线动画和完成等待属于 SqsMap 扩展;不得假定 MapLibre 提供相同门面。
桌面兼容接口 map.scenes、map.playbacks、map.animations 本阶段保持参数和权限不变,其计算已委托共享核心。它们当前不能复制到网页或独立库并当作已实现能力。跨端路线播放已在15.5接通图源身份、数据版本、原子渲染和等待,使用共同轨迹接口;线动画和曲线继续后续阶段。
Linux 当前验证包括10项模型检查、可执行Rust文档例子、实际桌面等待适配器和QuickJS的7种结果,以及软件Vulkan真实渲染9帧。Windows/macOS由外机验证,移动设备、硬件后端、完整GUI和正式二进制发行另行验收。