refactor(animation): 애니메이션 시스템 정리
- AsciiCanvasPainter, CanvasBattleComposer 개선 - WeaponEffects 정리
This commit is contained in:
@@ -161,7 +161,16 @@ class AsciiCanvasPainter extends CustomPainter {
|
||||
final y = gridY * cellHeight;
|
||||
|
||||
// 레이어 투명도를 셀 렌더링에 전달
|
||||
_drawCell(canvas, cell, x, y, cellWidth, cellHeight, fontSize, layer.opacity);
|
||||
_drawCell(
|
||||
canvas,
|
||||
cell,
|
||||
x,
|
||||
y,
|
||||
cellWidth,
|
||||
cellHeight,
|
||||
fontSize,
|
||||
layer.opacity,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,7 +92,8 @@ class CanvasBattleComposer {
|
||||
|
||||
// 텍스트 이펙트 레이어 (Phase 10~11)
|
||||
// 크리티컬 텍스트 (상단 중앙)
|
||||
if (isCritical && (phase == BattlePhase.attack || phase == BattlePhase.hit)) {
|
||||
if (isCritical &&
|
||||
(phase == BattlePhase.attack || phase == BattlePhase.hit)) {
|
||||
layers.add(_createCriticalTextLayer(subFrame));
|
||||
}
|
||||
// 회피 텍스트 (캐릭터 위)
|
||||
@@ -410,7 +411,10 @@ class CanvasBattleComposer {
|
||||
final List<List<AsciiCell>> cells;
|
||||
if (attacker == AttackerType.player && weaponRarity != null) {
|
||||
// 무기 등급에 따른 이펙트 색상
|
||||
cells = _spriteToCellsWithColor(effectLines, weaponRarity!.effectCellColor);
|
||||
cells = _spriteToCellsWithColor(
|
||||
effectLines,
|
||||
weaponRarity!.effectCellColor,
|
||||
);
|
||||
} else {
|
||||
// 기본 색상 (자동 색상 결정)
|
||||
cells = _spriteToCells(effectLines);
|
||||
@@ -533,19 +537,16 @@ class CanvasBattleComposer {
|
||||
}).toList();
|
||||
}).toList();
|
||||
|
||||
return AsciiLayer(
|
||||
cells: cells,
|
||||
zIndex: 4,
|
||||
offsetX: offsetX,
|
||||
offsetY: 0,
|
||||
);
|
||||
return AsciiLayer(cells: cells, zIndex: 4, offsetX: offsetX, offsetY: 0);
|
||||
}
|
||||
|
||||
/// 몬스터 공격 이펙트 (← 방향)
|
||||
List<String> _getMonsterAttackEffect(BattlePhase phase, int subFrame) {
|
||||
return switch (phase) {
|
||||
BattlePhase.prepare => _monsterPrepareFrames[subFrame % _monsterPrepareFrames.length],
|
||||
BattlePhase.attack => _monsterAttackFrames[subFrame % _monsterAttackFrames.length],
|
||||
BattlePhase.prepare =>
|
||||
_monsterPrepareFrames[subFrame % _monsterPrepareFrames.length],
|
||||
BattlePhase.attack =>
|
||||
_monsterAttackFrames[subFrame % _monsterAttackFrames.length],
|
||||
BattlePhase.hit => _monsterHitFrames[subFrame % _monsterHitFrames.length],
|
||||
_ => <String>[],
|
||||
};
|
||||
|
||||
@@ -104,7 +104,13 @@ const _projectileEffect = WeaponEffect(
|
||||
[r' ', r' . ', r' [> ', r" ' ", r' '],
|
||||
[r' ', r' . ', r' [> ', r" ' ", r' '],
|
||||
[r' ', r' . ', r' [>', r" ' ", r' '],
|
||||
[r' ', r' ', r' [>', r' ', r' '],
|
||||
[
|
||||
r' ',
|
||||
r' ',
|
||||
r' [>',
|
||||
r' ',
|
||||
r' ',
|
||||
],
|
||||
],
|
||||
hitFrames: [
|
||||
[r' *CLANG!* ', r' ***', r' [>', r' ***', r' '],
|
||||
|
||||
Reference in New Issue
Block a user