module View exposing (..)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onClick)
import Types exposing (..)
import Game exposing (findScene)
--| Main view function
view : Model -> Html Msg
view model =
div [ class "game-container" ]
[ viewScene model
, viewInventory model.inventory
]
--| View the current scene
viewScene : Model -> Html Msg
viewScene model =
case findScene model.currentScene model.scenes of
Just scene ->
div [ class "scene" ]
[ h1 [] [ text scene.title ]
, p [] [ text scene.description ]
, viewItems scene.items
, viewChoices scene.choices model.inventory
]
Nothing ->
div [] [ text "Scene not found!" ]
--| View available items in the current scene
viewItems : List Item -> Html Msg
viewItems items =
if List.isEmpty items then
div [] []
else
div [ class "items" ]
[ h2 [] [ text "Items in this area:" ]
, ul []
(List.map
(\item ->
li []
[ button
[ onClick (PickupItem item)
, class "item-button"
]
[ text ("Pick up " ++ item.name) ]
]
)
items
)
]
--| View available choices/actions
viewChoices : List Choice -> List Item -> Html Msg
viewChoices choices inventory =
div [ class "choices" ]
[ h2 [] [ text "What will you do?" ]
, ul []
(List.map
(\choice ->
li []
[ viewChoice choice inventory ]
)
choices
)
]
--| View a single choice/action
viewChoice : Choice -> List Item -> Html Msg
viewChoice choice inventory =
case choice.requiredItem of
Just requiredItemId ->
if Game.hasItem requiredItemId inventory then
button
[ onClick (ChooseChoice choice)
, class "choice-button"
]
[ text choice.text ]
else
button
[ class "choice-button disabled"
, disabled True
]
[ text (choice.text ++ " (requires an item)") ]
Nothing ->
button
[ onClick (ChooseChoice choice)
, class "choice-button"
]
[ text choice.text ]
--| View the player's inventory
viewInventory : List Item -> Html Msg
viewInventory items =
div [ class "inventory" ]
[ h2 [] [ text "Inventory" ]
, if List.isEmpty items then
p [] [ text "Your inventory is empty" ]
else
ul []
(List.map
(\item ->
li []
[ text (item.name ++ " - " ++ item.description) ]
)
items
)
]