Spaces:
Running
Running
File size: 3,014 Bytes
f2bee8a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
import bindAll from 'lodash.bindall';
import PropTypes from 'prop-types';
import React from 'react';
import VM from 'scratch-vm';
import {connect} from 'react-redux';
import ControlsComponent from '../components/controls/controls.jsx';
class Controls extends React.Component {
constructor (props) {
super(props);
bindAll(this, [
'handleGreenFlagClick',
'handlePauseButtonClick',
'handleStopAllClick'
]);
}
handleGreenFlagClick (e) {
e.preventDefault();
// tw: implement alt+click and right click to toggle FPS
if (e.shiftKey || e.altKey || e.type === 'contextmenu') {
if (e.shiftKey) {
this.props.vm.setTurboMode(!this.props.turbo);
}
if (e.altKey || e.type === 'contextmenu') {
if (this.props.framerate === 30) {
this.props.vm.setFramerate(60);
} else {
this.props.vm.setFramerate(30);
}
}
} else {
if (!this.props.isStarted) {
this.props.vm.start();
}
this.props.vm.greenFlag();
}
}
handlePauseButtonClick (e) {
e.preventDefault();
if (!this.props.paused) {
this.props.vm.pause();
return;
}
this.props.vm.play();
}
handleStopAllClick (e) {
e.preventDefault();
this.props.vm.stopAll();
}
render () {
const {
vm, // eslint-disable-line no-unused-vars
isStarted, // eslint-disable-line no-unused-vars
projectRunning,
paused,
turbo,
...props
} = this.props;
return (
<ControlsComponent
{...props}
active={projectRunning && isStarted}
paused={paused}
turbo={turbo}
onGreenFlagClick={this.handleGreenFlagClick}
onPauseButtonClick={this.handlePauseButtonClick}
onStopAllClick={this.handleStopAllClick}
/>
);
}
}
Controls.propTypes = {
isStarted: PropTypes.bool.isRequired,
projectRunning: PropTypes.bool.isRequired,
turbo: PropTypes.bool.isRequired,
framerate: PropTypes.number.isRequired,
interpolation: PropTypes.bool.isRequired,
isSmall: PropTypes.bool,
paused: PropTypes.bool,
vm: PropTypes.instanceOf(VM)
};
const mapStateToProps = state => ({
isStarted: state.scratchGui.vmStatus.started,
projectRunning: state.scratchGui.vmStatus.running,
framerate: state.scratchGui.tw.framerate,
interpolation: state.scratchGui.tw.interpolation,
turbo: state.scratchGui.vmStatus.turbo,
paused: state.scratchGui.vmStatus.paused
});
// no-op function to prevent dispatch prop being passed to component
const mapDispatchToProps = () => ({});
export default connect(mapStateToProps, mapDispatchToProps)(Controls);
|