From 52922636922f9c77fb8708327a7a4f88aef56d6a Mon Sep 17 00:00:00 2001 From: Fabien Benetou Date: Mon, 10 Apr 2023 20:12:53 +0200 Subject: [PATCH] racing example with timing comparison --- index.html | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index bd6ba01..1527232 100644 --- a/index.html +++ b/index.html @@ -3018,7 +3018,7 @@ AFRAME.registerComponent('collision-check-target', { radius = e.detail.els[0].getAttribute("radius") score += 1/radius setFeedbackHUD("hit" + radius + "target, score: "+score) - if (score > 20}{ + if (score > 20){ score = 20 setFeedbackHUD("you win") } @@ -3026,6 +3026,33 @@ AFRAME.registerComponent('collision-check-target', { } }); +let gatesToPass = ["gate1","gate2","gate3"] +let gatesPassed = [] +let firstGatePassed +let lapDurations = [] +AFRAME.registerComponent('gate-through', { + dependencies: ['raycaster'], + + init: function () { + this.el.addEventListener('raycaster-intersection', function (e) { + if (!firstGatePassed) firstGatePassed = +Date.now() + let gateId = e.target.parentElement.id + setFeedbackHUD("gate through "+ gateId) + e.target.parentElement.setAttribute("color", "orange") + gatesPassed.push(gateId) + if (gatesPassed.length >= gatesToPass.length && gatesPassed.slice(-gatesToPass.length).join() == gatesToPass.join()){ + lap = Date.now() - firstGatePassed + setFeedbackHUD("circuit done in "+(lap/1000).toFixed(2)+"s") + if (lapDurations.length && lap < lapDurations.sort()[0]) + setFeedbackHUD("fastest lap!") + lapDurations.push(lap) + gatesPassed = [] + firstGatePassed = null + } + }); + } +}); + // used for testing AFRAME.registerComponent('startfunctions', { init: function () { @@ -3064,10 +3091,10 @@ AFRAME.registerComponent('startfunctions', { - - + @@ -3076,6 +3103,16 @@ AFRAME.registerComponent('startfunctions', { + + + + + + + + + +