마을 초기화 버튼 (회관 패널)
- engine.reset(): 세이브 삭제 + 새 게임 상태로 즉시 전환 (튜토리얼부터) - 회관 패널 하단에 확인 창 포함 초기화 버튼 - 콘솔에서 localStorage만 지우면 5초 자동 저장이 되살리는 문제의 정식 해법 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
이 커밋은 다음에 포함됨:
@@ -375,6 +375,16 @@ export default function Game() {
|
|||||||
state={state}
|
state={state}
|
||||||
onUpgrade={() => run(() => engine.upgradeHall())}
|
onUpgrade={() => run(() => engine.upgradeHall())}
|
||||||
highlightUpgrade={tutTarget === "hall-upgrade"}
|
highlightUpgrade={tutTarget === "hall-upgrade"}
|
||||||
|
onReset={() => {
|
||||||
|
if (
|
||||||
|
window.confirm(
|
||||||
|
"정말 마을을 초기화할까요? 고양이·건물·자원이 모두 사라지고 처음부터 시작합니다.",
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
dispatch(() => engine.reset());
|
||||||
|
setPanel(null);
|
||||||
|
}
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</SidePanel>
|
</SidePanel>
|
||||||
)}
|
)}
|
||||||
@@ -528,10 +538,12 @@ function HallPanel({
|
|||||||
state,
|
state,
|
||||||
onUpgrade,
|
onUpgrade,
|
||||||
highlightUpgrade,
|
highlightUpgrade,
|
||||||
|
onReset,
|
||||||
}: {
|
}: {
|
||||||
state: GameState;
|
state: GameState;
|
||||||
onUpgrade: () => void;
|
onUpgrade: () => void;
|
||||||
highlightUpgrade?: boolean;
|
highlightUpgrade?: boolean;
|
||||||
|
onReset: () => void;
|
||||||
}) {
|
}) {
|
||||||
const next = HALL_LEVELS[state.hall.level + 1];
|
const next = HALL_LEVELS[state.hall.level + 1];
|
||||||
return (
|
return (
|
||||||
@@ -601,8 +613,17 @@ function HallPanel({
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<p className="text-sm text-gray-400">회관이 최고 레벨입니다.</p>
|
<p className="text-sm text-[#a3906c]">회관이 최고 레벨입니다.</p>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
<div className="border-t border-dashed border-[rgba(126,95,48,.3)] pt-3">
|
||||||
|
<button
|
||||||
|
onClick={onReset}
|
||||||
|
className="w-full rounded-lg border border-[rgba(176,71,42,.4)] bg-[rgba(214,106,74,.08)] py-2 text-xs text-[#b0472a] hover:bg-[rgba(214,106,74,.16)]"
|
||||||
|
>
|
||||||
|
🗑 마을 초기화 (새 게임 시작 — 되돌릴 수 없어요)
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -310,6 +310,13 @@ export const engine = {
|
|||||||
state.tutorialStep = step;
|
state.tutorialStep = step;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/** 마을 완전 초기화 (새 게임 + 튜토리얼부터) */
|
||||||
|
reset() {
|
||||||
|
localStorage.removeItem(SAVE_KEY);
|
||||||
|
state = createInitialState();
|
||||||
|
offlineMinutes = null;
|
||||||
|
},
|
||||||
|
|
||||||
tick(dt: number) {
|
tick(dt: number) {
|
||||||
if (!state) return;
|
if (!state) return;
|
||||||
for (const building of state.buildings) {
|
for (const building of state.buildings) {
|
||||||
|
|||||||
새 이슈에서 참조
사용자 차단