summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/battle/src/View/Map/Character.elm')
-rw-r--r-- | src/battle/src/View/Map/Character.elm | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/src/battle/src/View/Map/Character.elm b/src/battle/src/View/Map/Character.elm new file mode 100644 index 0000000..aaf7cb2 --- /dev/null +++ b/src/battle/src/View/Map/Character.elm @@ -0,0 +1,218 @@ +module View.Map.Character exposing (get_html) + +-- Elm ------------------------------------------------------------------------- +import Html +import Html.Attributes +import Html.Events + +-- Map ------------------------------------------------------------------ +import Constants.UI + +import Util.Html + +import Struct.Character +import Struct.CharacterTurn +import Struct.Event +import Struct.Model +import Struct.TurnResult +import Struct.TurnResultAnimator +import Struct.UI + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_animation_class : ( + Struct.Model.Type -> + Struct.Character.Type -> + (Html.Attribute Struct.Event.Type) + ) +get_animation_class model char = + case model.animator of + Nothing -> (Html.Attributes.class "") + (Just animator) -> + case (Struct.TurnResultAnimator.get_current_animation animator) of + (Struct.TurnResultAnimator.Focus char_index) -> + if ((Struct.Character.get_index char) /= char_index) + then + (Html.Attributes.class "") + else + (Html.Attributes.class "battle-character-selected") + + (Struct.TurnResultAnimator.TurnResult current_action) -> + if + ( + (Struct.TurnResult.get_actor_index current_action) + /= + (Struct.Character.get_index char) + ) + then + (Html.Attributes.class "") + else + case current_action of + (Struct.TurnResult.Moved _) -> + (Html.Attributes.class + "battle-animated-character-icon" + ) + + _ -> (Html.Attributes.class "") + _ -> (Html.Attributes.class "") + +get_activation_level_class : ( + Struct.Character.Type -> + (Html.Attribute Struct.Event.Type) + ) +get_activation_level_class char = + if (Struct.Character.is_enabled char) + then + (Html.Attributes.class "battle-character-icon-enabled") + else + (Html.Attributes.class "battle-character-icon-disabled") + +get_alliance_class : ( + Struct.Model.Type -> + Struct.Character.Type -> + (Html.Attribute Struct.Event.Type) + ) +get_alliance_class model char = + if ((Struct.Character.get_player_ix char) == model.player_ix) + then + (Html.Attributes.class "battle-character-ally") + else + (Html.Attributes.class "battle-character-enemy") + +get_position_style : ( + Struct.Character.Type -> + (Html.Attribute Struct.Event.Type) + ) +get_position_style char = + let char_loc = (Struct.Character.get_location char) in + (Html.Attributes.style + [ + ("top", ((toString (char_loc.y * Constants.UI.tile_size)) ++ "px")), + ("left", ((toString (char_loc.x * Constants.UI.tile_size)) ++ "px")) + ] + ) + +get_focus_class : ( + Struct.Model.Type -> + Struct.Character.Type -> + (Html.Attribute Struct.Event.Type) + ) +get_focus_class model char = + if + ( + (Struct.UI.get_previous_action model.ui) + == + (Just (Struct.UI.SelectedCharacter (Struct.Character.get_index char))) + ) + then + (Html.Attributes.class "battle-character-selected") + else + if + ( + (Struct.CharacterTurn.try_getting_target model.char_turn) + == + (Just (Struct.Character.get_index char)) + ) + then + (Html.Attributes.class "battle-character-targeted") + else + (Html.Attributes.class "") + +get_body_html : Struct.Character.Type -> (Html.Html Struct.Event.Type) +get_body_html char = + (Html.div + [ + (Html.Attributes.class "battle-character-icon-body"), + (Html.Attributes.class + ( + "asset-character-team-body-" + ++ (toString (Struct.Character.get_player_ix char)) + ) + ) + ] + [ + ] + ) + +get_head_html : Struct.Character.Type -> (Html.Html Struct.Event.Type) +get_head_html char = + (Html.div + [ + (Html.Attributes.class "battle-character-icon-head"), + (Html.Attributes.class + ("asset-character-icon-" ++ (Struct.Character.get_icon_id char)) + ) + ] + [ + ] + ) + +get_banner_html : Struct.Character.Type -> (Html.Html Struct.Event.Type) +get_banner_html char = + case (Struct.Character.get_rank char) of + Struct.Character.Commander -> + (Html.div + [ + (Html.Attributes.class "battle-character-icon-banner"), + (Html.Attributes.class "asset-character-icon-commander-banner") + ] + [ + ] + ) + + Struct.Character.Target -> + (Html.div + [ + (Html.Attributes.class "battle-character-icon-banner"), + (Html.Attributes.class "asset-character-icon-target-banner") + ] + [ + ] + ) + + _ -> (Util.Html.nothing) + +get_actual_html : ( + Struct.Model.Type -> + Struct.Character.Type -> + (Html.Html Struct.Event.Type) + ) +get_actual_html model char = + (Html.div + [ + (Html.Attributes.class "battle-tiled"), + (Html.Attributes.class "battle-character-icon"), + (get_animation_class model char), + (get_activation_level_class char), + (get_alliance_class model char), + (get_position_style char), + (get_focus_class model char), + (Html.Attributes.class "clickable"), + (Html.Events.onClick + (Struct.Event.CharacterSelected + (Struct.Character.get_index char) + ) + ) + ] + [ + (get_body_html char), + (get_head_html char), + (get_banner_html char) + ] + ) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_html : ( + Struct.Model.Type -> + Struct.Character.Type -> + (Html.Html Struct.Event.Type) + ) +get_html model char = + if (Struct.Character.is_alive char) + then + (get_actual_html model char) + else + (Util.Html.nothing) |