2026-06-19 UI, UI로직
This commit is contained in:
124
Assets/My project/Memory Scripts/UI/MemoryProgressManager.cs
Normal file
124
Assets/My project/Memory Scripts/UI/MemoryProgressManager.cs
Normal file
@@ -0,0 +1,124 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
|
||||
[Serializable]
|
||||
public class MemoryProgressChangedEvent : UnityEvent<int, int> { }
|
||||
|
||||
public class MemoryProgressManager : MonoBehaviour
|
||||
{
|
||||
[Header("References")]
|
||||
[Tooltip("진행도 UI가 여러 곳에 있으면 모두 넣으세요. 예: HUD용, 방 선택용")]
|
||||
[SerializeField] private MemoryProgressUI[] memoryProgressUIs;
|
||||
|
||||
[Header("Progress")]
|
||||
[SerializeField] private int requiredPieces = 5;
|
||||
[SerializeField] private int currentPieces = 0;
|
||||
|
||||
[Header("Events")]
|
||||
public MemoryProgressChangedEvent onProgressChanged;
|
||||
public UnityEvent onAllPiecesCollected;
|
||||
|
||||
[Header("Debug")]
|
||||
[SerializeField] private bool showDebugLog = true;
|
||||
|
||||
private bool completionEventInvoked;
|
||||
|
||||
public int CurrentPieces => currentPieces;
|
||||
public int RequiredPieces => requiredPieces;
|
||||
public bool IsCompleted => currentPieces >= requiredPieces;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
requiredPieces = Mathf.Max(1, requiredPieces);
|
||||
currentPieces = Mathf.Clamp(currentPieces, 0, requiredPieces);
|
||||
RefreshUI();
|
||||
}
|
||||
|
||||
public void AddMemoryPiece()
|
||||
{
|
||||
AddMemoryPiece(1);
|
||||
}
|
||||
|
||||
public void AddMemoryPiece(int amount)
|
||||
{
|
||||
if (amount <= 0)
|
||||
return;
|
||||
|
||||
if (IsCompleted)
|
||||
{
|
||||
if (showDebugLog)
|
||||
Debug.Log("[MemoryProgressManager] 이미 모든 기억의 조각을 모았습니다.");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
currentPieces += amount;
|
||||
currentPieces = Mathf.Clamp(currentPieces, 0, requiredPieces);
|
||||
|
||||
RefreshAndNotify();
|
||||
CheckCompletion();
|
||||
}
|
||||
|
||||
public void SetMemoryPieces(int value)
|
||||
{
|
||||
currentPieces = Mathf.Clamp(value, 0, requiredPieces);
|
||||
|
||||
if (!IsCompleted)
|
||||
completionEventInvoked = false;
|
||||
|
||||
RefreshAndNotify();
|
||||
CheckCompletion();
|
||||
}
|
||||
|
||||
public void ResetProgress()
|
||||
{
|
||||
currentPieces = 0;
|
||||
completionEventInvoked = false;
|
||||
RefreshAndNotify();
|
||||
}
|
||||
|
||||
public void RegisterUI(MemoryProgressUI ui)
|
||||
{
|
||||
if (ui == null)
|
||||
return;
|
||||
|
||||
ui.SetProgress(currentPieces, requiredPieces);
|
||||
}
|
||||
|
||||
private void RefreshAndNotify()
|
||||
{
|
||||
RefreshUI();
|
||||
onProgressChanged?.Invoke(currentPieces, requiredPieces);
|
||||
|
||||
if (showDebugLog)
|
||||
Debug.Log($"[MemoryProgressManager] 기억의 조각 {currentPieces}/{requiredPieces}");
|
||||
}
|
||||
|
||||
private void RefreshUI()
|
||||
{
|
||||
if (memoryProgressUIs == null)
|
||||
return;
|
||||
|
||||
for (int i = 0; i < memoryProgressUIs.Length; i++)
|
||||
{
|
||||
if (memoryProgressUIs[i] != null)
|
||||
memoryProgressUIs[i].SetProgress(currentPieces, requiredPieces);
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckCompletion()
|
||||
{
|
||||
if (!IsCompleted)
|
||||
return;
|
||||
|
||||
if (completionEventInvoked)
|
||||
return;
|
||||
|
||||
completionEventInvoked = true;
|
||||
onAllPiecesCollected?.Invoke();
|
||||
|
||||
if (showDebugLog)
|
||||
Debug.Log("[MemoryProgressManager] 기억의 조각을 모두 모았습니다.");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user