aboutsummaryrefslogtreecommitdiff
blob: d7cfc637cf5be8c3893203035c76cfecc89a6567 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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
         )
      )
   )