use preset pack meta to load all keys initially

This commit is contained in:
jberg 2018-06-07 17:37:51 -07:00 committed by Jordan Eldredge
parent 76f60e14a5
commit c0b004bb47
4 changed files with 53 additions and 21 deletions

View file

@ -28,7 +28,7 @@ class PresetOverlay extends React.Component {
this.setState({
presetIdx: Math.min(
this.state.presetIdx + 1,
Object.keys(this.props.presets).length - 1
this.props.presetKeys.length - 1
)
});
e.stopPropagation();
@ -44,7 +44,7 @@ class PresetOverlay extends React.Component {
}
}
render() {
if (!this.props.presets) {
if (!this.props.presetKeys) {
return (
<div
style={{
@ -61,8 +61,7 @@ class PresetOverlay extends React.Component {
}
// display highlighted preset in the middle if possible
const presetKeys = Object.keys(this.props.presets);
const numPresets = presetKeys.length;
const numPresets = this.props.presetKeys.length;
let presetListLen = Math.floor(this.props.height / 20);
presetListLen = Math.min(Math.max(presetListLen, 3), numPresets);
presetListLen = presetListLen % 2 ? presetListLen : presetListLen - 1;
@ -73,7 +72,7 @@ class PresetOverlay extends React.Component {
startIdx = Math.max(endIdx - presetListLen, 0);
endIdx = Math.min(startIdx + presetListLen, numPresets);
}
const presets = presetKeys.slice(startIdx, endIdx);
const presets = this.props.presetKeys.slice(startIdx, endIdx);
const presetElms = presets.map((presetName, i) => {
let color;
if (i + startIdx === this.props.currentPreset) {

View file

@ -22,14 +22,22 @@ class MilkdropWindow extends React.Component {
}
componentDidMount() {
require.ensure(
["butterchurn", "butterchurn-presets/lib/butterchurnPresetsMinimal.min"],
[
"butterchurn",
"butterchurn-presets/lib/butterchurnPresetsMinimal.min",
"butterchurn-presets/lib/butterchurnPresetPackMeta.min"
],
require => {
const analyserNode = this.props.analyser;
const butterchurn = require("butterchurn");
const butterchurnPresets = require("butterchurn-presets/lib/butterchurnPresetsMinimal.min");
this.presets = butterchurnPresets.getPresets();
this.presetKeys = Object.keys(this.presets);
const presetIdx = Math.floor(Math.random() * this.presetKeys.length);
const butterchurnMinimalPresets = require("butterchurn-presets/lib/butterchurnPresetsMinimal.min");
const presetPackMeta = require("butterchurn-presets/lib/butterchurnPresetPackMeta.min");
this.presets = butterchurnMinimalPresets.getPresets();
this.minmalPresetKeys = Object.keys(this.presets);
this.presetKeys = presetPackMeta.getMainPresetMeta().presets;
const presetKey = this.minmalPresetKeys[
Math.floor(Math.random() * this.minmalPresetKeys.length)
];
this.visualizer = butterchurn.createVisualizer(
analyserNode.context,
@ -43,7 +51,7 @@ class MilkdropWindow extends React.Component {
this._canvasNode.width = this.props.width;
this._canvasNode.height = this.props.height;
this.visualizer.connectAudio(analyserNode);
this.visualizer.loadPreset(this.presets[this.presetKeys[presetIdx]], 0);
this.visualizer.loadPreset(this.presets[presetKey], 0);
// Kick off the animation loop
const loop = () => {
if (this.props.status === "PLAYING") {
@ -53,7 +61,7 @@ class MilkdropWindow extends React.Component {
};
loop();
this.presetHistory = [presetIdx];
this.presetHistory = [this.presetKeys.indexOf(presetKey)];
this.presetRandomize = true;
this.presetCycle = true;
this._restartCycling();
@ -154,7 +162,23 @@ class MilkdropWindow extends React.Component {
break;
}
}
_nextPreset(blendTime) {
async _loadMainPresetPack() {
return require.ensure(
["butterchurn-presets"],
require => {
const butterchurnPresets = require("butterchurn-presets");
this.presets = Object.assign(
this.presets,
butterchurnPresets.getPresets()
);
},
e => {
console.error("Error loading Butterchurn Presets", e);
},
"butterchurn-presets"
);
}
async _nextPreset(blendTime) {
// The visualizer may not have initialized yet.
if (this.visualizer != null) {
let presetIdx;
@ -164,7 +188,12 @@ class MilkdropWindow extends React.Component {
const prevPresetIdx = this.presetHistory[this.presetHistory.length - 1];
presetIdx = (prevPresetIdx + 1) % this.presetKeys.length;
}
const preset = this.presets[this.presetKeys[presetIdx]];
let preset = this.presets[this.presetKeys[presetIdx]];
if (!preset) {
await this._loadMainPresetPack();
preset = this.presets[this.presetKeys[presetIdx]];
}
this.presetHistory.push(presetIdx);
this.visualizer.loadPreset(preset, blendTime);
this._restartCycling();
@ -183,8 +212,12 @@ class MilkdropWindow extends React.Component {
this.setState({ currentPreset: prevPreset });
}
}
selectPreset(presetIdx) {
const preset = this.presets[this.presetKeys[presetIdx]];
async selectPreset(presetIdx) {
let preset = this.presets[this.presetKeys[presetIdx]];
if (!preset) {
await this._loadMainPresetPack();
preset = this.presets[this.presetKeys[presetIdx]];
}
this.presetHistory.push(presetIdx);
this.visualizer.loadPreset(preset, 0);
this._restartCycling();
@ -222,7 +255,7 @@ class MilkdropWindow extends React.Component {
<PresetOverlay
width={width}
height={height}
presets={this.presets}
presetKeys={this.presetKeys}
currentPreset={this.state.currentPreset}
onFocusedKeyDown={listener => this.props.onFocusedKeyDown(listener)}
selectPreset={idx => this.selectPreset(idx)}

View file

@ -55,7 +55,7 @@
"babel-preset-react": "^6.24.1",
"babel-runtime": "^6.26.0",
"butterchurn": "^2.4.3",
"butterchurn-presets": "^2.4.4",
"butterchurn-presets": "^2.4.5",
"canvas-mock": "0.0.0",
"cardinal-spline-js": "^2.3.6",
"classnames": "^2.2.5",

View file

@ -1269,9 +1269,9 @@ builtin-status-codes@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
butterchurn-presets@^2.4.4:
version "2.4.4"
resolved "https://registry.yarnpkg.com/butterchurn-presets/-/butterchurn-presets-2.4.4.tgz#23764b47e9d30c29caf95d974a92002f6f29c057"
butterchurn-presets@^2.4.5:
version "2.4.5"
resolved "https://registry.yarnpkg.com/butterchurn-presets/-/butterchurn-presets-2.4.5.tgz#5e05f2c57e941ff2d24f655b0ea842ca1ff4787a"
dependencies:
babel-runtime "^6.26.0"
ecma-proposal-math-extensions "0.0.2"