update
This commit is contained in:
@@ -235,13 +235,14 @@ class BattleProvider with ChangeNotifier {
|
||||
return;
|
||||
|
||||
// Update Enemy Status Effects at the start of Player's turn (user request)
|
||||
|
||||
enemy.updateStatusEffects();
|
||||
|
||||
// 1. Check for Defense Forbidden status
|
||||
if (type == ActionType.defend &&
|
||||
player.hasStatus(StatusEffectType.defenseForbidden)) {
|
||||
_addLog("Cannot defend! You are under Defense Forbidden status.");
|
||||
notifyListeners(); // 상태 변경을 알림
|
||||
_endPlayerTurn();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -283,10 +284,9 @@ class BattleProvider with ChangeNotifier {
|
||||
_effectEventController.sink.add(
|
||||
EffectEvent(
|
||||
type: ActionType.attack,
|
||||
|
||||
risk: risk,
|
||||
|
||||
target: EffectTarget.enemy,
|
||||
feedbackType: null, // 공격 성공이므로 feedbackType 없음
|
||||
),
|
||||
);
|
||||
|
||||
@@ -313,27 +313,43 @@ class BattleProvider with ChangeNotifier {
|
||||
}
|
||||
|
||||
// Try applying status effects from items
|
||||
|
||||
_tryApplyStatusEffects(player, enemy);
|
||||
} else {
|
||||
_effectEventController.sink.add(
|
||||
EffectEvent(
|
||||
type: ActionType.defend,
|
||||
|
||||
risk: risk,
|
||||
|
||||
target: EffectTarget.player,
|
||||
feedbackType: null, // 방어 성공이므로 feedbackType 없음
|
||||
),
|
||||
);
|
||||
|
||||
int armorGained = (player.totalDefense * efficiency).toInt();
|
||||
|
||||
player.armor += armorGained;
|
||||
|
||||
_addLog("Player gained $armorGained armor.");
|
||||
}
|
||||
} else {
|
||||
_addLog("Player's action missed!");
|
||||
if (type == ActionType.attack) {
|
||||
_addLog("Player's attack missed!");
|
||||
_effectEventController.sink.add(
|
||||
EffectEvent(
|
||||
type: type,
|
||||
risk: risk,
|
||||
target: EffectTarget.enemy, // 공격 실패는 적 위치에 MISS
|
||||
feedbackType: BattleFeedbackType.miss,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
_addLog("Player's defense failed!");
|
||||
_effectEventController.sink.add(
|
||||
EffectEvent(
|
||||
type: type,
|
||||
risk: risk,
|
||||
target: EffectTarget.player, // 방어 실패는 내 위치에 FAILED
|
||||
feedbackType: BattleFeedbackType.failed,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (enemy.isDead) {
|
||||
@@ -394,6 +410,7 @@ class BattleProvider with ChangeNotifier {
|
||||
type: ActionType.attack,
|
||||
risk: intent.risk,
|
||||
target: EffectTarget.player,
|
||||
feedbackType: null, // 공격 성공이므로 feedbackType 없음
|
||||
),
|
||||
);
|
||||
|
||||
@@ -421,6 +438,14 @@ class BattleProvider with ChangeNotifier {
|
||||
}
|
||||
} else {
|
||||
_addLog("Enemy's ${intent.risk.name} attack missed!");
|
||||
_effectEventController.sink.add(
|
||||
EffectEvent(
|
||||
type: ActionType.attack, // 적의 공격이므로 ActionType.attack
|
||||
risk: intent.risk,
|
||||
target: EffectTarget.player, // 플레이어가 회피했으므로 플레이어 위치에 이펙트
|
||||
feedbackType: BattleFeedbackType.miss, // 변경: MISS 피드백
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
} else if (!canAct) {
|
||||
@@ -636,6 +661,10 @@ class BattleProvider with ChangeNotifier {
|
||||
// Decide Action Type
|
||||
// If baseDefense is 0, CANNOT defend.
|
||||
bool canDefend = enemy.baseDefense > 0;
|
||||
// Check for DefenseForbidden status
|
||||
if (enemy.hasStatus(StatusEffectType.defenseForbidden)) {
|
||||
canDefend = false;
|
||||
}
|
||||
bool isAttack = true;
|
||||
|
||||
if (canDefend) {
|
||||
@@ -662,9 +691,8 @@ class BattleProvider with ChangeNotifier {
|
||||
|
||||
if (isAttack) {
|
||||
// Attack Intent
|
||||
// Variance: +/- 20%
|
||||
double variance = 0.8 + random.nextDouble() * 0.4;
|
||||
int damage = (enemy.totalAtk * efficiency * variance).toInt();
|
||||
// Variance removed as per request
|
||||
int damage = (enemy.totalAtk * efficiency).toInt();
|
||||
if (damage < 1) damage = 1;
|
||||
|
||||
// Calculate success immediately
|
||||
@@ -692,9 +720,8 @@ class BattleProvider with ChangeNotifier {
|
||||
} else {
|
||||
// Defend Intent
|
||||
int baseDef = enemy.totalDefense;
|
||||
// Variance
|
||||
double variance = 0.8 + random.nextDouble() * 0.4;
|
||||
int armor = (baseDef * 2 * efficiency * variance).toInt();
|
||||
// Variance removed
|
||||
int armor = (baseDef * 2 * efficiency).toInt();
|
||||
|
||||
// Calculate success immediately
|
||||
bool success = false;
|
||||
@@ -728,6 +755,7 @@ class BattleProvider with ChangeNotifier {
|
||||
type: ActionType.defend,
|
||||
risk: risk,
|
||||
target: EffectTarget.enemy,
|
||||
feedbackType: null, // 방어 성공이므로 feedbackType 없음
|
||||
),
|
||||
);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user