summaryrefslogtreecommitdiff
blob: b226452d94dc659a52712edc2baaba6bf5d7c3c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
module Update.EndTurn exposing (apply_to)

-- Local Module ----------------------------------------------------------------
import Comm.CharacterTurn

import Struct.Character
import Struct.CharacterTurn
import Struct.Error
import Struct.Event
import Struct.Model
import Struct.Navigator

--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
--------------------------------------------------------------------------------
maybe_disable_char : (
      (Maybe Struct.Character.Type) ->
      (Maybe Struct.Character.Type)
   )
maybe_disable_char maybe_char =
   case maybe_char of
      (Just char) -> (Just (Struct.Character.set_enabled False char))
      Nothing -> Nothing

make_it_so : (
      Struct.Model.Type ->
      Struct.Character.Type ->
      Struct.Navigator.Type ->
      (Struct.Model.Type, (Cmd Struct.Event.Type))
   )
make_it_so model char nav =
   case (Comm.CharacterTurn.try model) of
      (Just cmd) ->
         (
            (Struct.Model.reset
               (Struct.Model.update_character_fun
                  (Struct.Character.get_index char)
                  (maybe_disable_char)
                  model
               )
            ),
            cmd
         )

      Nothing ->
         (model, Cmd.none)

--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type))
apply_to model =
   case
      (
         (Struct.CharacterTurn.get_state model.char_turn),
         (Struct.CharacterTurn.try_getting_active_character
            model.char_turn
         ),
         (Struct.CharacterTurn.try_getting_navigator model.char_turn)
      )
   of
      (
         Struct.CharacterTurn.MovedCharacter,
         (Just char),
         (Just nav)) ->
            (make_it_so model char nav)

      (
         Struct.CharacterTurn.ChoseTarget,
         (Just char),
         (Just nav)) ->
         (make_it_so model char nav)

      (
         Struct.CharacterTurn.SwitchedWeapons,
         (Just char),
         (Just nav)) ->
         (make_it_so model char nav)

      (Struct.CharacterTurn.SelectedCharacter, (Just char), (Just nav)) ->
         (make_it_so model char nav)

      (_, _, _) ->
         (
            (Struct.Model.invalidate
               (Struct.Error.new
                  Struct.Error.Programming
                  "Character turn appears to be in an illegal state."
               )
               model
            ),
            Cmd.none
         )