feat(animation): 아레나 전투 애니메이션 지원

- CanvasBattleComposer: 아레나 모드 지원 추가
- AsciiAnimationCard: 아레나 전투 애니메이션 렌더링
This commit is contained in:
JiWoong Sul
2026-01-06 17:55:07 +09:00
parent a2e93efc97
commit 687d04974e
2 changed files with 116 additions and 2 deletions

View File

@@ -50,6 +50,8 @@ class AsciiAnimationCard extends StatefulWidget {
this.latestCombatEvent,
this.raceId,
this.weaponRarity,
this.opponentRaceId,
this.opponentHasShield = false,
});
final TaskType taskType;
@@ -89,6 +91,12 @@ class AsciiAnimationCard extends StatefulWidget {
/// 무기 희귀도 (Phase 9: 무기 등급별 이펙트 색상)
final ItemRarity? weaponRarity;
/// 상대 종족 ID (PvP 모드: 설정 시 몬스터 대신 캐릭터 표시)
final String? opponentRaceId;
/// 상대 방패 장착 여부 (PvP 모드)
final bool opponentHasShield;
@override
State<AsciiAnimationCard> createState() => _AsciiAnimationCardState();
}
@@ -208,7 +216,9 @@ class _AsciiAnimationCardState extends State<AsciiAnimationCard> {
oldWidget.shieldName != widget.shieldName ||
oldWidget.monsterLevel != widget.monsterLevel ||
oldWidget.raceId != widget.raceId ||
oldWidget.weaponRarity != widget.weaponRarity) {
oldWidget.weaponRarity != widget.weaponRarity ||
oldWidget.opponentRaceId != widget.opponentRaceId ||
oldWidget.opponentHasShield != widget.opponentHasShield) {
_updateAnimation();
}
}
@@ -445,6 +455,8 @@ class _AsciiAnimationCardState extends State<AsciiAnimationCard> {
monsterSize: monsterSize,
raceId: widget.raceId,
weaponRarity: widget.weaponRarity,
opponentRaceId: widget.opponentRaceId,
opponentHasShield: widget.opponentHasShield,
);
// 환경 타입 추론