Files
ft/Client/Assets/Scripts/UI/PinballUncountable/PinballUncountableDomeBakedData.cs
2026-06-29 21:18:33 +08:00

49 lines
1.6 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 使用的 FrameDataCollider 为空)
/// </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;
}
}
}