104 lines
2.7 KiB
Standard ML
104 lines
2.7 KiB
Standard ML
structure CommonUpdate =
|
|
struct
|
|
open AppType
|
|
|
|
open DrawMessage
|
|
open FileMessage
|
|
open InputMessage
|
|
open UpdateMessage
|
|
|
|
fun resizeWindow (model, width, height, dots) =
|
|
let
|
|
val
|
|
{ canvasWidth
|
|
, canvasHeight
|
|
, showGraph
|
|
, arrowX
|
|
, arrowY
|
|
, xClickPoints
|
|
, yClickPoints
|
|
, layerTree
|
|
, ...
|
|
} = model
|
|
|
|
val maxSide = Int.max (canvasWidth, canvasHeight)
|
|
val squares = LayerTree.flatten (maxSide, layerTree)
|
|
|
|
val squares = CollisionTree.toTriangles
|
|
( width
|
|
, height
|
|
, squares
|
|
, maxSide
|
|
, canvasWidth
|
|
, canvasHeight
|
|
, xClickPoints
|
|
, yClickPoints
|
|
)
|
|
|
|
val graphLines =
|
|
if showGraph then GraphLines.generate model else Vector.fromList []
|
|
|
|
val drawMsg =
|
|
RESIZE_SQUARES_DOTS_AND_GRAPH
|
|
{squares = squares, graphLines = graphLines, dots = dots}
|
|
val drawMsg = [DRAW drawMsg]
|
|
in
|
|
(model, drawMsg)
|
|
end
|
|
|
|
fun getSaveSquaresMsg (model: app_type) =
|
|
let
|
|
val {layerTree, canvasWidth, canvasHeight, openFilePath, ...} = model
|
|
val saveString =
|
|
CollisionTree.toSaveString (layerTree, canvasWidth, canvasHeight)
|
|
val msg = SAVE_SQUARES {output = saveString, filepath = openFilePath}
|
|
in
|
|
(model, [FILE msg])
|
|
end
|
|
|
|
fun getLoadSquaresMsg (model: app_type) =
|
|
let val msg = LOAD_SQUARES {filepath = #openFilePath model}
|
|
in (model, [FILE msg])
|
|
end
|
|
|
|
fun getExportSquaresMsg (model: app_type) =
|
|
let
|
|
val {layerTree, canvasWidth, canvasHeight, openFilePath, ...} = model
|
|
|
|
val maxSide = Int.max (canvasWidth, canvasHeight)
|
|
val squares = LayerTree.flatten (maxSide, layerTree)
|
|
|
|
val exportString =
|
|
CollisionTree.toExportString (squares, canvasWidth, canvasHeight, openFilePath)
|
|
val msg = EXPORT_SQUARES {output = exportString, filepath = openFilePath}
|
|
in
|
|
(model, [FILE msg])
|
|
end
|
|
|
|
fun getCollisionMsg (model: app_type) =
|
|
let
|
|
val {layerTree, canvasWidth, canvasHeight, modalNum, openFilePath, ...} =
|
|
model
|
|
|
|
val maxSide = Int.max (canvasWidth, canvasHeight)
|
|
val squares = LayerTree.flatten (maxSide, layerTree)
|
|
|
|
val exportString =
|
|
CollisionTree.toCollisionString
|
|
(squares, canvasWidth, canvasHeight, modalNum)
|
|
|
|
val exportFilePath = FileString.getCollisionFilename openFilePath
|
|
val msg =
|
|
EXPORT_COLLISIONS {output = exportString, filepath = exportFilePath}
|
|
|
|
val model = AppWith.modalNum (model, 0)
|
|
in
|
|
(model, [FILE msg])
|
|
end
|
|
|
|
(* unimplemented *)
|
|
fun useSquaresInNormalMode (model, squares) = (model, [])
|
|
|
|
fun squaresLoadError model = (model, [])
|
|
end
|