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:
89
lib/src/core/animation/front_screen_animation.dart
Normal file
89
lib/src/core/animation/front_screen_animation.dart
Normal 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;
|
||||
52
lib/src/core/storage/settings_repository.dart
Normal file
52
lib/src/core/storage/settings_repository.dart
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user