226 lines
7.7 KiB
C#
226 lines
7.7 KiB
C#
|
|
using UnityEngine;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.IO;
|
|||
|
|
using Newtonsoft.Json;
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>й<EFBFBD><D0B9><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public class MainMenuModel : MonoBehaviour
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
|
readonly private float DefaultBaseSpeed = 25;
|
|||
|
|
readonly private float DefaultTrackLength = 125;
|
|||
|
|
readonly private float DefaultNoteStream = 5f;
|
|||
|
|
readonly private float DefaultBPM = 128;
|
|||
|
|
readonly private float DefaultBaseBPM = 128;
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ʱ<EFBFBD><CAB1>,<2C>ڼ<EFBFBD><DABC><EFBFBD>BPM<50><4D><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public List<float> BPMLineTime { set; get; } = new List<float>();
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public List<float> currentBPMLine { set; get; } = new List<float>();
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ҫʱ<D2AA><CAB1><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>Ⱦ<EFBFBD><C8BE>ʽ,<2C><>Զȡ<D4B6><C8A1><EFBFBD><EFBFBD>Ϊ0<CEAA><30>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public BPMGroup MainBPMGroup
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
return BPMGroupManager.QueryBPMGroup(0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public Chart PersistentChartData { set; get; }
|
|||
|
|
public BPMGroupModel BPMGroupManager { set; get; }
|
|||
|
|
public ChartRuntimeModel ChartRuntimeDataManager { set; get; }
|
|||
|
|
public AudioSource Song { set; get; }
|
|||
|
|
public float SongCurrentTime
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
if (Song.clip == null) return 0;
|
|||
|
|
return (float)Song.timeSamples / Song.clip.frequency;
|
|||
|
|
}
|
|||
|
|
set
|
|||
|
|
{
|
|||
|
|
Song.time = value;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void Awake()
|
|||
|
|
{
|
|||
|
|
Song = gameObject.GetComponent<AudioSource>();
|
|||
|
|
InitMainMenuModel();
|
|||
|
|
}
|
|||
|
|
private void InitMainMenuModel()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>BPM<50><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BPMGroupManager = new BPMGroupModel(
|
|||
|
|
DefaultNoteStream,
|
|||
|
|
DefaultBaseSpeed,
|
|||
|
|
DefaultBaseBPM,
|
|||
|
|
DefaultTrackLength
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>
|
|||
|
|
ChartRuntimeDataManager = new ChartRuntimeModel();
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪJson<6F><6E><EFBFBD><EFBFBD><EFBFBD>ij־û<D6BE><C3BB><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>
|
|||
|
|
PersistentChartData = new Chart();
|
|||
|
|
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>Ľṹ
|
|||
|
|
NewProjectData();
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BPM<50><4D><EFBFBD><EFBFBD>״̬,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD>ڿ<EFBFBD><DABF>Ʋ<EFBFBD><C6B2><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>仯<EFBFBD>¼<EFBFBD><C2BC><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public void UpdateBPMGroup(float currentTime)
|
|||
|
|
{
|
|||
|
|
BPMGroupManager.UpdateBPMGroup(currentTime);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>봴<EFBFBD><EBB4B4><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public bool CreateBPMDataItem(int groupNum, float startTime, float currentBPM)
|
|||
|
|
{
|
|||
|
|
BPMGroupManager.CreateNewBPMGroup(groupNum, startTime, currentBPM);
|
|||
|
|
return BPMGroupManager.QueryBPMGroupDataItem(groupNum, startTime, currentBPM);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public bool DeleteBPMDataItem(int groupNum, float startTime, float currentBPM)
|
|||
|
|
{
|
|||
|
|
BPMGroupManager.DeleteBPMGroup(groupNum, startTime);
|
|||
|
|
return !BPMGroupManager.QueryBPMGroupDataItem(groupNum, startTime, currentBPM);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD>᷵<EFBFBD><E1B7B5>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>BPM<50><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF>ı<EFBFBD><C4B1><EFBFBD>,֮<><D6AE>ֻ<EFBFBD><D6BB>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľӿڸ<D3BF><DAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,C<>㱾<EFBFBD><E3B1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>BPM<50><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public List<(int GroupNum, float startTime, float currentBPM)> GetAllBPMDataItem()
|
|||
|
|
{
|
|||
|
|
return BPMGroupManager.GetAllBPMDataItem();
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public void UpdatePlayerSetting(float noteStream, float baseSpeed, float baseBPM, float trackLength)
|
|||
|
|
{
|
|||
|
|
BPMGroupManager.UpdatePlayerSetting(noteStream, baseSpeed, baseBPM, trackLength);
|
|||
|
|
|
|||
|
|
PersistentChartData.globalConfig.baseBPM = baseBPM;
|
|||
|
|
PersistentChartData.globalConfig.baseSpeed = baseSpeed;
|
|||
|
|
PersistentChartData.globalConfig.trackLength = trackLength;
|
|||
|
|
PersistentChartData.globalConfig.noteStream = noteStream;
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// ɾ<><C9BE>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public bool DeleteNoteDataItem(RuntimeBaseNoteData obj)
|
|||
|
|
{
|
|||
|
|
ChartRuntimeDataManager.DeleteDataItem(obj);
|
|||
|
|
|
|||
|
|
if (ChartRuntimeDataManager.GetDataItem(obj) == null)
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
public RuntimeNoteData CreateNewNoteDataItem(float targetTime, float xPos, float yPos, int num)
|
|||
|
|
{
|
|||
|
|
var go = BPMGroupManager.QueryBPMGroup(num);
|
|||
|
|
if (go == null) return null;
|
|||
|
|
|
|||
|
|
var item = new RuntimeNoteData(targetTime, xPos, yPos, go);
|
|||
|
|
ChartRuntimeDataManager.AddDataItem(item);
|
|||
|
|
return item;
|
|||
|
|
}
|
|||
|
|
public RuntimeDragData CreateNewDragDataItem(float targetTime, float xPos, float yPos, int num)
|
|||
|
|
{
|
|||
|
|
var go = BPMGroupManager.QueryBPMGroup(num);
|
|||
|
|
if (go == null) return null;
|
|||
|
|
|
|||
|
|
var item = new RuntimeDragData(targetTime, xPos, yPos, go);
|
|||
|
|
ChartRuntimeDataManager.AddDataItem(item);
|
|||
|
|
return item;
|
|||
|
|
}
|
|||
|
|
public RuntimeFlickData CreateNewFlickDataItem(float targetTime, float xPos, float yPos, int num, FlickDirection direction)
|
|||
|
|
{
|
|||
|
|
var go = BPMGroupManager.QueryBPMGroup(num);
|
|||
|
|
if (go == null) return null;
|
|||
|
|
|
|||
|
|
var item = new RuntimeFlickData(targetTime, xPos, yPos, direction, go);
|
|||
|
|
ChartRuntimeDataManager.AddDataItem(item);
|
|||
|
|
return item;
|
|||
|
|
}
|
|||
|
|
public RuntimeSnakeData CreateNewSnakeDataItem(float targetTime, float xPos, float yPos, float endXPos, float endYPos, float endTime, int num, ReferencePointLocation referencePoint)
|
|||
|
|
{
|
|||
|
|
var go = BPMGroupManager.QueryBPMGroup(num);
|
|||
|
|
if (go == null) return null;
|
|||
|
|
|
|||
|
|
var item = new RuntimeSnakeData(targetTime, xPos, yPos, endXPos, endYPos, endTime, referencePoint, go);
|
|||
|
|
ChartRuntimeDataManager.AddDataItem(item);
|
|||
|
|
return item;
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱģ<CAB1><C4A3><EFBFBD><EFBFBD>BPM<50><4D><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־û<D6BE><C3BB><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
|
|||
|
|
/// </summary>
|
|||
|
|
public void UpdateChartData()
|
|||
|
|
{
|
|||
|
|
ChartRuntimeDataManager.GetChartData(PersistentChartData);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>BPM<50><4D><EFBFBD><EFBFBD>
|
|||
|
|
var bpmList = BPMGroupManager.GetDataObject();
|
|||
|
|
PersistentChartData.BPMList = bpmList;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
private void NewProjectData()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>BPM<50><4D>,<2C><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
|
|||
|
|
BPMGroupManager.CreateNewBPMGroup(0, 0, DefaultBPM);
|
|||
|
|
|
|||
|
|
InitDefaultGlobalConfig();
|
|||
|
|
InitDefaultMETAData();
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>Ĭ<EFBFBD><C4AC>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
private void InitDefaultGlobalConfig()
|
|||
|
|
{
|
|||
|
|
PersistentChartData.globalConfig.baseBPM = DefaultBaseBPM;
|
|||
|
|
PersistentChartData.globalConfig.baseSpeed = DefaultBaseSpeed;
|
|||
|
|
PersistentChartData.globalConfig.trackLength = DefaultTrackLength;
|
|||
|
|
PersistentChartData.globalConfig.noteStream = DefaultNoteStream;
|
|||
|
|
PersistentChartData.globalConfig.BPM = DefaultBPM;
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һЩ<D2BB><D0A9><EFBFBD>Ե<EFBFBD>META<54><41><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
private void InitDefaultMETAData()
|
|||
|
|
{
|
|||
|
|
PersistentChartData.version = "<22><><EFBFBD>汾";
|
|||
|
|
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
PersistentChartData.META.songName = "MusCus";
|
|||
|
|
PersistentChartData.META.songWriter = "NPVASTAR-T";
|
|||
|
|
PersistentChartData.META.chartDesigner = "Program Team";
|
|||
|
|
PersistentChartData.META.illustrator = "<22><><EFBFBD>Ǥ<EFBFBD><C7A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BananApple<6C><65>";
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ȡChart<72>ļ<EFBFBD>,ע<><D7A2>,<2C><>ȡ<EFBFBD>µ<EFBFBD><C2B5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ḳ<EFBFBD>ǵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public void ReadChartByPath(string path)
|
|||
|
|
{
|
|||
|
|
string json = File.ReadAllText(path);
|
|||
|
|
PersistentChartData = JsonConvert.DeserializeObject<Chart>(json);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>л<EFBFBD>json<6F>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public string GetChartJson()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|||
|
|
UpdateChartData();
|
|||
|
|
string jsonString = JsonConvert.SerializeObject(PersistentChartData, Formatting.Indented);
|
|||
|
|
print(jsonString);
|
|||
|
|
return jsonString;
|
|||
|
|
}
|
|||
|
|
}
|