# Project SS - 파일 및 컴포넌트 구조 설계 본 문서는 **"서사형 덱빌딩 게임 시스템 기획서"** 및 **"스토리 바이블"**을 바탕으로, 기존 단일 HTML 파일을 모던 웹 프레임워크(React + Vite + Tailwind CSS + Zustand) 기반으로 마이그레이션 및 고도화하기 위한 디렉토리 및 컴포넌트 구조를 정의합니다. ## 📂 1. 전체 디렉토리 구조 (Directory Structure) ```text /src ├── assets/ # 이미지, 폰트, 아이콘 등 정적 파일 ├── components/ # UI 및 도메인 컴포넌트 │ ├── common/ # 공통 UI 요소 (버튼, 모달, 툴팁 등) │ ├── dashboard/ # 상단 상태창 및 파라미터 표시 │ ├── gameplay/ # 핵심 게임 루프 (카드 스와이프, 자산 관리) │ └── council/ # 주간 의회 시스템 (투표, 법안, 파벌) ├── constants/ # 게임 내 상수 (파벌 정보, 테마 컬러, 엔딩 조건 등) ├── data/ # 초기 데이터 및 시나리오 (CSV/JSON 형식) ├── hooks/ # 커스텀 훅 (ex. useSwipe, useVoting) ├── store/ # 전역 상태 관리 (Zustand) ├── types/ # TypeScript 타입 정의 (Card, Faction, State 등) ├── utils/ # 헬퍼 함수 (엔트로피 계산, 전투/결과 연산 등) ├── App.tsx # 루트 컴포넌트 (페이지 라우팅 및 전역 상태 주입) └── main.tsx # 진입점 ``` --- ## 🧩 2. 상세 컴포넌트 구조 (Components Breakdown) ### 2.1 공통 UI (`/components/common`) 프리미엄한 관료주의 다크/레트로 UI를 구성하는 기본 요소들입니다. - `Button.tsx`: 액션 버튼 (결재, 서명 등 텍스처 효과 포함) - `Modal.tsx`: 미스터리 보드, 법안 확인 등을 위한 공통 팝업 - `ProgressBar.tsx`: 게이지 바 (엔트로피, 내부 저항 등) - `AlertToast.tsx`: 패시브 효과 연쇄나 비상 사태를 알리는 시스템 메시지 (우측 하단/상단 노출) ### 2.2 대시보드 (`/components/dashboard`) 플레이어의 현재 상태(국장실 요약)를 보여줍니다. - `StatusHeader.tsx`: 현재 주차(Week), 일차(Day), 주간 아젠다 노출 - `ParameterBoard.tsx`: 3대 핵심 파라미터 게이지 (내부 저항, 엔트로피, 위험 수용 계수) - `ResourcePanel.tsx`: 3대 토큰(예산, 인력, 정보) 및 자원 태그(재력, 무력, 감시) 현황 - `FactionDonut.tsx`: 8대 파벌의 의회 지분율 및 우호도를 시각화하는 도넛 차트 ### 2.3 게임플레이 (`/components/gameplay`) 일일 업무(결재 단계)를 처리하는 핵심 루프 컴포넌트입니다. - `DeskView.tsx`: 국장실 책상 배경 및 전체 레이아웃 래퍼 - `CardSwiper.tsx`: 틴더 스타일의 스와이프 인터페이스 (Tinder-like Swipe) - 좌/우 스와이프에 따른 예측 결과(예상 토큰/파라미터 증감)를 오버레이로 표시 - `DilemmaCard.tsx`: 개별 딜레마/위기 서류. (제목, 내용, 플레이버 텍스트, 결재/반려 스탬프 이펙트) - `AssetManager.tsx`: 보유 중인 자산(파이프라인, 성질 변환 등 덱 압축 장치) 관리 모달 ### 2.4 의회 시스템 (`/components/council`) 매주 5일차 종료 후 진행되는 정치 시스템 컴포넌트입니다. - `CouncilPhase.tsx`: 주간 의회 화면 메인 컨테이너 - `BillDisplay.tsx`: 상정된 법안(이득 규약 vs 표적 규약) 비교 UI - `VotingBoard.tsx`: 13명의 임원(상임 이사 8명 + 글로벌 지부장 5명)의 예상 투표 현황 및 게이지 바 - `InterventionPanel.tsx`: 국장의 개입 액션 (매수, 장부 조작, 내부 감사) 버튼 및 리스크 안내 패널 ### 2.5 뷰 / 씬 (Views/Scenes) - `LoadingScreen.tsx`: 초기 데이터 파싱 및 게임 세팅 화면 - `GameScreen.tsx`: 인게임 전체 메인 화면 (대시보드 + 게임플레이 결합) - `EndingScreen.tsx`: 멀티 엔딩 매트릭스에 따른 최종 결과 출력 (위대한 침묵, 신인류의 탄생 등) --- ## 💾 3. 전역 상태 구조 (Global State - Zustand 제안) 관리가 복잡한 게임 데이터를 효율적으로 다루기 위해 상태를 나눕니다. ```typescript interface GameState { // 시간/페이즈 관리 week: number; day: number; phase: 'DAY_WORK' | 'COUNCIL' | 'ENDING'; // 핵심 파라미터 entropy: number; // 0~100% internalResistance: number; // 0~100% riskTolerance: number; // 0~100% // 자원 tokens: { budget: number; personnel: number; info: number; }; tags: { finance: number; force: number; surveillance: number; }; // 덱 및 내러티브 narrativeTags: string[]; ideologyTags: string[]; deck: Card[]; // 섞인 오염카드 및 이벤트 풀 assets: Asset[]; // 덱 압축 파이프라인 // 파벌 및 의회 (13명의 임원 정보 포함) factions: FactionState[]; currentBills: Bill[]; } ``` --- ## 🚀 4. 추천 기술 스택 - **Framework**: `React` (컴포넌트 분리를 통한 복잡한 UI 관리) - **Build Tool**: `Vite` (빠른 HMR 및 빌드 속도) - **Styling**: `Tailwind CSS` (유틸리티 클래스로 빠른 UI 구현) + CSS Animations (스와이프 액션, 팝업 등) - **State Management**: `Zustand` (가볍고 직관적인 전역 상태 관리) - **Interactions**: `Framer Motion` 또는 `react-spring` (부드러운 카드 스와이프 액션 및 몰입감 있는 애니메이션) - **Type Checking**: `TypeScript` (복잡한 자원 계산과 이벤트 분기에 대한 안정성 보장)