게임·입장 UX와 물리/고지 개선을 반영한다.

비행기(세계여행) 칸 선택 이동, 주사위 무게감, 설정 패널·주사위 초기화,
개인정보 고지·파비콘·탭 제목을 정리하고 런타임 로그는 추적에서 제외한다.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
kimyu
2026-09-21 12:50:22 +09:00
parent 73520f9f06
commit 347dfc1f4a
21 changed files with 316 additions and 148 deletions

View File

@@ -12,10 +12,16 @@ export const CELL_TYPE_PRESETS = [
'다같이한잔',
'영어금지 3분',
'두잔마셔',
'애교/매도 100자',
'애교/매도 50자',
'무인도',
'역방향',
'세계여행',
'TMI 알려주기',
'뒤로 3칸',
'앞으로 4칸',
'방어권',
'방어권 전부삭제',
'물한잔',
] as const;
export type CellEventOption = {
@@ -36,7 +42,7 @@ export type BoardCellConfig = {
eventId?: string | null;
/** 칸 전용 이미지 (data URL 또는 상대 경로) */
imageSrc?: string | null;
/** false면 게임에서 이름·이미지를 숨김 (기본 true) */
/** false면 게임에서 칸 이름(텍스트)만 숨김 (이미지는 유지) */
contentVisible?: boolean;
};
@@ -59,27 +65,27 @@ const DEFAULT_BOARD_LAYOUT: ReadonlyArray<{
{ type: '시작', eventId: null },
{ type: '한잔마셔' },
{ type: '~~체 3분' },
{ type: '안주 한입' },
{ type: '방어권' },
{ type: '노래 1절' },
{ type: '다같이한잔' },
{ type: '영어금지 3분' },
{ type: '애교/매도 100자' },
{ type: '앞으로 4칸' },
{ type: '애교/매도 50자' },
{ type: '무인도', eventId: 'island' },
{ type: '안주 한입' },
{ type: '두잔마셔' },
{ type: '~~체 3분' },
{ type: '물한잔' },
{ type: '한잔마셔' },
{ type: '애교/매도 100자' },
{ type: 'TMI 알려주기' },
{ type: '역방향', eventId: 'reverse' },
{ type: '영어금지 3분' },
{ type: '뒤로 3칸' },
{ type: '안주 한입' },
{ type: '다같이한잔' },
{ type: '노래 1절' },
{ type: '방어권 전부삭제' },
{ type: '한잔마셔' },
{ type: '~~체 3분' },
{ type: '두잔마셔' },
{ type: '세계여행', eventId: 'airplane' },
{ type: '애교/매도 100자' },
{ type: '애교/매도 50자' },
{ type: '안주 한입' },
{ type: '영어금지 3분' },
{ type: '다같이한잔' },
@@ -439,12 +445,7 @@ export function buildPlaneCells(config: BoardConfig = getOrCreateBoardConfig()):
export function cellColorFor(
eventId: string | null | undefined,
index: number,
options?: { contentVisible?: boolean },
) {
// 내용 숨김이면 종류가 색으로도 드러나지 않게 통일
if (options?.contentVisible === false && index !== 0) {
return '#be123c';
}
if (index === 0) return '#059669';
switch (eventId) {
case 'island':
@@ -458,7 +459,9 @@ export function cellColorFor(
}
}
/** 주사위 UI를 안쪽 빈 칸에 배치할 때 쓰는 span (1~2) */
/** 주사위 UI를 안쪽 빈 칸에 배치할 때 쓰는 span (1~2)
* 세로 7칸 기준: 시작 행을 건너뛰고 안쪽 2칸 = 절대 위치 3칸까지
*/
export function diceAreaSpan(width: number, height: number) {
return Math.min(2, Math.max(1, width - 2), Math.max(1, height - 2));
}