| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/battlemap')
| -rw-r--r-- | src/battlemap/src/Struct/UI.elm | 24 | ||||
| -rw-r--r-- | src/battlemap/src/Update/SelectCharacter.elm | 140 | ||||
| -rw-r--r-- | src/battlemap/src/View/Battlemap.elm | 16 | 
3 files changed, 128 insertions, 52 deletions
diff --git a/src/battlemap/src/Struct/UI.elm b/src/battlemap/src/Struct/UI.elm index 6c6765c..eb6b98a 100644 --- a/src/battlemap/src/Struct/UI.elm +++ b/src/battlemap/src/Struct/UI.elm @@ -14,6 +14,10 @@ module Struct.UI exposing        reset_displayed_tab,        to_string,        get_all_tabs, +      -- Navigator +      try_getting_displayed_nav, +      set_displayed_nav, +      reset_displayed_nav,        -- Manual Controls        has_manual_controls_enabled,        -- Previous Action @@ -23,9 +27,9 @@ module Struct.UI exposing     )  -- Battlemap ------------------------------------------------------------------- -import Struct.Location -  import Struct.Character +import Struct.Location +import Struct.Navigator  --------------------------------------------------------------------------------  -- TYPES ----------------------------------------------------------------------- @@ -47,7 +51,8 @@ type alias Type =        zoom_level : Float,        show_manual_controls : Bool,        displayed_tab : (Maybe Tab), -      previous_action : (Maybe Action) +      previous_action : (Maybe Action), +      displayed_nav : (Maybe Struct.Navigator.Type)     }  -------------------------------------------------------------------------------- @@ -63,7 +68,8 @@ default =        zoom_level = 1.0,        show_manual_controls = True,        displayed_tab = Nothing, -      previous_action = Nothing +      previous_action = Nothing, +      displayed_nav = Nothing     }  -- Zoom ------------------------------------------------------------------------ @@ -98,6 +104,16 @@ get_all_tabs : (List Tab)  get_all_tabs =     [StatusTab, CharactersTab, SettingsTab, TimelineTab] +-- Navigator ------------------------------------------------------------------- +try_getting_displayed_nav : Type -> (Maybe Struct.Navigator.Type) +try_getting_displayed_nav ui = ui.displayed_nav + +set_displayed_nav : Struct.Navigator.Type -> Type -> Type +set_displayed_nav nav ui = {ui | displayed_nav = (Just nav)} + +reset_displayed_nav : Type -> Type +reset_displayed_nav ui = {ui | displayed_nav = Nothing} +  -- ManualControls --------------------------------------------------------------  has_manual_controls_enabled : Type -> Bool  has_manual_controls_enabled ui = ui.show_manual_controls diff --git a/src/battlemap/src/Update/SelectCharacter.elm b/src/battlemap/src/Update/SelectCharacter.elm index 42b2b27..1263e67 100644 --- a/src/battlemap/src/Update/SelectCharacter.elm +++ b/src/battlemap/src/Update/SelectCharacter.elm @@ -24,6 +24,32 @@ import Struct.WeaponSet  --------------------------------------------------------------------------------  -- LOCAL -----------------------------------------------------------------------  -------------------------------------------------------------------------------- +get_character_navigator : ( +      Struct.Model.Type -> +      Struct.Character.Type -> +      Struct.Navigator.Type +   ) +get_character_navigator model char = +   let +      weapon = +         (Struct.WeaponSet.get_active_weapon +            (Struct.Character.get_weapons char) +         ) +   in +      (Struct.Navigator.new +         (Struct.Character.get_location char) +         (Struct.Statistics.get_movement_points +            (Struct.Character.get_statistics char) +         ) +         (Struct.Weapon.get_attack_range weapon) +         (Struct.Weapon.get_defense_range weapon) +         (Struct.Battlemap.get_movement_cost_function +            model.battlemap +            (Struct.Character.get_location char) +            (Dict.values model.characters) +         ) +      ) +  attack_character : (        Struct.Model.Type ->        Struct.Character.Ref -> @@ -38,8 +64,10 @@ attack_character model target_char_id target_char =              model.char_turn           ),        ui = -         (Struct.UI.reset_displayed_tab -            (Struct.UI.set_previous_action Nothing model.ui) +         (Struct.UI.reset_displayed_nav +            (Struct.UI.reset_displayed_tab +               (Struct.UI.set_previous_action Nothing model.ui) +            )           )     } @@ -53,35 +81,27 @@ ctrl_or_focus_character model target_char_id target_char =     if (Struct.Character.is_enabled target_char)     then        let -         weapon = -            (Struct.WeaponSet.get_active_weapon -               (Struct.Character.get_weapons target_char) +         nav = +            (case (Struct.UI.try_getting_displayed_nav model.ui) of +               (Just dnav) -> dnav +               Nothing -> +                  (get_character_navigator model target_char)              )        in           {model |              char_turn =                 (Struct.CharacterTurn.set_navigator -                  (Struct.Navigator.new -                     (Struct.Character.get_location target_char) -                     (Struct.Statistics.get_movement_points -                        (Struct.Character.get_statistics target_char) -                     ) -                     (Struct.Weapon.get_attack_range weapon) -                     (Struct.Weapon.get_defense_range weapon) -                     (Struct.Battlemap.get_movement_cost_function -                        model.battlemap -                        (Struct.Character.get_location target_char) -                        (Dict.values model.characters) -                     ) -                  ) +                  nav                    (Struct.CharacterTurn.set_active_character                       target_char                       model.char_turn                    )                 ),              ui = -               (Struct.UI.reset_displayed_tab -                  (Struct.UI.set_previous_action Nothing model.ui) +               (Struct.UI.reset_displayed_nav +                  (Struct.UI.reset_displayed_tab +                     (Struct.UI.set_previous_action Nothing model.ui) +                  )                 )           }     else @@ -89,7 +109,10 @@ ctrl_or_focus_character model target_char_id target_char =           ui =              (Struct.UI.set_previous_action                 (Just (Struct.UI.SelectedCharacter target_char_id)) -               model.ui +               (Struct.UI.set_displayed_nav +                  (get_character_navigator model target_char) +                  model.ui +               )              )        } @@ -126,12 +149,12 @@ can_target_character model target =        )     ) -double_clicked_character : ( +second_click_on : (        Struct.Model.Type ->        Struct.Character.Ref ->        (Struct.Model.Type, (Cmd Struct.Event.Type))     ) -double_clicked_character model target_char_id = +second_click_on model target_char_id =     case (Dict.get target_char_id model.characters) of        (Just target_char) ->           case @@ -208,6 +231,52 @@ double_clicked_character model target_char_id =              Cmd.none           ) +first_click_on : ( +      Struct.Model.Type -> +      Struct.Character.Ref -> +      (Struct.Model.Type, (Cmd Struct.Event.Type)) +   ) +first_click_on model target_char_id = +   if +   ( +      (Struct.CharacterTurn.try_getting_target model.char_turn) +      == +      (Just target_char_id) +   ) +   then +      (model, Cmd.none) +   else +      case (Dict.get target_char_id model.characters) of +         (Just target_char) -> +            ( +               {model | +                  ui = +                     (Struct.UI.set_previous_action +                        (Just (Struct.UI.SelectedCharacter target_char_id)) +                        (Struct.UI.set_displayed_tab +                           Struct.UI.StatusTab +                           (Struct.UI.set_displayed_nav +                              (get_character_navigator model target_char) +                              model.ui +                           ) +                        ) +                     ) +               }, +               Cmd.none +            ) + +         Nothing -> +            ( +               (Struct.Model.invalidate +                  (Struct.Error.new +                     Struct.Error.Programming +                     "SelectCharacter: Unknown char selected." +                  ) +                  model +               ), +               Cmd.none +            ) +  --------------------------------------------------------------------------------  -- EXPORTED --------------------------------------------------------------------  -------------------------------------------------------------------------------- @@ -224,27 +293,6 @@ apply_to model target_char_id =        (Just (Struct.UI.SelectedCharacter target_char_id))     )     then -      (double_clicked_character model target_char_id) +      (second_click_on model target_char_id)     else -      if -      ( -         (Struct.CharacterTurn.try_getting_target model.char_turn) -         == -         (Just target_char_id) -      ) -      then -         (model, Cmd.none) -      else -         ( -            {model | -               ui = -                  (Struct.UI.set_previous_action -                     (Just (Struct.UI.SelectedCharacter target_char_id)) -                     (Struct.UI.set_displayed_tab -                        Struct.UI.StatusTab -                        model.ui -                     ) -                  ) -            }, -            Cmd.none -         ) +      (first_click_on model target_char_id) diff --git a/src/battlemap/src/View/Battlemap.elm b/src/battlemap/src/View/Battlemap.elm index db62722..829ed45 100644 --- a/src/battlemap/src/View/Battlemap.elm +++ b/src/battlemap/src/View/Battlemap.elm @@ -108,11 +108,23 @@ get_html model =              (Dict.values model.characters)           )           ++ -         case (Struct.CharacterTurn.try_getting_navigator model.char_turn) of +         ( +            case (Struct.CharacterTurn.try_getting_navigator model.char_turn) of +               (Just navigator) -> +                  (View.Battlemap.Navigator.get_html +                     (Struct.Navigator.get_summary navigator) +                     True +                  ) + +               Nothing -> +                  [(Util.Html.nothing)] +         ) +         ++ +         case (Struct.UI.try_getting_displayed_nav model.ui) of              (Just navigator) ->                 (View.Battlemap.Navigator.get_html                    (Struct.Navigator.get_summary navigator) -                  True +                  False                 )              Nothing ->  | 


