Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@alexspurling
Created August 21, 2016 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alexspurling/a1daa9055307ba5be8f17210ef88bca7 to your computer and use it in GitHub Desktop.
Save alexspurling/a1daa9055307ba5be8f17210ef88bca7 to your computer and use it in GitHub Desktop.
Possible Elm model update syntax
update : Msg -> Model -> Model
update msg model =
case msg of
CanvasResized canvasSize ->
model
|> :canvas
|> updateCanvasSize canvasSize
|> updateVisibleTiles
updateCanvasSize : CanvasSize -> Model -> Model
updateCanvasSize canvasSize model =
{ model.canvasView | size = canvasSize, viewUpdated = True }
updateVisibleTiles : Model -> Model
updateVisibleTiles model =
{model | visibleTiles = getVisibleTiles model.canvasView }
getVisibleTiles : CanvasView -> Set Tile
getVisibleTiles canvasView =
let
tileLeft = floor (toFloat (canvasView.curPos.x) / toFloat(tileSize))
tileTop = floor (toFloat (canvasView.curPos.y) / toFloat(tileSize))
numTilesI = floor (canvasView.scale * (toFloat canvasView.size.width) / tileSize + 1)
numTilesJ = floor (canvasView.scale * (toFloat canvasView.size.height) / tileSize + 1)
in
getTileRange tileLeft (tileLeft+numTilesI) tileTop (tileTop+numTilesJ)
|> Set.fromList
update : Msg -> Model -> Model
update msg model =
case msg of
CanvasResized canvasSize ->
model
|> :canvasView (\model -> (model.canvasView |> :size canvasSize) )
|> :viewUpdated (\model -> True)
|> :visibleTiles (\model -> getVisibleTiles model.canvasSize)
getVisibleTiles : CanvasView -> Set Tile
getVisibleTiles canvasView =
let
tileLeft = floor (toFloat (canvasView.curPos.x) / toFloat(tileSize))
tileTop = floor (toFloat (canvasView.curPos.y) / toFloat(tileSize))
numTilesI = floor (canvasView.scale * (toFloat canvasView.size.width) / tileSize + 1)
numTilesJ = floor (canvasView.scale * (toFloat canvasView.size.height) / tileSize + 1)
in
getTileRange tileLeft (tileLeft+numTilesI) tileTop (tileTop+numTilesJ)
|> Set.fromList
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment