diff --git a/src/assets.html b/src/assets.html index ccd145c..d1dba68 100644 --- a/src/assets.html +++ b/src/assets.html @@ -75,7 +75,6 @@ + + + + + + + { supercut.visible = false; }, 1000); + supercut.material.uniforms.starttime.value = this.el.sceneEl.time - 50; + this.superCutIdx = (this.superCutIdx + 1) % this.superCuts.length; + } + + const scoreEl = this.el.sceneEl.components[beatScorePool].requestEntity(); + if (scoreEl) { scoreEl.object3D.position.copy(this.el.object3D.position); - scoreEl.setAttribute('text', 'value', scoreText); scoreEl.play(); scoreEl.emit('beatscorestart', null, false); } diff --git a/src/components/score-beat.js b/src/components/score-beat.js index 34282f0..eec906d 100644 --- a/src/components/score-beat.js +++ b/src/components/score-beat.js @@ -2,13 +2,18 @@ * Score beat, auto-return to pool in 1.2s. */ AFRAME.registerComponent('score-beat', { + schema: { + type: 'string' + }, + play: function () { + this.poolComponent = `pool__beatscore${this.data}`; this.startTime = this.el.sceneEl.time; }, tick: function (time) { if (time > this.startTime + 1200) { - this.el.sceneEl.components.pool__beatscore.returnEntity(this.el); + this.el.sceneEl.components[this.poolComponent].returnEntity(this.el); } } }); diff --git a/src/components/supercutfx-shader.js b/src/components/supercutfx-shader.js new file mode 100644 index 0000000..170d0ed --- /dev/null +++ b/src/components/supercutfx-shader.js @@ -0,0 +1,34 @@ +AFRAME.registerShader('superCutFxShader', { + schema: { + starttime: {type: 'float', is: 'uniform'}, + timems: {type: 'time', is: 'uniform'} + }, + + vertexShader: ` + varying vec2 uvs; + varying vec3 worldPos; + void main() { + uvs.xy = uv.xy; + gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); + } + `, + + fragmentShader: ` + uniform float starttime; + uniform float timems; + varying vec2 uvs; + varying vec3 worldPos; + + #define COLOR vec3(0, 0.67, 0.98) + + void main() { + float time = (timems - starttime) / 2000.0; + vec2 p = uvs.xy - 0.5; + float r = p.x * p.x + p.y * p.y; + float alpha = 1.0 - smoothstep(time - 0.01, time, r); + alpha *= smoothstep(time - 0.1, time, r); + alpha *= 1.0 - time * 5.5; + gl_FragColor = vec4(COLOR, alpha); + } + ` +}); diff --git a/src/index.html b/src/index.html index 9b941cb..1f3c321 100644 --- a/src/index.html +++ b/src/index.html @@ -42,7 +42,10 @@ pool__beat-dot-blue="mixin: dotBlueBeat; size: 10; container: #beatContainer" pool__beat-dot-red="mixin: dotRedBeat; size: 10; container: #beatContainer" pool__beat-mine="mixin: mine; size: 12; container: #beatContainer" - pool__beatscore="mixin: beatScore; size: 5; container: #beatContainer" + pool__beatscoreok="mixin: beatScoreOk; size: 2; container: #beatContainer" + pool__beatscoregood="mixin: beatScoreGood; size: 2; container: #beatContainer" + pool__beatscoreexcellent="mixin: beatScoreExcellent; size: 2; container: #beatContainer" + pool__beatscoresuper="mixin: beatScoreSuper; size: 2; container: #beatContainer" pool__wall="mixin: wall; size: 10; container: #beatContainer" proxy-event__cleargame1="event: gamemenuexit; as: cleargame; to: a-scene" proxy-event__cleargame2="event: gamemenurestart; as: cleargame; to: a-scene" @@ -78,6 +81,11 @@ {% include './templates/victory.html' %} {% include './templates/leaderboard.html' %} + + {% for i in range(1, 5) %} + + {% endfor %} +