Hold the battle result until the replay ends, then show it last.
This commit is contained in:
@@ -32,13 +32,38 @@ export function Table({ session, onLeave }: { session: Session; onLeave: () => v
|
||||
return { round: battleRound, step: next }
|
||||
})
|
||||
|
||||
const battleLines = useMemo(
|
||||
() =>
|
||||
view?.phase === 'battle' && view.battle?.events
|
||||
? battleLogLines(view.battle.events, step)
|
||||
: undefined,
|
||||
[view, step],
|
||||
)
|
||||
// The battle outcome is known before the replay plays out, so we hold its
|
||||
// "result" log entry back: it's dropped from the persistent list during the
|
||||
// battle and appended as the final battle line only once the replay reaches
|
||||
// the end (and reappears in the persistent log in later phases).
|
||||
const inBattle = view?.phase === 'battle'
|
||||
const events = view?.battle?.events ?? null
|
||||
const battleDone = !!(inBattle && events && step >= events.length)
|
||||
|
||||
const entries = useMemo(() => {
|
||||
const log = view?.log ?? []
|
||||
if (!inBattle) return log
|
||||
return log.filter((e) => !(e.kind === 'result' && e.round === battleRound))
|
||||
}, [view, inBattle, battleRound])
|
||||
|
||||
const battleLines = useMemo(() => {
|
||||
if (!inBattle || !events) return undefined
|
||||
const lines = battleLogLines(events, step)
|
||||
if (battleDone) {
|
||||
const result = (view?.log ?? []).find(
|
||||
(e) => e.kind === 'result' && e.round === battleRound,
|
||||
)
|
||||
if (result) {
|
||||
lines.push({
|
||||
key: `result-${result.seq}`,
|
||||
icon: result.icon,
|
||||
text: result.text,
|
||||
seat: result.seat,
|
||||
})
|
||||
}
|
||||
}
|
||||
return lines
|
||||
}, [view, inBattle, events, step, battleDone, battleRound])
|
||||
|
||||
if (!view) {
|
||||
return (
|
||||
@@ -98,11 +123,7 @@ export function Table({ session, onLeave }: { session: Session; onLeave: () => v
|
||||
{view.phase === 'gameover' && <GameOver view={view} onLeave={onLeave} />}
|
||||
</main>
|
||||
{view.phase !== 'lobby' && (
|
||||
<EventLog
|
||||
entries={view.log ?? []}
|
||||
youSeat={view.youSeat}
|
||||
battleLines={battleLines}
|
||||
/>
|
||||
<EventLog entries={entries} youSeat={view.youSeat} battleLines={battleLines} />
|
||||
)}
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user