summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/roster-editor/src/View/Controlled/CharacterCard.elm')
-rw-r--r-- | src/roster-editor/src/View/Controlled/CharacterCard.elm | 540 |
1 files changed, 540 insertions, 0 deletions
diff --git a/src/roster-editor/src/View/Controlled/CharacterCard.elm b/src/roster-editor/src/View/Controlled/CharacterCard.elm new file mode 100644 index 0000000..ac56cbb --- /dev/null +++ b/src/roster-editor/src/View/Controlled/CharacterCard.elm @@ -0,0 +1,540 @@ +module View.Controlled.CharacterCard exposing + ( + get_minimal_html, + get_summary_html, + get_full_html + ) + +-- Elm ------------------------------------------------------------------------- +import List + +import Html +import Html.Attributes +import Html.Events + +-- Battle ---------------------------------------------------------------------- +import Struct.Armor +import Struct.Character +import Struct.CharacterTurn +import Struct.Event +import Struct.HelpRequest +import Struct.Navigator +import Struct.Omnimods +import Struct.Statistics +import Struct.Weapon +import Struct.WeaponSet + +import Util.Html + +import View.Character +import View.Gauge + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_name : ( + Struct.Character.Type -> + (Html.Html Struct.Event.Type) + ) +get_name char = + (Html.div + [ + (Html.Attributes.class "battle-info-card-name"), + (Html.Attributes.class "battle-info-card-text-field"), + (Html.Attributes.class "battle-character-card-name") + ] + [ + (Html.text (Struct.Character.get_name char)) + ] + ) + +get_health_bar : ( + Struct.Character.Type -> + (Html.Html Struct.Event.Type) + ) +get_health_bar char = + let + current = (Struct.Character.get_sane_current_health char) + max = + (Struct.Statistics.get_max_health + (Struct.Character.get_statistics char) + ) + in + (View.Gauge.get_html + ("HP: " ++ (toString current) ++ "/" ++ (toString max)) + (100.0 * ((toFloat current)/(toFloat max))) + [(Html.Attributes.class "battle-character-card-health")] + [] + [] + ) + +get_rank_status : ( + Struct.Character.Rank -> + (Html.Html Struct.Event.Type) + ) +get_rank_status rank = + (Html.div + [ + (Html.Attributes.class "battle-character-card-status"), + (Html.Attributes.class "clickable"), + (Html.Events.onClick + (Struct.Event.RequestedHelp (Struct.HelpRequest.HelpOnRank rank)) + ), + (Html.Attributes.class + ( + case rank of + Struct.Character.Commander -> + "battle-character-card-commander-status" + + Struct.Character.Target -> + "battle-character-card-target-status" + + Struct.Character.Optional -> "" + ) + ) + ] + [ + ] + ) + +get_statuses : ( + Struct.Character.Type -> + (Html.Html Struct.Event.Type) + ) +get_statuses char = + (Html.div + [ + (Html.Attributes.class "battle-character-card-statuses") + ] + [ + ( + case (Struct.Character.get_rank char) of + Struct.Character.Optional -> (Util.Html.nothing) + other -> (get_rank_status other) + ) + ] + ) + +get_active_movement_bar : ( + (Maybe Struct.Navigator.Type) -> + Struct.Character.Type -> + (Html.Html Struct.Event.Type) + ) +get_active_movement_bar maybe_navigator char = + let + max = + (Struct.Statistics.get_movement_points + (Struct.Character.get_statistics char) + ) + current = + case maybe_navigator of + (Just navigator) -> + (Struct.Navigator.get_remaining_points navigator) + + Nothing -> + max + in + (View.Gauge.get_html + ("MP: " ++ (toString current) ++ "/" ++ (toString max)) + (100.0 * ((toFloat current)/(toFloat max))) + [(Html.Attributes.class "battle-character-card-movement")] + [] + [] + ) + +get_inactive_movement_bar : ( + Struct.Character.Type -> + (Html.Html Struct.Event.Type) + ) +get_inactive_movement_bar char = + let + max = + (Struct.Statistics.get_movement_points + (Struct.Character.get_statistics char) + ) + in + (View.Gauge.get_html + ( + "MP: " + ++ + (toString + (Struct.Statistics.get_movement_points + (Struct.Character.get_statistics char) + ) + ) + ) + 100.0 + [(Html.Attributes.class "battle-character-card-movement")] + [] + [] + ) + +get_movement_bar : ( + Struct.CharacterTurn.Type -> + Struct.Character.Type -> + (Html.Html Struct.Event.Type) + ) +get_movement_bar char_turn char = + case (Struct.CharacterTurn.try_getting_active_character char_turn) of + (Just active_char) -> + if + ( + (Struct.Character.get_index active_char) + == + (Struct.Character.get_index char) + ) + then + (get_active_movement_bar + (Struct.CharacterTurn.try_getting_navigator char_turn) + active_char + ) + else + (get_inactive_movement_bar char) + + Nothing -> + (get_inactive_movement_bar char) + +get_weapon_field_header : ( + Float -> + Struct.Weapon.Type -> + (Html.Html Struct.Event.Type) + ) +get_weapon_field_header damage_multiplier weapon = + (Html.div + [ + (Html.Attributes.class "battle-character-card-header") + ] + [ + (Html.div + [ + ] + [ + (Html.text (Struct.Weapon.get_name weapon)) + ] + ), + (Html.div + [ + ] + [ + (Html.text + ( + "~" + ++ + (toString + (ceiling + ( + (toFloat (Struct.Weapon.get_damage_sum weapon)) + * damage_multiplier + ) + ) + ) + ++ " dmg @ [" + ++ (toString (Struct.Weapon.get_defense_range weapon)) + ++ ", " + ++ (toString (Struct.Weapon.get_attack_range weapon)) + ++ "]" + ) + ) + ] + ) + ] + ) + +get_mod_html : (String, Int) -> (Html.Html Struct.Event.Type) +get_mod_html mod = + let + (category, value) = mod + in + (Html.div + [ + (Html.Attributes.class "battle-info-card-mod") + ] + [ + (Html.text + (category ++ ": " ++ (toString value)) + ) + ] + ) + +get_multiplied_mod_html : Float -> (String, Int) -> (Html.Html Struct.Event.Type) +get_multiplied_mod_html multiplier mod = + let + (category, value) = mod + in + (Html.div + [ + (Html.Attributes.class "battle-character-card-mod") + ] + [ + (Html.text + ( + category + ++ ": " + ++ (toString (ceiling ((toFloat value) * multiplier))) + ) + ) + ] + ) + +get_weapon_details : ( + Struct.Omnimods.Type -> + Float -> + Struct.Weapon.Type -> + (Html.Html Struct.Event.Type) + ) +get_weapon_details omnimods damage_multiplier weapon = + (Html.div + [ + (Html.Attributes.class "battle-character-card-weapon") + ] + [ + (get_weapon_field_header damage_multiplier weapon), + (Html.div + [ + (Html.Attributes.class "battle-info-card-omnimods-listing") + ] + (List.map + (get_multiplied_mod_html damage_multiplier) + (Struct.Omnimods.get_attack_mods omnimods) + ) + ) + ] + ) + +get_weapon_summary : ( + Float -> + Struct.Weapon.Type -> + (Html.Html Struct.Event.Type) + ) +get_weapon_summary damage_multiplier weapon = + (Html.div + [ + (Html.Attributes.class "battle-character-card-weapon-summary") + ] + [ + (get_weapon_field_header damage_multiplier weapon) + ] + ) + +get_armor_details : ( + Struct.Omnimods.Type -> + Struct.Armor.Type -> + (Html.Html Struct.Event.Type) + ) +get_armor_details omnimods armor = + (Html.div + [ + (Html.Attributes.class "battle-character-card-armor") + ] + [ + (Html.div + [ + (Html.Attributes.class "battle-character-card-armor-name") + ] + [ + (Html.text (Struct.Armor.get_name armor)) + ] + ), + (Html.div + [ + (Html.Attributes.class "battle-info-card-omnimods-listing") + ] + (List.map + (get_mod_html) + (Struct.Omnimods.get_defense_mods omnimods) + ) + ) + ] + ) + +stat_name : String -> (Html.Html Struct.Event.Type) +stat_name name = + (Html.div + [ + (Html.Attributes.class "battle-character-card-stat-name") + ] + [ + (Html.text name) + ] + ) + +stat_val : Int -> Bool -> (Html.Html Struct.Event.Type) +stat_val val perc = + (Html.div + [ + (Html.Attributes.class "battle-character-card-stat-val") + ] + [ + (Html.text + ( + (toString val) + ++ + ( + if perc + then + "%" + else + "" + ) + ) + ) + ] + ) + +get_relevant_stats : ( + Struct.Statistics.Type -> + (Html.Html Struct.Event.Type) + ) +get_relevant_stats stats = + (Html.div + [ + (Html.Attributes.class "battle-character-card-stats") + ] + [ + (stat_name "Dodge"), + (stat_val (Struct.Statistics.get_dodges stats) True), + (stat_name "Parry"), + (stat_val (Struct.Statistics.get_parries stats) True), + (stat_name "Accu."), + (stat_val (Struct.Statistics.get_accuracy stats) False), + (stat_name "2xHit"), + (stat_val (Struct.Statistics.get_double_hits stats) True), + (stat_name "Crit."), + (stat_val (Struct.Statistics.get_critical_hits stats) True) + ] + ) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_minimal_html : ( + Int -> + Struct.Character.Type -> + (Html.Html Struct.Event.Type) + ) +get_minimal_html player_ix char = + (Html.div + [ + (Html.Attributes.class "battle-info-card"), + (Html.Attributes.class "battle-info-card-minimal"), + (Html.Attributes.class "battle-character-card"), + (Html.Attributes.class "battle-character-card-minimal") + ] + [ + (get_name char), + (Html.div + [ + (Html.Attributes.class "battle-info-card-top"), + (Html.Attributes.class "battle-character-card-top") + ] + [ + (Html.div + [ + (Html.Attributes.class "battle-info-card-picture") + ] + [ + (View.Character.get_portrait_html player_ix char) + ] + ), + (get_health_bar char), + (get_inactive_movement_bar char), + (get_statuses char) + ] + ) + ] + ) + +get_summary_html : ( + Struct.CharacterTurn.Type -> + Int -> + Struct.Character.Type -> + (Html.Html Struct.Event.Type) + ) +get_summary_html char_turn player_ix char = + let + weapon_set = (Struct.Character.get_weapons char) + main_weapon = (Struct.WeaponSet.get_active_weapon weapon_set) + char_statistics = (Struct.Character.get_statistics char) + damage_modifier = (Struct.Statistics.get_damage_modifier char_statistics) + secondary_weapon = (Struct.WeaponSet.get_secondary_weapon weapon_set) + omnimods = (Struct.Character.get_current_omnimods char) + in + (Html.div + [ + (Html.Attributes.class "battle-character-card") + ] + [ + (get_name char), + (Html.div + [ + (Html.Attributes.class "battle-info-card-top"), + (Html.Attributes.class "battle-character-card-top") + ] + [ + (Html.div + [ + (Html.Attributes.class "battle-info-card-picture") + ] + [ + (View.Character.get_portrait_html player_ix char) + ] + ), + (get_health_bar char), + (get_movement_bar char_turn char), + (get_statuses char) + ] + ), + (get_weapon_details omnimods damage_modifier main_weapon), + (get_armor_details omnimods (Struct.Character.get_armor char)), + (get_relevant_stats char_statistics), + (get_weapon_summary damage_modifier secondary_weapon) + ] + ) + +get_full_html : ( + Int -> + Struct.Character.Type -> + (Html.Html Struct.Event.Type) + ) +get_full_html player_ix char = + let + weapon_set = (Struct.Character.get_weapons char) + main_weapon = (Struct.WeaponSet.get_active_weapon weapon_set) + char_statistics = (Struct.Character.get_statistics char) + damage_modifier = (Struct.Statistics.get_damage_modifier char_statistics) + secondary_weapon = (Struct.WeaponSet.get_secondary_weapon weapon_set) + armor = (Struct.Character.get_armor char) + omnimods = (Struct.Character.get_current_omnimods char) + in + (Html.div + [ + (Html.Attributes.class "battle-info-card"), + (Html.Attributes.class "battle-character-card") + ] + [ + (get_name char), + (Html.div + [ + (Html.Attributes.class "battle-info-card-top"), + (Html.Attributes.class "battle-character-card-top") + ] + [ + (Html.div + [ + (Html.Attributes.class "battle-info-card-picture") + ] + [ + (View.Character.get_portrait_html player_ix char) + ] + ), + (get_health_bar char), + (get_inactive_movement_bar char), + (get_statuses char) + ] + ), + (get_weapon_details omnimods damage_modifier main_weapon), + (get_armor_details omnimods armor), + (get_relevant_stats char_statistics), + (get_weapon_summary damage_modifier secondary_weapon) + ] + ) |