blob: 881689d9f9b9a077d3fcb15d1544777a5be40e67 (
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
|
module Update.SwitchWeapon exposing (apply_to)
-- Battle Characters -----------------------------------------------------------
import BattleCharacters.Struct.Weapon
import BattleCharacters.Struct.Character
-- Local module ----------------------------------------------------------------
import Struct.Character
import Struct.CharacterTurn
import Struct.Error
import Struct.Event
import Struct.Model
--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
--------------------------------------------------------------------------------
make_it_so : Struct.Model.Type -> Struct.Model.Type
make_it_so model =
case (Struct.CharacterTurn.try_getting_active_character model.char_turn) of
((Just char), (Just nav)) ->
let
new_base_character =
(BattleCharacters.Struct.Character.switch_weapons
(Struct.Character.get_base_character char)
)
active_weapon =
(BattleCharacters.Struct.Character.get_active_weapon
new_base_character
)
in
{model |
char_turn =
(Struct.CharacterTurn.show_attack_range_navigator
(BattleCharacters.Struct.Weapon.get_defense_range
active_weapon
)
(BattleCharacters.Struct.Weapon.get_attack_range
active_weapon
)
(Struct.CharacterTurn.set_has_switched_weapons
True
(Struct.CharacterTurn.set_active_character_no_reset
(Struct.Character.set_base_character
new_base_character
char
)
model.char_turn
)
)
)
}
(_, _) ->
(Struct.Model.invalidate
(Struct.Error.new
Struct.Error.Programming
"""
CharacterTurn structure in the 'SelectedCharacter' or
'MovedCharacter' state without any character being selected.
""")
model
)
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
apply_to : (
Struct.Model.Type ->
(Struct.Model.Type, (Cmd Struct.Event.Type))
)
apply_to model =
case (Struct.CharacterTurn.get_state model.char_turn) of
Struct.CharacterTurn.SelectedCharacter ->
((make_it_so model), Cmd.none)
Struct.CharacterTurn.MovedCharacter ->
((make_it_so model), Cmd.none)
_ ->
(
(Struct.Model.invalidate
(Struct.Error.new
Struct.Error.Programming
(
"Attempt to switch weapons as a secondary action or"
++ " without character being selected."
)
)
model
),
Cmd.none
)
|