| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'elm/battlemap/src/Model/RequestDirection.elm')
| -rw-r--r-- | elm/battlemap/src/Model/RequestDirection.elm | 60 | 
1 files changed, 60 insertions, 0 deletions
| diff --git a/elm/battlemap/src/Model/RequestDirection.elm b/elm/battlemap/src/Model/RequestDirection.elm new file mode 100644 index 0000000..f47a902 --- /dev/null +++ b/elm/battlemap/src/Model/RequestDirection.elm @@ -0,0 +1,60 @@ +module Model.RequestDirection exposing (apply_to) + +import Dict + +import Battlemap +import Battlemap.Direction + +import Model +import Error + +make_it_so : Model.Type -> Battlemap.Direction.Type -> Model.Type +make_it_so model dir = +   case model.selection of +      (Model.SelectedCharacter char_id) -> +         let +            new_bmap = +               (Battlemap.add_step_to_navigator +                  model.battlemap +                  dir +                  (Dict.values model.characters) +               ) +         in +            case new_bmap of +               (Just bmap) -> +                  {model | +                     state = Model.MovingCharacterWithButtons, +                     battlemap = new_bmap +                  } + +               Nothing -> +                  (Model.invalidate +                     model +                     (Error.new +                        Error.IllegalAction +                        "Unreachable/occupied tile." +                     ) +                  ) + +      _ -> +         (Model.invalidate +            model +            (Error.new +               Error.Programming +               "DirectionRequest: model moving char, no char selected." +            ) +         ) + +apply_to : Model.Type -> Battlemap.Direction.Type -> Model.Type +apply_to model dir = +   case (Model.get_state model) of +      Model.MovingCharacterWithButtons -> (make_it_so model dir) +      Model.MovingCharacterWithClick -> (make_it_so model dir) +      _ -> +         (Model.invalidate +            model +            (Error.new +               Error.IllegalAction +               "This can only be done while moving a character." +            ) +         ) | 


