Press n or j to go to the next uncovered block, b, p or k for the previous block.
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 | import type { SlopeIncline } from "store/features/editor/editorState"; import { areRelativelyEqual } from "./math"; export const calculateSlope = ( startX: number, startY: number, endX: number, endY: number, slopeDirectionHorizontal: "left" | "right", slopeDirectionVertical: "left" | "right", wallMode: boolean ) => { let newEndX = endX; let newEndY = endY; let slopeIncline: SlopeIncline = "medium"; const diffX = newEndX - startX; const diffY = newEndY - startY; const signX = Math.sign(diffX); let signY = Math.sign(diffY); if (wallMode) { if (Math.abs(diffY) > Math.abs(diffX)) { // Vertical newEndX = startX; } else { // Horizontal newEndY = startY; } } else if (areRelativelyEqual(Math.abs(diffX), Math.abs(diffY), 0.4)) { // drawing 45 degree line const length = Math.max(Math.abs(diffX), Math.abs(diffY)); newEndX = startX + Math.sign(diffX) * length; newEndY = startY + Math.sign(diffY) * length; slopeIncline = "medium"; } else { if (Math.abs(diffY) > Math.abs(diffX)) { // Steep slope - Create 45 deg for now const length = Math.max(Math.abs(diffX), Math.abs(diffY)); newEndX = startX + (Math.sign(diffX) || 1) * length; newEndY = startY + Math.sign(diffY) * length; slopeIncline = "medium"; } else { // Shallow slope slopeIncline = "shallow"; const length = Math.max(Math.abs(diffX), Math.abs(diffY)); Iif (startY === endY) { if (slopeDirectionHorizontal === "left") { signY = 1; } else { signY = -1; } } newEndX = startX + signX * length; newEndY = startY + signY * length * 0.5; } } return { endX: newEndX, endY: newEndY, slopeIncline, }; }; |