minor things
This commit is contained in:
parent
285792a8fb
commit
1890236bc6
5 changed files with 183 additions and 23 deletions
|
|
@ -1,7 +1,8 @@
|
||||||
import Em from 'ember';
|
import Em from 'ember';
|
||||||
import musicControlMixin from '../mixins/music-control';
|
import musicControlMixin from '../mixins/music-control';
|
||||||
|
import visualizerMixin from '../mixins/visualizer';
|
||||||
|
|
||||||
export default Em.Component.extend(musicControlMixin, {
|
export default Em.Component.extend(musicControlMixin, visualizerMixin, {
|
||||||
classNames: ['col-lg-6', 'col-lg-offset-3', 'col-sm-10', 'col-sm-offset-1', 'col-xs-12'],
|
classNames: ['col-lg-6', 'col-lg-offset-3', 'col-sm-10', 'col-sm-offset-1', 'col-xs-12'],
|
||||||
classNameBindings: ['active::hidden'],
|
classNameBindings: ['active::hidden'],
|
||||||
|
|
||||||
|
|
@ -42,16 +43,7 @@ export default Em.Component.extend(musicControlMixin, {
|
||||||
this.changePlayerControl('threshold', beatOptions.threshold.defaultValue, true);
|
this.changePlayerControl('threshold', beatOptions.threshold.defaultValue, true);
|
||||||
this.changePlayerControl('decay', beatOptions.decay.defaultValue, true);
|
this.changePlayerControl('decay', beatOptions.decay.defaultValue, true);
|
||||||
this.changePlayerControl('frequency', beatOptions.frequency.defaultValue, true);
|
this.changePlayerControl('frequency', beatOptions.frequency.defaultValue, true);
|
||||||
},
|
this.changePlayerControl('transitionTime', beatOptions.frequency.defaultValue, true);
|
||||||
clickLight: function(light){
|
|
||||||
var activeLights = this.get('activeLights'),
|
|
||||||
lightId = activeLights.indexOf(light);
|
|
||||||
|
|
||||||
if(lightId !== -1){
|
|
||||||
activeLights.removeObject(light);
|
|
||||||
} else {
|
|
||||||
activeLights.pushObject(light);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
playerAreaPlay: function(){
|
playerAreaPlay: function(){
|
||||||
if(Em.isEmpty(Em.$('#playerControls:hover'))){
|
if(Em.isEmpty(Em.$('#playerControls:hover'))){
|
||||||
|
|
@ -148,6 +140,9 @@ export default Em.Component.extend(musicControlMixin, {
|
||||||
thresholdChanged: function(value) {
|
thresholdChanged: function(value) {
|
||||||
this.changePlayerControl('threshold', value, true);
|
this.changePlayerControl('threshold', value, true);
|
||||||
},
|
},
|
||||||
|
transitionTimeChanged: function(value) {
|
||||||
|
this.changePlayerControl('transitionTime', value, true);
|
||||||
|
},
|
||||||
decayChanged: function(value){
|
decayChanged: function(value){
|
||||||
this.changePlayerControl('decay', value, true);
|
this.changePlayerControl('decay', value, true);
|
||||||
},
|
},
|
||||||
|
|
@ -254,10 +249,11 @@ export default Em.Component.extend(musicControlMixin, {
|
||||||
|
|
||||||
simulateKick: function(mag) {
|
simulateKick: function(mag) {
|
||||||
var activeLights = this.get('activeLights'),
|
var activeLights = this.get('activeLights'),
|
||||||
|
transitionTime = this.get('transitionTime') * 10,
|
||||||
self = this,
|
self = this,
|
||||||
briOff = function (i) {
|
briOff = function (i) {
|
||||||
Em.$.ajax(self.get('apiURL') + '/lights/' + i + '/state', {
|
Em.$.ajax(self.get('apiURL') + '/lights/' + i + '/state', {
|
||||||
data: JSON.stringify({'bri': 1, 'transitiontime': 0}),
|
data: JSON.stringify({'bri': 1, 'transitiontime': transitionTime}),
|
||||||
contentType: 'application/json',
|
contentType: 'application/json',
|
||||||
type: 'PUT'
|
type: 'PUT'
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ export default Em.Mixin.create({
|
||||||
beatOptions: {
|
beatOptions: {
|
||||||
threshold: {
|
threshold: {
|
||||||
range: {min: 0.1, max: 0.9},
|
range: {min: 0.1, max: 0.9},
|
||||||
|
step: 0.01,
|
||||||
defaultValue: 0.3,
|
defaultValue: 0.3,
|
||||||
pips: {
|
pips: {
|
||||||
mode: 'positions',
|
mode: 'positions',
|
||||||
|
|
@ -44,9 +45,24 @@ export default Em.Mixin.create({
|
||||||
from: function ( value ) { return value; }
|
from: function ( value ) { return value; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
transitionTime: {
|
||||||
|
range: {min: 0, max: 0.5},
|
||||||
|
step: 0.1,
|
||||||
|
defaultValue: 0,
|
||||||
|
pips: {
|
||||||
|
mode: 'positions',
|
||||||
|
values: [0,20,40,60,80,100],
|
||||||
|
density: 10,
|
||||||
|
format: {
|
||||||
|
to: function ( value ) {return value;},
|
||||||
|
from: function ( value ) { return value; }
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
transitionTime: 0,
|
||||||
threshold: 0.3,
|
threshold: 0.3,
|
||||||
decay: 0.02,
|
decay: 0.02,
|
||||||
frequency: [0,4],
|
frequency: [0,4],
|
||||||
|
|
|
||||||
5
app/components/mixins/visualizer.js
Normal file
5
app/components/mixins/visualizer.js
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
import Em from 'ember';
|
||||||
|
|
||||||
|
export default Em.Mixin.create({
|
||||||
|
|
||||||
|
});
|
||||||
|
|
@ -652,12 +652,12 @@ md-switch.md-default-theme.md-checked .md-thumb {
|
||||||
|
|
||||||
#beatArea * .noUi-vertical {
|
#beatArea * .noUi-vertical {
|
||||||
height: 170px;
|
height: 170px;
|
||||||
margin-top: 20px;
|
margin-top: 15px;
|
||||||
margin-bottom: 15px;
|
margin-bottom: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#beatOptionGroup {
|
#beatOptionGroup {
|
||||||
margin-top: 20px;
|
margin-top: 10px;
|
||||||
.beatOption {
|
.beatOption {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin-right: 1em;
|
margin-right: 1em;
|
||||||
|
|
@ -757,3 +757,135 @@ md-switch.md-default-theme.md-checked .md-thumb {
|
||||||
display: table-cell;
|
display: table-cell;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FANCY BUTTON
|
||||||
|
.button {
|
||||||
|
position: absolute;
|
||||||
|
top: calc(50% - 115px);
|
||||||
|
left: calc(50% - 90px);
|
||||||
|
display: block;
|
||||||
|
width: 180px;
|
||||||
|
height: 230px;
|
||||||
|
background-image: -webkit-linear-gradient(top, #464a54 0%, #2c2225 100%);
|
||||||
|
background-image: linear-gradient(to bottom, #464a54 0%, #2c2225 100%);
|
||||||
|
border-radius: 6px;
|
||||||
|
cursor: pointer;
|
||||||
|
box-shadow: 0 -5px 0px #464649, 0 4px 20px rgba(0, 0, 0, 0.5), 0 2px 1px #66696e inset, 4px 0 0 rgba(0, 0, 0, 0.1) inset, -4px 0 0 rgba(0, 0, 0, 0.1) inset, 0 -8px 2px rgba(0, 0, 0, 0.1) inset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button .hole {
|
||||||
|
position: absolute;
|
||||||
|
top: 20px;
|
||||||
|
left: 20px;
|
||||||
|
display: block;
|
||||||
|
width: 140px;
|
||||||
|
height: 186px;
|
||||||
|
overflow: hidden;
|
||||||
|
background-color: #090909;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 -2px 1px rgba(255, 255, 255, 0.25) inset, 0 2px 1px rgba(255, 255, 255, 0.2) inset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button .switch {
|
||||||
|
position: absolute;
|
||||||
|
top: 6px;
|
||||||
|
left: 4px;
|
||||||
|
display: block;
|
||||||
|
width: 132px;
|
||||||
|
height: 174px;
|
||||||
|
background-image: -webkit-radial-gradient(center, ellipse, rgba(255, 255, 255, 0.07) 0%, transparent 80%), -webkit-radial-gradient(center, ellipse, rgba(0, 0, 0, 0.15) 0%, transparent 80%), -webkit-radial-gradient(center, ellipse, rgba(255, 255, 255, 0.02) 0%, rgba(255, 255, 255, 0.02) 30%, transparent 50%), -webkit-linear-gradient(top, #882626 0%, #290606 100%);
|
||||||
|
background-image: radial-gradient(ellipse at center, rgba(255, 255, 255, 0.07) 0%, transparent 80%), radial-gradient(ellipse at center, rgba(0, 0, 0, 0.15) 0%, transparent 80%), radial-gradient(ellipse at center, rgba(255, 255, 255, 0.02) 0%, rgba(255, 255, 255, 0.02) 30%, transparent 50%), linear-gradient(to bottom, #882626 0%, #290606 100%);
|
||||||
|
background-size: 100% 80px, 100% 80px, 10px 10px, 100%;
|
||||||
|
background-position: top left, bottom left, bottom left, center;
|
||||||
|
background-repeat: no-repeat, no-repeat, repeat, no-repeat;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 2px 0 1px rgba(255, 255, 255, 0.1) inset, -2px 0 1px rgba(255, 255, 255, 0.1) inset, 0 -2px 2px rgba(255, 255, 255, 0.05) inset, 0 4px 2px rgba(0, 0, 0, 0.05) inset, 0 -30px 8px rgba(198, 45, 45, 0.5), 0 -25px 8px rgba(198, 45, 45, 0.3), 0 -20px 8px rgba(198, 45, 45, 0.4), 0 -15px 8px rgba(198, 45, 45, 0.5), 0 -10px 8px rgba(198, 45, 45, 0.6), 0 -5px 8px rgba(198, 45, 45, 0.9);
|
||||||
|
-webkit-transform-style: preserve3d;
|
||||||
|
transform-style: preserve3d;
|
||||||
|
-webkit-transform-origin: center center;
|
||||||
|
-ms-transform-origin: center center;
|
||||||
|
transform-origin: center center;
|
||||||
|
-webkit-transform: perspective(1500px) rotateX(-30deg) translateY(16px);
|
||||||
|
transform: perspective(1500px) rotateX(-30deg) translateY(16px);
|
||||||
|
-webkit-transition: -webkit-transform 200ms ease;
|
||||||
|
transition: transform 200ms ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button .switch:before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: -2px;
|
||||||
|
left: 5px;
|
||||||
|
width: 122px;
|
||||||
|
height: 5px;
|
||||||
|
background-image: -webkit-radial-gradient(center, ellipse, rgba(255, 255, 255, 0.4) 0%, transparent 80%);
|
||||||
|
background-image: radial-gradient(ellipse at center, rgba(255, 255, 255, 0.4) 0%, transparent 80%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.button .switch .one {
|
||||||
|
position: absolute;
|
||||||
|
top: 24px;
|
||||||
|
left: calc(47%);
|
||||||
|
display: block;
|
||||||
|
width: 6px;
|
||||||
|
height: 40px;
|
||||||
|
background-image: -webkit-linear-gradient(top, #cccccc 0%, #999999 100%);
|
||||||
|
background-image: linear-gradient(to bottom, #cccccc 0%, #999999 100%);
|
||||||
|
box-shadow: 0 2px 1px white inset;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button .switch .zero {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 24px;
|
||||||
|
left: calc(36%);
|
||||||
|
display: block;
|
||||||
|
width: 32px;
|
||||||
|
height: 40px;
|
||||||
|
box-shadow: 0 4px 2px rgba(255, 255, 255, 0.5) inset, 0 -4px 2px rgba(0, 0, 0, 0.2) inset, 0 0 0 6px #666666 inset;
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button input {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button input:checked ~ .hole .switch {
|
||||||
|
background-image: -webkit-radial-gradient(center, ellipse, rgba(255, 255, 255, 0.07) 0%, transparent 80%), -webkit-radial-gradient(center, ellipse, rgba(0, 0, 0, 0.15) 0%, transparent 80%), -webkit-radial-gradient(center, ellipse, rgba(254, 244, 0, 0.5) 0%, rgba(254, 244, 0, 0.2) 30%, rgba(254, 244, 0, 0.1) 50%, transparent 80%), -webkit-radial-gradient(center, ellipse, rgba(0, 0, 0, 0.05) 0%, rgba(0, 0, 0, 0.05) 30%, transparent 50%), -webkit-linear-gradient(top, #b43222 0%, #a51810 100%);
|
||||||
|
background-image: radial-gradient(ellipse at center, rgba(255, 255, 255, 0.07) 0%, transparent 80%), radial-gradient(ellipse at center, rgba(0, 0, 0, 0.15) 0%, transparent 80%), radial-gradient(ellipse at center, rgba(254, 244, 0, 0.5) 0%, rgba(254, 244, 0, 0.2) 30%, rgba(254, 244, 0, 0.1) 50%, transparent 80%), radial-gradient(ellipse at center, rgba(0, 0, 0, 0.05) 0%, rgba(0, 0, 0, 0.05) 30%, transparent 50%), linear-gradient(to bottom, #b43222 0%, #a51810 100%);
|
||||||
|
background-size: 100% 80px, 100% 80px, 100% 180px, 10px 10px, 100%;
|
||||||
|
background-position: top left, bottom left, 0 30px, bottom left, center;
|
||||||
|
background-repeat: no-repeat, no-repeat, no-repeat, repeat, no-repeat;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 4px 0 1px rgba(255, 255, 255, 0.15) inset, -4px 0 1px rgba(255, 255, 255, 0.15) inset, 0 4px 1px rgba(255, 255, 255, 0.15) inset, 0 -12px 8px rgba(0, 0, 0, 0.25) inset, 0 30px 8px rgba(128, 17, 5, 0.5), 0 25px 8px rgba(128, 17, 5, 0.3), 0 20px 8px rgba(128, 17, 5, 0.4), 0 15px 8px rgba(128, 17, 5, 0.5), 0 10px 8px rgba(128, 17, 5, 0.6), 0 5px 8px rgba(128, 17, 5, 0.9);
|
||||||
|
-webkit-transform: perspective(1500px) rotateX(30deg) translateY(-16px);
|
||||||
|
transform: perspective(1500px) rotateX(30deg) translateY(-16px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.button input:checked ~ .hole .switch:before {
|
||||||
|
top: auto;
|
||||||
|
bottom: -2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button input:checked ~ .hole .switch:after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
bottom: -24px;
|
||||||
|
left: calc(14%);
|
||||||
|
width: 96px;
|
||||||
|
height: 16px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-image: -webkit-radial-gradient(center, ellipse, #fef400 0%, rgba(254, 244, 0, 0.3) 60%, transparent 100%);
|
||||||
|
background-image: radial-gradient(ellipse at center, #fef400 0%, rgba(254, 244, 0, 0.3) 60%, transparent 100%);
|
||||||
|
-webkit-filter: blur(8px);
|
||||||
|
filter: blur(8px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.button input:checked ~ .hole .switch .one {
|
||||||
|
background-image: -webkit-linear-gradient(top, #eeeeee 0%, #aaaaaa 100%);
|
||||||
|
background-image: linear-gradient(to bottom, #eeeeee 0%, #aaaaaa 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.button input:checked ~ .hole .switch .zero {
|
||||||
|
box-shadow: 0 4px 2px rgba(255, 255, 255, 0.5) inset, 0 -4px 2px rgba(0, 0, 0, 0.2) inset, 0 0 0 6px #aaaaaa inset;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -71,23 +71,34 @@
|
||||||
<div id="playerBottom" class="row">
|
<div id="playerBottom" class="row">
|
||||||
<div id="beatArea" class="col-sm-8 col-xs-12">
|
<div id="beatArea" class="col-sm-8 col-xs-12">
|
||||||
<div id="vertDivider" class="hidden-xs"></div>
|
<div id="vertDivider" class="hidden-xs"></div>
|
||||||
{{light-group lightsData=lightsData activeLights=activeLights action='clickLight' apiURL=apiURL noHover=true}}
|
|
||||||
|
|
||||||
<div id="beatOptionGroup">
|
<div id="beatOptionGroup">
|
||||||
<span class="beatOption">
|
<div class="beatOption">
|
||||||
{{range-slider start=threshold orientation="vertical" range=beatOptions.threshold.range slide="thresholdChanged" pips=beatOptions.threshold.pips}}
|
<div class="text-center">{{threshold}}</div>
|
||||||
|
{{range-slider start=threshold orientation="vertical" step=beatOptions.threshold.step range=beatOptions.threshold.range slide="thresholdChanged" pips=beatOptions.threshold.pips}}
|
||||||
Max. Intensity
|
Max. Intensity
|
||||||
</span>
|
</div>
|
||||||
|
|
||||||
<span class="beatOption">
|
|
||||||
|
<div class="beatOption">
|
||||||
|
<div class="text-center">{{decay}} sec</div>
|
||||||
{{range-slider start=decay orientation="vertical" step=beatOptions.decay.step range=beatOptions.decay.range slide="decayChanged" pips=beatOptions.decay.pips}}
|
{{range-slider start=decay orientation="vertical" step=beatOptions.decay.step range=beatOptions.decay.range slide="decayChanged" pips=beatOptions.decay.pips}}
|
||||||
Decay Rate
|
Decay Rate
|
||||||
</span>
|
</div>
|
||||||
|
|
||||||
<span class="beatOption">
|
<div class="beatOption">
|
||||||
{{range-slider start=frequency orientation="vertical" step=beatOptions.frequency.step range=beatOptions.frequency.range connect=true slide="frequencyChanged" pips=beatOptions.frequency.pips}}
|
{{range-slider start=frequency orientation="vertical" step=beatOptions.frequency.step range=beatOptions.frequency.range connect=true slide="frequencyChanged" pips=beatOptions.frequency.pips}}
|
||||||
Frequency Range
|
Frequency Range
|
||||||
</span>
|
</div>
|
||||||
|
|
||||||
|
<div class="beatOption">
|
||||||
|
<div class="text-center">{{transitionTime}} sec</div>
|
||||||
|
{{range-slider start=transitionTime orientation="vertical" step=beatOptions.transitionTime.step range=beatOptions.transitionTime.range slide="transitionTimeChanged" pips=beatOptions.transitionTime.pips}}
|
||||||
|
Transition Time
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="beatOption">
|
||||||
|
{{switch-button}}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="playerButtonGroup">
|
<div id="playerButtonGroup">
|
||||||
|
|
|
||||||
Reference in a new issue