Compare commits
No commits in common. "f8de69786e1b66221c25c43e80745b57628eaff4" and "35564602b2c5c7a421fb9c46cfcac309d753339a" have entirely different histories.
f8de69786e
...
35564602b2
|
|
@ -9,16 +9,7 @@
|
||||||
|
|
||||||
const PALETTE = ['#ff5555', '#ffa84a', '#ffe34a', '#6cdc6c', '#4ab3ff', '#b06cff'];
|
const PALETTE = ['#ff5555', '#ffa84a', '#ffe34a', '#6cdc6c', '#4ab3ff', '#b06cff'];
|
||||||
|
|
||||||
// triggerKey kommt von $game.stageBumpKey — das Lesen abonniert (Svelte 5) den ganzen
|
|
||||||
// game-Store, daher feuert dieser Effekt bei JEDEM Timer-Tick (~60×/s). Ohne Wertvergleich
|
|
||||||
// würde er die Partikel jede Frame neu erzeugen und die fly-Animation endlos bei 0% neu
|
|
||||||
// starten → flackernde Punkte in der Mitte. Nur bei echtem Wechsel von triggerKey auslösen.
|
|
||||||
let prevTrigger = 0;
|
|
||||||
let hideTimer: ReturnType<typeof setTimeout> | null = null;
|
|
||||||
|
|
||||||
$effect(() => {
|
$effect(() => {
|
||||||
if (triggerKey === prevTrigger) return;
|
|
||||||
prevTrigger = triggerKey;
|
|
||||||
if (triggerKey === 0) return;
|
if (triggerKey === 0) return;
|
||||||
counter++;
|
counter++;
|
||||||
const seed = counter;
|
const seed = counter;
|
||||||
|
|
@ -30,16 +21,10 @@
|
||||||
size: 8 + Math.random() * 8,
|
size: 8 + Math.random() * 8,
|
||||||
}));
|
}));
|
||||||
active = true;
|
active = true;
|
||||||
if (hideTimer) clearTimeout(hideTimer);
|
const timeout = setTimeout(() => {
|
||||||
hideTimer = setTimeout(() => {
|
|
||||||
active = false;
|
active = false;
|
||||||
}, 700);
|
}, 700);
|
||||||
});
|
return () => clearTimeout(timeout);
|
||||||
|
|
||||||
// Timer beim Verlassen aufräumen (der Effekt oben kehrt meist früh zurück und gibt
|
|
||||||
// selbst keine Cleanup-Funktion mehr zurück).
|
|
||||||
$effect(() => () => {
|
|
||||||
if (hideTimer) clearTimeout(hideTimer);
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -115,10 +115,7 @@
|
||||||
will-change: transform;
|
will-change: transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fill-mode: backwards hält schon während des animation-delay den 0%-Zustand. Ohne das
|
.float { animation: float var(--dur, 3.6s) ease-in-out infinite alternate; }
|
||||||
sitzt das Element verzögert bei transform:none und springt beim Animationsstart auf den
|
|
||||||
0%-Keyframe — das sichtbare „Springen" in den ersten Sekunden. */
|
|
||||||
.float { animation: float var(--dur, 3.6s) ease-in-out infinite alternate backwards; }
|
|
||||||
/* translate3d/translateZ erzwingen eine echte GPU-Compositor-Ebene — WebKit/Safari
|
/* translate3d/translateZ erzwingen eine echte GPU-Compositor-Ebene — WebKit/Safari
|
||||||
rendert 3D-transformierte Elemente flüssig, 2D-Transforms ruckeln dort sonst anfangs. */
|
rendert 3D-transformierte Elemente flüssig, 2D-Transforms ruckeln dort sonst anfangs. */
|
||||||
@keyframes float {
|
@keyframes float {
|
||||||
|
|
@ -126,13 +123,13 @@
|
||||||
100% { transform: translate3d(0, -30px, 0) rotate(5deg); }
|
100% { transform: translate3d(0, -30px, 0) rotate(5deg); }
|
||||||
}
|
}
|
||||||
|
|
||||||
.drift { animation: drift var(--dur, 8s) ease-in-out infinite alternate backwards; }
|
.drift { animation: drift var(--dur, 8s) ease-in-out infinite alternate; }
|
||||||
@keyframes drift {
|
@keyframes drift {
|
||||||
from { transform: translate3d(-55px, 0, 0); }
|
from { transform: translate3d(-55px, 0, 0); }
|
||||||
to { transform: translate3d(55px, 0, 0); }
|
to { transform: translate3d(55px, 0, 0); }
|
||||||
}
|
}
|
||||||
|
|
||||||
.twinkle { animation: twinkle var(--dur, 2.2s) ease-in-out infinite backwards; }
|
.twinkle { animation: twinkle var(--dur, 2.2s) ease-in-out infinite; }
|
||||||
@keyframes twinkle {
|
@keyframes twinkle {
|
||||||
0%, 100% { opacity: 0.25; transform: scale(0.5) translateZ(0); }
|
0%, 100% { opacity: 0.25; transform: scale(0.5) translateZ(0); }
|
||||||
50% { opacity: 1; transform: scale(1.35) translateZ(0); }
|
50% { opacity: 1; transform: scale(1.35) translateZ(0); }
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ export type Settings = {
|
||||||
|
|
||||||
export const DEFAULT_SETTINGS: Settings = {
|
export const DEFAULT_SETTINGS: Settings = {
|
||||||
schemaVersion: SCHEMA_VERSION,
|
schemaVersion: SCHEMA_VERSION,
|
||||||
roundSeconds: 15,
|
roundSeconds: 60,
|
||||||
soundOn: true,
|
soundOn: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ export const ROUND_SECONDS_OPTIONS = [15, 30, 60] as const;
|
||||||
|
|
||||||
const initial: Settings =
|
const initial: Settings =
|
||||||
typeof window === 'undefined'
|
typeof window === 'undefined'
|
||||||
? { schemaVersion: 1, roundSeconds: 15, soundOn: true }
|
? { schemaVersion: 1, roundSeconds: 60, soundOn: true }
|
||||||
: loadSettings();
|
: loadSettings();
|
||||||
|
|
||||||
export const settings = writable<Settings>(initial);
|
export const settings = writable<Settings>(initial);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user