53 lines
1.5 KiB
TypeScript
53 lines
1.5 KiB
TypeScript
import { Actions } from "../../../constants";
|
|
import { AxisNumberProperty } from "../interfaces";
|
|
import { DrawnPointPayl } from "../../interfaces";
|
|
|
|
export interface StartNewPointProps {
|
|
gardenCoords: AxisNumberProperty | undefined;
|
|
dispatch: Function;
|
|
setMapState: Function;
|
|
type: "point" | "weed";
|
|
}
|
|
|
|
/** Create a new point. */
|
|
export const startNewPoint = (props: StartNewPointProps) => {
|
|
props.setMapState({ isDragging: true });
|
|
const center = props.gardenCoords;
|
|
if (center) {
|
|
// Set the center of a new point
|
|
props.dispatch({
|
|
type: props.type == "weed"
|
|
? Actions.SET_DRAWN_WEED_DATA
|
|
: Actions.SET_DRAWN_POINT_DATA,
|
|
payload: { cx: center.x, cy: center.y, r: 0 }
|
|
});
|
|
}
|
|
};
|
|
|
|
export interface ResizePointProps {
|
|
gardenCoords: AxisNumberProperty | undefined;
|
|
drawnPoint: DrawnPointPayl | undefined;
|
|
dispatch: Function;
|
|
isDragging: boolean | undefined;
|
|
type: "point" | "weed";
|
|
}
|
|
|
|
/** Resize a point. */
|
|
export const resizePoint = (props: ResizePointProps) => {
|
|
const edge = props.gardenCoords;
|
|
if (edge && props.drawnPoint && !!props.isDragging) {
|
|
const { cx, cy } = props.drawnPoint;
|
|
// Adjust the radius of the point being created
|
|
props.dispatch({
|
|
type: props.type == "weed"
|
|
? Actions.SET_DRAWN_WEED_DATA
|
|
: Actions.SET_DRAWN_POINT_DATA,
|
|
payload: {
|
|
cx, cy, // Center was set by click, radius is adjusted by drag
|
|
r: Math.round(Math.sqrt(
|
|
Math.pow(edge.x - cx, 2) + Math.pow(edge.y - cy, 2))),
|
|
}
|
|
});
|
|
}
|
|
};
|