refactor(l10n): 동정 유발 표현을 위협적 표현으로 변경
- 몬스터 수식어 수정 (영어/한국어 모두) - dead→fallen, crippled→twisted, sick→tainted - undernourished→ravenous, baby→fledgling 등 - 고아/기아 관련 표현 개선 - orphan→이탈, starvation→고갈, hungry→탐욕스러운 - parentless→떠도는, Exploited→침해당한 - 일시정지 시 ASCII 애니메이션도 함께 정지하도록 수정
This commit is contained in:
@@ -28,10 +28,14 @@ class AsciiAnimationCard extends StatefulWidget {
|
||||
this.shieldName,
|
||||
this.characterLevel,
|
||||
this.monsterLevel,
|
||||
this.isPaused = false,
|
||||
});
|
||||
|
||||
final TaskType taskType;
|
||||
|
||||
/// 일시정지 상태 (true면 애니메이션 정지)
|
||||
final bool isPaused;
|
||||
|
||||
/// 전투 중인 몬스터 기본 이름 (kill 타입일 때만 사용)
|
||||
final String? monsterBaseName;
|
||||
final AsciiColorTheme colorTheme;
|
||||
@@ -95,6 +99,18 @@ class _AsciiAnimationCardState extends State<AsciiAnimationCard> {
|
||||
void didUpdateWidget(AsciiAnimationCard oldWidget) {
|
||||
super.didUpdateWidget(oldWidget);
|
||||
|
||||
// 일시정지 상태 변경 처리
|
||||
if (oldWidget.isPaused != widget.isPaused) {
|
||||
if (widget.isPaused) {
|
||||
_timer?.cancel();
|
||||
_timer = null;
|
||||
} else {
|
||||
// 재개: 애니메이션 재시작 (현재 프레임 유지)
|
||||
_restartTimer();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// 특수 애니메이션이 변경되었으면 업데이트
|
||||
if (oldWidget.specialAnimation != widget.specialAnimation) {
|
||||
_currentSpecialAnimation = widget.specialAnimation;
|
||||
@@ -116,6 +132,51 @@ class _AsciiAnimationCardState extends State<AsciiAnimationCard> {
|
||||
}
|
||||
}
|
||||
|
||||
/// 현재 상태를 유지하면서 타이머만 재시작
|
||||
void _restartTimer() {
|
||||
_timer?.cancel();
|
||||
|
||||
// 특수 애니메이션 타이머 재시작
|
||||
if (_currentSpecialAnimation != null) {
|
||||
_timer = Timer.periodic(
|
||||
Duration(milliseconds: _animationData.frameIntervalMs),
|
||||
(_) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_currentFrame++;
|
||||
if (_currentFrame >= _animationData.frames.length) {
|
||||
_currentSpecialAnimation = null;
|
||||
_updateAnimation();
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// 전투 모드 타이머 재시작
|
||||
if (_isBattleMode) {
|
||||
_timer = Timer.periodic(
|
||||
const Duration(milliseconds: 200),
|
||||
(_) => _advanceBattleFrame(),
|
||||
);
|
||||
} else {
|
||||
// 일반 애니메이션 타이머 재시작
|
||||
_timer = Timer.periodic(
|
||||
Duration(milliseconds: _animationData.frameIntervalMs),
|
||||
(_) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_currentFrame =
|
||||
(_currentFrame + 1) % _animationData.frames.length;
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void _updateAnimation() {
|
||||
_timer?.cancel();
|
||||
|
||||
@@ -125,6 +186,9 @@ class _AsciiAnimationCardState extends State<AsciiAnimationCard> {
|
||||
_animationData = getAnimationData(_currentSpecialAnimation!);
|
||||
_currentFrame = 0;
|
||||
|
||||
// 일시정지 상태면 타이머 시작하지 않음
|
||||
if (widget.isPaused) return;
|
||||
|
||||
// 특수 애니메이션은 한 번 재생 후 종료
|
||||
_timer = Timer.periodic(
|
||||
Duration(milliseconds: _animationData.frameIntervalMs),
|
||||
@@ -156,6 +220,9 @@ class _AsciiAnimationCardState extends State<AsciiAnimationCard> {
|
||||
_phaseIndex = 0;
|
||||
_phaseFrameCount = 0;
|
||||
|
||||
// 일시정지 상태면 타이머 시작하지 않음
|
||||
if (widget.isPaused) return;
|
||||
|
||||
_timer = Timer.periodic(
|
||||
const Duration(milliseconds: 200),
|
||||
(_) => _advanceBattleFrame(),
|
||||
@@ -165,6 +232,9 @@ class _AsciiAnimationCardState extends State<AsciiAnimationCard> {
|
||||
_animationData = getAnimationData(animationType);
|
||||
_currentFrame = 0;
|
||||
|
||||
// 일시정지 상태면 타이머 시작하지 않음
|
||||
if (widget.isPaused) return;
|
||||
|
||||
_timer = Timer.periodic(
|
||||
Duration(milliseconds: _animationData.frameIntervalMs),
|
||||
(_) {
|
||||
|
||||
@@ -68,6 +68,7 @@ class TaskProgressPanel extends StatelessWidget {
|
||||
shieldName: shieldName,
|
||||
characterLevel: characterLevel,
|
||||
monsterLevel: monsterLevel,
|
||||
isPaused: isPaused,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
|
||||
Reference in New Issue
Block a user