module Battlemap.Html exposing (view) import Array import Html import Html.Events import Battlemap import Battlemap.Tile import Battlemap.Direction import Event type alias GridBuilder = { row : (List (Html.Html Event.Type)), columns : (List (Html.Html Event.Type)), row_size : Int, bmap : Battlemap.Type } nav_level_to_text : Battlemap.Tile.Type -> String nav_level_to_text t = case t.nav_level of Battlemap.Direction.Right -> "R" Battlemap.Direction.Left -> "L" Battlemap.Direction.Up -> "U" Battlemap.Direction.Down -> "D" Battlemap.Direction.None -> (toString t.floor_level) view_battlemap_cell : Battlemap.Tile.Type -> (Html.Html Event.Type) view_battlemap_cell t = case t.char_level of Nothing -> (Html.td [ (Html.Events.onClick (Event.TileSelected t.location)) ] [ (Html.text (case t.mod_level of Nothing -> "[_]" (Just Battlemap.Tile.CanBeReached) -> "[M]" (Just Battlemap.Tile.CanBeAttacked) -> "[A]" ) ), (Html.text (nav_level_to_text t)) ] ) (Just char_id) -> (Html.td [ (Html.Events.onClick (Event.CharacterSelected char_id)) ] [ (Html.text ("[" ++ char_id ++ "]")), (Html.text (nav_level_to_text t)) ] ) foldr_to_html : Battlemap.Tile.Type -> GridBuilder -> GridBuilder foldr_to_html t gb = if (gb.row_size == gb.bmap.width) then {gb | row = [(view_battlemap_cell t)], row_size = 1, columns = ( (Html.tr [] gb.row) :: gb.columns ) } else {gb | row = ((view_battlemap_cell t) :: gb.row), row_size = (gb.row_size + 1) } grid_builder_to_html : GridBuilder -> (List (Html.Html Event.Type)) grid_builder_to_html gb = if (gb.row_size == 0) then gb.columns else ((Html.tr [] gb.row) :: gb.columns) view : Battlemap.Type -> (Html.Html Event.Type) view battlemap = (Html.table [] (grid_builder_to_html (Array.foldr (foldr_to_html) { row = [], columns = [], row_size = 0, bmap = battlemap } battlemap.content ) ) )