module View.Controlled exposing (get_html)
-- Elm -------------------------------------------------------------------------
import Html
import Html.Attributes
import Html.Events
-- Shared ----------------------------------------------------------------------
import Shared.Util.Html
-- Local Module ----------------------------------------------------------------
import Struct.CharacterTurn
import Struct.Event
import Struct.Navigator
import View.Controlled.CharacterCard
import View.Controlled.ManualControls
--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
--------------------------------------------------------------------------------
action_to_class : (
Struct.CharacterTurn.Action ->
(Html.Attribute Struct.Event.Type)
)
action_to_class action =
(Html.Attributes.class
(
case action of
Struct.CharacterTurn.None -> "no-action"
Struct.CharacterTurn.Skipping -> "skipping"
Struct.CharacterTurn.Attacking -> "attacking"
Struct.CharacterTurn.SwitchingWeapons -> "switching-weapons"
Struct.CharacterTurn.UsingSkill -> "using-skill"
)
)
action_or_undo_button : (
Struct.CharacterTurn.Action ->
Struct.CharacterTurn.Action ->
Struct.Event.Type ->
(Html.Html Struct.Event.Type)
)
action_or_undo_button current_action relevant_action event =
(Html.button
(
if (current_action == Struct.CharacterTurn.None)
then
[
(Html.Attributes.class "action-button"),
(action_to_class relevant_action),
(Html.Attributes.class "action"),
(Html.Events.onClick event)
]
else if (current_action == relevant_action)
then
[
(Html.Attributes.class "action-button"),
(action_to_class relevant_action),
(Html.Events.onClick Struct.Event.UndoActionRequest),
(Html.Attributes.class "active")
]
else
[
(Html.Attributes.class "action-button"),
(action_to_class relevant_action),
(Html.Attributes.class "disabled")
]
)
[
]
)
inventory_button : Struct.CharacterTurn.Type -> (Html.Html Struct.Event.Type)
inventory_button char_turn =
(action_or_undo_button
(Struct.CharacterTurn.get_action char_turn)
Struct.CharacterTurn.SwitchingWeapons
Struct.Event.WeaponSwitchRequest
)
attack_button : Struct.CharacterTurn.Type -> (Html.Html Struct.Event.Type)
attack_button char_turn =
(action_or_undo_button
(Struct.CharacterTurn.get_action char_turn)
Struct.CharacterTurn.Attacking
Struct.Event.AttackRequest
)
skip_button : Struct.CharacterTurn.Type -> (Html.Html Struct.Event.Type)
skip_button char_turn =
(action_or_undo_button
(Struct.CharacterTurn.get_action char_turn)
Struct.CharacterTurn.Skipping
Struct.Event.SkipRequest
)
skill_button : Struct.CharacterTurn.Type -> (Html.Html Struct.Event.Type)
skill_button char_turn =
(action_or_undo_button
(Struct.CharacterTurn.get_action char_turn)
Struct.CharacterTurn.UsingSkill
Struct.Event.SkillRequest
)
abort_button : (Html.Html Struct.Event.Type)
abort_button =
(Html.button
[
(Html.Attributes.class "action-button"),
(Html.Events.onClick Struct.Event.AbortTurnRequest),
(Html.Attributes.class "abort-button")
]
[
]
)
path_button : Struct.CharacterTurn.Type -> (Html.Html Struct.Event.Type)
path_button char_turn =
(Html.button
(
if
(
(
(Struct.CharacterTurn.get_action char_turn)
== Struct.CharacterTurn.None
)
&&
(
case (Struct.CharacterTurn.maybe_get_navigator char_turn) of
Nothing -> False
(Just nav) -> ((Struct.Navigator.get_path nav) /= [])
)
)
then
if ((Struct.CharacterTurn.get_path char_turn) == [])
then
[
(Html.Attributes.class "action-button"),
(Html.Attributes.class "path-button"),
(Html.Events.onClick Struct.Event.MoveRequest)
]
else
[
(Html.Attributes.class "action-button"),
(Html.Attributes.class "path-button"),
(Html.Events.onClick Struct.Event.UndoActionRequest),
(Html.Attributes.class "active")
]
else
[
(Html.Attributes.class "action-button"),
(Html.Attributes.class "path-button"),
(Html.Attributes.class "disabled"),
(Html.Attributes.class
(
if ((Struct.CharacterTurn.get_path char_turn) == [])
then ""
else "active"
)
)
]
)
[
]
)
end_turn_button : Struct.CharacterTurn.Type -> (Html.Html Struct.Event.Type)
end_turn_button char_turn =
let
registered_path = (Struct.CharacterTurn.get_path char_turn)
action = (Struct.CharacterTurn.get_action char_turn)
temporary_path =
case (Struct.CharacterTurn.maybe_get_navigator char_turn) of
Nothing -> []
(Just nav) -> (Struct.Navigator.get_path nav)
in
(Html.button
[
(
let
is_aiming_at_something =
(Struct.CharacterTurn.is_aiming_at_something char_turn)
in
if
(
(temporary_path /= registered_path)
||
(
is_aiming_at_something
&& (action /= Struct.CharacterTurn.Attacking)
&& (action /= Struct.CharacterTurn.UsingSkill)
)
||
(
(not is_aiming_at_something)
&& (action == Struct.CharacterTurn.Attacking)
)
||
(
(registered_path == [])
&& (action == Struct.CharacterTurn.None)
)
)
then (Html.Attributes.class "disabled")
else (Html.Events.onClick Struct.Event.TurnEnded)
),
(Html.Attributes.class "action-button"),
(Html.Attributes.class "end-turn-button"),
(Html.Attributes.class
(
if (registered_path == [])
then "no-path-was-queued"
else "path-was-queued"
)
),
(action_to_class (Struct.CharacterTurn.get_action char_turn))
]
[
]
)
get_available_actions : (
Struct.CharacterTurn.Type ->
(List (Html.Html Struct.Event.Type))
)
get_available_actions char_turn =
[
(abort_button),
(skip_button char_turn),
(path_button char_turn),
(attack_button char_turn),
(skill_button char_turn),
(inventory_button char_turn),
(end_turn_button char_turn)
]
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
get_html : Struct.CharacterTurn.Type -> Int -> (Html.Html Struct.Event.Type)
get_html char_turn player_ix =
case
(Struct.CharacterTurn.maybe_get_active_character char_turn)
of
(Just char) ->
(Html.div
[(Html.Attributes.class "controlled")]
[
(View.Controlled.CharacterCard.get_summary_html
char_turn
player_ix
char
),
(Html.div
[
(Html.Attributes.class "controlled-controls")
]
[
(Html.div
[(Html.Attributes.class "controlled-actions")]
(get_available_actions char_turn)
),
(
if
(
(Struct.CharacterTurn.get_action char_turn)
==
Struct.CharacterTurn.None
)
then (View.Controlled.ManualControls.get_html)
else (Shared.Util.Html.nothing)
)
]
)
]
)
Nothing -> (Shared.Util.Html.nothing)