From 7e96203f92d19295d2ee0f4cb9695fc80da0f136 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Sun, 13 Jul 2025 15:33:32 +0100 Subject: [PATCH] done adding export-collision functionality, including collision message, in functional core. Next: add imperative shell scaffolding --- dotscape | Bin 1051152 -> 1051152 bytes fcore/common-update.sml | 12 ++++++++ fcore/normal-mode.sml | 1 + fcore/quad-tree.sml | 1 - green.sml | 55 ------------------------------------ message-types/file-msg.sml | 1 + message-types/input-msg.sml | 1 + 7 files changed, 15 insertions(+), 56 deletions(-) delete mode 100644 green.sml diff --git a/dotscape b/dotscape index 3b4b98d63ad962800e14957714f1069b3e6922a8..6755356cff2837430a3712f59f52ba8cc18a9d43 100755 GIT binary patch delta 30640 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 delta 31357 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 CommonUpdate.getSaveSquaresMsg model | KEY_CTRL_L => CommonUpdate.getLoadSquaresMsg model | KEY_CTRL_E => CommonUpdate.getExportSquaresMsg model + | KEY_CTRL_C => CommonUpdate.getCollisionMsg model | USE_SQUARES {squares, canvasWidth, canvasHeight} => useSquares (model, squares, canvasWidth, canvasHeight) | SQUARES_LOAD_ERROR => CommonUpdate.squaresLoadError model diff --git a/fcore/quad-tree.sml b/fcore/quad-tree.sml index 85f5dca..7cfefc4 100644 --- a/fcore/quad-tree.sml +++ b/fcore/quad-tree.sml @@ -666,7 +666,6 @@ struct val qtree = buildTree (0, 0, size, squares) val bintree = merge (qtree, squares) - val scale = if scale = 0 then 1 else scale val f = toCollisionStringFolder scale val collisions = BinTree.foldr (f, bintree, []) val collisions = String.concatWith ",\n" collisions diff --git a/green.sml b/green.sml deleted file mode 100644 index 32b611d..0000000 --- a/green.sml +++ /dev/null @@ -1,55 +0,0 @@ -structure AAA = -struct - fun xToNdc (xOffset, xpos, scale, halfWidth) = - ((xpos * scale + xOffset) - halfWidth) / halfWidth - - fun endXToNdc (xOffset, startX, endX, scale, halfWidth) = - (((endX - startX) * scale + xOffset) - halfWidth) / halfWidth - - fun yToNdc (yOffset, ypos, scale, halfHeight) = - ~(((ypos * scale + yOffset) - halfHeight) / halfHeight) - - fun endYToNdc (yOffset, startY, endY, scale, halfHeight) = - ~((((endY - startY) * scale + yOffset) - halfHeight) / halfHeight) - - fun lerp (xOffset, yOffset, scale, windowWidth, windowHeight) = - let - val windowWidth = Real32.fromInt windowWidth - val halfWidth = windowWidth / 2.0 - val windowHeight = Real32.fromInt windowHeight - val halfHeight = windowHeight / 2.0 - in - #[ -xToNdc (xOffset, 1.000000000000000, scale, halfWidth), -yToNdc (yOffset, 2.000000000000000, scale, halfHeight), -0.000000000000000, -0.000000000000000, -0.000000000000000, -endXToNdc (xOffset, xToNdc (xOffset, 1.000000000000000, scale, halfWidth), 1.000000000000000, scale, halfWidth), -yToNdc (yOffset, 2.000000000000000, scale, halfHeight), -0.000000000000000, -0.000000000000000, -0.000000000000000, -xToNdc (xOffset, 1.000000000000000, scale, halfWidth), -yToNdc (yOffset, 1.000000000000000, scale, halfHeight), -0.000000000000000, -0.000000000000000, -0.000000000000000, -xToNdc (xOffset, 1.000000000000000, scale, halfWidth), -yToNdc (yOffset, 1.000000000000000, scale, halfHeight), -0.000000000000000, -0.000000000000000, -0.000000000000000, -endXToNdc (xOffset, xToNdc (xOffset, 1.000000000000000, scale, halfWidth), 1.000000000000000, scale, halfWidth), -yToNdc (yOffset, 2.000000000000000, scale, halfHeight), -0.000000000000000, -0.000000000000000, -0.000000000000000, -endXToNdc (xOffset, xToNdc (xOffset, 1.000000000000000, scale, halfWidth), 1.000000000000000, scale, halfWidth), -yToNdc (yOffset, 1.000000000000000, scale, halfHeight), -0.000000000000000, -0.000000000000000, -0.000000000000000 - ] - end -end diff --git a/message-types/file-msg.sml b/message-types/file-msg.sml index aa359ef..683a06d 100644 --- a/message-types/file-msg.sml +++ b/message-types/file-msg.sml @@ -4,6 +4,7 @@ struct SAVE_SQUARES of string | LOAD_SQUARES | EXPORT_SQUARES of string + | EXPORT_COLLISIONS of string | LOAD_FILES of string | SELECT_PATH of string end diff --git a/message-types/input-msg.sml b/message-types/input-msg.sml index ac589dc..c234c25 100644 --- a/message-types/input-msg.sml +++ b/message-types/input-msg.sml @@ -19,6 +19,7 @@ struct | KEY_CTRL_L | KEY_CTRL_E | KEY_CTRL_O + | KEY_CTRL_C | NUM of int | ARROW_UP | ARROW_LEFT