diff --git a/assets/img/neon.png b/assets/img/neon.png
new file mode 100644
index 0000000..31018aa
Binary files /dev/null and b/assets/img/neon.png differ
diff --git a/assets/models/laserneon.obj b/assets/models/laserneon.obj
new file mode 100644
index 0000000..0d22dde
--- /dev/null
+++ b/assets/models/laserneon.obj
@@ -0,0 +1,36 @@
+# Blender v2.79 (sub 0) OBJ File: 'neons.blend'
+# www.blender.org
+o laser
+v -0.056853 -150.000031 0.100000
+v -0.056853 150.000031 0.100000
+v -0.082947 -150.000015 -0.100000
+v -0.082947 150.000015 -0.100000
+v 0.056853 -150.000031 0.100000
+v 0.056853 150.000031 0.100000
+v 0.082947 -150.000015 -0.100000
+v 0.082947 150.000015 -0.100000
+v -4.780099 -165.906036 -0.242529
+v -4.780099 165.906036 -0.242529
+v 4.780099 -165.906036 -0.242529
+v 4.780099 165.906036 -0.242529
+vt 0.004204 0.528840
+vt 0.003617 0.446357
+vt 0.004204 0.446357
+vt 0.995039 1.000000
+vt 0.020153 0.000000
+vt 0.995039 0.000000
+vt 0.007355 0.528840
+vt 0.006767 0.446357
+vt 0.007355 0.446357
+vt 0.006767 0.528840
+vt 0.003617 0.528840
+vt 0.020153 1.000000
+s off
+f 2/1 3/2 1/3
+f 12/4 9/5 11/6
+f 8/7 5/8 7/9
+f 6/10 1/3 5/8
+f 2/1 4/11 3/2
+f 12/4 10/12 9/5
+f 8/7 6/10 5/8
+f 6/10 2/1 1/3
diff --git a/assets/models/tunnelneon.obj b/assets/models/tunnelneon.obj
index e724563..a76395f 100644
--- a/assets/models/tunnelneon.obj
+++ b/assets/models/tunnelneon.obj
@@ -1,132 +1,212 @@
# Blender v2.79 (sub 0) OBJ File: 'neons.blend'
# www.blender.org
o tunnelneon
-v 11.925084 7.848577 -13.610518
-v 7.848576 11.925085 -13.610518
-v 11.925084 7.848577 -13.710936
-v 7.848576 11.925085 -13.710936
-v 11.972422 7.895914 -13.610518
-v 7.895913 11.972423 -13.610518
-v 11.972422 7.895914 -13.710936
-v 7.895913 11.972423 -13.710936
-v -11.925084 7.848576 -13.610518
-v -7.848577 11.925083 -13.610518
-v -11.925084 7.848576 -13.710936
-v -7.848577 11.925083 -13.710936
-v -11.972423 7.895913 -13.610518
-v -7.895913 11.972422 -13.610518
-v -11.972423 7.895913 -13.710936
-v -7.895913 11.972422 -13.710936
-v 11.925084 7.848577 -22.869068
-v 7.848576 11.925085 -22.869068
-v 11.925084 7.848577 -22.969488
-v 7.848576 11.925085 -22.969488
-v 11.972422 7.895914 -22.869068
-v 7.895913 11.972423 -22.869068
-v 11.972422 7.895914 -22.969488
-v 7.895913 11.972423 -22.969488
-v -11.925084 7.848576 -22.869068
-v -7.848577 11.925083 -22.869068
-v -11.925084 7.848576 -22.969488
-v -7.848577 11.925083 -22.969488
-v -11.972423 7.895913 -22.869068
-v -7.895913 11.972422 -22.869068
-v -11.972423 7.895913 -22.969488
-v -7.895913 11.972422 -22.969488
-v 11.925084 7.848577 -32.127625
-v 7.848576 11.925085 -32.127625
-v 11.925084 7.848577 -32.228039
-v 7.848576 11.925085 -32.228039
-v 11.972422 7.895914 -32.127625
-v 7.895913 11.972423 -32.127625
-v 11.972422 7.895914 -32.228039
-v 7.895913 11.972423 -32.228039
-v -11.925084 7.848576 -32.127625
-v -7.848577 11.925083 -32.127625
-v -11.925084 7.848576 -32.228039
-v -7.848577 11.925083 -32.228039
-v -11.972423 7.895913 -32.127625
-v -7.895913 11.972422 -32.127625
-v -11.972423 7.895913 -32.228039
-v -7.895913 11.972422 -32.228039
-v 11.925084 7.848577 -41.386173
-v 7.848576 11.925085 -41.386173
-v 11.925084 7.848577 -41.486595
-v 7.848576 11.925085 -41.486595
-v 11.972422 7.895914 -41.386173
-v 7.895913 11.972423 -41.386173
-v 11.972422 7.895914 -41.486595
-v 7.895913 11.972423 -41.486595
-v -11.925084 7.848576 -41.386173
-v -7.848577 11.925083 -41.386173
-v -11.925084 7.848576 -41.486595
-v -7.848577 11.925083 -41.486595
-v -11.972423 7.895913 -41.386173
-v -7.895913 11.972422 -41.386173
-v -11.972423 7.895913 -41.486595
-v -7.895913 11.972422 -41.486595
+v 12.287716 7.337969 -13.550458
+v 7.337968 12.287718 -13.550458
+v 12.287716 7.337969 -13.770995
+v 7.337968 12.287718 -13.770995
+v 12.391678 7.441931 -13.550458
+v 7.441930 12.391680 -13.550458
+v 14.462343 0.359674 -14.639281
+v 0.359670 14.462343 -14.639280
+v 19.704720 5.602050 -14.220368
+v 5.602043 19.704716 -14.220367
+v -12.287715 7.337968 -13.550458
+v -7.337968 12.287716 -13.550458
+v -12.287715 7.337968 -13.770995
+v -7.337968 12.287716 -13.770995
+v -12.391677 7.441930 -13.550458
+v -7.441930 12.391678 -13.550458
+v -14.462344 0.359674 -14.639281
+v -0.359670 14.462341 -14.639280
+v -19.704720 5.602048 -14.220368
+v -5.602044 19.704716 -14.220367
+v 12.287716 7.337969 -22.805450
+v 7.337968 12.287718 -22.805450
+v 12.287716 7.337969 -23.025986
+v 7.337968 12.287718 -23.025986
+v 12.391678 7.441931 -22.805450
+v 7.441930 12.391680 -22.805450
+v 14.462343 0.359674 -23.894272
+v 0.359670 14.462343 -23.894272
+v 19.704720 5.602050 -23.475361
+v 5.602043 19.704716 -23.475361
+v -12.287715 7.337968 -22.805450
+v -7.337968 12.287716 -22.805450
+v -12.287715 7.337968 -23.025986
+v -7.337968 12.287716 -23.025986
+v -12.391677 7.441930 -22.805450
+v -7.441930 12.391678 -22.805450
+v -14.462344 0.359674 -23.894272
+v -0.359670 14.462341 -23.894272
+v -19.704720 5.602048 -23.475361
+v -5.602044 19.704716 -23.475361
+v 12.287716 7.337969 -32.060440
+v 7.337968 12.287718 -32.060440
+v 12.287716 7.337969 -32.280979
+v 7.337968 12.287718 -32.280979
+v 12.391678 7.441931 -32.060440
+v 7.441930 12.391680 -32.060440
+v 14.462343 0.359674 -33.149265
+v 0.359670 14.462343 -33.149265
+v 19.704720 5.602050 -32.730354
+v 5.602043 19.704716 -32.730354
+v -12.287715 7.337968 -32.060440
+v -7.337968 12.287716 -32.060440
+v -12.287715 7.337968 -32.280979
+v -7.337968 12.287716 -32.280979
+v -12.391677 7.441930 -32.060440
+v -7.441930 12.391678 -32.060440
+v -14.462344 0.359674 -33.149265
+v -0.359670 14.462341 -33.149265
+v -19.704720 5.602048 -32.730354
+v -5.602044 19.704716 -32.730354
+v 12.287716 7.337969 -41.315434
+v 7.337968 12.287718 -41.315434
+v 12.287716 7.337969 -41.535969
+v 7.337968 12.287718 -41.535969
+v 12.391678 7.441931 -41.315434
+v 7.441930 12.391680 -41.315434
+v 14.462343 0.359674 -42.404255
+v 0.359670 14.462343 -42.404255
+v 19.704720 5.602050 -41.985344
+v 5.602043 19.704716 -41.985344
+v -12.287715 7.337968 -41.315434
+v -7.337968 12.287716 -41.315434
+v -12.287715 7.337968 -41.535969
+v -7.337968 12.287716 -41.535969
+v -12.391677 7.441930 -41.315434
+v -7.441930 12.391678 -41.315434
+v -14.462344 0.359674 -42.404255
+v -0.359670 14.462341 -42.404255
+v -19.704720 5.602048 -41.985344
+v -5.602044 19.704716 -41.985344
+vt 0.002174 0.466970
+vt 0.004290 0.465414
+vt 0.004291 0.466970
+vt 0.002175 0.468527
+vt 0.004291 0.468526
+vt 0.996800 0.000086
+vt 0.027429 0.999914
+vt 0.996800 0.999914
+vt 0.004290 0.465414
+vt 0.002174 0.466970
+vt 0.004291 0.466970
+vt 0.002175 0.468527
+vt 0.004291 0.468526
+vt 0.996800 0.999914
+vt 0.027429 0.000086
+vt 0.996800 0.000086
+vt 0.002174 0.466970
+vt 0.004290 0.465414
+vt 0.004291 0.466970
+vt 0.002175 0.468527
+vt 0.004291 0.468526
+vt 0.996800 0.000086
+vt 0.027429 0.999914
+vt 0.996800 0.999914
+vt 0.004290 0.465414
+vt 0.002174 0.466970
+vt 0.004291 0.466970
+vt 0.002175 0.468527
+vt 0.004291 0.468526
+vt 0.996800 0.999914
+vt 0.027429 0.000086
+vt 0.996800 0.000086
+vt 0.002174 0.466970
+vt 0.004290 0.465414
+vt 0.004291 0.466970
+vt 0.002175 0.468527
+vt 0.004291 0.468526
+vt 0.996800 0.000086
+vt 0.027429 0.999914
+vt 0.996800 0.999914
+vt 0.004290 0.465414
+vt 0.002174 0.466970
+vt 0.004291 0.466970
+vt 0.002175 0.468527
+vt 0.004291 0.468526
+vt 0.996800 0.999914
+vt 0.027429 0.000086
+vt 0.996800 0.000086
+vt 0.002174 0.466970
+vt 0.004290 0.465414
+vt 0.004291 0.466970
+vt 0.002175 0.468527
+vt 0.004291 0.468526
+vt 0.996800 0.000086
+vt 0.027429 0.999914
+vt 0.996800 0.999914
+vt 0.004290 0.465414
+vt 0.002174 0.466970
+vt 0.004291 0.466970
+vt 0.002175 0.468527
+vt 0.004291 0.468526
+vt 0.996800 0.999914
+vt 0.027429 0.000086
+vt 0.996800 0.000086
+vt 0.002173 0.465414
+vt 0.027429 0.000086
+vt 0.002173 0.465414
+vt 0.027429 0.999914
+vt 0.002173 0.465414
+vt 0.027429 0.000086
+vt 0.002173 0.465414
+vt 0.027429 0.999914
+vt 0.002173 0.465414
+vt 0.027429 0.000086
+vt 0.002173 0.465414
+vt 0.027429 0.999914
+vt 0.002173 0.465414
+vt 0.027429 0.000086
+vt 0.002173 0.465414
+vt 0.027429 0.999914
s off
-f 2 3 1
-f 4 7 3
-f 8 5 7
-f 6 1 5
-f 11 10 9
-f 15 12 11
-f 13 16 15
-f 9 14 13
-f 18 19 17
-f 20 23 19
-f 24 21 23
-f 22 17 21
-f 27 26 25
-f 31 28 27
-f 29 32 31
-f 25 30 29
-f 34 35 33
-f 36 39 35
-f 40 37 39
-f 38 33 37
-f 43 42 41
-f 47 44 43
-f 45 48 47
-f 41 46 45
-f 50 51 49
-f 52 55 51
-f 56 53 55
-f 54 49 53
-f 59 58 57
-f 63 60 59
-f 61 64 63
-f 57 62 61
-f 2 4 3
-f 4 8 7
-f 8 6 5
-f 6 2 1
-f 11 12 10
-f 15 16 12
-f 13 14 16
-f 9 10 14
-f 18 20 19
-f 20 24 23
-f 24 22 21
-f 22 18 17
-f 27 28 26
-f 31 32 28
-f 29 30 32
-f 25 26 30
-f 34 36 35
-f 36 40 39
-f 40 38 37
-f 38 34 33
-f 43 44 42
-f 47 48 44
-f 45 46 48
-f 41 42 46
-f 50 52 51
-f 52 56 55
-f 56 54 53
-f 54 50 49
-f 59 60 58
-f 63 64 60
-f 61 62 64
-f 57 58 62
+f 2/1 3/2 1/3
+f 6/4 1/3 5/5
+f 7/6 10/7 8/8
+f 13/9 12/10 11/11
+f 11/11 16/12 15/13
+f 18/14 19/15 17/16
+f 22/17 23/18 21/19
+f 26/20 21/19 25/21
+f 27/22 30/23 28/24
+f 33/25 32/26 31/27
+f 31/27 36/28 35/29
+f 38/30 39/31 37/32
+f 42/33 43/34 41/35
+f 46/36 41/35 45/37
+f 47/38 50/39 48/40
+f 53/41 52/42 51/43
+f 51/43 56/44 55/45
+f 58/46 59/47 57/48
+f 62/49 63/50 61/51
+f 66/52 61/51 65/53
+f 67/54 70/55 68/56
+f 73/57 72/58 71/59
+f 71/59 76/60 75/61
+f 78/62 79/63 77/64
+f 2/1 4/65 3/2
+f 6/4 2/1 1/3
+f 7/6 9/66 10/7
+f 13/9 14/67 12/10
+f 11/11 12/10 16/12
+f 18/14 20/68 19/15
+f 22/17 24/69 23/18
+f 26/20 22/17 21/19
+f 27/22 29/70 30/23
+f 33/25 34/71 32/26
+f 31/27 32/26 36/28
+f 38/30 40/72 39/31
+f 42/33 44/73 43/34
+f 46/36 42/33 41/35
+f 47/38 49/74 50/39
+f 53/41 54/75 52/42
+f 51/43 52/42 56/44
+f 58/46 60/76 59/47
+f 62/49 64/77 63/50
+f 66/52 62/49 61/51
+f 67/54 69/78 70/55
+f 73/57 74/79 72/58
+f 71/59 72/58 76/60
+f 78/62 80/80 79/63
diff --git a/src/components/beat-loader.js b/src/components/beat-loader.js
index 5b098aa..5716d4d 100644
--- a/src/components/beat-loader.js
+++ b/src/components/beat-loader.js
@@ -4,6 +4,7 @@ var utils = require('../utils');
* Load beat data (all the beats and such).
*/
AFRAME.registerComponent('beat-loader', {
+ dependencies: ['stage-colors'],
schema: {
beatAnticipationTime: {default: 2.0},
beatSpeed: {default: 4.0},
@@ -27,7 +28,14 @@ AFRAME.registerComponent('beat-loader', {
this.songCurrentTime = undefined;
this.onKeyDown = this.onKeyDown.bind(this);
+ this.stageColors = this.el.components['stage-colors'];
+ this.twister = document.getElementById('twister');
+ this.leftStageLasers = document.getElementById('leftStageLasers');
+ this.rightStageLasers = document.getElementById('rightStageLasers');
+
this.el.addEventListener('cleargame', this.clearBeats.bind(this));
+
+ //this.addDebugControls();
},
update: function (oldData) {
@@ -223,30 +231,41 @@ AFRAME.registerComponent('beat-loader', {
},
generateEvent: function (event) {
- console.log(event);
switch(event._type) {
- case 0: // lasers color
- case 1: // tunnel neon color
- document.getElementById('tunnelNeon').setAttribute('colorPreset', event._value);
- document.getElementById('tunnelNeon').emit('pulse');
- break;
- case 2: document.getElementById('leftStageLasers').setAttribute('colorPreset', event._value);
- break;
- case 3: document.getElementById('rightStageLasers').setAttribute('colorPreset', event._value);
- break;
+ case 0:
+ this.stageColors.setColor('fog', event._value);
+ this.stageColors.setColor('sky', event._value);
+ this.stageColors.setColor('backglow', event._value);
+ break;
+ case 1:
+ this.stageColors.setColor('tunnelNeon', event._value);
+ break;
+ case 2:
+ this.stageColors.setColor('leftStageLaser0', event._value);
+ this.stageColors.setColor('leftStageLaser1', event._value);
+ this.stageColors.setColor('leftStageLaser2', event._value);
+ break;
+ case 3:
+ this.stageColors.setColor('rightStageLaser0', event._value);
+ this.stageColors.setColor('rightStageLaser1', event._value);
+ this.stageColors.setColor('rightStageLaser2', event._value);
+ break;
case 4:
- document.getElementById('floor').emit('pulse');
- document.getElementById('stageNeon').emit('pulse');
- break;
+ this.stageColors.setColor('floor', event._value);
+ this.stageColors.setColor('stageNeon', event._value);
+ break;
case 8:
- case 9: document.getElementById('twister').components.twister.pulse(event._value);
- break;
- case 12: document.getElementById('leftStageLasers').components['stage-lasers'].pulse(event._value);
- console.log('left laser', event._value);
- break;
- case 13: document.getElementById('rightStageLasers').components['stage-lasers'].pulse(event._value);
- console.log('right laser', event._value);
- break;
+ this.twister.components.twister.pulse(event._value);
+ break;
+ case 9:
+ this.twister.components.twister.zoom(event._value);
+ break;
+ case 12:
+ this.leftStageLasers.components['stage-lasers'].pulse(event._value);
+ break;
+ case 13:
+ this.rightStageLasers.components['stage-lasers'].pulse(event._value);
+ break;
}
},
@@ -277,6 +296,56 @@ AFRAME.registerComponent('beat-loader', {
child.components.wall.returnToPool(true);
}
}
+ },
+
+ addDebugControls: function () {
+ var self = this;
+ var currControl = 0;
+ function addControl(i, name, type){
+ var div = document.createElement('div');
+ div.style.position = 'absolute';
+ div.id = 'stagecontrol' + i;
+ div.style.width = '100px';
+ div.style.height = '30px';
+ div.style.top = type === 'element' ? '20px' : '70px';
+ div.style.background = '#000';
+ div.style.color = '#fff';
+ div.style.zIndex = 999999999;
+ div.style.padding = '5px';
+ div.style.font = '14px sans-serif';
+ div.style.textAlign = 'center';
+ div.style.cursor = 'pointer';
+ div.style.left = (20 + i * 120)+'px';
+ div.innerHTML = name;
+ if (type === 'element') {
+ div.addEventListener('click', () => {
+ document.getElementById('stagecontrol' + currControl).style.background = '#000';
+ div.style.background = '#66f';
+ currControl = i;
+ } )
+ } else {
+ div.addEventListener('click', () => { self.generateEvent({_type: currControl, _value: i}) })
+ }
+ document.body.appendChild(div);
+ }
+
+ [ 'sky',
+ 'tunnelNeon',
+ 'leftStageLasers',
+ 'rightStageLasers',
+ 'floor'].forEach((id, i) => {addControl(i, id, 'element'); });
+
+ [
+ 'off',
+ 'blue',
+ 'blue',
+ 'bluefade',
+ '',
+ 'red',
+ 'red',
+ 'redfade'
+ ].forEach((id, i) => {addControl(i, id, 'value'); });
+;
}
});
diff --git a/src/components/stage-colors.js b/src/components/stage-colors.js
index baa91f1..28ba2e4 100644
--- a/src/components/stage-colors.js
+++ b/src/components/stage-colors.js
@@ -25,9 +25,27 @@ AFRAME.registerComponent('stage-colors', {
});
this.sky = document.getElementById('sky');
this.backglow = document.getElementById('backglow');
- this.smoke1 = document.getElementById('smoke1');
- this.smoke2 = document.getElementById('smoke2');
this.auxColor = new THREE.Color();
+
+ let $ = function (id) { return document.getElementById(id); };
+
+ this.targets = {};
+ [ 'fog',
+ 'sky',
+ 'backglow',
+ 'tunnelNeon',
+ 'leftStageLaser0',
+ 'leftStageLaser1',
+ 'leftStageLaser2',
+ 'rightStageLaser0',
+ 'rightStageLaser1',
+ 'rightStageLaser2',
+ 'floor',
+ 'stageNeon'].forEach((id) => {
+ this.targets[id] = id == 'fog' ? this.el.sceneEl : document.getElementById(id);
+ });
+
+ this.colorCodes = ['off', 'blue', 'blue', 'bluefade', '', 'red', 'red', 'redfade'];
},
update: function (oldData) {
@@ -46,5 +64,11 @@ AFRAME.registerComponent('stage-colors', {
this.mineMaterial.emissive = this.mineEmission[red ? 'red' : 'blue'];
this.mineMaterial.envMap = this.mineEnvMap[red ? 'red' : 'blue'];
this.mineMaterial.needsUpdate = true;
+ },
+
+ setColor: function (target, code) {
+ var mesh = this.targets[target].getObject3D('mesh');
+ if (mesh) mesh.material.opacity = 1;
+ this.targets[target].emit('color' + this.colorCodes[code], {}, false);
}
});
diff --git a/src/components/stage-lasers.js b/src/components/stage-lasers.js
index afb6c97..13ed409 100644
--- a/src/components/stage-lasers.js
+++ b/src/components/stage-lasers.js
@@ -13,7 +13,7 @@ AFRAME.registerComponent('stage-lasers', {
},
pulse: function (speed) {
- this.speed = speed / 3;
+ this.speed = speed / 5;
},
tick: function (time, delta) {
diff --git a/src/components/twister.js b/src/components/twister.js
index 6a7cea8..25b0083 100644
--- a/src/components/twister.js
+++ b/src/components/twister.js
@@ -12,16 +12,23 @@ AFRAME.registerComponent('twister', {
init: function () {
this.currentTwist = 0;
this.animate = false;
+ this.zoomProgress = 0;
},
pulse: function (twist) {
if (!this.data.enabled) { return; }
- if (twist == 0) { twist = 0.1 + Math.random() * 0.25; }
- else twist = Math.min(twist, 0.5);
+ if (twist == 0) { twist = 0.05 + Math.random() * 0.15; }
+ else twist = Math.min(twist * 0.5, 0.5);
twist *= Math.random() < 0.5 ? -1 : 1; // random direction
this.el.setAttribute('twister', {twist: twist});
},
+ zoom: function () {
+ if (!this.data.enabled) { return; }
+ this.zoomProgress = 0.01;
+ this.animate = true;
+ },
+
update: function (oldData) {
var radius = 4;
var segment;
@@ -65,16 +72,28 @@ AFRAME.registerComponent('twister', {
tick: function (time, delta) {
if (!this.animate) { return; }
- if (Math.abs(this.data.twist - this.currentTwist) < 0.001) {
+ delta *= 0.001;
+
+ this.currentTwist += (this.data.twist - this.currentTwist) * delta;
+
+ var child = this.el.object3D.children[0];
+ var zoom = this.zoomProgress ? Math.sin(this.zoomProgress * Math.PI) * 0.4 : 0;
+
+ while (child) {
+ child.rotation.y = this.currentTwist;
+ child.position.y = this.data.positionIncrement + zoom;
+ child = child.children[0];
+ }
+
+ if (this.zoomProgress > 0) {
+ this.zoomProgress += delta;
+ if (this.zoomProgress >= 1) {
+ this.zoomProgress = 0;
+ }
+ }
+ if (Math.abs(this.data.twist - this.currentTwist) < 0.001 && this.zoomProgress == 0){
this.animate = false;
}
- this.currentTwist += (this.data.twist - this.currentTwist) * delta * 0.001;
-
- var child = this.el.object3D.children[0];
- while (child) {
- child.rotation.y = this.currentTwist;
- child = child.children[0];
- }
}
});
diff --git a/src/index.html b/src/index.html
index c37be95..c169910 100644
--- a/src/index.html
+++ b/src/index.html
@@ -14,7 +14,7 @@
+
@@ -76,6 +77,7 @@
+
diff --git a/src/templates/stage.html b/src/templates/stage.html
index 17c506d..c3e66d4 100644
--- a/src/templates/stage.html
+++ b/src/templates/stage.html
@@ -1,11 +1,49 @@
-
+
+
+
+
+
+
+
+ material="src: #skyTexture">
@@ -43,22 +81,23 @@
-
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+