Polish release candidate QA flow
This commit is contained in:
@@ -1126,6 +1126,7 @@ type BattleObjectiveResult = {
|
||||
id: string;
|
||||
label: string;
|
||||
achieved: boolean;
|
||||
status: 'active' | 'done' | 'failed';
|
||||
detail: string;
|
||||
rewardGold: number;
|
||||
};
|
||||
@@ -4597,6 +4598,7 @@ export class BattleScene extends Phaser.Scene {
|
||||
id: objective.id,
|
||||
label: objective.label,
|
||||
achieved: objective.achieved,
|
||||
status: objective.status,
|
||||
detail: objective.detail,
|
||||
rewardGold: objective.rewardGold
|
||||
}));
|
||||
@@ -4630,7 +4632,7 @@ export class BattleScene extends Phaser.Scene {
|
||||
id: objective.id,
|
||||
label: objective.label,
|
||||
achieved: alive,
|
||||
status: alive ? 'active' : 'failed',
|
||||
status: alive ? (outcome === 'victory' ? 'done' : 'active') : 'failed',
|
||||
detail: alive ? `${this.unitName(targetId)} 생존` : `${this.unitName(targetId)} 퇴각`,
|
||||
rewardGold: objective.rewardGold
|
||||
};
|
||||
@@ -4662,7 +4664,7 @@ export class BattleScene extends Phaser.Scene {
|
||||
label: objective.label,
|
||||
achieved,
|
||||
status: achieved ? (outcome === 'victory' ? 'done' : 'active') : 'failed',
|
||||
detail: inTime ? `${this.turnNumber}/${maxTurn}턴 진행 중` : `${this.turnNumber}/${maxTurn}턴 초과`,
|
||||
detail: inTime ? (outcome === 'victory' ? `${this.turnNumber}/${maxTurn}턴 달성` : `${this.turnNumber}/${maxTurn}턴 진행 중`) : `${this.turnNumber}/${maxTurn}턴 초과`,
|
||||
rewardGold: objective.rewardGold
|
||||
};
|
||||
}
|
||||
@@ -4728,7 +4730,7 @@ export class BattleScene extends Phaser.Scene {
|
||||
bg.setDepth(depth);
|
||||
bg.setStrokeStyle(1, palette.blue, 0.56);
|
||||
|
||||
const title = this.trackResultObject(this.add.text(x + 14, y + 10, '전투 목표', {
|
||||
const title = this.trackResultObject(this.add.text(x + 14, y + 10, '목표 정산', {
|
||||
fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif',
|
||||
fontSize: '19px',
|
||||
color: '#f2e3bf',
|
||||
@@ -4738,12 +4740,13 @@ export class BattleScene extends Phaser.Scene {
|
||||
|
||||
objectives.forEach((objective, index) => {
|
||||
const rowY = y + 42 + index * 21;
|
||||
const mark = objective.achieved ? '완료' : '미달';
|
||||
const mark = objective.achieved ? '완료' : objective.status === 'failed' ? '미획득' : '보너스';
|
||||
const color = objective.achieved ? '#a8ffd0' : '#aeb7c2';
|
||||
const line = this.trackResultObject(this.add.text(x + 16, rowY, `${mark} ${objective.label} ${objective.detail}`, {
|
||||
const line = this.trackResultObject(this.add.text(x + 16, rowY, `${mark} ${objective.label} · ${objective.detail}`, {
|
||||
fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif',
|
||||
fontSize: '13px',
|
||||
color
|
||||
color,
|
||||
wordWrap: { width: width - 98, useAdvancedWrap: true }
|
||||
}));
|
||||
line.setDepth(depth + 1);
|
||||
|
||||
@@ -4780,7 +4783,7 @@ export class BattleScene extends Phaser.Scene {
|
||||
.join(' ');
|
||||
const achievedCount = objectives.filter((objective) => objective.achieved).length;
|
||||
const lines = [
|
||||
outcome === 'victory' ? `군자금 ${this.resultGold(outcome)} 목표 ${achievedCount}/${objectives.length}` : '패배: 보상 없음',
|
||||
outcome === 'victory' ? `군자금 ${this.resultGold(outcome)} 목표 보상 ${achievedCount}/${objectives.length}` : '패배: 보상 없음',
|
||||
mvp ? `MVP ${mvp.unit.name}: 피해 ${mvp.stats.damageDealt}, 격파 ${mvp.stats.defeats}` : 'MVP 없음',
|
||||
bondSummary ? `공명 성장 ${bondSummary}` : '공명 성장 없음',
|
||||
outcome === 'victory' ? `전리품: ${battleScenario.itemRewards.join(', ')}` : '재도전하면 목표 보상을 다시 노릴 수 있습니다.'
|
||||
@@ -8953,8 +8956,8 @@ export class BattleScene extends Phaser.Scene {
|
||||
private compactSituationMessage(message: string) {
|
||||
return message
|
||||
.split('\n')
|
||||
.slice(0, 2)
|
||||
.map((line) => (line.length > 18 ? `${line.slice(0, 17)}...` : line))
|
||||
.slice(0, 3)
|
||||
.map((line) => (line.length > 30 ? `${line.slice(0, 29)}…` : line))
|
||||
.join('\n');
|
||||
}
|
||||
|
||||
@@ -8966,15 +8969,15 @@ export class BattleScene extends Phaser.Scene {
|
||||
const leader = battleUnits.find((unit) => unit.id === leaderUnitId);
|
||||
const leaderProgress = leader && leader.hp > 0 ? `${leader.hp}/${leader.maxHp}` : '완료';
|
||||
const quickObjective = this.objectiveStates(this.battleOutcome).find((objective) => objective.id === 'quick');
|
||||
const quickText = quickObjective ? ` · ${quickObjective.label} ${this.objectiveStatusText(quickObjective)}` : '';
|
||||
const quickText = quickObjective ? ` · 보너스: ${quickObjective.label} ${this.objectiveStatusText(quickObjective)}` : '';
|
||||
const victoryText =
|
||||
this.battleOutcome === 'victory'
|
||||
? `승리: ${battleScenario.victoryConditionLabel} 완료`
|
||||
: `승리: ${battleScenario.victoryConditionLabel} (${leaderProgress})`;
|
||||
? `승리 목표 완료: ${battleScenario.victoryConditionLabel}`
|
||||
: `승리 목표: ${battleScenario.victoryConditionLabel} · ${this.unitName(leaderUnitId)} ${leaderProgress}`;
|
||||
const defeatText =
|
||||
this.battleOutcome === 'defeat'
|
||||
? `패배: ${battleScenario.defeatConditionLabel} 발생`
|
||||
: `패배: ${battleScenario.defeatConditionLabel}`;
|
||||
? `패배 조건 발생: ${battleScenario.defeatConditionLabel}`
|
||||
: `패배 조건: ${battleScenario.defeatConditionLabel}`;
|
||||
|
||||
this.objectiveTrackerText.setText(victoryText);
|
||||
this.objectiveTrackerSubText.setText(`${defeatText}${quickText}`);
|
||||
@@ -9697,7 +9700,7 @@ export class BattleScene extends Phaser.Scene {
|
||||
}
|
||||
|
||||
debugForceBattleOutcome(outcome: BattleOutcome = 'victory') {
|
||||
if (!import.meta.env.DEV || this.battleOutcome) {
|
||||
if (!this.debugToolsEnabled() || this.battleOutcome) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -9740,7 +9743,7 @@ export class BattleScene extends Phaser.Scene {
|
||||
}
|
||||
|
||||
private installDebugHotkeys() {
|
||||
if (!import.meta.env.DEV) {
|
||||
if (!this.debugToolsEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -9756,6 +9759,16 @@ export class BattleScene extends Phaser.Scene {
|
||||
});
|
||||
}
|
||||
|
||||
private debugToolsEnabled() {
|
||||
if (import.meta.env.DEV) {
|
||||
return true;
|
||||
}
|
||||
if (typeof window === 'undefined') {
|
||||
return false;
|
||||
}
|
||||
return new URLSearchParams(window.location.search).has('debug');
|
||||
}
|
||||
|
||||
private updateDebugOverlay() {
|
||||
if (!this.debugOverlay) {
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user