# 플랫폼/오프라인/향후 고려사항

> 메인 문서: [game-system-overhaul-index.md](game-system-overhaul-index.md)

---

## 1. 오프라인/백그라운드 진행

### 1.1 오프라인 진행 개념

```
앱 종료 시점 기록 → 재접속 시 경과 시간 계산 → 오프라인 보상 계산 → 결과 표시
```

### 1.2 오프라인 보상 계산

```dart
class OfflineProgressCalculator {
  /// 오프라인 보상 계산
  OfflineReward calculate({
    required DateTime lastPlayedAt,
    required int playerLevel,
    required CombatStats stats,
  }) {
    final duration = DateTime.now().difference(lastPlayedAt);
    final cappedMinutes = min(duration.inMinutes, maxOfflineMinutes);

    // 분당 예상 전투 수 (레벨 기반)
    final battlesPerMinute = 2.0;
    final totalBattles = (cappedMinutes * battlesPerMinute).round();

    // 오프라인 효율 (온라인의 50%)
    final efficiency = 0.5;

    return OfflineReward(
      exp: (totalBattles * expPerBattle * efficiency).round(),
      gold: (totalBattles * goldPerBattle * efficiency).round(),
      items: generateOfflineItems(totalBattles, efficiency),
      duration: Duration(minutes: cappedMinutes),
    );
  }
}
```

### 1.3 오프라인 제한

| 항목 | 제한 |
|------|------|
| 최대 오프라인 시간 | 8시간 (480분) |
| 오프라인 효율 | 온라인의 50% |
| 사망 가능성 | 없음 (오프라인 중 사망 불가) |
| 레벨업 | 가능 (최대 3레벨) |
| 퀘스트 진행 | 불가 (전투만 계산) |
| 스킬 사용 | 자동 (효율 계산에 포함) |

### 1.4 재접속 UI

```
┌─────────────────────────────────────┐
│                                     │
│       🌙 오프라인 보상              │
│                                     │
│   부재 시간: 4시간 32분             │
│                                     │
│   ─────────────────────────         │
│   💰 획득 골드: 2,450               │
│   ⭐ 획득 경험치: 12,800            │
│   📦 획득 아이템: 3개               │
│   ─────────────────────────         │
│                                     │
│   레벨업! Lv.23 → Lv.24            │
│                                     │
│         [ 보상 받기 ]               │
│                                     │
└─────────────────────────────────────┘
```

### 1.5 백그라운드 진행 (모바일)

| 모드 | 동작 |
|------|------|
| 포그라운드 | 정상 진행 |
| 백그라운드 (5분 이내) | 실시간 진행 유지 |
| 백그라운드 (5분 초과) | 앱 일시 정지, 재진입 시 오프라인 계산 |
| 완전 종료 | 오프라인 계산 |

### 1.6 관련 파일

| 파일 | 역할 |
|------|------|
| `core/service/offline_service.dart` | **신규** - 오프라인 보상 계산 |
| `core/storage/last_played_storage.dart` | **신규** - 마지막 플레이 시간 저장 |
| `features/game/widgets/offline_reward_dialog.dart` | **신규** - 보상 UI |

---

## 2. 플랫폼별 고려사항

### 2.1 플랫폼 지원 현황

| 플랫폼 | 지원 | 우선순위 | 특이사항 |
|--------|------|----------|----------|
| iOS | ✓ | 상 | App Store 심사 |
| Android | ✓ | 상 | Google Play 심사 |
| Web | ✓ | 중 | 브라우저 호환성 |
| macOS | ✓ | 하 | 데스크톱 UI |
| Windows | ✓ | 하 | 데스크톱 UI |
| Linux | △ | 최하 | 테스트 제한적 |

### 2.2 플랫폼별 기능 차이

| 기능 | iOS | Android | Web | Desktop |
|------|-----|---------|-----|---------|
| 진동 | ✓ | ✓ | ✗ | ✗ |
| 푸시 알림 | ✓ | ✓ | △ | △ |
| 백그라운드 | △ | ✓ | ✗ | ✓ |
| 클라우드 저장 | iCloud | Google Play | ✗ | ✗ |
| IAP | App Store | Google Play | ✗ | ✗ |
| 키보드 단축키 | ✗ | ✗ | ✓ | ✓ |

### 2.3 화면 크기 대응

| 카테고리 | 화면 크기 | 레이아웃 |
|----------|----------|----------|
| 소형 모바일 | < 360dp | 단일 컬럼, 축소 UI |
| 일반 모바일 | 360-600dp | 단일 컬럼 |
| 대형 모바일/태블릿 | 600-900dp | 2단 컬럼 |
| 태블릿/데스크톱 | > 900dp | 3단 컬럼 |

### 2.4 플랫폼별 테스트 체크리스트

| 항목 | iOS | Android | Web |
|------|-----|---------|-----|
| 최소 OS 버전 | iOS 12+ | Android 6+ | 최신 브라우저 |
| 기기 테스트 | iPhone SE, 15 Pro | 저사양, 고사양 | Chrome, Safari, Firefox |
| 가로/세로 | 세로 고정 | 세로 고정 | 반응형 |
| 노치/펀치홀 | SafeArea | SafeArea | N/A |
| 다크 모드 | ✓ | ✓ | ✓ |

---

## 3. 향후 고려 사항

### 3.1 타임어택/스피드런 모드

| 기능 | 설명 |
|------|------|
| 타이머 표시 | 실시간 플레이 시간 표시 |
| 구간 기록 | Act별 클리어 시간 |
| 리더보드 | 최고 기록 순위 (향후 온라인) |
| 고스트 데이터 | 이전 기록과 비교 (로컬) |

### 3.2 애널리틱스 (익명)

| 수집 데이터 | 목적 |
|------------|------|
| 레벨별 사망률 | 밸런싱 조정 |
| 인기 스킬/장비 | 콘텐츠 밸런싱 |
| 플레이 세션 시간 | 게임 흐름 개선 |
| 이탈 지점 | 문제 구간 파악 |

### 3.3 다국어 확장

| 언어 | 우선순위 | 현황 |
|------|----------|------|
| 한국어 | 완료 | ✓ |
| 영어 | 완료 | ✓ |
| 일본어 | 높음 | 계획 |
| 중국어 (간체) | 높음 | 계획 |
| 중국어 (번체) | 중간 | 계획 |
| 스페인어 | 중간 | 계획 |

### 3.4 개발자/디버그 모드

| 기능 | 설명 |
|------|------|
| 레벨 조정 | 즉시 레벨 변경 |
| 아이템 지급 | 모든 아이템 획득 |
| 골드 지급 | 무제한 골드 |
| 무적 모드 | 사망 불가 |
| 스킵 | 전투/시네마틱 스킵 |
| 로그 표시 | 상세 디버그 로그 |

---
