summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2017-09-18 19:12:54 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2017-09-18 19:12:54 +0200
commit36344e727e45b6a1d39f372a6a39ab973e023bdf (patch)
tree740a524f94b2ce846dcd7a920848139c5caa4e38 /client/elm/battlemap/src/Update.elm
parent0b9096ed0c66db403c244a4720bac60326a40394 (diff)
Characters can actually move.
Diffstat (limited to 'client/elm/battlemap/src/Update.elm')
-rw-r--r--client/elm/battlemap/src/Update.elm123
1 files changed, 85 insertions, 38 deletions
diff --git a/client/elm/battlemap/src/Update.elm b/client/elm/battlemap/src/Update.elm
index 719d259..2c86c4a 100644
--- a/client/elm/battlemap/src/Update.elm
+++ b/client/elm/battlemap/src/Update.elm
@@ -1,58 +1,105 @@
-module Update exposing (..)
+module Update exposing (update, Msg(..))
import Model exposing (Model, model)
-import Battlemap exposing (apply_to_all_tiles)
+import Battlemap exposing (apply_to_all_tiles, apply_to_tile_unsafe)
import Battlemap.Direction exposing (Direction)
import Battlemap.Navigator as Nr exposing (go, reset_navigation)
-import Dict as Dt exposing (get)
+import Dict as Dt exposing (get, update)
import Character exposing (CharacterRef)
+
type Msg =
DirectionRequest Direction
| SelectCharacter CharacterRef
+ | EndTurn
+
+handle_direction_request : Model -> Direction -> Model
+handle_direction_request model dir =
+ (case (model.selection, model.navigator) of
+ (Nothing, _) -> model
+ (_ , Nothing) -> model
+ ((Just char_id), (Just nav)) ->
+ let
+ (new_bmap, new_nav) =
+ (Nr.go
+ model.battlemap
+ nav
+ dir
+ )
+ in
+ {model |
+ battlemap = new_bmap,
+ navigator = (Just new_nav)
+ }
+ )
+
+handle_select_character : Model -> CharacterRef -> Model
+handle_select_character model char_id =
+ {model |
+ selection = (Just char_id),
+ battlemap =
+ (apply_to_all_tiles
+ model.battlemap
+ (reset_navigation)
+ ),
+ navigator =
+ (case (Dt.get char_id model.characters) of
+ Nothing -> Nothing
+ (Just char) ->
+ (Just (Nr.new_navigator char.location))
+ )
+ }
+
+handle_end_turn : Model -> Model
+handle_end_turn model =
+ case (model.navigator, model.selection) of
+ (_, Nothing) -> model
+ (Nothing, _) -> model
+ ((Just nav), (Just char_id)) ->
+ (case (Dt.get char_id model.characters) of
+ Nothing -> model
+ (Just char) ->
+ {model |
+ navigator =
+ (Just (Nr.new_navigator nav.current_location)),
+ battlemap =
+ (apply_to_all_tiles
+ (apply_to_tile_unsafe
+ (apply_to_tile_unsafe
+ model.battlemap
+ char.location
+ (\t -> {t | char_level = Nothing})
+ )
+ nav.current_location
+ (\t -> {t | char_level = (Just char_id)})
+ )
+ (reset_navigation)
+ ),
+ characters =
+ (Dt.update
+ char_id
+ (\mc ->
+ case mc of
+ Nothing -> Nothing
+ (Just c) ->
+ (Just {c | location = nav.current_location})
+ )
+ model.characters
+ )
+ }
+ )
update : Msg -> Model -> Model
update msg model =
case msg of
(DirectionRequest d) ->
- (case model.selection of
- Nothing ->
- model
- (Just char_id) ->
- (case model.navigator of
- Nothing -> model
- (Just nav) ->
- let
- (new_bmap, new_nav) =
- (Nr.go
- model.battlemap
- nav
- d
- )
- in
- {model |
- battlemap = new_bmap,
- navigator = (Just new_nav)
- }
- )
- )
+ (handle_direction_request model d)
(SelectCharacter char_id) ->
- {model |
- selection = (Just char_id),
- battlemap =
- (apply_to_all_tiles
- model.battlemap
- (reset_navigation)
- ),
- navigator =
- (case (Dt.get char_id model.characters) of
- Nothing -> Nothing
- (Just char) ->
- (Just (Nr.new_navigator {x = char.x, y = char.y}))
- )
- }
+ (handle_select_character model char_id)
+ EndTurn ->
+ (handle_end_turn model)
--_ -> model