Project_WL/Assets/WL/Island/WLIslandSave.cs

55 lines
2.8 KiB
C#

// ─────────────────────────────────────────────────────────────────────────────
// WLIslandSave.cs — 섬 세이브 파일 이름을 **경로와 무관하게 하나로** 고정한다.
//
// ■ 왜 필요한가 (Lead 실측 · 2026-09-13 · 816f 가 발견)
// `IslandManager.cs:119` 가 `saveFileName = SceneManager.GetActiveScene().name` 이라
// 같은 섬인데도 **들어온 경로에 따라 세이브가 갈린다**:
// · 섬 씬만 단독 Play → `Level01.dat`
// · 게임 정식 경로(로그인 → Load_Map → 섬이 Additive) → **`InGame.dat`**
// → 섬을 키워 놔도 다른 경로로 들어가면 초기 상태가 나온다.
//
// ■ PD 결정(2026-09-13): 「세이브가 경로마다 갈리면 안돼. 그냥 기존 세이브를
// 초기화하고 단일 경로로 맞춰」 → 이름을 하나로 고정한다.
//
// ■ 원본 수정은 `IslandManager.cs` **1줄**(그 대입문)뿐이다 — WL 하우스 규칙의
// 「1줄 훅 + 새 파일」 그대로. `enabled_ = 0` 이면 원래 동작(씬 이름)으로 돌아간다.
// ─────────────────────────────────────────────────────────────────────────────
using UnityEngine;
namespace WL.Island
{
public sealed class WLIslandSaveSettings : ScriptableObject
{
[Tooltip("0 이면 원본 동작(활성 씬 이름)으로 되돌아간다.")]
public int enabled_ = 1;
[Tooltip("모든 경로가 공유할 세이브 파일 이름(확장자 제외).")]
public string saveName = "WL_Island";
[Tooltip("1 이면 해석 결과를 로그로 남긴다.")]
public int verboseLog = 0;
static WLIslandSaveSettings s_cache;
public static WLIslandSaveSettings Get()
{
if (s_cache == null) s_cache = Resources.Load<WLIslandSaveSettings>("WL/WLIslandSaveSettings");
return s_cache;
}
}
public static class WLIslandSave
{
/// <summary>`IslandManager.Awake` 의 1줄 훅이 부른다. 끄면 받은 값을 그대로 돌려준다.</summary>
public static string ResolveSaveName(string sceneName)
{
var cfg = WLIslandSaveSettings.Get();
if (cfg == null || cfg.enabled_ == 0 || string.IsNullOrEmpty(cfg.saveName)) return sceneName;
if (cfg.verboseLog != 0)
Debug.Log("[WL-816] 섬 세이브 이름 '" + sceneName + "' → '" + cfg.saveName + "' (경로 무관 고정)");
return cfg.saveName;
}
}
}