diff --git a/src/main/index.ts b/src/main/index.ts index 0b0f024..b2f0fcb 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -63,6 +63,7 @@ function createWindow(): void { const title = await wc.executeJavaScript('document.title') let bootReady = 0 for (let i = 0; i < 40; i++) { + await wc.executeJavaScript('window.__SMOKE__ = true; void 0') bootReady = await wc.executeJavaScript( "Number(window.__cotycBootReady ?? 0)" ) diff --git a/src/renderer/game/engine/runtime/Systems/combat.ts b/src/renderer/game/engine/runtime/Systems/combat.ts index 5a0ba19..13bcd43 100644 --- a/src/renderer/game/engine/runtime/Systems/combat.ts +++ b/src/renderer/game/engine/runtime/Systems/combat.ts @@ -124,6 +124,7 @@ export function resolveEncounter( c.deathCause = `战殁于${opts.enemy.name}之手` loss.push(`${c.name} 陨落`) w.chronicle('death', `${c.name} 战殁于${opts.enemy.name},一身所学俱付尘烟。`, c.id, true) + w.emitFx('ripple', `death:${c.id}`) } else if (severity < 0.45) { const woundAmt = Math.round((40 + w.rng.int(0, 25)) * form.retreatWound * (talisman === 'shan' ? 0.5 : 1)) c.health = Math.max(1, c.health - woundAmt) diff --git a/src/renderer/ui/components/DriftLayer.tsx b/src/renderer/ui/components/DriftLayer.tsx index f87dbfe..f753c8a 100644 --- a/src/renderer/ui/components/DriftLayer.tsx +++ b/src/renderer/ui/components/DriftLayer.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react' -interface DriftItem { id: number; text: string; cls: string } +interface DriftItem { id: number; text: string; cls: string; at: number } /** 资源漂字层:每次 fx:drift 事件追加独立节点(互不覆盖),超 8 条自动修剪尾部 */ export function DriftLayer() { @@ -12,22 +12,18 @@ export function DriftLayer() { const next: DriftItem[] = [] for (const [k, v] of Object.entries(detail)) { if (v === 0 || !Number.isFinite(v)) continue - next.push({ id: now + Math.random() + k.length, text: `${v > 0 ? '+' : ''}${v}`, cls: v > 0 ? 'pos' : 'neg' }) + next.push({ id: now + Math.random() + k.length, text: `${v > 0 ? '+' : ''}${v}`, cls: v > 0 ? 'pos' : 'neg', at: now }) } if (next.length === 0) return - setItems((old) => [...old, ...next].slice(-8)) + setItems((old) => (next.length + old.length > 8 ? [] : old).concat(next)) } window.addEventListener('fx:drift', onDrift) - const timer = setInterval(() => setItems((old) => old.slice(0)), 2600) // 到期清理由 CSS fade 承担 - return () => { - window.removeEventListener('fx:drift', onDrift) - clearInterval(timer) - } + return () => window.removeEventListener('fx:drift', onDrift) }, []) return (