feat: update song selection, score UI, and song creator features
- SongSelectManager/SongDetailPanel: 곡 선택 및 상세 패널 개선 - SongCreatorManager: 곡 생성 기능 추가 - FinalScoreLabel/ScoreManager: 결과 화면 점수 UI 업데이트 - MarqueeText: 마퀴 텍스트 컴포넌트 개선 - NoteData/SongController: 노트 데이터 및 컨트롤러 보완 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -50,14 +50,27 @@ public class SongCreatorManager : MonoBehaviour
|
||||
[SerializeField] private BeatSageUploader beatSageUploader;
|
||||
[SerializeField] private NasPublisher nasPublisher;
|
||||
|
||||
private static readonly Color NeonBg = new Color(0.05f, 0.82f, 0.95f, 0.42f);
|
||||
private static readonly Color DarkButtonBg = new Color(0.09f, 0.22f, 0.27f, 0.66f);
|
||||
private static readonly Color DisabledBg = new Color(0.06f, 0.12f, 0.15f, 0.48f);
|
||||
private static readonly Color ButtonText = new Color(0.92f, 1.0f, 1.0f, 1.0f);
|
||||
private static readonly Color MutedText = new Color(0.66f, 0.80f, 0.84f, 0.76f);
|
||||
private static readonly Color NeonOutline = new Color(0.25f, 0.96f, 1.0f, 0.42f);
|
||||
|
||||
private static string InputPath =>
|
||||
Path.Combine(Application.persistentDataPath, "input");
|
||||
|
||||
private readonly List<string> audioFiles = new();
|
||||
private string _pendingFilePath;
|
||||
|
||||
private void OnValidate()
|
||||
{
|
||||
ApplyButtonStyles();
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
ApplyButtonStyles();
|
||||
Directory.CreateDirectory(InputPath);
|
||||
|
||||
if (inputPathHint != null)
|
||||
@@ -258,6 +271,7 @@ public class SongCreatorManager : MonoBehaviour
|
||||
if (refreshBtn != null) refreshBtn.interactable = value;
|
||||
if (filePickerBtn != null) filePickerBtn.interactable = value;
|
||||
if (urlDownloadBtn != null) urlDownloadBtn.interactable = value;
|
||||
ApplyButtonStyles();
|
||||
}
|
||||
|
||||
private void OnFilePickerClicked()
|
||||
@@ -323,6 +337,7 @@ public class SongCreatorManager : MonoBehaviour
|
||||
{
|
||||
SetAddStatus("Downloading...");
|
||||
if (urlDownloadBtn != null) urlDownloadBtn.interactable = false;
|
||||
ApplyButtonStyles();
|
||||
|
||||
string fileName;
|
||||
try
|
||||
@@ -341,6 +356,7 @@ public class SongCreatorManager : MonoBehaviour
|
||||
yield return req.SendWebRequest();
|
||||
|
||||
if (urlDownloadBtn != null) urlDownloadBtn.interactable = true;
|
||||
ApplyButtonStyles();
|
||||
|
||||
if (req.result == UnityWebRequest.Result.Success)
|
||||
{
|
||||
@@ -358,4 +374,51 @@ public class SongCreatorManager : MonoBehaviour
|
||||
}
|
||||
|
||||
private void SetAddStatus(string msg) { if (addStatusText != null) addStatusText.text = msg; }
|
||||
|
||||
private void ApplyButtonStyles()
|
||||
{
|
||||
ApplyCreatorButtonStyle(generateButton, true);
|
||||
ApplyCreatorButtonStyle(urlDownloadBtn, true);
|
||||
ApplyCreatorButtonStyle(refreshBtn, false);
|
||||
ApplyCreatorButtonStyle(filePickerBtn, false);
|
||||
ApplyCreatorButtonStyle(backButton, false);
|
||||
}
|
||||
|
||||
private static void ApplyCreatorButtonStyle(Button btn, bool primary)
|
||||
{
|
||||
if (btn == null)
|
||||
return;
|
||||
|
||||
Color bg = btn.interactable ? (primary ? NeonBg : DarkButtonBg) : DisabledBg;
|
||||
if (btn.targetGraphic is Image img)
|
||||
{
|
||||
img.color = bg;
|
||||
img.raycastTarget = true;
|
||||
}
|
||||
|
||||
var colors = btn.colors;
|
||||
colors.normalColor = bg;
|
||||
colors.highlightedColor = btn.interactable
|
||||
? new Color(0.10f, 0.95f, 1.0f, primary ? 0.58f : 0.48f)
|
||||
: DisabledBg;
|
||||
colors.pressedColor = btn.interactable
|
||||
? new Color(0.02f, 0.58f, 0.72f, 0.80f)
|
||||
: DisabledBg;
|
||||
colors.selectedColor = colors.highlightedColor;
|
||||
colors.disabledColor = DisabledBg;
|
||||
colors.fadeDuration = 0.08f;
|
||||
btn.colors = colors;
|
||||
|
||||
TMP_Text label = btn.GetComponentInChildren<TMP_Text>(true);
|
||||
if (label != null)
|
||||
{
|
||||
label.color = btn.interactable ? ButtonText : MutedText;
|
||||
label.raycastTarget = false;
|
||||
}
|
||||
|
||||
Outline outline = btn.GetComponent<Outline>() ?? btn.gameObject.AddComponent<Outline>();
|
||||
outline.enabled = btn.interactable;
|
||||
outline.effectColor = NeonOutline;
|
||||
outline.effectDistance = new Vector2(0.0f, -0.28f);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user