feat: SongCreator 씬 완성 — Beat Sage URL 지원, info.dat 메타데이터 자동 추출
- BeatSageUploader: audio_url 지원(UploadFromUrl), PollAndDownload 공통화, ZIP 500 오류 3회 재시도 - BeatSageConverter: info.dat 파싱(SongMetadata), BPM 자동 감지 → 노트 타이밍 변환에 적용 - SongCreatorManager: title/BPM 필수 입력 제거, 난이도 4개 자동 선택, GenerateFlowFromUrl 버그 수정 - NasPublisher: audioPath null 허용(URL 흐름에서 로컬 파일 없는 경우 스킵) - .gitignore/.gitattributes 초기 설정 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
|
||||
namespace VRSDK
|
||||
{
|
||||
public static class GlobalDefinitionsManager
|
||||
{
|
||||
const string DEFINES_FILE_PATH = "Assets/mcs.rsp";
|
||||
|
||||
public static void CreateAndWriteDefinition(string def)
|
||||
{
|
||||
List<string> currentDefList = GetCurrentDefinitios();
|
||||
currentDefList.Add(def);
|
||||
WriteDefinitions(currentDefList);
|
||||
}
|
||||
|
||||
public static List<string> GetCurrentDefinitios()
|
||||
{
|
||||
if (!File.Exists( DEFINES_FILE_PATH ))
|
||||
return new List<string>();
|
||||
|
||||
string[] lines = File.ReadAllLines( DEFINES_FILE_PATH );
|
||||
|
||||
for (int n = 0; n < lines.Length; n++)
|
||||
{
|
||||
if (lines[n].StartsWith( "-define:" ))
|
||||
{
|
||||
return lines[n].Replace( "-define:", "" ).Split( ';' ).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
return new List<string>();
|
||||
}
|
||||
|
||||
public static void WriteDefinitions(List<string> defList)
|
||||
{
|
||||
DeleteDefinitionsFile();
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.Append( "-define:" );
|
||||
for (int n = 0; n < defList.Count; n++)
|
||||
{
|
||||
sb.Append( defList[n] );
|
||||
|
||||
|
||||
if (n < defList.Count - 1)
|
||||
{
|
||||
sb.Append( ";" );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
using (StreamWriter writer = new StreamWriter( DEFINES_FILE_PATH, false ))
|
||||
{
|
||||
writer.Write( sb.ToString() );
|
||||
}
|
||||
}
|
||||
|
||||
public static void RemoveDefinitions(params string[] definitionArray)
|
||||
{
|
||||
List<string> currentDef = GetCurrentDefinitios();
|
||||
|
||||
for (int n = 0; n < currentDef.Count; n++)
|
||||
{
|
||||
for (int j = 0; j < definitionArray.Length; j++)
|
||||
{
|
||||
if (currentDef[n] == definitionArray[j])
|
||||
{
|
||||
currentDef.RemoveAt(n);
|
||||
n--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (currentDef.Count <= 0)
|
||||
DeleteDefinitionsFile();
|
||||
else
|
||||
WriteDefinitions(currentDef);
|
||||
}
|
||||
|
||||
public static bool DefinitionExits(string def)
|
||||
{
|
||||
List<string> defList = GetCurrentDefinitios();
|
||||
|
||||
for (int n = 0; n < defList.Count; n++)
|
||||
{
|
||||
string currentDef = defList[n].Replace( " ", "" );
|
||||
|
||||
if (currentDef == def)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void DeleteDefinitionsFile()
|
||||
{
|
||||
//delete definitions file
|
||||
if (File.Exists( DEFINES_FILE_PATH ))
|
||||
File.Delete( DEFINES_FILE_PATH );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user