module Display where import Vec2 (..) import Player (..) import Game (Game) import Enemy (..) import Board (boardSize) display : Game -> Element display {time, player, enemyState, bestTime} = let enemyForms = map (enemyForm time) enemyState.enemies forms = boardForms ++ playerForms player ++ enemyForms ++ bestTimeForms bestTime ++ timeForms time in collage (truncate boardSize.x) (truncate boardSize.y) forms boardForms : [Form] boardForms = [filled boardColor (rect boardSize.x boardSize.y)] boardColor : Color boardColor = rgb 34 122 34 playerForms : Player -> [Form] playerForms player = [circleForm player.pos playerSize playerColor] playerColor : Color playerColor = rgb 224 224 224 enemyForm : Float -> Enemy -> Form enemyForm time enemy = let pos = enemyMove enemy time in circleForm pos enemySize enemyColor enemyColor : Color enemyColor = rgb 170 0 0 circleForm : Vec2 -> Float -> Color -> Form circleForm pos size color = let outline = circle size |> filled black inside = circle (size - 2) |> filled color in group [outline, inside] |> move (pos.x, pos.y) bestTimeForms : Float -> [Form] bestTimeForms bestTime = if(bestTime > 0) then let seconds = truncate (bestTime / 1000) text = "Record: " ++ (show seconds) pos = { x = boardSize.x / 2 - 65 , y = -boardSize.y / 2 + 30 } in [textForm text pos rightAligned] else [] timeForms : Float -> [Form] timeForms time = let seconds = truncate (time / 1000) text = (show seconds) pos = { x = 0.0, y = boardSize.y / 2 - 30 } in [textForm text pos centered] textForm : String -> Vec2 -> (Text -> Element) -> Form textForm content pos alignment = let textElement = toText content |> typeface ["calibri", "arial"] |> Text.color textColor |> bold |> alignment in textElement |> toForm |> move (pos.x, pos.y) textColor : Color textColor = rgb 224 224 224