◉ VR-kurser
▶ Spela webbversionen

18. Medkit, utgång och highscore

Målet

En genomförd omgång ska ha ett tydligt slut och en anledning att spela igen. Spelaren når dagsljuset efter dörr två och får tid, antal dödade monster, poäng och rekord. Vi skiljer på det som händer under rundan och det som sparas mellan rundor. Öppna main.js och reglerna.

Medkit återställer högst 40 hälsa och kan inte öka hälsan över 100. Gå in i medkitet för att plocka upp det automatiskt; vid full hälsa ligger det kvar och HUD visar Health full. Tre finns i banan vid start; fler kan dyka upp under spelomgången. Modellen kommer från First Aid Kit 3D, CC0.

restoredHealth() räknar ut det nya värdet utan att flytta 3D-objekt. collectMedkit() använder resultatet, tar sedan bort modellen från scenen och uppdaterar HUD. Om hälsan redan är 100 gör funktionen ingenting, så medkitet finns kvar för ett senare tillfälle. Det är ett exempel på att dela regel och presentation.

Poängen följer Godot-versionens formel:

Math.round(6000 / (1 + seconds / 120)) + Math.min(kills, 20) * 100

Kortare tid ger fler baspoäng. Högst tjugo kills ger bonus. Bästa poängen sparas i localStorage, alltså lokalt i den webbläsare och profil där spelet körs. Quest Browser och Mac-webbläsaren får var sitt rekord; de synkroniseras inte automatiskt.

I endRun(true) jämförs poängen med state.bestScore. Bara ett högre rekord sparas. startRun() nollställer den aktiva omgången men behåller bästa poängen. En förlust avslutar rundan utan att låtsas att spelaren klarat flykten. Se kapitel 19 för hela tillståndskedjan.

Testa

Räkna själv

Efter 120 sekunder och 3 dödade monster blir basen 6000 / (1 + 120/120) = 3000 och bonusen 3 × 100 = 300. Totalen är 3300. Pröva samma uträkning med 60 sekunder och noll kills. Jämför sedan med scoreFor(...) i webbläsarens konsol eller i ett enkelt test.