update
This commit is contained in:
@@ -236,13 +236,6 @@ function naechsterModus() {
|
|||||||
return imZufall.value ? MODI[Math.floor(Math.random() * MODI.length)] : aktiverModus.value
|
return imZufall.value ? MODI[Math.floor(Math.random() * MODI.length)] : aktiverModus.value
|
||||||
}
|
}
|
||||||
|
|
||||||
// Modus-String eines Pool-Objekts (Form + Schwierigkeit) — Gegenstück zu MODI.
|
|
||||||
function modusVon(obj) {
|
|
||||||
if (obj.form === 'quiz') return obj.schwer ? 'quiz_schwer' : 'quiz_leicht'
|
|
||||||
if (obj.form === 'lueckentext') return obj.schwer ? 'lueck_schwer' : 'lueck_leicht'
|
|
||||||
return 'erklaeren'
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ein Frage-Objekt eines bestimmten Modus generieren (aus gezogener Saat; Erklären hat Fallback).
|
// Ein Frage-Objekt eines bestimmten Modus generieren (aus gezogener Saat; Erklären hat Fallback).
|
||||||
function frageEinzeln(modus = naechsterModus()) {
|
function frageEinzeln(modus = naechsterModus()) {
|
||||||
const form = modus.startsWith('quiz') ? 'quiz' : modus.startsWith('lueck') ? 'lueckentext' : 'erklaeren'
|
const form = modus.startsWith('quiz') ? 'quiz' : modus.startsWith('lueck') ? 'lueckentext' : 'erklaeren'
|
||||||
@@ -296,15 +289,31 @@ function poolFuellen() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Frage des gewünschten Modus holen: erst aus dem Cache, sonst gezielt erzeugen.
|
// Eine Frage aus dem Pool ziehen — zufällig, nie die schnellste.
|
||||||
// So entscheidet der gewürfelte Modus über die Form — nicht das Generier-Tempo.
|
// Erstes Laden (Pool leer + nichts in Arbeit): 5 erzeugen, ALLE abwarten, dann ziehen.
|
||||||
async function frageHolen(modus) {
|
async function frageZiehen() {
|
||||||
const i = pool.value.findIndex((o) => modusVon(o) === modus)
|
const ersteLadung = !pool.value.length && !inflight.value
|
||||||
if (i >= 0) return pool.value.splice(i, 1)[0]
|
poolFuellen() // bis zu 5 starten/halten
|
||||||
pruefLoading.value = true
|
pruefLoading.value = true
|
||||||
try { return await frageEinzeln(modus) }
|
try {
|
||||||
catch { return null }
|
const missCap = musterModus.value ? Infinity : 3
|
||||||
finally { pruefLoading.value = false }
|
if (ersteLadung) {
|
||||||
|
// nur am Anfang: warten, bis alle 5 fertig sind (Tempo entscheidet nicht über die Form)
|
||||||
|
while ((inflight.value > 0 || pool.value.length < POOL_ZIEL) && poolMiss < missCap) {
|
||||||
|
if (!inflight.value) poolFuellen()
|
||||||
|
await new Promise((r) => setTimeout(r, 80))
|
||||||
|
}
|
||||||
|
} else if (!pool.value.length) {
|
||||||
|
// Pool leergelaufen (schneller Nutzer): auf die erste fertige warten
|
||||||
|
while (!pool.value.length && (inflight.value > 0 || poolMiss < missCap)) {
|
||||||
|
if (!inflight.value) poolFuellen()
|
||||||
|
await new Promise((r) => setTimeout(r, 80))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!pool.value.length) return null
|
||||||
|
const i = Math.floor(Math.random() * pool.value.length)
|
||||||
|
return pool.value.splice(i, 1)[0]
|
||||||
|
} finally { pruefLoading.value = false }
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ein gezogenes Objekt der passenden Form anzeigen (Erklären-Bubble bzw. Quiz/Lück-Widget).
|
// Ein gezogenes Objekt der passenden Form anzeigen (Erklären-Bubble bzw. Quiz/Lück-Widget).
|
||||||
@@ -329,9 +338,7 @@ async function naechsteFrageZeigen() {
|
|||||||
poolMiss = 0
|
poolMiss = 0
|
||||||
pruefFehler.value = ''
|
pruefFehler.value = ''
|
||||||
await musterLaden()
|
await musterLaden()
|
||||||
poolFuellen() // Cache im Hintergrund vorwärmen
|
const obj = await frageZiehen() // erste Ladung: alle 5 abwarten; dann zufällig ziehen
|
||||||
const modus = naechsterModus() // Form vorab würfeln — unabhängig vom Tempo
|
|
||||||
const obj = await frageHolen(modus)
|
|
||||||
if (obj) {
|
if (obj) {
|
||||||
frageObjZeigen(obj)
|
frageObjZeigen(obj)
|
||||||
pruefScroll()
|
pruefScroll()
|
||||||
|
|||||||
Reference in New Issue
Block a user