단서 획득 시 데이터(Bool Array)의 상태를 먼저 갱신하고, 이후 UI 위젯(HUD, Journal)에 변경 사항을 브로드캐스트하는 구조입니다. 틱(Tick)이 아닌 이벤트 기반으로 UI를 업데이트하여 성능을 최적화했으며, 조건문을 통해 중복 해금을 방지하여 데이터 무결성을 유지했습니다.

//Police.cpp

void APolice::UnlockMemoWrap(int32 MemoIndex)
{
    if (MemoIndex < 1 || MemoIndex > 6) return;

    //1. 데이터 상태 업데이트(중복 해금 방지)
    if (bMemoUnlocked[MemoIndex - 1]) return;
    bMemoUnlocked[MemoIndex - 1] = true;

    //2. HUD(Update Mark) 업데이트-알림(Notification) 처리
    if (PoliceMemoOffWidget)
    {
        if (UPoliceMemoOffWidget* OffWidget = Cast<UPoliceMemoOffWidget>(PoliceMemoOffWidget))
        {
            OffWidget->SetUpdateMarkVisible(true); // 초록 점 표시 ON
        }
    }

    //3. 실제 수첩 UI 내부 내용 해금 (Data Binding)
    if (PoliceMemoOnWidget)
    {
        PoliceMemoOnWidget->UnlockMemo(MemoIndex);
    }
}