feat(front): 프론트 화면 개선 및 설정 저장소 추가

- front_screen_animation.dart: 프론트 화면 애니메이션 추가
- settings_repository.dart: 설정 저장소 구현
- front/widgets/: 프론트 화면 위젯 분리
- mobile_carousel_layout.dart: 모바일 레이아웃 개선
- app.dart: 앱 설정 개선
- game_text_l10n.dart: 텍스트 추가
This commit is contained in:
JiWoong Sul
2025-12-23 18:52:46 +09:00
parent e6af7dd91a
commit 549851f693
10 changed files with 722 additions and 183 deletions

View File

@@ -0,0 +1,89 @@
// 프론트 화면용 Hero vs Glitch God ASCII 애니메이션 데이터
// 작은 용사가 거대한 Glitch God에 맞서는 장면을 표현
/// 애니메이션 프레임 (10줄, 6프레임 루프)
const frontScreenAnimationFrames = [
// 프레임 0: 대치 상태 (방패 들고 대기)
'''
░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░
░▓▓ G L I T C H ▓▓░
░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░
░▓▓▓ ◈◈ ◈◈ ▓▓▓░
░▓▓▓▓ ▼▼▼ ▓▓▓▓░
░▓▓▓▓▓ ████████ ▓▓▓▓▓░
o ░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░
[]|- ░▓▓▓ G O D ▓▓▓░
/ \\ ░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░
~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~''',
// 프레임 1: 용사 전진 (방패 앞으로)
'''
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓ G L I T C H ▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓ ◉◉ ◉◉ ▓▓▓▓
▓▓▓▓▓ ~~~ ▓▓▓▓▓
o ▓▓▓▓▓▓ ████████ ▓▓▓▓▓▓
[]|> ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
/ \\ ▓▓▓▓ G O D ▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~''',
// 프레임 2: 용사 공격 준비 (방패 방어 자세)
'''
▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒
▒▓ G L I T C H ▓▒
▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒
▒▓▓▓ ◈◈ ◈◈ ▓▓▓▒
▒▓▓▓▓ ▼▼▼ ▓▓▓▓▒
o\\ ▒▓▓▓▓▓ ████████ ▓▓▓▓▓▒
[]=|== ▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒
/ \\ ▒▓▓▓ G O D ▓▓▓▒
▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒
~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~''',
// 프레임 3: 용사 공격 (글리치 갓 데미지)
'''
░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░
░▓ G#L@I*T&C!H ▓░
░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░
░▓▓▓ X X X X ▓▓▓░
o\\ ░▓▓▓▓ !!! ▓▓▓▓░
[]=|===> ░▓▓▓▓▓ ████████ ▓▓▓▓▓░
/ \\ ░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░
░▓▓▓ G O D ▓▓▓░
░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░
~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~''',
// 프레임 4: 글리치 갓 반격 준비 (방패로 방어)
'''
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓ G L I T C H ▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓ @@ @@ ▓▓▓▓
▓▓▓▓▓ <=== ▓▓▓▓▓
[]o ▓▓▓▓▓▓ ████████ ▓▓▓▓▓▓
|\\ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
/ \\ ▓▓▓▓ G O D ▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~''',
// 프레임 5: 글리치 갓 공격 (용사 방패로 막기)
'''
▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒
▒▓ G L I T C H ▓▒
▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒
▒▓▓▓ ◉◉ ◉◉ ▓▓▓▒
▒▓▓▓▓ <====== ▓▓▓▓▒
[]o * ▒▓▓▓▓▓ ████████ ▓▓▓▓▓▒
|/ ▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒
|\\ ▒▓▓▓ G O D ▓▓▓▒
▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒
~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~''',
];
/// 애니메이션 프레임 간격 (밀리초)
const frontScreenAnimationIntervalMs = 400;
/// 애니메이션 총 프레임 수
const frontScreenAnimationFrameCount = 6;

View File

@@ -0,0 +1,52 @@
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
/// 앱 설정 저장소 (SharedPreferences 기반)
///
/// 테마, 언어 등 사용자 설정을 로컬에 저장
class SettingsRepository {
static const _keyThemeMode = 'theme_mode';
static const _keyLocale = 'locale';
SharedPreferences? _prefs;
/// SharedPreferences 초기화
Future<void> init() async {
_prefs ??= await SharedPreferences.getInstance();
}
/// 테마 모드 저장
Future<void> saveThemeMode(ThemeMode mode) async {
await init();
final value = switch (mode) {
ThemeMode.light => 'light',
ThemeMode.dark => 'dark',
ThemeMode.system => 'system',
};
await _prefs!.setString(_keyThemeMode, value);
}
/// 테마 모드 불러오기
Future<ThemeMode> loadThemeMode() async {
await init();
final value = _prefs!.getString(_keyThemeMode);
return switch (value) {
'light' => ThemeMode.light,
'dark' => ThemeMode.dark,
'system' => ThemeMode.system,
_ => ThemeMode.system, // 기본값
};
}
/// 언어 설정 저장
Future<void> saveLocale(String locale) async {
await init();
await _prefs!.setString(_keyLocale, locale);
}
/// 언어 설정 불러오기
Future<String?> loadLocale() async {
await init();
return _prefs!.getString(_keyLocale);
}
}