Tighten early battle QA polish

This commit is contained in:
2026-06-28 17:17:50 +09:00
parent 2efb446a69
commit 42c849eb2a
2 changed files with 25 additions and 22 deletions

View File

@@ -389,7 +389,7 @@ export const firstBattleScenario: BattleScenarioDefinition = {
bonds: firstBattleBonds,
mapTextureKey: 'battle-map-first',
leaderUnitId: 'rebel-leader',
quickVictoryTurnLimit: 8,
quickVictoryTurnLimit: 14,
baseVictoryGold: 300,
objectives: [
{
@@ -416,9 +416,9 @@ export const firstBattleScenario: BattleScenarioDefinition = {
{
id: 'quick',
kind: 'quick-victory',
label: '8턴 안에 승리',
label: '14턴 이내 승리',
rewardGold: 120,
maxTurn: 8
maxTurn: 14
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
@@ -488,14 +488,14 @@ export const thirdBattleScenario: BattleScenarioDefinition = {
openingObjectiveLines: [
'황건 전령 마원이 광종 본대로 향하고 있습니다. 마원을 격파하면 적의 연락망이 끊어집니다.',
'강가 길목과 요새 주변의 궁병을 방치하면 전선이 오래 묶입니다. 지형 보정을 살펴 진군하십시오.',
'14턴 이내에 승리하면 광종 구원로 확보 명성이 오릅니다.'
'18턴 이내에 승리하면 광종 구원로 확보 명성이 오릅니다.'
],
map: thirdBattleMap,
units: thirdBattleUnits,
bonds: thirdBattleBonds,
mapTextureKey: 'battle-map-third',
leaderUnitId: 'guangzong-leader-ma-yuan',
quickVictoryTurnLimit: 14,
quickVictoryTurnLimit: 18,
baseVictoryGold: 520,
objectives: [
{
@@ -522,9 +522,9 @@ export const thirdBattleScenario: BattleScenarioDefinition = {
{
id: 'quick',
kind: 'quick-victory',
label: '14턴 이내 승리',
label: '18턴 이내 승리',
rewardGold: 180,
maxTurn: 14
maxTurn: 18
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],

View File

@@ -3192,11 +3192,6 @@ export class BattleScene extends Phaser.Scene {
color: '#9aa3ad',
wordWrap: { width: panelWidth - 48, useAdvancedWrap: true }
});
this.add.text(panelX + 24, panelY + panelHeight - 172, '가장자리 커서 / 미니맵 클릭으로 시야 이동', {
fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif',
fontSize: '14px',
color: '#9aa3ad'
});
this.updateObjectiveTracker();
this.drawMiniMap();
}
@@ -3511,20 +3506,20 @@ export class BattleScene extends Phaser.Scene {
this.layout.tileSize,
this.layout.tileSize,
palette.blue,
0.24
0.34
);
marker.setData('tileX', x);
marker.setData('tileY', y);
marker.setOrigin(0);
marker.setStrokeStyle(1, palette.blue, 0.68);
marker.setStrokeStyle(2, palette.blue, 0.84);
marker.setDepth(4);
if (this.mapMask) {
marker.setMask(this.mapMask);
}
marker.setVisible(this.isTileVisible(x, y));
marker.setInteractive({ useHandCursor: true });
marker.on('pointerover', () => marker.setFillStyle(palette.blue, 0.36));
marker.on('pointerout', () => marker.setFillStyle(palette.blue, 0.24));
marker.on('pointerover', () => marker.setFillStyle(palette.blue, 0.48));
marker.on('pointerout', () => marker.setFillStyle(palette.blue, 0.34));
marker.on('pointerdown', (pointer: Phaser.Input.Pointer) => {
if (pointer.leftButtonDown()) {
this.moveSelectedUnit(x, y, pointer);
@@ -9421,6 +9416,10 @@ export class BattleScene extends Phaser.Scene {
return this.layout.panelY + 152;
}
private sideContentBottom(padding = 16) {
return (this.miniMapLayout?.y ?? this.layout.panelY + this.layout.panelHeight - 140) - padding;
}
private renderBondPanel(message?: string) {
this.clearSidePanelContent();
const { panelX, panelWidth } = this.layout;
@@ -9905,6 +9904,11 @@ export class BattleScene extends Phaser.Scene {
this.renderStatRow(stat.label, unit.stats[stat.key], left, statTop + index * 28, width);
});
if (message) {
this.renderPanelMessage(message, left, top + 306, width, 66);
return;
}
const positionText = `위치 ${unit.x + 1}, ${unit.y + 1} / ${terrainRule.label} ${terrainRating}%${acted ? ' / 행동완료' : ''}`;
this.trackSideObject(this.add.text(left, top + 306, positionText, {
fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif',
@@ -9913,10 +9917,6 @@ export class BattleScene extends Phaser.Scene {
}));
this.renderEquipmentSummary(unit, left, top + 330, width);
if (message) {
this.renderPanelMessage(message, left, top + 440, width, 50);
}
}
private renderEquipmentSummary(unit: UnitData, x: number, y: number, width: number) {
@@ -10072,16 +10072,19 @@ export class BattleScene extends Phaser.Scene {
}
private renderPanelMessage(text: string, x: number, y: number, width: number, height = 74) {
const bg = this.trackSideObject(this.add.rectangle(x, y, width, height, 0x101820, 0.72));
const safeY = Math.max(this.sideContentTop(), Math.min(y, this.sideContentBottom() - height));
const bg = this.trackSideObject(this.add.rectangle(x, safeY, width, height, 0x101820, 0.82));
bg.setOrigin(0);
bg.setStrokeStyle(1, 0x53606c, 0.42);
this.trackSideObject(this.add.text(x + 12, y + 10, text, {
const messageText = this.trackSideObject(this.add.text(x + 12, safeY + 10, text, {
fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif',
fontSize: height < 60 ? '13px' : '15px',
color: '#d4dce6',
wordWrap: { width: width - 24, useAdvancedWrap: true },
lineSpacing: height < 60 ? 2 : 4
}));
bg.setDepth(32);
messageText.setDepth(33);
}
private returnToRosterPanel(tab: RosterTab) {