summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battlemap/src/Model.elm | 11 | ||||
-rw-r--r-- | src/battlemap/src/Model/EndTurn.elm | 10 | ||||
-rw-r--r-- | src/battlemap/src/Query/CharacterTurn.elm | 115 |
3 files changed, 125 insertions, 11 deletions
diff --git a/src/battlemap/src/Model.elm b/src/battlemap/src/Model.elm index 4eb170a..9798149 100644 --- a/src/battlemap/src/Model.elm +++ b/src/battlemap/src/Model.elm @@ -22,6 +22,7 @@ import Error import Character +import Query.CharacterTurn -------------------------------------------------------------------------------- -- TYPES ----------------------------------------------------------------------- -------------------------------------------------------------------------------- @@ -37,10 +38,9 @@ type alias Type = characters: (Dict.Dict Character.Ref Character.Type), error: (Maybe Error.Type), controlled_team: Int, - controlled_character: (Maybe Character.Ref), - targets: (List Character.Ref), player_id: String, - ui: UI.Type + ui: UI.Type, + char_turn: Query.CharacterTurn } -------------------------------------------------------------------------------- @@ -71,9 +71,8 @@ reset model characters = battlemap = (Battlemap.reset model.battlemap), characters = characters, error = Nothing, - controlled_character = Nothing, - targets = [], - ui = (UI.set_previous_action model.ui Nothing) + ui = (UI.set_previous_action model.ui Nothing), + char_turn = (Query.CharacterTurn.new) } invalidate : Type -> Error.Type -> Type diff --git a/src/battlemap/src/Model/EndTurn.elm b/src/battlemap/src/Model/EndTurn.elm index f26beba..fd0ec83 100644 --- a/src/battlemap/src/Model/EndTurn.elm +++ b/src/battlemap/src/Model/EndTurn.elm @@ -17,8 +17,8 @@ import Send.CharacterTurn -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- -make_it_so : Model.Type -> Character.Ref -> (Model.Type, (Cmd Event.Type)) -make_it_so model char_ref = +make_it_so : Model.Type -> (Model.Type, (Cmd Event.Type)) +make_it_so model = case (Battlemap.try_getting_navigator_location model.battlemap) of (Just location) -> case (Send.CharacterTurn.try model) of @@ -65,9 +65,9 @@ make_it_so model char_ref = -------------------------------------------------------------------------------- apply_to : Model.Type -> (Model.Type, (Cmd Event.Type)) apply_to model = - case model.controlled_character of - (Just char_ref) -> - (make_it_so model char_ref) + case (Query.CharacterTurn.get_state model.char_turn) of + Query.CharacterTurn.MovedCharacter -> (make_it_so model) + Query.CharacterTurn.ChoseTarget -> (make_it_so model) _ -> ( diff --git a/src/battlemap/src/Query/CharacterTurn.elm b/src/battlemap/src/Query/CharacterTurn.elm new file mode 100644 index 0000000..ec7efa0 --- /dev/null +++ b/src/battlemap/src/Query/CharacterTurn.elm @@ -0,0 +1,115 @@ +module Query.CharacterTurn exposing + ( + Type, + State(..), + new, + try_getting_controlled_character, + set_controlled_character, + get_state, + get_path, + set_path, + add_target, + remove_target, + get_targets + ) + +-- Elm ------------------------------------------------------------------------- +import List + +-- Battlemap ------------------------------------------------------------------- +import Battlemap +import Battlemap.Direction + +import UI + +import Error + +import Character + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +type State = + Default + | SelectedCharacter + | MovedCharacter + | ChoseTarget + +type alias Type = + { + state : State, + controlled_character : (Maybe Character.Ref), + path : (List Battlemap.Direction.Type), + targets : (List Character.Ref) + } + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +new : Type +new = + { + state = Default, + controlled_character = Nothing, + path = [], + targets = [] + } + +try_getting_controlled_character : Type -> (Maybe Character.Ref) +try_getting_controlled_character ct = ct.controlled_character + +set_controlled_character : Type -> Character.Ref -> Type +set_controlled_character ct char_ref = + { + state = SelectedCharacter, + controlled_character = (Just char_ref), + path = [], + targets = [] + } + +get_state : Type -> State +get_state ct = ct.state + +get_path : Type -> (List Battlemap.Direction.Type) +get_path ct = ct.path + +set_path : Type -> (List Battlemap.Direction.Type) -> Type +set_path ct path = + {ct | + state = MovedCharacter, + path = path, + targets = [] + } + +add_target : Type -> Character.Ref -> Type +add_target ct target_ref = + {ct | + state = ChoseTarget, + targets = (List.append ct.targets [target_ref]) + } + +remove_target : Type -> Int -> Type +remove_target ct i = + let + new_targets = (List.drop i ct.list) + in + case new_targets of + [] -> + {ct | + state = MovedCharacter, + path = path, + targets = [] + } + + _ -> + {ct | + state = ChoseTarget, + targets = new_targets + } + +get_targets : Type -> (List Character.Ref) +get_targets ct = ct.targets |