feat(core): 몬스터 등급 시스템 추가
- MonsterGrade 열거형 및 색상 정의 - GameState/ItemStats 확장 - pq_logic 유틸리티 함수 추가 - ASCII 색상 상수 추가
This commit is contained in:
@@ -5,6 +5,7 @@ import 'package:asciineverdie/src/core/model/combat_state.dart';
|
||||
import 'package:asciineverdie/src/core/model/equipment_item.dart';
|
||||
import 'package:asciineverdie/src/core/model/equipment_slot.dart';
|
||||
import 'package:asciineverdie/src/core/model/item_stats.dart';
|
||||
import 'package:asciineverdie/src/core/model/monster_grade.dart';
|
||||
import 'package:asciineverdie/src/core/model/potion.dart';
|
||||
import 'package:asciineverdie/src/core/model/skill.dart';
|
||||
import 'package:asciineverdie/src/core/util/deterministic_random.dart';
|
||||
@@ -280,6 +281,7 @@ class TaskInfo {
|
||||
this.monsterBaseName,
|
||||
this.monsterPart,
|
||||
this.monsterLevel,
|
||||
this.monsterGrade,
|
||||
});
|
||||
|
||||
final String caption;
|
||||
@@ -294,6 +296,9 @@ class TaskInfo {
|
||||
/// 킬 태스크의 몬스터 레벨 (애니메이션 크기 결정용)
|
||||
final int? monsterLevel;
|
||||
|
||||
/// 킬 태스크의 몬스터 등급 (Normal/Elite/Boss)
|
||||
final MonsterGrade? monsterGrade;
|
||||
|
||||
factory TaskInfo.empty() =>
|
||||
const TaskInfo(caption: '', type: TaskType.neutral);
|
||||
|
||||
@@ -303,6 +308,7 @@ class TaskInfo {
|
||||
String? monsterBaseName,
|
||||
String? monsterPart,
|
||||
int? monsterLevel,
|
||||
MonsterGrade? monsterGrade,
|
||||
}) {
|
||||
return TaskInfo(
|
||||
caption: caption ?? this.caption,
|
||||
@@ -310,6 +316,7 @@ class TaskInfo {
|
||||
monsterBaseName: monsterBaseName ?? this.monsterBaseName,
|
||||
monsterPart: monsterPart ?? this.monsterPart,
|
||||
monsterLevel: monsterLevel ?? this.monsterLevel,
|
||||
monsterGrade: monsterGrade ?? this.monsterGrade,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import 'package:asciineverdie/src/core/animation/canvas/ascii_cell.dart';
|
||||
|
||||
/// 아이템 희귀도
|
||||
enum ItemRarity {
|
||||
common,
|
||||
@@ -23,6 +25,17 @@ enum ItemRarity {
|
||||
epic => 400,
|
||||
legendary => 1000,
|
||||
};
|
||||
|
||||
/// 공격 이펙트 셀 색상 (Phase 9: 무기 등급별 이펙트)
|
||||
///
|
||||
/// common은 기본 positive(시안), 나머지는 등급별 고유 색상
|
||||
AsciiCellColor get effectCellColor => switch (this) {
|
||||
ItemRarity.common => AsciiCellColor.positive,
|
||||
ItemRarity.uncommon => AsciiCellColor.rarityUncommon,
|
||||
ItemRarity.rare => AsciiCellColor.rarityRare,
|
||||
ItemRarity.epic => AsciiCellColor.rarityEpic,
|
||||
ItemRarity.legendary => AsciiCellColor.rarityLegendary,
|
||||
};
|
||||
}
|
||||
|
||||
/// 아이템 스탯 보정치
|
||||
|
||||
60
lib/src/core/model/monster_grade.dart
Normal file
60
lib/src/core/model/monster_grade.dart
Normal file
@@ -0,0 +1,60 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// 몬스터 등급 (드랍 품질 및 UI 표시에 영향)
|
||||
enum MonsterGrade {
|
||||
/// 일반 몬스터 (85% 확률)
|
||||
/// - 기본 드랍 확률
|
||||
/// - UI: 기본 색상, 접두사 없음
|
||||
normal,
|
||||
|
||||
/// 정예 몬스터 (12% 확률)
|
||||
/// - 물약 드랍 +5%, 아이템 품질 향상
|
||||
/// - UI: 파란색, ★ 접두사
|
||||
elite,
|
||||
|
||||
/// 보스 몬스터 (3% 확률)
|
||||
/// - 물약 드랍 +15%, 최고 아이템 품질
|
||||
/// - UI: 금색, ★★★ 접두사
|
||||
boss,
|
||||
}
|
||||
|
||||
/// MonsterGrade 확장 메서드
|
||||
extension MonsterGradeExtension on MonsterGrade {
|
||||
/// 물약 드랍 확률 보너스 (0.0 ~ 1.0)
|
||||
double get potionDropBonus => switch (this) {
|
||||
MonsterGrade.normal => 0.0,
|
||||
MonsterGrade.elite => 0.05, // +5%
|
||||
MonsterGrade.boss => 0.15, // +15%
|
||||
};
|
||||
|
||||
/// UI 표시용 접두사 (몬스터 이름 앞에 붙음)
|
||||
String get displayPrefix => switch (this) {
|
||||
MonsterGrade.normal => '',
|
||||
MonsterGrade.elite => '★ ',
|
||||
MonsterGrade.boss => '★★★ ',
|
||||
};
|
||||
|
||||
/// 스탯 배율 (전투력 강화)
|
||||
double get statMultiplier => switch (this) {
|
||||
MonsterGrade.normal => 1.0,
|
||||
MonsterGrade.elite => 1.3, // +30% 스탯
|
||||
MonsterGrade.boss => 1.8, // +80% 스탯
|
||||
};
|
||||
|
||||
/// 경험치 배율
|
||||
double get expMultiplier => switch (this) {
|
||||
MonsterGrade.normal => 1.0,
|
||||
MonsterGrade.elite => 1.5, // +50% 경험치
|
||||
MonsterGrade.boss => 2.5, // +150% 경험치
|
||||
};
|
||||
|
||||
/// UI 표시용 색상
|
||||
/// - Normal: 기본 텍스트 색상 (null 반환 → 기본 스타일 사용)
|
||||
/// - Elite: 파란색 (#7AA2F7)
|
||||
/// - Boss: 금색 (#E0AF68)
|
||||
Color? get displayColor => switch (this) {
|
||||
MonsterGrade.normal => null,
|
||||
MonsterGrade.elite => const Color(0xFF7AA2F7), // MP 파랑
|
||||
MonsterGrade.boss => const Color(0xFFE0AF68), // 골드
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user