HartoukChartEditor/Assets/Script/Data/ChartData.cs

229 lines
6.4 KiB
C#

using System;
using System.Collections.Generic;
using Unity.VisualScripting.FullSerializer;
public enum ReferencePointLocation
{
Near, Far, RightTop, RightBottom, LeftTop, LeftBottom
}
public enum FlickDirection
{
Up, RightUp, Right, RightDown, Down, LeftDown, Left, LeftUp, Any
}
/// <summary>
/// 用于创建持久化数据的类
/// </summary>
[Serializable]
public class Chart
{
public string version { get; set; }
public META META { get; set; }
public GlobalConfig globalConfig { get; set; }
public List<BPMListItem> BPMList { get; set; }
public List<NoteListItem> noteList { get; set; }
public List<DragListItem> dragList { get; set; }
public List<DataFlowListItem> dataFlowList { get; set; }
public List<FlickListItem> flickList { get; set; }
public List<LandMineListItem> landMineList { get; set; }
public Chart()
{
BPMList = new List<BPMListItem>();
noteList = new List<NoteListItem>();
dragList = new List<DragListItem>();
dataFlowList = new List<DataFlowListItem>();
flickList = new List<FlickListItem>();
landMineList = new List<LandMineListItem>();
globalConfig = new GlobalConfig();
META = new META();
}
public override string ToString()
{
return $"Chart: version={version}, \n" +
$"META=[{META}], \n" +
$"globalConfig=[{globalConfig}], \n" +
$"BPMList={BPMList?.Count ?? 0} items, \n" +
$"noteList={noteList?.Count ?? 0} items, \n" +
$"dragList={dragList?.Count ?? 0} items, \n" +
$"dataFlowList={dataFlowList?.Count ?? 0} items, \n" +
$"flickList={flickList?.Count ?? 0} items, \n" +
$"landMineList={landMineList?.Count ?? 0} items, \n";
}
}
[Serializable]
public class META
{
public string songName { get; set; }
public string songWriter { get; set; }
public string chartDesigner { get; set; }
public string illustrator { get; set; }
public override string ToString()
{
return $"META(songName={(songName)}, " +
$"songWriter={(songWriter)}, " +
$"chartDesigner={(chartDesigner)}, " +
$"illustrator={(illustrator)})";
}
}
public class GlobalConfig
{
public float baseBPM { get; set; }
public float baseSpeed { get; set; } = 25;
public float trackLength { get; set; } = 125;
public float noteStream { get; set; }
public float BPM { get; set; }
public override string ToString()
{
return $"GlobalConfig(" +
$"baseBPM={baseBPM}, " +
$"baseSpeed={baseSpeed}, " +
$"trackLength={trackLength}, " +
$"noteStream={noteStream}, " +
$"BPM={BPM})";
}
}
[Serializable]
public class BPMListItem
{
public BPMListItem() { }
public BPMListItem(float bpm, float startTime, int number)
{
this.bpm = bpm;
this.startTime = startTime;
this.number = number;
}
public float bpm { get; set; }
public float startTime { get; set; }
public int number { get; set; }
}
[Serializable]
public class NoteListItem
{
public NoteListItem() { }
public NoteListItem(float x, float y, float targetTime, int timingGroup)
{
this.x = x;
this.y = y;
this.targetTime = targetTime;
this.timingGroup = timingGroup;
}
public float x { get; set; }
public float y { get; set; }
public float targetTime { get; set; }
public int timingGroup { get; set; }
}
[Serializable]
public class DragListItem
{
public DragListItem() { }
public DragListItem(float x, float y, float targetTime, int timingGroup)
{
this.x = x;
this.y = y;
this.targetTime = targetTime;
this.timingGroup = timingGroup;
}
public float x { get; set; }
public float y { get; set; }
public float targetTime { get; set; }
public int timingGroup { get; set; }
}
[Serializable]
public class FlickListItem
{
public FlickListItem() { }
public FlickListItem(float x, float y, float targetTime,int timingGroup, FlickDirection direction)
{
this.x = x;
this.y = y;
this.targetTime = targetTime;
this.timingGroup = timingGroup;
this.direction = direction;
}
public float x { get; set; }
public float y { get; set; }
public float targetTime { get; set; }
public int timingGroup { get; set; }
public FlickDirection direction { get; set; }
}
[Serializable]
public class LandMineListItem
{
public LandMineListItem() { }
public LandMineListItem(float x, float y, float startTime, float endTime)
{
this.x = x;
this.y = y;
this.startTime = startTime;
this.endTime = endTime;
}
public float x { get; set; }
public float y { get; set; }
public float startTime { get; set; }
public float endTime { get; set; }
}
[Serializable]
public class DataFlowListItem
{
public DataFlowListItem() { }
public DataFlowListItem(float startX, float startY, float endX, float endY,
float startTime, float endTime, bool isTriggers,
int timingGroup, ReferencePointLocation type)
{
this.startX = startX;
this.startY = startY;
this.endX = endX;
this.endY = endY;
this.startTime = startTime;
this.endTime = endTime;
this.isTriggers = isTriggers;
this.timingGroup = timingGroup;
this.type = type;
}
public float startX { get; set; }
public float startY { get; set; }
public float endX { get; set; }
public float endY { get; set; }
public float startTime { get; set; }
public float endTime { get; set; }
public bool isTriggers { get; set; }
public int timingGroup { get; set; }
public ReferencePointLocation type { get; set; }
}
// 新增:特效系统
[Serializable]
public class EffectData
{
public EffectData() { }
public EffectData(string effectId, float startTime, float duration, Dictionary<string, object> parameters)
{
this.effectId = effectId;
this.startTime = startTime;
this.duration = duration;
this.parameters = parameters;
}
public string effectId;
public float startTime;
public float duration;
public Dictionary<string, object> parameters;
}