using UnityEngine;
using UVC.Core;
namespace Sample
{
///
/// Type D 예시: 순수 C# Singleton - 게임 설정 관리자
///
///
/// [ 타입 ] Type D - 순수 C# Singleton (Singleton<T> 상속)
/// [ 라이프사이클 ] App - 애플리케이션 전체 유지
///
/// [ 특징 ]
///
/// - MonoBehaviour가 아니므로 GameObject/씬에 배치 불필요
/// - Lazy 초기화: 첫 Instance 접근 시 자동 생성
/// - 스레드 안전한 싱글톤 패턴
/// - Injector와 기존 Instance 접근 방식 모두 지원
///
///
/// [ 등록 방법 ]
/// Injector.RegisterSingleton<InjectorSampleSettingsManager>();
///
/// [ 사용 방법 ]
///
/// // 방법 1: [Inject] 어트리뷰트 사용
/// [Inject] private InjectorSampleSettingsManager _settings;
/// _settings.MasterVolume = 0.5f;
///
/// // 방법 2: 직접 Instance 접근 (기존 Singleton 방식)
/// InjectorSampleSettingsManager.Instance.MasterVolume = 0.5f;
///
/// // 두 방식 모두 동일한 인스턴스를 반환
///
///
/// [ 주의사항 ]
///
/// - Unity Inspector에서 설정 불가 (MonoBehaviour 아님)
/// - 씬에 배치하면 컴파일 에러 발생
/// - PlayerPrefs 등을 통한 영속화는 별도 구현 필요
///
///
public class InjectorSampleSettingsManager : Singleton
{
/// 마스터 볼륨 (0.0 ~ 1.0)
public float MasterVolume { get; set; } = 1.0f;
/// 효과음 볼륨 (0.0 ~ 1.0)
public float SFXVolume { get; set; } = 1.0f;
/// 배경음악 볼륨 (0.0 ~ 1.0)
public float BGMVolume { get; set; } = 0.8f;
/// 언어 설정 (ko, en, jp 등)
public string Language { get; set; } = "ko";
///
/// 설정을 저장합니다.
/// 실제 구현에서는 PlayerPrefs나 파일 시스템에 저장합니다.
///
public void Save()
{
// 실제 구현 예시:
// PlayerPrefs.SetFloat("MasterVolume", MasterVolume);
// PlayerPrefs.SetString("Language", Language);
// PlayerPrefs.Save();
Debug.Log("[InjectorSampleSettingsManager] Settings saved");
}
///
/// 설정을 불러옵니다.
/// 실제 구현에서는 PlayerPrefs나 파일 시스템에서 로드합니다.
///
public void Load()
{
// 실제 구현 예시:
// MasterVolume = PlayerPrefs.GetFloat("MasterVolume", 1.0f);
// Language = PlayerPrefs.GetString("Language", "ko");
Debug.Log("[InjectorSampleSettingsManager] Settings loaded");
}
}
}