76 lines
1.5 KiB
Dart
76 lines
1.5 KiB
Dart
/// 캐릭터 스탯 (Stats)
|
|
///
|
|
/// 6대 능력치(STR, CON, DEX, INT, WIS, CHA)와 HP/MP를 관리
|
|
class Stats {
|
|
const Stats({
|
|
required this.str,
|
|
required this.con,
|
|
required this.dex,
|
|
required this.intelligence,
|
|
required this.wis,
|
|
required this.cha,
|
|
required this.hpMax,
|
|
required this.mpMax,
|
|
this.hpCurrent,
|
|
this.mpCurrent,
|
|
});
|
|
|
|
final int str;
|
|
final int con;
|
|
final int dex;
|
|
final int intelligence;
|
|
final int wis;
|
|
final int cha;
|
|
final int hpMax;
|
|
final int mpMax;
|
|
|
|
/// 현재 HP (null이면 hpMax와 동일)
|
|
final int? hpCurrent;
|
|
|
|
/// 현재 MP (null이면 mpMax와 동일)
|
|
final int? mpCurrent;
|
|
|
|
/// 실제 현재 HP 값
|
|
int get hp => hpCurrent ?? hpMax;
|
|
|
|
/// 실제 현재 MP 값
|
|
int get mp => mpCurrent ?? mpMax;
|
|
|
|
factory Stats.empty() => const Stats(
|
|
str: 0,
|
|
con: 0,
|
|
dex: 0,
|
|
intelligence: 0,
|
|
wis: 0,
|
|
cha: 0,
|
|
hpMax: 0,
|
|
mpMax: 0,
|
|
);
|
|
|
|
Stats copyWith({
|
|
int? str,
|
|
int? con,
|
|
int? dex,
|
|
int? intelligence,
|
|
int? wis,
|
|
int? cha,
|
|
int? hpMax,
|
|
int? mpMax,
|
|
int? hpCurrent,
|
|
int? mpCurrent,
|
|
}) {
|
|
return Stats(
|
|
str: str ?? this.str,
|
|
con: con ?? this.con,
|
|
dex: dex ?? this.dex,
|
|
intelligence: intelligence ?? this.intelligence,
|
|
wis: wis ?? this.wis,
|
|
cha: cha ?? this.cha,
|
|
hpMax: hpMax ?? this.hpMax,
|
|
mpMax: mpMax ?? this.mpMax,
|
|
hpCurrent: hpCurrent ?? this.hpCurrent,
|
|
mpCurrent: mpCurrent ?? this.mpCurrent,
|
|
);
|
|
}
|
|
}
|