Prevent dense sortie roster text overlap

This commit is contained in:
2026-07-05 05:17:20 +09:00
parent c2cc8142d8
commit 9dd2721121

View File

@@ -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;