Randomize presets. Allow users to toggle this behavior

This commit is contained in:
Jordan Eldredge 2019-03-09 15:30:10 -08:00
parent 8559dd7257
commit 1407a0afb7
7 changed files with 37 additions and 13 deletions

View file

@ -103,7 +103,8 @@ export {
togglePresetOverlay,
appendPresetFileList,
handlePresetDrop,
loadPresets
loadPresets,
toggleRandomizePresets
} from "./milkdrop";
import * as Selectors from "../selectors";

View file

@ -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 };
}

View file

@ -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";

View file

@ -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)),

View file

@ -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);

View file

@ -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;
}

View file

@ -475,6 +475,9 @@ export type Action =
type: "GOT_BUTTERCHURN";
butterchurn: any;
}
| {
type: "TOGGLE_RANDOMIZE_PRESETS";
}
| {
type: "RESOLVE_PRESET_AT_INDEX";
index: number;