From 9dd2721121c40e9fa3fb249a7fd5ae2c7c949f65 Mon Sep 17 00:00:00 2001 From: Wickedness Date: Sun, 5 Jul 2026 05:17:20 +0900 Subject: [PATCH] Prevent dense sortie roster text overlap --- src/game/scenes/CampScene.ts | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/game/scenes/CampScene.ts b/src/game/scenes/CampScene.ts index 5b645e0..f9f5bb3 100644 --- a/src/game/scenes/CampScene.ts +++ b/src/game/scenes/CampScene.ts @@ -12447,20 +12447,23 @@ export class CampScene extends Phaser.Scene { this.toggleSortieUnit(unit.id); }); - this.renderSortieBattleUiIcon(this.unitClassIconKey(unit), x + 36, rowY + (denseRoster ? 3 : 10), denseRoster ? 18 : 24, depth + 2, disabled ? 0.42 : selected ? 1 : 0.68); + this.renderSortieBattleUiIcon(this.unitClassIconKey(unit), x + 36, rowY + (denseRoster ? 5 : 10), denseRoster ? 17 : 24, depth + 2, disabled ? 0.42 : selected ? 1 : 0.68); const nameColor = disabled ? '#68727e' : selected ? '#f2e3bf' : recommendedReserve ? '#d8b15f' : '#c8d2dd'; - this.trackSortie(this.add.text(x + 58, rowY - 1, `${unit.name} Lv${unit.level}`, this.textStyle(denseRoster ? 11 : 13, nameColor, true))).setDepth(depth + 2); + this.trackSortie(this.add.text(x + 58, rowY - 1, `${unit.name} Lv${unit.level}`, this.textStyle(denseRoster ? 10 : 13, nameColor, true))).setDepth(depth + 2); const statusColor = status.tone === 'disabled' ? '#77818c' : status.tone === 'selected' ? '#a8ffd0' : status.tone === 'recommended' ? '#ffdf7b' : '#9fb0bf'; - const statusText = this.trackSortie(this.add.text(x + width - 28, rowY - 1, status.label, this.textStyle(denseRoster ? 9 : 10, statusColor, true))); + const statusText = this.trackSortie(this.add.text(x + width - 28, rowY - 1, status.label, this.textStyle(denseRoster ? 8 : 10, statusColor, true))); statusText.setOrigin(1, 0); statusText.setDepth(depth + 2); - this.trackSortie(this.add.text(x + 58, rowY + (denseRoster ? 12 : 17), this.compactText(`${unit.className} · HP ${unit.hp}/${unit.maxHp}`, 23), this.textStyle(denseRoster ? 9 : 10, disabled ? '#68727e' : '#d4dce6', true))).setDepth(depth + 2); - if (!denseRoster) { + this.trackSortie(this.add.text(x + 58, rowY + (denseRoster ? 10 : 17), this.compactText(`${unit.className} · HP ${unit.hp}/${unit.maxHp}`, denseRoster ? 32 : 23), this.textStyle(denseRoster ? 8 : 10, disabled ? '#68727e' : '#d4dce6', true))).setDepth(depth + 2); + if (denseRoster) { + return; + } + { this.drawSortieBar(x + 218, rowY + 22, 58, 6, unit.hp / unit.maxHp, disabled ? 0x53606c : selected ? palette.green : palette.gold, depth + 2); this.renderSortieEquipmentIcons(unit, x + 292, rowY + 24, !disabled && selected, depth + 2, 16, 12, 20); } const secondLine = disabled ? availability.reason : recommendation && !selected ? `추천: ${recommendation.reason}` : summary.bondLine; - this.trackSortie(this.add.text(x + 58, rowY + (denseRoster ? 23 : 32), this.compactText(secondLine, denseRoster ? 32 : 36), this.textStyle(denseRoster ? 8 : 9, disabled ? '#68727e' : selected ? '#a8ffd0' : recommendedReserve ? '#ffdf7b' : '#87919c', selected || recommendedReserve))).setDepth(depth + 2); + this.trackSortie(this.add.text(x + 58, rowY + 32, this.compactText(secondLine, 36), this.textStyle(9, disabled ? '#68727e' : selected ? '#a8ffd0' : recommendedReserve ? '#ffdf7b' : '#87919c', selected || recommendedReserve))).setDepth(depth + 2); }); if (maxScroll > 0) { @@ -12529,10 +12532,10 @@ export class CampScene extends Phaser.Scene { private sortieRosterViewState(totalUnits: number, height = 286) { const denseRoster = totalUnits > 12; - const rowGap = denseRoster ? 17 : totalUnits > 7 ? 30 : totalUnits > 5 ? 38 : totalUnits > 4 ? 43 : 48; - const rowHeight = denseRoster ? 15 : totalUnits > 7 ? 24 : rowGap - 6; - const listTopOffset = denseRoster ? 48 : 50; - const listFooterHeight = denseRoster ? 74 : 68; + const rowGap = denseRoster ? 22 : totalUnits > 7 ? 30 : totalUnits > 5 ? 38 : totalUnits > 4 ? 43 : 48; + const rowHeight = denseRoster ? 20 : totalUnits > 7 ? 24 : rowGap - 6; + const listTopOffset = denseRoster ? 46 : 50; + const listFooterHeight = denseRoster ? 58 : 68; const naturalVisibleRows = Math.max(1, Math.floor((height - listTopOffset - 10 - rowHeight) / rowGap) + 1); const scrollVisibleRows = Math.max(1, Math.floor((height - listFooterHeight) / rowGap)); const maxVisibleRows = totalUnits <= naturalVisibleRows ? totalUnits : scrollVisibleRows;