Doodle3D-Core/src/reducer/d2/tools/shapes/skewRectReducer.js

61 lines
1.6 KiB
JavaScript

import update from 'react-addons-update';
import * as actions from '../../../../actions/index.js';
import { removeObject, addObjectActive2D, setActive2D } from '../../../objectReducers.js';
import { Vector, Matrix } from '@doodle3d/cal';
import createDebug from 'debug';
const debug = createDebug('d3d:reducer:skewRect');
export default function skewRectReducer(state, action) {
if (action.log !== false) debug(action.type);
const mouse = action.mouse;
const activeShape = state.d2.activeShape;
switch (action.type) {
case actions.D2_MOUSE_DOWN:
return addObjectActive2D(state, {
type: 'SKEW_RECT',
transform: new Matrix({ x: mouse.position.x, y: mouse.position.y }),
points: [
new Vector(100, 0),
new Vector(-100, 0),
new Vector(-100, 0),
new Vector(100, 0)
]
});
case actions.D2_MOUSE_MOVE:
if (action.mouse.down && activeShape) {
const delta = mouse.position.subtract(mouse.start);
state = update(state, {
objectsById: {
[activeShape]: {
points: {
[2]: { $set: new Vector(delta.x - 100, delta.y) },
[3]: { $set: new Vector(delta.x + 100, delta.y) }
}
}
}
});
}
return state;
case actions.D2_MOUSE_UP:
if (activeShape) {
state = setActive2D(state, null);
}
return state;
case actions.D2_MOUSE_CLICK:
if (activeShape) {
state = removeObject(state, activeShape);
state = setActive2D(state, null);
}
return state;
default:
return state;
}
}