mirror of
https://github.com/captbaritone/webamp.git
synced 2026-07-21 00:59:29 +00:00
Randomize presets. Allow users to toggle this behavior
This commit is contained in:
parent
8559dd7257
commit
1407a0afb7
7 changed files with 37 additions and 13 deletions
|
|
@ -103,7 +103,8 @@ export {
|
|||
togglePresetOverlay,
|
||||
appendPresetFileList,
|
||||
handlePresetDrop,
|
||||
loadPresets
|
||||
loadPresets,
|
||||
toggleRandomizePresets
|
||||
} from "./milkdrop";
|
||||
|
||||
import * as Selectors from "../selectors";
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@ import {
|
|||
SELECT_PRESET_AT_INDEX,
|
||||
RESOLVE_PRESET_AT_INDEX,
|
||||
TOGGLE_PRESET_OVERLAY,
|
||||
PRESET_REQUESTED
|
||||
PRESET_REQUESTED,
|
||||
TOGGLE_RANDOMIZE_PRESETS
|
||||
} from "../actionTypes";
|
||||
import * as Selectors from "../selectors";
|
||||
import {
|
||||
|
|
@ -60,11 +61,16 @@ export function initializePresets(
|
|||
|
||||
export function loadPresets(presets: StatePreset[]): Dispatchable {
|
||||
return (dispatch, getState) => {
|
||||
const presetLength = getState().milkdrop.presets.length;
|
||||
const state = getState();
|
||||
const presetsLength = state.milkdrop.presets.length;
|
||||
dispatch({ type: GOT_BUTTERCHURN_PRESETS, presets });
|
||||
dispatch(
|
||||
requestPresetAtIndex(presetLength, TransitionType.IMMEDIATE, true)
|
||||
);
|
||||
if (state.milkdrop.randomize) {
|
||||
dispatch(selectRandomPreset());
|
||||
} else {
|
||||
dispatch(
|
||||
requestPresetAtIndex(presetsLength, TransitionType.IMMEDIATE, true)
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -101,7 +107,6 @@ export function appendPresetFileList(fileList: FileList): Dispatchable {
|
|||
})
|
||||
.filter(Boolean);
|
||||
dispatch(loadPresets(presets));
|
||||
// TODO: Select the first of these presets
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -109,7 +114,11 @@ export function selectNextPreset(
|
|||
transitionType: TransitionType = TransitionType.DEFAULT
|
||||
): Dispatchable {
|
||||
return (dispatch, getState) => {
|
||||
const currentPresetIndex = Selectors.getCurrentPresetIndex(getState());
|
||||
const state = getState();
|
||||
if (state.milkdrop.randomize) {
|
||||
return dispatch(selectRandomPreset(transitionType));
|
||||
}
|
||||
const currentPresetIndex = Selectors.getCurrentPresetIndex(state);
|
||||
if (currentPresetIndex == null) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -183,3 +192,7 @@ export function handlePresetDrop(e: React.DragEvent): Dispatchable {
|
|||
export function togglePresetOverlay(): Dispatchable {
|
||||
return { type: TOGGLE_PRESET_OVERLAY };
|
||||
}
|
||||
|
||||
export function toggleRandomizePresets(): Dispatchable {
|
||||
return { type: TOGGLE_RANDOMIZE_PRESETS };
|
||||
}
|
||||
|
|
|
|||
|
|
@ -83,3 +83,4 @@ export const RESOLVE_PRESET_AT_INDEX = "RESOLVE_PRESET_AT_INDEX";
|
|||
export const SELECT_PRESET_AT_INDEX = "SELECT_PRESET_AT_INDEX";
|
||||
export const TOGGLE_PRESET_OVERLAY = "TOGGLE_PRESET_OVERLAY";
|
||||
export const PRESET_REQUESTED = "PRESET_REQUESTED";
|
||||
export const TOGGLE_RANDOMIZE_PRESETS = "TOGGLE_RANDOMIZE_PRESETS";
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ interface DispatchProps {
|
|||
toggleDesktop(): void;
|
||||
togglePresetOverlay(): void;
|
||||
selectRandomPreset(): void;
|
||||
toggleRandomize(): void;
|
||||
handlePresetDrop(e: React.DragEvent): void;
|
||||
selectNextPreset(transitionType?: TransitionType): void;
|
||||
selectPreviousPreset(transitionType?: TransitionType): void;
|
||||
|
|
@ -47,7 +48,6 @@ function Milkdrop(props: Props) {
|
|||
// Handle keyboard events
|
||||
useEffect(() => {
|
||||
return props.onFocusedKeyDown(e => {
|
||||
console.log(e.keyCode);
|
||||
switch (e.keyCode) {
|
||||
case 32: // spacebar
|
||||
props.selectNextPreset();
|
||||
|
|
@ -59,7 +59,7 @@ function Milkdrop(props: Props) {
|
|||
props.selectNextPreset(TransitionType.IMMEDIATE);
|
||||
break;
|
||||
case 82: // R
|
||||
// this.props.presets.toggleRandomize();
|
||||
props.toggleRandomize();
|
||||
break;
|
||||
case 76: // L
|
||||
props.togglePresetOverlay();
|
||||
|
|
@ -141,6 +141,7 @@ const mapDispatchToProps = (dispatch: Dispatch): DispatchProps => ({
|
|||
toggleDesktop: () => dispatch(Actions.toggleMilkdropDesktop()),
|
||||
togglePresetOverlay: () => dispatch(Actions.togglePresetOverlay()),
|
||||
selectRandomPreset: () => dispatch(Actions.selectRandomPreset()),
|
||||
toggleRandomize: () => dispatch(Actions.toggleRandomizePresets()),
|
||||
handlePresetDrop: e => dispatch(Actions.handlePresetDrop(e)),
|
||||
selectNextPreset: (transitionType?: TransitionType) =>
|
||||
dispatch(Actions.selectNextPreset(transitionType)),
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ test("handles history correctly", () => {
|
|||
{ type: "RESOLVED", name: "First", preset: {} },
|
||||
{ type: "RESOLVED", name: "Second", preset: {} }
|
||||
];
|
||||
store.dispatch(Actions.toggleRandomizePresets());
|
||||
// Check initial state
|
||||
expect(store.getState().milkdrop.presetHistory).toEqual([]);
|
||||
expect(Selectors.getCurrentPreset(store.getState())).toBe(null);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,8 @@ import {
|
|||
RESOLVE_PRESET_AT_INDEX,
|
||||
SELECT_PRESET_AT_INDEX,
|
||||
TOGGLE_PRESET_OVERLAY,
|
||||
PRESET_REQUESTED
|
||||
PRESET_REQUESTED,
|
||||
TOGGLE_RANDOMIZE_PRESETS
|
||||
} from "../actionTypes";
|
||||
import * as Utils from "../utils";
|
||||
import { TransitionType } from "../types";
|
||||
|
|
@ -19,6 +20,7 @@ export interface MilkdropState {
|
|||
currentPresetIndex: number | null;
|
||||
butterchurn: any;
|
||||
transitionType: TransitionType;
|
||||
randomize: boolean;
|
||||
}
|
||||
|
||||
const defaultMilkdropState = {
|
||||
|
|
@ -28,7 +30,8 @@ const defaultMilkdropState = {
|
|||
presets: [],
|
||||
currentPresetIndex: null,
|
||||
butterchurn: null,
|
||||
transitionType: TransitionType.DEFAULT
|
||||
transitionType: TransitionType.DEFAULT,
|
||||
randomize: true
|
||||
};
|
||||
|
||||
export const milkdrop = (
|
||||
|
|
@ -52,7 +55,6 @@ export const milkdrop = (
|
|||
presetHistory: [...state.presetHistory, action.index]
|
||||
};
|
||||
}
|
||||
console.log(state.presetHistory);
|
||||
return {
|
||||
...state,
|
||||
presetHistory: state.presetHistory.slice(0, -1)
|
||||
|
|
@ -75,6 +77,8 @@ export const milkdrop = (
|
|||
};
|
||||
case TOGGLE_PRESET_OVERLAY:
|
||||
return { ...state, overlay: !state.overlay };
|
||||
case TOGGLE_RANDOMIZE_PRESETS:
|
||||
return { ...state, randomize: !state.randomize };
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -475,6 +475,9 @@ export type Action =
|
|||
type: "GOT_BUTTERCHURN";
|
||||
butterchurn: any;
|
||||
}
|
||||
| {
|
||||
type: "TOGGLE_RANDOMIZE_PRESETS";
|
||||
}
|
||||
| {
|
||||
type: "RESOLVE_PRESET_AT_INDEX";
|
||||
index: number;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue