using System; using UnityEngine; namespace PinballUncountable { /// /// 单条轨迹:Dome 内单颗球的烘焙位置序列(无需 collider 信息) /// [Serializable] public class SerializableDomeTrajectory { public Vector2[] positions; public SerializableDomeTrajectory() => positions = Array.Empty(); public SerializableDomeTrajectory(Vector2[] positions) => this.positions = positions ?? Array.Empty(); } /// /// 一次 Kick 的烘焙数据:每颗球一条轨迹 /// [Serializable] public class DomeKickVariant { public SerializableDomeTrajectory[] trajectories = Array.Empty(); } /// /// Dome 烘焙数据资源:多组 Kick 变体,运行时随机选一组回放 /// public class PinballUncountableDomeBakedData : ScriptableObject { public DomeKickVariant[] variants = Array.Empty(); /// /// 将某条可序列化轨迹转为 SimBall 使用的 FrameData(Collider 为空) /// public static PinballUncountableFrameData[] ToFrameData(SerializableDomeTrajectory t) { if (t?.positions == null || t.positions.Length == 0) return Array.Empty(); var frames = new PinballUncountableFrameData[t.positions.Length]; for (int i = 0; i < t.positions.Length; i++) frames[i] = new PinballUncountableFrameData(t.positions[i], null); return frames; } } }