feat(core): 엔진, 모델, 애니메이션 개선

- ProgressService 로직 개선
- CombatCalculator 업데이트
- GameState, MonsterCombatStats 확장
- CanvasBattleComposer 개선
This commit is contained in:
JiWoong Sul
2026-01-14 00:17:59 +09:00
parent 4e9265ab87
commit f89017e5ba
5 changed files with 101 additions and 36 deletions

View File

@@ -68,15 +68,17 @@ class CanvasBattleComposer {
bool isDot = false,
bool isBlock = false,
bool isParry = false,
bool hideMonster = false,
}) {
final layers = <AsciiLayer>[
_createBackgroundLayer(environment, globalTick),
_createCharacterLayer(phase, subFrame, attacker),
// PvP 모드: 몬스터 대신 상대 캐릭터(좌우 반전) 표시
if (isPvP)
_createOpponentCharacterLayer(phase, subFrame, attacker)
else
_createMonsterLayer(phase, subFrame, attacker),
// hideMonster: 몬스터 사망 애니메이션 중에는 렌더링 안함
if (!hideMonster)
isPvP
? _createOpponentCharacterLayer(phase, subFrame, attacker)
: _createMonsterLayer(phase, subFrame, attacker),
];
// 이펙트 레이어 (준비/공격/히트 페이즈에서, 공격자 있을 때)
@@ -1460,3 +1462,13 @@ const _parryTextFrames = <List<String>>[
[r'*PARRY!*', r'========'],
[r'=PARRY!=', r'********'],
];
/// 몬스터 Idle 프레임 가져오기 (외부에서 접근 가능)
///
/// 몬스터 사망 애니메이션에서 분해할 프레임을 가져올 때 사용
List<List<String>> getMonsterIdleFrames(
MonsterCategory category,
MonsterSize size,
) {
return _getMonsterIdleFrames(category, size);
}