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