summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2017-12-05 15:30:20 +0100
committernsensfel <SpamShield0@noot-noot.org>2017-12-05 15:30:20 +0100
commitdc0d49ee836f89161412bc0939f2fbc1e68a7588 (patch)
tree762e0351e4d2a299b100a22f7a96b641cf9b147e /src
parentc5578c282d0737c4616adcc87132b7f099e1ac0c (diff)
Trying to figure out how to organize the code...
Diffstat (limited to 'src')
-rw-r--r--src/battlemap/src/Battlemap.elm237
-rw-r--r--src/battlemap/src/Battlemap/Direction.elm27
-rw-r--r--src/battlemap/src/Battlemap/Location.elm45
-rw-r--r--src/battlemap/src/Battlemap/Marker.elm5
-rw-r--r--src/battlemap/src/ElmModule/Init.elm (renamed from src/battlemap/src/Init.elm)8
-rw-r--r--src/battlemap/src/ElmModule/Subscriptions.elm7
-rw-r--r--src/battlemap/src/ElmModule/Update.elm55
-rw-r--r--src/battlemap/src/ElmModule/View.elm (renamed from src/battlemap/src/View.elm)15
-rw-r--r--src/battlemap/src/Error.elm33
-rw-r--r--src/battlemap/src/Event.elm21
-rw-r--r--src/battlemap/src/Model/SelectCharacter.elm110
-rw-r--r--src/battlemap/src/Move.elm (renamed from src/battlemap/src/Battlemap/Navigator/Move.elm)87
-rw-r--r--src/battlemap/src/Send/Query/CharacterTurn.elm (renamed from src/battlemap/src/Query/CharacterTurn.elm)0
-rw-r--r--src/battlemap/src/Send/Send.elm (renamed from src/battlemap/src/Send.elm)0
-rw-r--r--src/battlemap/src/Struct/Battlemap.elm122
-rw-r--r--src/battlemap/src/Struct/Character.elm (renamed from src/battlemap/src/Character.elm)12
-rw-r--r--src/battlemap/src/Struct/Direction.elm37
-rw-r--r--src/battlemap/src/Struct/Error.elm43
-rw-r--r--src/battlemap/src/Struct/Event.elm24
-rw-r--r--src/battlemap/src/Struct/Location.elm49
-rw-r--r--src/battlemap/src/Struct/Marker.elm8
-rw-r--r--src/battlemap/src/Struct/Model.elm (renamed from src/battlemap/src/Model.elm)37
-rw-r--r--src/battlemap/src/Struct/Navigator.elm (renamed from src/battlemap/src/Battlemap/Navigator.elm)74
-rw-r--r--src/battlemap/src/Struct/Path.elm (renamed from src/battlemap/src/Battlemap/Navigator/Path.elm)46
-rw-r--r--src/battlemap/src/Struct/RangeIndicator.elm (renamed from src/battlemap/src/Battlemap/Navigator/RangeIndicator.elm)82
-rw-r--r--src/battlemap/src/Struct/Tile.elm (renamed from src/battlemap/src/Battlemap/Tile.elm)8
-rw-r--r--src/battlemap/src/Struct/UI.elm (renamed from src/battlemap/src/UI.elm)18
-rw-r--r--src/battlemap/src/Subscriptions.elm7
-rw-r--r--src/battlemap/src/Update.elm90
-rw-r--r--src/battlemap/src/Update/ChangeScale.elm26
-rw-r--r--src/battlemap/src/Update/EndTurn.elm (renamed from src/battlemap/src/Model/EndTurn.elm)0
-rw-r--r--src/battlemap/src/Update/HandleServerReply.elm (renamed from src/battlemap/src/Model/HandleServerReply.elm)17
-rw-r--r--src/battlemap/src/Update/HandleServerReply/AddChar.elm (renamed from src/battlemap/src/Model/HandleServerReply/AddChar.elm)0
-rw-r--r--src/battlemap/src/Update/HandleServerReply/SetMap.elm (renamed from src/battlemap/src/Model/HandleServerReply/SetMap.elm)0
-rw-r--r--src/battlemap/src/Update/RequestDirection.elm (renamed from src/battlemap/src/Model/RequestDirection.elm)63
-rw-r--r--src/battlemap/src/Update/SelectCharacter.elm124
-rw-r--r--src/battlemap/src/Update/SelectTab.elm25
-rw-r--r--src/battlemap/src/Update/SelectTile.elm (renamed from src/battlemap/src/Model/SelectTile.elm)0
-rw-r--r--src/battlemap/src/Update/SendLoadBattlemapRequest.elm28
-rw-r--r--src/battlemap/src/Update/SwitchTeam.elm42
40 files changed, 837 insertions, 795 deletions
diff --git a/src/battlemap/src/Battlemap.elm b/src/battlemap/src/Battlemap.elm
deleted file mode 100644
index 5b289d0..0000000
--- a/src/battlemap/src/Battlemap.elm
+++ /dev/null
@@ -1,237 +0,0 @@
-module Battlemap exposing
- (
- Type,
- empty,
- new,
- reset,
- get_width,
- get_height,
- get_navigator_remaining_points,
- get_tiles,
- set_navigator,
- clear_navigator_path,
- get_navigator_path,
- try_getting_tile_at,
- try_getting_navigator_location,
- try_getting_navigator_path_to,
- try_getting_navigator_summary,
- try_adding_step_to_navigator
- )
-
-import Array
-
-import Battlemap.Navigator
-import Battlemap.Tile
-import Battlemap.Direction
-import Battlemap.Location
-
-import Character
-
-import Constants.Movement
-
---------------------------------------------------------------------------------
--- TYPES -----------------------------------------------------------------------
---------------------------------------------------------------------------------
-type alias Type =
- {
- width: Int,
- height: Int,
- content: (Array.Array Battlemap.Tile.Type),
- navigator: (Maybe Battlemap.Navigator.Type)
- }
-
---------------------------------------------------------------------------------
--- LOCAL -----------------------------------------------------------------------
---------------------------------------------------------------------------------
-location_to_index : Type -> Battlemap.Location.Type -> Int
-location_to_index bmap loc =
- ((loc.y * bmap.width) + loc.x)
-
-has_location : Type -> Battlemap.Location.Type -> Bool
-has_location bmap loc =
- (
- (loc.x >= 0)
- && (loc.y >= 0)
- && (loc.x < bmap.width)
- && (loc.y < bmap.height)
- )
-
-tile_cost_function : (
- Type ->
- Battlemap.Location.Type ->
- (List Character.Type) ->
- Battlemap.Location.Type ->
- Int
- )
-tile_cost_function bmap start_loc char_list loc =
- if
- (
- (Battlemap.Location.get_ref start_loc)
- ==
- (Battlemap.Location.get_ref loc)
- )
- then
- 0
- else
- if (has_location bmap loc)
- then
- case
- (Array.get (location_to_index bmap loc) bmap.content)
- of
- (Just tile) ->
- if
- (List.any
- (\c -> ((Character.get_location c) == loc))
- char_list
- )
- then
- Constants.Movement.cost_when_occupied_tile
- else
- (Battlemap.Tile.get_cost tile)
-
- Nothing -> Constants.Movement.cost_when_out_of_bounds
- else
- Constants.Movement.cost_when_out_of_bounds
-
---------------------------------------------------------------------------------
--- EXPORTED --------------------------------------------------------------------
---------------------------------------------------------------------------------
-get_width : Type -> Int
-get_width bmap = bmap.width
-
-get_height : Type -> Int
-get_height bmap = bmap.height
-
-get_tiles : Type -> (Array.Array Battlemap.Tile.Type)
-get_tiles bmap = bmap.content
-
-empty : Type
-empty =
- {
- width = 0,
- height = 0,
- content = (Array.empty),
- navigator = Nothing
- }
-
-new : Int -> Int -> (List Battlemap.Tile.Type) -> Type
-new width height tiles =
- {
- width = width,
- height = height,
- content = (Array.fromList tiles),
- navigator = Nothing
- }
-
-reset : Type -> Type
-reset bmap =
- {bmap |
- navigator = Nothing
- }
-
-clear_navigator_path : Type -> Type
-clear_navigator_path bmap =
- case bmap.navigator of
- (Just navigator) ->
- {bmap | navigator = (Just (Battlemap.Navigator.clear_path navigator))}
-
- Nothing -> bmap
-
-get_navigator_path : Type -> (List Battlemap.Direction.Type)
-get_navigator_path bmap =
- case bmap.navigator of
- (Just navigator) -> (Battlemap.Navigator.get_path navigator)
- Nothing -> []
-
-try_getting_navigator_location : Type -> (Maybe Battlemap.Location.Type)
-try_getting_navigator_location bmap =
- case bmap.navigator of
- (Just navigator) ->
- (Just (Battlemap.Navigator.get_current_location navigator))
-
- Nothing -> Nothing
-
-get_navigator_remaining_points : Type -> Int
-get_navigator_remaining_points bmap =
- case bmap.navigator of
- (Just navigator) -> (Battlemap.Navigator.get_remaining_points navigator)
- Nothing -> -1
-
-set_navigator : (
- Battlemap.Location.Type ->
- Int ->
- Int ->
- (List Character.Type) ->
- Type ->
- Type
- )
-set_navigator start_loc movement_points attack_range character_list bmap =
- {bmap |
- navigator =
- (Just
- (Battlemap.Navigator.new
- start_loc
- movement_points
- attack_range
- (tile_cost_function
- bmap
- start_loc
- character_list
- )
- )
- )
- }
-
-try_getting_tile_at : (
- Type ->
- Battlemap.Location.Type ->
- (Maybe Battlemap.Tile.Type)
- )
-try_getting_tile_at bmap loc =
- (Array.get (location_to_index bmap loc) bmap.content)
-
-try_adding_step_to_navigator : (
- Type ->
- (List Character.Type) ->
- Battlemap.Direction.Type ->
- (Maybe Type)
- )
-try_adding_step_to_navigator bmap character_list dir =
- case bmap.navigator of
- (Just navigator) ->
- let
- new_navigator =
- (Battlemap.Navigator.try_adding_step
- navigator
- dir
- (tile_cost_function
- bmap
- (Battlemap.Navigator.get_starting_location navigator)
- character_list
- )
- )
- in
- case new_navigator of
- (Just _) -> (Just {bmap | navigator = new_navigator})
- Nothing -> Nothing
-
- _ -> Nothing
-
-try_getting_navigator_summary : Type -> (Maybe Battlemap.Navigator.Summary)
-try_getting_navigator_summary bmap =
- case bmap.navigator of
- (Just navigator) -> (Just (Battlemap.Navigator.get_summary navigator))
- Nothing -> Nothing
-
-try_getting_navigator_path_to : (
- Type ->
- Battlemap.Location.Ref ->
- (Maybe (List Battlemap.Direction.Type))
- )
-try_getting_navigator_path_to bmap loc_ref =
- case bmap.navigator of
- (Just navigator) ->
- (Battlemap.Navigator.try_getting_path_to navigator loc_ref)
-
- Nothing -> Nothing
-
diff --git a/src/battlemap/src/Battlemap/Direction.elm b/src/battlemap/src/Battlemap/Direction.elm
deleted file mode 100644
index cebe765..0000000
--- a/src/battlemap/src/Battlemap/Direction.elm
+++ /dev/null
@@ -1,27 +0,0 @@
-module Battlemap.Direction exposing (Type(..), opposite_of, to_string)
-
-type Type =
- None
- | Left
- | Right
- | Up
- | Down
-
-opposite_of : Type -> Type
-opposite_of d =
- case d of
- Left -> Right
- Right -> Left
- Up -> Down
- Down -> Up
- None -> None
-
-to_string : Type -> String
-to_string dir =
- case dir of
- Right -> "R"
- Left -> "L"
- Up -> "U"
- Down -> "D"
- None -> "N"
-
diff --git a/src/battlemap/src/Battlemap/Location.elm b/src/battlemap/src/Battlemap/Location.elm
deleted file mode 100644
index 8c23e9d..0000000
--- a/src/battlemap/src/Battlemap/Location.elm
+++ /dev/null
@@ -1,45 +0,0 @@
-module Battlemap.Location exposing (..)
-
-import Battlemap.Direction
-
-type alias Type =
- {
- x : Int,
- y : Int
- }
-
-type alias Ref = (Int, Int)
-
-neighbor : Type -> Battlemap.Direction.Type -> Type
-neighbor loc dir =
- case dir of
- Battlemap.Direction.Right -> {loc | x = (loc.x + 1)}
- Battlemap.Direction.Left -> {loc | x = (loc.x - 1)}
- Battlemap.Direction.Up -> {loc | y = (loc.y - 1)}
- Battlemap.Direction.Down -> {loc | y = (loc.y + 1)}
- Battlemap.Direction.None -> loc
-
-
-get_ref : Type -> Ref
-get_ref l =
- (l.x, l.y)
-
-from_ref : Ref -> Type
-from_ref (x, y) =
- {x = x, y = y}
-
-dist : Type -> Type -> Int
-dist loc_a loc_b =
- if (loc_a.x > loc_b.x)
- then
- if (loc_a.y > loc_b.y)
- then
- ((loc_a.x - loc_b.x) + (loc_a.y - loc_b.y))
- else
- ((loc_a.x - loc_b.x) + (loc_b.y - loc_a.y))
- else
- if (loc_a.y > loc_b.y)
- then
- ((loc_b.x - loc_a.x) + (loc_a.y - loc_b.y))
- else
- ((loc_b.x - loc_a.x) + (loc_b.y - loc_a.y))
diff --git a/src/battlemap/src/Battlemap/Marker.elm b/src/battlemap/src/Battlemap/Marker.elm
deleted file mode 100644
index ebefce6..0000000
--- a/src/battlemap/src/Battlemap/Marker.elm
+++ /dev/null
@@ -1,5 +0,0 @@
-module Battlemap.Marker exposing (Type(..))
-
-type Type =
- CanAttack
- | CanGoTo
diff --git a/src/battlemap/src/Init.elm b/src/battlemap/src/ElmModule/Init.elm
index e8b797a..2b62933 100644
--- a/src/battlemap/src/Init.elm
+++ b/src/battlemap/src/ElmModule/Init.elm
@@ -1,8 +1,8 @@
-module Init exposing (init)
+module ElmModule.Init exposing (init)
-- Battlemap -------------------------------------------------------------------
-import Model
-import Event
+import Struct.Model
+import Struct.Event
import Shim.Model
@@ -15,7 +15,7 @@ import Send.LoadBattlemap
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
-init : (Model.Type, (Cmd Event.Type))
+init : (Struct.Model.Type, (Cmd Event.Type))
init =
let
model = (Shim.Model.generate)
diff --git a/src/battlemap/src/ElmModule/Subscriptions.elm b/src/battlemap/src/ElmModule/Subscriptions.elm
new file mode 100644
index 0000000..c8126b1
--- /dev/null
+++ b/src/battlemap/src/ElmModule/Subscriptions.elm
@@ -0,0 +1,7 @@
+module ElmModule.Subscriptions exposing (..)
+
+import Struct.Model
+import Struct.Event
+
+subscriptions : Struct.Model.Type -> (Sub Struct.Event.Type)
+subscriptions model = Sub.none
diff --git a/src/battlemap/src/ElmModule/Update.elm b/src/battlemap/src/ElmModule/Update.elm
new file mode 100644
index 0000000..947b232
--- /dev/null
+++ b/src/battlemap/src/ElmModule/Update.elm
@@ -0,0 +1,55 @@
+module ElmModule.Update exposing (update)
+
+-- Elm -------------------------------------------------------------------------
+
+-- Battlemap -------------------------------------------------------------------
+import Struct.Event
+import Struct.Error
+import Struct.UI
+import Struct.Model
+
+import Update.RequestDirection
+import Update.SelectTile
+import Update.SelectCharacter
+import Update.EndTurn
+import Update.HandleServerReply
+
+import Send.LoadBattlemap
+
+update : (
+ Struct.Event.Type ->
+ Struct.Model.Type ->
+ (Struct.Model.Type, (Cmd Struct.Event.Type))
+ )
+update event model =
+ let
+ new_model = (Struct.Model.clear_error model)
+ in
+ case event of
+ (Struct.Event.DirectionRequested d) ->
+ (Update.RequestDirection.apply_to new_model d)
+
+ (Struct.Event.TileSelected loc) ->
+ (Update.SelectTile.apply_to new_model loc)
+
+ (Struct.Event.CharacterSelected char_id) ->
+ (Update.SelectCharacter.apply_to new_model char_id)
+
+ Struct.Event.TurnEnded ->
+ (Update.EndTurn.apply_to new_model)
+
+ (Struct.Event.ScaleChangeRequested mod) ->
+ (Update.ChangeScale.apply_to new_model mod)
+
+ (Struct.Event.TabSelected tab) ->
+ (Update.SelectTab.apply_to new_model mod)
+
+ Struct.Event.DebugTeamSwitchRequest ->
+ (Update.SwitchTeam.apply_to new_model)
+
+ (Event.DebugLoadBattlemapRequest) ->
+ (Update.SendLoadBattlemapRequest.apply_to new_model)
+
+ (Event.ServerReplied result) ->
+ (Model.HandleServerReply.apply_to model result)
+
diff --git a/src/battlemap/src/View.elm b/src/battlemap/src/ElmModule/View.elm
index 9073d93..e6e0295 100644
--- a/src/battlemap/src/View.elm
+++ b/src/battlemap/src/ElmModule/View.elm
@@ -1,4 +1,4 @@
-module View exposing (view)
+module ElmModule.View exposing (view)
-- Elm -------------------------------------------------------------------------
import Dict
@@ -7,19 +7,22 @@ import Html
import Html.Attributes
-- Battlemap -------------------------------------------------------------------
-import UI
+import Struct.UI
+import Struct.Event
+import Struct.Model
import View.Battlemap
import View.SideBar
import View.Footer
-import Event
-import Model
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
-view : Model.Type -> (Html.Html Event.Type)
+view : Struct.Model.Type -> (Html.Html Struct.Event.Type)
view model =
(Html.div
[
@@ -38,7 +41,7 @@ view model =
[
(View.Battlemap.get_html
model.battlemap
- (UI.get_zoom_level model.ui)
+ (Struct.UI.get_zoom_level model.ui)
(Dict.values model.characters)
)
]
diff --git a/src/battlemap/src/Error.elm b/src/battlemap/src/Error.elm
deleted file mode 100644
index 206088e..0000000
--- a/src/battlemap/src/Error.elm
+++ /dev/null
@@ -1,33 +0,0 @@
-module Error exposing (Type, Mode(..), new, to_string)
-
-type Mode =
- IllegalAction
- | Programming
- | Unimplemented
- | Networking
-
-type alias Type =
- {
- mode: Mode,
- message: String
- }
-
-new : Mode -> String -> Type
-new mode str =
- {
- mode = mode,
- message = str
- }
-
-to_string : Type -> String
-to_string e =
- (
- (case e.mode of
- IllegalAction -> "Request discarded: "
- Programming -> "Error in the program (please report): "
- Unimplemented -> "Update discarded due to unimplemented feature: "
- Networking -> "Error while conversing with the server: "
- )
- ++ e.message
- )
-
diff --git a/src/battlemap/src/Event.elm b/src/battlemap/src/Event.elm
deleted file mode 100644
index 1a6f2e5..0000000
--- a/src/battlemap/src/Event.elm
+++ /dev/null
@@ -1,21 +0,0 @@
-module Event exposing (Type(..))
-
-import Http
-
-import Battlemap.Direction
-import Battlemap.Location
-
-import Character
-
-import UI
-
-type Type =
- DirectionRequested Battlemap.Direction.Type
- | TileSelected Battlemap.Location.Ref
- | CharacterSelected Character.Ref
- | TurnEnded
- | ScaleChangeRequested Float
- | TabSelected UI.Tab
- | ServerReplied (Result Http.Error (List (List String)))
- | DebugTeamSwitchRequest
- | DebugLoadBattlemapRequest
diff --git a/src/battlemap/src/Model/SelectCharacter.elm b/src/battlemap/src/Model/SelectCharacter.elm
deleted file mode 100644
index 619a729..0000000
--- a/src/battlemap/src/Model/SelectCharacter.elm
+++ /dev/null
@@ -1,110 +0,0 @@
-module Model.SelectCharacter exposing (apply_to)
-
--- Elm -------------------------------------------------------------------------
-import Dict
-
--- Battlemap -------------------------------------------------------------------
-import Battlemap
-import Battlemap.Direction
-
-import Character
-
-import UI
-
-import Model
-import Model.RequestDirection
-
-import Error
-
---------------------------------------------------------------------------------
--- LOCAL -----------------------------------------------------------------------
---------------------------------------------------------------------------------
-autopilot : Battlemap.Direction.Type -> Model.Type -> Model.Type
-autopilot dir model =
- (Model.RequestDirection.apply_to model dir)
-
-attack_character : (
- Model.Type ->
- Character.Ref ->
- Character.Ref ->
- Character.Type ->
- Model.Type
- )
-attack_character model main_char_id target_char_id target_char =
- {model |
- targets = [target_char_id],
- ui = (UI.set_previous_action model.ui Nothing)
- }
-
-select_character : (
- Model.Type ->
- Character.Ref ->
- Character.Type ->
- Model.Type
- )
-select_character model target_char_id target_char =
- if ((Character.is_enabled target_char))
- then
- {model |
- state = Model.Default,
- controlled_character = (Just target_char_id),
- ui = (UI.set_previous_action model.ui Nothing),
- battlemap =
- (Battlemap.set_navigator
- (Character.get_location target_char)
- (Character.get_movement_points target_char)
- (Character.get_attack_range target_char)
- (Dict.values model.characters)
- model.battlemap
- )
- }
- else
- {model |
- ui =
- (UI.set_previous_action
- model.ui
- (Just (UI.SelectedCharacter target_char_id))
- )
- }
-
---------------------------------------------------------------------------------
--- EXPORTED --------------------------------------------------------------------
---------------------------------------------------------------------------------
-apply_to : Model.Type -> Character.Ref -> Model.Type
-apply_to model target_char_id =
- if
- (
- (UI.get_previous_action model.ui)
- ==
- (Just (UI.SelectedCharacter target_char_id))
- )
- then
- case (Dict.get target_char_id model.characters) of
- (Just target_char) ->
- case model.controlled_character of
- (Just main_char_id) ->
- (attack_character
- model
- main_char_id
- target_char_id
- target_char
- )
-
- _ -> (select_character model target_char_id target_char)
-
- Nothing ->
- (Model.invalidate
- model
- (Error.new
- Error.Programming
- "SelectCharacter: Unknown char selected."
- )
- )
- else
- {model |
- ui =
- (UI.set_previous_action
- model.ui
- (Just (UI.SelectedCharacter target_char_id))
- )
- }
diff --git a/src/battlemap/src/Battlemap/Navigator/Move.elm b/src/battlemap/src/Move.elm
index 9d7a17b..945d29f 100644
--- a/src/battlemap/src/Battlemap/Navigator/Move.elm
+++ b/src/battlemap/src/Move.elm
@@ -1,68 +1,71 @@
-module Battlemap.Navigator.Move exposing (to)
+module ???.MoveNavigator exposing (to)
+
+-- TODO: This should not belong to the Struct.Navigator module, as it's actually
+-- a module used to manipulate an existing navigator in a certain way.
import Set
import List
-import Battlemap
-import Battlemap.Direction
-import Battlemap.Location
-import Battlemap.Tile
-import Battlemap.Navigator
+import Struct.Battlemap
+import Struct.Direction
+import Struct.Location
+import Struct.Tile
+import Struct.Navigator
import Character
import Util.List
can_move_to_new_tile : (
- Battlemap.Navigator.Type ->
- Battlemap.Type ->
- Battlemap.Location.Type ->
+ Struct.Navigator.Type ->
+ Struct.Battlemap.Type ->
+ Struct.Location.Type ->
Bool
)
can_move_to_new_tile nav battlemap next_location =
(
(nav.remaining_points > 0)
- && (Battlemap.has_location battlemap next_location)
+ && (Struct.Battlemap.has_location battlemap next_location)
&& (nav.current_location /= next_location)
&&
(not
(Set.member
- (Battlemap.Location.get_ref next_location)
+ (Struct.Location.get_ref next_location)
nav.visited_locations
)
)
)
battlemap_move_to : (
- Battlemap.Type ->
- Battlemap.Location.Type ->
- Battlemap.Direction.Type ->
- Battlemap.Location.Type ->
- Battlemap.Type
+ Struct.Battlemap.Type ->
+ Struct.Location.Type ->
+ Struct.Direction.Type ->
+ Struct.Location.Type ->
+ Struct.Battlemap.Type
)
battlemap_move_to battlemap current_loc dir next_loc =
- (Battlemap.apply_to_tile_unsafe
- (Battlemap.apply_to_tile_unsafe
+ (Struct.Battlemap.apply_to_tile_unsafe
+ (Struct.Battlemap.apply_to_tile_unsafe
battlemap
current_loc
- (Battlemap.Tile.set_direction dir)
+ (Struct.Tile.set_direction dir)
)
next_loc
- (Battlemap.Tile.set_direction dir)
+ (Struct.Tile.set_direction dir)
)
navigator_move_to : (
- Battlemap.Navigator.Type ->
- Battlemap.Direction.Type ->
- Battlemap.Location.Type ->
- Battlemap.Navigator.Type
+ Struct.Navigator.Type ->
+ Struct.Direction.Type ->
+ Struct.Location.Type ->
+ Struct.Navigator.Type
)
navigator_move_to nav dir next_loc =
{nav |
current_location = next_loc,
visited_locations =
(Set.insert
- (Battlemap.Location.get_ref nav.current_location)
+ (Struct.Location.get_ref nav.current_location)
nav.visited_locations
),
previous_directions = (dir :: nav.previous_directions),
@@ -70,31 +73,31 @@ navigator_move_to nav dir next_loc =
}
battlemap_backtrack : (
- Battlemap.Type ->
- Battlemap.Location.Type ->
- Battlemap.Type
+ Struct.Battlemap.Type ->
+ Struct.Location.Type ->
+ Struct.Battlemap.Type
)
battlemap_backtrack battlemap current_loc =
- (Battlemap.apply_to_tile_unsafe
+ (Struct.Battlemap.apply_to_tile_unsafe
battlemap
current_loc
- (Battlemap.Tile.set_direction
- Battlemap.Direction.None
+ (Struct.Tile.set_direction
+ Struct.Direction.None
)
)
navigator_backtrack : (
- Battlemap.Navigator.Type ->
- Battlemap.Location.Type ->
- (List Battlemap.Direction.Type) ->
- Battlemap.Navigator.Type
+ Struct.Navigator.Type ->
+ Struct.Location.Type ->
+ (List Struct.Direction.Type) ->
+ Struct.Navigator.Type
)
navigator_backtrack nav next_loc prev_dir_tail =
{nav |
current_location = next_loc,
visited_locations =
(Set.remove
- (Battlemap.Location.get_ref next_loc)
+ (Struct.Location.get_ref next_loc)
nav.visited_locations
),
previous_directions = prev_dir_tail,
@@ -102,15 +105,15 @@ navigator_backtrack nav next_loc prev_dir_tail =
}
to : (
- Battlemap.Type ->
- Battlemap.Navigator.Type ->
- Battlemap.Direction.Type ->
+ Struct.Battlemap.Type ->
+ Struct.Navigator.Type ->
+ Struct.Direction.Type ->
(List Character.Type) ->
- (Battlemap.Type, Battlemap.Navigator.Type)
+ (Struct.Battlemap.Type, Struct.Navigator.Type)
)
to battlemap nav dir char_list =
let
- next_location = (Battlemap.Location.neighbor nav.current_location dir)
+ next_location = (Struct.Location.neighbor nav.current_location dir)
is_occupied =
(List.any
(\c -> ((Character.get_location c) == next_location))
@@ -138,7 +141,7 @@ to battlemap nav dir char_list =
case (Util.List.pop nav.previous_directions) of
Nothing -> (battlemap, nav)
(Just (head, tail)) ->
- if (head == (Battlemap.Direction.opposite_of dir))
+ if (head == (Struct.Direction.opposite_of dir))
then
(
(battlemap_backtrack
diff --git a/src/battlemap/src/Query/CharacterTurn.elm b/src/battlemap/src/Send/Query/CharacterTurn.elm
index ec7efa0..ec7efa0 100644
--- a/src/battlemap/src/Query/CharacterTurn.elm
+++ b/src/battlemap/src/Send/Query/CharacterTurn.elm
diff --git a/src/battlemap/src/Send.elm b/src/battlemap/src/Send/Send.elm
index 3288050..3288050 100644
--- a/src/battlemap/src/Send.elm
+++ b/src/battlemap/src/Send/Send.elm
diff --git a/src/battlemap/src/Struct/Battlemap.elm b/src/battlemap/src/Struct/Battlemap.elm
new file mode 100644
index 0000000..bd1f3b0
--- /dev/null
+++ b/src/battlemap/src/Struct/Battlemap.elm
@@ -0,0 +1,122 @@
+module Struct.Battlemap exposing
+ (
+ Type,
+ empty,
+ new,
+ get_width,
+ get_height,
+ get_tiles,
+ try_getting_tile_at
+ )
+
+-- Elm -------------------------------------------------------------------------
+import Array
+
+-- Battlemap -------------------------------------------------------------------
+import Struct.Character
+import Struct.Navigator
+import Struct.Tile
+import Struct.Direction
+import Struct.Location
+
+import Constants.Movement
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type alias Type =
+ {
+ width: Int,
+ height: Int,
+ content: (Array.Array Struct.Tile.Type)
+ }
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+location_to_index : Type -> Struct.Location.Type -> Int
+location_to_index bmap loc =
+ ((loc.y * bmap.width) + loc.x)
+
+has_location : Type -> Struct.Location.Type -> Bool
+has_location bmap loc =
+ (
+ (loc.x >= 0)
+ && (loc.y >= 0)
+ && (loc.x < bmap.width)
+ && (loc.y < bmap.height)
+ )
+
+tile_cost_function : (
+ Type ->
+ Struct.Location.Type ->
+ (List Struct.Character.Type) ->
+ Struct.Location.Type ->
+ Int
+ )
+tile_cost_function bmap start_loc char_list loc =
+ if
+ (
+ (Struct.Location.get_ref start_loc)
+ ==
+ (Struct.Location.get_ref loc)
+ )
+ then
+ 0
+ else
+ if (has_location bmap loc)
+ then
+ case
+ (Array.get (location_to_index bmap loc) bmap.content)
+ of
+ (Just tile) ->
+ if
+ (List.any
+ (\c -> ((Struct.Character.get_location c) == loc))
+ char_list
+ )
+ then
+ Constants.Movement.cost_when_occupied_tile
+ else
+ (Struct.Tile.get_cost tile)
+
+ Nothing -> Constants.Movement.cost_when_out_of_bounds
+ else
+ Constants.Movement.cost_when_out_of_bounds
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+get_width : Type -> Int
+get_width bmap = bmap.width
+
+get_height : Type -> Int
+get_height bmap = bmap.height
+
+get_tiles : Type -> (Array.Array Struct.Tile.Type)
+get_tiles bmap = bmap.content
+
+empty : Type
+empty =
+ {
+ width = 0,
+ height = 0,
+ content = (Array.empty),
+ navigator = Nothing
+ }
+
+new : Int -> Int -> (List Struct.Tile.Type) -> Type
+new width height tiles =
+ {
+ width = width,
+ height = height,
+ content = (Array.fromList tiles)
+ }
+
+try_getting_tile_at : (
+ Type ->
+ Struct.Location.Type ->
+ (Maybe Struct.Tile.Type)
+ )
+try_getting_tile_at bmap loc =
+ (Array.get (location_to_index bmap loc) bmap.content)
diff --git a/src/battlemap/src/Character.elm b/src/battlemap/src/Struct/Character.elm
index 31337f7..1d5b269 100644
--- a/src/battlemap/src/Character.elm
+++ b/src/battlemap/src/Struct/Character.elm
@@ -1,4 +1,4 @@
-module Character exposing
+module Struct.Character exposing
(
Type,
Ref,
@@ -18,7 +18,7 @@ module Character exposing
)
-- Battlemap -------------------------------------------------------------------
-import Battlemap.Location
+import Struct.Location
--------------------------------------------------------------------------------
-- TYPES -----------------------------------------------------------------------
@@ -29,7 +29,7 @@ type alias Type =
name : String,
icon : String,
portrait : String,
- location : Battlemap.Location.Type,
+ location : Struct.Location.Type,
health : Int,
max_health : Int,
team : Int,
@@ -54,7 +54,7 @@ new : (
String -> -- portrait
Int -> -- health
Int -> -- max_health
- Battlemap.Location.Type -> -- location
+ Struct.Location.Type -> -- location
Int -> -- team
Int -> -- movement_points
Int -> -- atk_dist
@@ -99,10 +99,10 @@ get_current_health c = c.health
get_max_health : Type -> Int
get_max_health c = c.max_health
-get_location : Type -> Battlemap.Location.Type
+get_location : Type -> Struct.Location.Type
get_location t = t.location
-set_location : Battlemap.Location.Type -> Type -> Type
+set_location : Struct.Location.Type -> Type -> Type
set_location location char = {char | location = location}
get_movement_points : Type -> Int
diff --git a/src/battlemap/src/Struct/Direction.elm b/src/battlemap/src/Struct/Direction.elm
new file mode 100644
index 0000000..c8eb28e
--- /dev/null
+++ b/src/battlemap/src/Struct/Direction.elm
@@ -0,0 +1,37 @@
+module Struct.Direction exposing (Type(..), opposite_of, to_string)
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type Type =
+ None
+ | Left
+ | Right
+ | Up
+ | Down
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+opposite_of : Type -> Type
+opposite_of d =
+ case d of
+ Left -> Right
+ Right -> Left
+ Up -> Down
+ Down -> Up
+ None -> None
+
+to_string : Type -> String
+to_string dir =
+ case dir of
+ Right -> "R"
+ Left -> "L"
+ Up -> "U"
+ Down -> "D"
+ None -> "N"
+
diff --git a/src/battlemap/src/Struct/Error.elm b/src/battlemap/src/Struct/Error.elm
new file mode 100644
index 0000000..3607d1d
--- /dev/null
+++ b/src/battlemap/src/Struct/Error.elm
@@ -0,0 +1,43 @@
+module Struct.Error exposing (Type, Mode(..), new, to_string)
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type Mode =
+ IllegalAction
+ | Programming
+ | Unimplemented
+ | Networking
+
+type alias Type =
+ {
+ mode: Mode,
+ message: String
+ }
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+new : Mode -> String -> Type
+new mode str =
+ {
+ mode = mode,
+ message = str
+ }
+
+to_string : Type -> String
+to_string e =
+ (
+ (case e.mode of
+ IllegalAction -> "Request discarded: "
+ Programming -> "Error in the program (please report): "
+ Unimplemented -> "Update discarded due to unimplemented feature: "
+ Networking -> "Error while conversing with the server: "
+ )
+ ++ e.message
+ )
+
diff --git a/src/battlemap/src/Struct/Event.elm b/src/battlemap/src/Struct/Event.elm
new file mode 100644
index 0000000..dadc11d
--- /dev/null
+++ b/src/battlemap/src/Struct/Event.elm
@@ -0,0 +1,24 @@
+module Struct.Event exposing (Type(..))
+
+-- Elm -------------------------------------------------------------------------
+import Http
+
+-- Battlemap -------------------------------------------------------------------
+import Struct.Direction
+import Struct.Location
+import Struct.Character
+import Struct.UI
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type Type =
+ DirectionRequested Struct.Direction.Type
+ | TileSelected Struct.Location.Ref
+ | CharacterSelected Struct.Character.Ref
+ | TurnEnded
+ | ScaleChangeRequested Float
+ | TabSelected Struct.UI.Tab
+ | ServerReplied (Result Http.Error (List (List String)))
+ | DebugTeamSwitchRequest
+ | DebugLoadBattlemapRequest
diff --git a/src/battlemap/src/Struct/Location.elm b/src/battlemap/src/Struct/Location.elm
new file mode 100644
index 0000000..ad9a811
--- /dev/null
+++ b/src/battlemap/src/Struct/Location.elm
@@ -0,0 +1,49 @@
+module Struct.Location exposing (..)
+
+-- Elm -------------------------------------------------------------------------
+
+-- Battlemap -------------------------------------------------------------------
+import Struct.Direction
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type alias Type =
+ {
+ x : Int,
+ y : Int
+ }
+
+type alias Ref = (Int, Int)
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+neighbor : Type -> Struct.Direction.Type -> Type
+neighbor loc dir =
+ case dir of
+ Struct.Direction.Right -> {loc | x = (loc.x + 1)}
+ Struct.Direction.Left -> {loc | x = (loc.x - 1)}
+ Struct.Direction.Up -> {loc | y = (loc.y - 1)}
+ Struct.Direction.Down -> {loc | y = (loc.y + 1)}
+ Struct.Direction.None -> loc
+
+get_ref : Type -> Ref
+get_ref l =
+ (l.x, l.y)
+
+from_ref : Ref -> Type
+from_ref (x, y) =
+ {x = x, y = y}
+
+dist : Type -> Type -> Int
+dist loc_a loc_b =
+ (
+ (abs (loc_a.x - loc_b.x))
+ +
+ (abs (loc_a.y - loc_b.y))
+ )
diff --git a/src/battlemap/src/Struct/Marker.elm b/src/battlemap/src/Struct/Marker.elm
new file mode 100644
index 0000000..dd884e2
--- /dev/null
+++ b/src/battlemap/src/Struct/Marker.elm
@@ -0,0 +1,8 @@
+module Struct.Marker exposing (Type(..))
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type Type =
+ CanAttack
+ | CanGoTo
diff --git a/src/battlemap/src/Model.elm b/src/battlemap/src/Struct/Model.elm
index 9798149..dc1a13d 100644
--- a/src/battlemap/src/Model.elm
+++ b/src/battlemap/src/Struct/Model.elm
@@ -1,4 +1,4 @@
-module Model exposing
+module Struct.Model exposing
(
Type,
State(..),
@@ -13,14 +13,14 @@ module Model exposing
import Dict
-- Battlemap -------------------------------------------------------------------
-import Battlemap
-import Battlemap.Location
+import Struct.Battlemap
+import Struct.Location
-import UI
+import Struct.UI
-import Error
+import Struct.Error
-import Character
+import Struct.Character
import Query.CharacterTurn
--------------------------------------------------------------------------------
@@ -28,18 +28,18 @@ import Query.CharacterTurn
--------------------------------------------------------------------------------
type State =
Default
- | InspectingTile Battlemap.Location.Ref
- | InspectingCharacter Character.Ref
+ | InspectingTile Struct.Location.Ref
+ | InspectingCharacter Struct.Character.Ref
type alias Type =
{
state: State,
- battlemap: Battlemap.Type,
- characters: (Dict.Dict Character.Ref Character.Type),
- error: (Maybe Error.Type),
+ battlemap: Struct.Battlemap.Type,
+ characters: (Dict.Dict Struct.Character.Ref Struct.Character.Type),
+ error: (Maybe Struct.Error.Type),
controlled_team: Int,
player_id: String,
- ui: UI.Type,
+ ui: Struct.UI.Type,
char_turn: Query.CharacterTurn
}
@@ -50,12 +50,12 @@ type alias Type =
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
-add_character : Type -> Character.Type -> Type
+add_character : Type -> Struct.Character.Type -> Type
add_character model char =
{model |
characters =
(Dict.insert
- (Character.get_ref char)
+ (Struct.Character.get_ref char)
char
model.characters
)
@@ -64,22 +64,21 @@ add_character model char =
get_state : Type -> State
get_state model = model.state
-reset : Type -> (Dict.Dict Character.Ref Character.Type) -> Type
+reset : Type -> (Dict.Dict Struct.Character.Ref Struct.Character.Type) -> Type
reset model characters =
{model |
state = Default,
- battlemap = (Battlemap.reset model.battlemap),
characters = characters,
error = Nothing,
- ui = (UI.set_previous_action model.ui Nothing),
+ ui = (Struct.UI.set_previous_action model.ui Nothing),
char_turn = (Query.CharacterTurn.new)
}
-invalidate : Type -> Error.Type -> Type
+invalidate : Type -> Struct.Error.Type -> Type
invalidate model err =
{model |
error = (Just err),
- ui = (UI.set_displayed_tab model.ui UI.StatusTab)
+ ui = (Struct.UI.set_displayed_tab model.ui Struct.UI.StatusTab)
}
clear_error : Type -> Type
diff --git a/src/battlemap/src/Battlemap/Navigator.elm b/src/battlemap/src/Struct/Navigator.elm
index b535dd6..56ef255 100644
--- a/src/battlemap/src/Battlemap/Navigator.elm
+++ b/src/battlemap/src/Struct/Navigator.elm
@@ -1,4 +1,4 @@
-module Battlemap.Navigator exposing
+module Struct.Navigator exposing
(
Type,
Summary,
@@ -13,52 +13,51 @@ module Battlemap.Navigator exposing
try_adding_step,
try_getting_path_to
)
-
+-- Elm -------------------------------------------------------------------------
import Dict
-import Battlemap.Location
-import Battlemap.Direction
-import Battlemap.Marker
-
-import Battlemap.Navigator.Path
-import Battlemap.Navigator.RangeIndicator
+-- Battlemap -------------------------------------------------------------------
+import Struct.Location
+import Struct.Direction
+import Struct.Marker
+import Struct.Path
+import Struct.RangeIndicator
--------------------------------------------------------------------------------
-- TYPES -----------------------------------------------------------------------
--------------------------------------------------------------------------------
type alias Type =
{
- starting_location: Battlemap.Location.Type,
+ starting_location: Struct.Location.Type,
movement_dist: Int,
attack_dist: Int,
- path: Battlemap.Navigator.Path.Type,
+ path: Struct.Path.Type,
range_indicators:
(Dict.Dict
- Battlemap.Location.Ref
- Battlemap.Navigator.RangeIndicator.Type
+ Struct.Location.Ref
+ Struct.RangeIndicator.Type
)
}
type alias Summary =
{
- starting_location: Battlemap.Location.Type,
- path: (List Battlemap.Direction.Type),
- markers: (List (Battlemap.Location.Ref, Battlemap.Marker.Type))
+ starting_location: Struct.Location.Type,
+ path: (List Struct.Direction.Type),
+ markers: (List (Struct.Location.Ref, Struct.Marker.Type))
}
+
--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
--------------------------------------------------------------------------------
-
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
-
new : (
- Battlemap.Location.Type ->
+ Struct.Location.Type ->
Int ->
Int ->
- (Battlemap.Location.Type -> Int) ->
+ (Struct.Location.Type -> Int) ->
Type
)
new start_loc mov_dist atk_dist cost_fun =
@@ -66,9 +65,9 @@ new start_loc mov_dist atk_dist cost_fun =
starting_location = start_loc,
movement_dist = mov_dist,
attack_dist = atk_dist,
- path = (Battlemap.Navigator.Path.new start_loc mov_dist),
+ path = (Struct.Path.new start_loc mov_dist),
range_indicators =
- (Battlemap.Navigator.RangeIndicator.generate
+ (Struct.RangeIndicator.generate
start_loc
mov_dist
atk_dist
@@ -76,39 +75,39 @@ new start_loc mov_dist atk_dist cost_fun =
)
}
-get_current_location : Type -> Battlemap.Location.Type
+get_current_location : Type -> Struct.Location.Type
get_current_location navigator =
- (Battlemap.Navigator.Path.get_current_location navigator.path)
+ (Struct.Path.get_current_location navigator.path)
-get_starting_location : Type -> Battlemap.Location.Type
+get_starting_location : Type -> Struct.Location.Type
get_starting_location navigator = navigator.starting_location
get_remaining_points : Type -> Int
get_remaining_points navigator =
- (Battlemap.Navigator.Path.get_remaining_points navigator.path)
+ (Struct.Path.get_remaining_points navigator.path)
get_range_markers : (
Type ->
(List
- (Battlemap.Location.Ref, Battlemap.Navigator.RangeIndicator.Type)
+ (Struct.Location.Ref, Struct.RangeIndicator.Type)
)
)
get_range_markers navigator = (Dict.toList navigator.range_indicators)
-get_path : Type -> (List Battlemap.Direction.Type)
-get_path navigator = (Battlemap.Navigator.Path.get_summary navigator.path)
+get_path : Type -> (List Struct.Direction.Type)
+get_path navigator = (Struct.Path.get_summary navigator.path)
get_summary : Type -> Summary
get_summary navigator =
{
starting_location = navigator.starting_location,
- path = (Battlemap.Navigator.Path.get_summary navigator.path),
+ path = (Struct.Path.get_summary navigator.path),
markers =
(List.map
(\(loc, range_indicator) ->
(
loc,
- (Battlemap.Navigator.RangeIndicator.get_marker
+ (Struct.RangeIndicator.get_marker
range_indicator
)
)
@@ -123,7 +122,7 @@ clear_path : Type -> Type
clear_path navigator =
{navigator |
path =
- (Battlemap.Navigator.Path.new
+ (Struct.Path.new
navigator.starting_location
navigator.movement_dist
)
@@ -131,13 +130,13 @@ clear_path navigator =
try_adding_step : (
Type ->
- Battlemap.Direction.Type ->
- (Battlemap.Location.Type -> Int) ->
+ Struct.Direction.Type ->
+ (Struct.Location.Type -> Int) ->
(Maybe Type)
)
try_adding_step navigator dir cost_fun =
case
- (Battlemap.Navigator.Path.try_following_direction
+ (Struct.Path.try_following_direction
cost_fun
(Just navigator.path)
dir
@@ -148,12 +147,13 @@ try_adding_step navigator dir cost_fun =
try_getting_path_to : (
Type ->
- Battlemap.Location.Ref ->
- (Maybe (List Battlemap.Direction.Type))
+ Struct.Location.Ref ->
+ (Maybe (List Struct.Direction.Type))
)
try_getting_path_to navigator loc_ref =
case (Dict.get loc_ref navigator.range_indicators) of
(Just target) ->
- (Just (Battlemap.Navigator.RangeIndicator.get_path target))
+ (Just (Struct.RangeIndicator.get_path target))
+
Nothing -> Nothing
diff --git a/src/battlemap/src/Battlemap/Navigator/Path.elm b/src/battlemap/src/Struct/Path.elm
index d0a430f..ba568c3 100644
--- a/src/battlemap/src/Battlemap/Navigator/Path.elm
+++ b/src/battlemap/src/Struct/Path.elm
@@ -1,4 +1,4 @@
-module Battlemap.Navigator.Path exposing
+module Struct.Path exposing
(
Type,
new,
@@ -8,12 +8,14 @@ module Battlemap.Navigator.Path exposing
try_following_direction
)
+-- Elm -------------------------------------------------------------------------
import Set
-import Util.List
+-- Battlemap -------------------------------------------------------------------
+import Struct.Direction
+import Struct.Location
-import Battlemap.Direction
-import Battlemap.Location
+import Util.List
import Constants.Movement
@@ -22,9 +24,9 @@ import Constants.Movement
--------------------------------------------------------------------------------
type alias Type =
{
- current_location : Battlemap.Location.Type,
- visited_locations : (Set.Set Battlemap.Location.Ref),
- previous_directions : (List Battlemap.Direction.Type),
+ current_location : Struct.Location.Type,
+ visited_locations : (Set.Set Struct.Location.Ref),
+ previous_directions : (List Struct.Direction.Type),
previous_points : (List Int),
remaining_points : Int
}
@@ -34,7 +36,7 @@ type alias Type =
--------------------------------------------------------------------------------
has_been_to : (
Type ->
- Battlemap.Location.Type ->
+ Struct.Location.Type ->
Bool
)
has_been_to path location =
@@ -42,15 +44,15 @@ has_been_to path location =
(path.current_location == location)
||
(Set.member
- (Battlemap.Location.get_ref location)
+ (Struct.Location.get_ref location)
path.visited_locations
)
)
try_moving_to : (
Type ->
- Battlemap.Direction.Type ->
- Battlemap.Location.Type ->
+ Struct.Direction.Type ->
+ Struct.Location.Type ->
Int ->
(Maybe Type)
)
@@ -65,7 +67,7 @@ try_moving_to path dir next_loc cost =
current_location = next_loc,
visited_locations =
(Set.insert
- (Battlemap.Location.get_ref path.current_location)
+ (Struct.Location.get_ref path.current_location)
path.visited_locations
),
previous_directions = (dir :: path.previous_directions),
@@ -79,8 +81,8 @@ try_moving_to path dir next_loc cost =
try_backtracking_to : (
Type ->
- Battlemap.Direction.Type ->
- Battlemap.Location.Type ->
+ Struct.Direction.Type ->
+ Struct.Location.Type ->
(Maybe Type)
)
try_backtracking_to path dir location =
@@ -94,14 +96,14 @@ try_backtracking_to path dir location =
(Just (prev_dir_head, prev_dir_tail)),
(Just (prev_pts_head, prev_pts_tail))
) ->
- if (prev_dir_head == (Battlemap.Direction.opposite_of dir))
+ if (prev_dir_head == (Struct.Direction.opposite_of dir))
then
(Just
{path |
current_location = location,
visited_locations =
(Set.remove
- (Battlemap.Location.get_ref location)
+ (Struct.Location.get_ref location)
path.visited_locations
),
previous_directions = prev_dir_tail,
@@ -118,7 +120,7 @@ try_backtracking_to path dir location =
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
-new : Battlemap.Location.Type -> Int -> Type
+new : Struct.Location.Type -> Int -> Type
new start points =
{
current_location = start,
@@ -128,19 +130,19 @@ new start points =
remaining_points = points
}
-get_current_location : Type -> Battlemap.Location.Type
+get_current_location : Type -> Struct.Location.Type
get_current_location path = path.current_location
get_remaining_points : Type -> Int
get_remaining_points path = path.remaining_points
-get_summary : Type -> (List Battlemap.Direction.Type)
+get_summary : Type -> (List Struct.Direction.Type)
get_summary path = path.previous_directions
try_following_direction : (
- (Battlemap.Location.Type -> Int) ->
+ (Struct.Location.Type -> Int) ->
(Maybe Type) ->
- Battlemap.Direction.Type ->
+ Struct.Direction.Type ->
(Maybe Type)
)
try_following_direction cost_fun maybe_path dir =
@@ -148,7 +150,7 @@ try_following_direction cost_fun maybe_path dir =
(Just path) ->
let
next_location =
- (Battlemap.Location.neighbor
+ (Struct.Location.neighbor
path.current_location
dir
)
diff --git a/src/battlemap/src/Battlemap/Navigator/RangeIndicator.elm b/src/battlemap/src/Struct/RangeIndicator.elm
index b0283e0..90328a3 100644
--- a/src/battlemap/src/Battlemap/Navigator/RangeIndicator.elm
+++ b/src/battlemap/src/Struct/RangeIndicator.elm
@@ -1,4 +1,4 @@
-module Battlemap.Navigator.RangeIndicator exposing
+module Struct.RangeIndicator exposing
(
Type,
generate,
@@ -6,12 +6,14 @@ module Battlemap.Navigator.RangeIndicator exposing
get_path
)
+-- Elm -------------------------------------------------------------------------
import Dict
import List
-import Battlemap.Direction
-import Battlemap.Location
-import Battlemap.Marker
+-- Battlemap -------------------------------------------------------------------
+import Struct.Direction
+import Struct.Location
+import Struct.Marker
import Constants.Movement
@@ -22,8 +24,8 @@ type alias Type =
{
distance: Int,
range: Int,
- path: (List Battlemap.Direction.Type),
- marker: Battlemap.Marker.Type
+ path: (List Struct.Direction.Type),
+ marker: Struct.Marker.Type
}
--------------------------------------------------------------------------------
@@ -31,10 +33,10 @@ type alias Type =
--------------------------------------------------------------------------------
get_closest : (
Int ->
- Battlemap.Location.Ref ->
+ Struct.Location.Ref ->
Type ->
- (Battlemap.Location.Ref, Type) ->
- (Battlemap.Location.Ref, Type)
+ (Struct.Location.Ref, Type) ->
+ (Struct.Location.Ref, Type)
)
get_closest dist ref indicator (prev_ref, prev_indicator) =
if
@@ -66,20 +68,20 @@ is_closer new_dist new_range neighbor =
handle_neighbors : (
Type ->
- Battlemap.Location.Type ->
+ Struct.Location.Type ->
Int ->
Int ->
- (Dict.Dict Battlemap.Location.Ref Type) ->
- (Battlemap.Location.Type -> Int) ->
- Battlemap.Direction.Type ->
- (Dict.Dict Battlemap.Location.Ref Type) ->
- (Dict.Dict Battlemap.Location.Ref Type)
+ (Dict.Dict Struct.Location.Ref Type) ->
+ (Struct.Location.Type -> Int) ->
+ Struct.Direction.Type ->
+ (Dict.Dict Struct.Location.Ref Type) ->
+ (Dict.Dict Struct.Location.Ref Type)
)
handle_neighbors src_indicator src_loc dist range results cost_fun dir rem =
let
- neighbor_loc = (Battlemap.Location.neighbor src_loc dir)
+ neighbor_loc = (Struct.Location.neighbor src_loc dir)
in
- case (Dict.get (Battlemap.Location.get_ref neighbor_loc) results) of
+ case (Dict.get (Struct.Location.get_ref neighbor_loc) results) of
(Just _) -> rem
Nothing ->
@@ -93,7 +95,7 @@ handle_neighbors src_indicator src_loc dist range results cost_fun dir rem =
(
case
(Dict.get
- (Battlemap.Location.get_ref neighbor_loc)
+ (Struct.Location.get_ref neighbor_loc)
rem
)
of
@@ -114,7 +116,7 @@ handle_neighbors src_indicator src_loc dist range results cost_fun dir rem =
)
then
(Dict.insert
- (Battlemap.Location.get_ref neighbor_loc)
+ (Struct.Location.get_ref neighbor_loc)
(
if (new_dist > dist)
then
@@ -122,14 +124,14 @@ handle_neighbors src_indicator src_loc dist range results cost_fun dir rem =
distance = (dist + 1),
range = new_range,
path = (dir :: src_indicator.path),
- marker = Battlemap.Marker.CanAttack
+ marker = Struct.Marker.CanAttack
}
else
{
distance = new_dist,
range = 0,
path = (dir :: src_indicator.path),
- marker = Battlemap.Marker.CanGoTo
+ marker = Struct.Marker.CanGoTo
}
)
rem
@@ -138,12 +140,12 @@ handle_neighbors src_indicator src_loc dist range results cost_fun dir rem =
rem
search : (
- (Dict.Dict Battlemap.Location.Ref Type) ->
- (Dict.Dict Battlemap.Location.Ref Type) ->
+ (Dict.Dict Struct.Location.Ref Type) ->
+ (Dict.Dict Struct.Location.Ref Type) ->
Int ->
Int ->
- (Battlemap.Location.Type -> Int) ->
- (Dict.Dict Battlemap.Location.Ref Type)
+ (Struct.Location.Type -> Int) ->
+ (Dict.Dict Struct.Location.Ref Type)
)
search result remaining dist range cost_fun =
if (Dict.isEmpty remaining)
@@ -160,7 +162,7 @@ search result remaining dist range cost_fun =
distance = Constants.Movement.cost_when_out_of_bounds,
path = [],
range = Constants.Movement.cost_when_out_of_bounds,
- marker = Battlemap.Marker.CanAttack
+ marker = Struct.Marker.CanAttack
}
)
remaining
@@ -174,9 +176,9 @@ search result remaining dist range cost_fun =
(
if (min.range > 0)
then
- Battlemap.Marker.CanAttack
+ Struct.Marker.CanAttack
else
- Battlemap.Marker.CanGoTo
+ Struct.Marker.CanGoTo
)
}
result
@@ -184,7 +186,7 @@ search result remaining dist range cost_fun =
(List.foldl
(handle_neighbors
min
- (Battlemap.Location.from_ref min_loc_ref)
+ (Struct.Location.from_ref min_loc_ref)
dist
range
result
@@ -192,10 +194,10 @@ search result remaining dist range cost_fun =
)
(Dict.remove min_loc_ref remaining)
[
- Battlemap.Direction.Left,
- Battlemap.Direction.Right,
- Battlemap.Direction.Up,
- Battlemap.Direction.Down
+ Struct.Direction.Left,
+ Struct.Direction.Right,
+ Struct.Direction.Up,
+ Struct.Direction.Down
]
)
dist
@@ -207,22 +209,22 @@ search result remaining dist range cost_fun =
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
generate : (
- Battlemap.Location.Type ->
+ Struct.Location.Type ->
Int ->
Int ->
- (Battlemap.Location.Type -> Int) ->
- (Dict.Dict Battlemap.Location.Ref Type)
+ (Struct.Location.Type -> Int) ->
+ (Dict.Dict Struct.Location.Ref Type)
)
generate location dist range cost_fun =
(search
Dict.empty
(Dict.insert
- (Battlemap.Location.get_ref location)
+ (Struct.Location.get_ref location)
{
distance = 0,
path = [],
range = 0,
- marker = Battlemap.Marker.CanGoTo
+ marker = Struct.Marker.CanGoTo
}
Dict.empty
)
@@ -231,8 +233,8 @@ generate location dist range cost_fun =
(cost_fun)
)
-get_marker : Type -> Battlemap.Marker.Type
+get_marker : Type -> Struct.Marker.Type
get_marker indicator = indicator.marker
-get_path : Type -> (List Battlemap.Direction.Type)
+get_path : Type -> (List Struct.Direction.Type)
get_path indicator = indicator.path
diff --git a/src/battlemap/src/Battlemap/Tile.elm b/src/battlemap/src/Struct/Tile.elm
index 23ee2a8..d75e74e 100644
--- a/src/battlemap/src/Battlemap/Tile.elm
+++ b/src/battlemap/src/Struct/Tile.elm
@@ -1,4 +1,4 @@
-module Battlemap.Tile exposing
+module Struct.Tile exposing
(
Type,
new,
@@ -9,14 +9,14 @@ module Battlemap.Tile exposing
)
-- Battlemap -------------------------------------------------------------------
-import Battlemap.Location
+import Struct.Location
--------------------------------------------------------------------------------
-- TYPES -----------------------------------------------------------------------
--------------------------------------------------------------------------------
type alias Type =
{
- location : Battlemap.Location.Type,
+ location : Struct.Location.Type,
icon_id : String,
crossing_cost : Int
}
@@ -44,7 +44,7 @@ error_tile x y =
crossing_cost = 1
}
-get_location : Type -> Battlemap.Location.Type
+get_location : Type -> Struct.Location.Type
get_location tile = tile.location
get_icon_id : Type -> String
diff --git a/src/battlemap/src/UI.elm b/src/battlemap/src/Struct/UI.elm
index 978ed00..3ef895d 100644
--- a/src/battlemap/src/UI.elm
+++ b/src/battlemap/src/Struct/UI.elm
@@ -1,4 +1,4 @@
-module UI exposing
+module Struct.UI exposing
(
Type,
Tab(..),
@@ -23,23 +23,23 @@ module UI exposing
)
-- Battlemap -------------------------------------------------------------------
-import Battlemap.Location
+import Struct.Location
-import Character
+import Struct.Character
--------------------------------------------------------------------------------
-- TYPES -----------------------------------------------------------------------
--------------------------------------------------------------------------------
type Tab =
StatusTab
- | CharactersTab
+ | Struct.CharactersTab
| SettingsTab
type Action =
UsedManualControls
- | SelectedLocation Battlemap.Location.Ref
- | SelectedCharacter Character.Ref
- | AttackedCharacter Character.Ref
+ | SelectedLocation Struct.Location.Ref
+ | SelectedCharacter Struct.Character.Ref
+ | AttackedCharacter Struct.Character.Ref
type alias Type =
{
@@ -89,12 +89,12 @@ to_string : Tab -> String
to_string tab =
case tab of
StatusTab -> "Status"
- CharactersTab -> "Characters"
+ Struct.CharactersTab -> "Characters"
SettingsTab -> "Settings"
get_all_tabs : (List Tab)
get_all_tabs =
- [StatusTab, CharactersTab, SettingsTab]
+ [StatusTab, Struct.CharactersTab, SettingsTab]
-- ManualControls --------------------------------------------------------------
has_manual_controls_enabled : Type -> Bool
diff --git a/src/battlemap/src/Subscriptions.elm b/src/battlemap/src/Subscriptions.elm
deleted file mode 100644
index 83df587..0000000
--- a/src/battlemap/src/Subscriptions.elm
+++ /dev/null
@@ -1,7 +0,0 @@
-module Subscriptions exposing (..)
-
-import Model
-import Event
-
-subscriptions : Model.Type -> (Sub Event.Type)
-subscriptions model = Sub.none
diff --git a/src/battlemap/src/Update.elm b/src/battlemap/src/Update.elm
deleted file mode 100644
index 787fc8e..0000000
--- a/src/battlemap/src/Update.elm
+++ /dev/null
@@ -1,90 +0,0 @@
-module Update exposing (update)
-
-import Event
-
-import Error
-
-import UI
-
-import Model
-import Model.RequestDirection
-import Model.SelectTile
-import Model.SelectCharacter
-import Model.EndTurn
-import Model.HandleServerReply
-
-import Send.LoadBattlemap
-
-update : Event.Type -> Model.Type -> (Model.Type, (Cmd Event.Type))
-update event model =
- let
- new_model = (Model.clear_error model)
- in
- case event of
- (Event.DirectionRequested d) ->
- ((Model.RequestDirection.apply_to new_model d), Cmd.none)
-
- (Event.TileSelected loc) ->
- (Model.SelectTile.apply_to new_model loc)
-
- (Event.CharacterSelected char_id) ->
- ((Model.SelectCharacter.apply_to new_model char_id), Cmd.none)
-
- Event.TurnEnded ->
- (Model.EndTurn.apply_to new_model)
-
- (Event.ScaleChangeRequested mod) ->
- if (mod == 0.0)
- then
- ({model | ui = (UI.reset_zoom_level model.ui)}, Cmd.none)
- else
- ({model | ui = (UI.mod_zoom_level model.ui mod)}, Cmd.none)
-
- (Event.TabSelected tab) ->
- ({model | ui = (UI.set_displayed_tab model.ui tab)}, Cmd.none)
-
- (Event.DebugTeamSwitchRequest) ->
- if (model.controlled_team == 0)
- then
- (
- (Model.reset
- {model |
- controlled_team = 1,
- player_id = "1"
- }
- model.characters
- ),
- Cmd.none
- )
- else
- (
- (Model.reset
- {model |
- controlled_team = 0,
- player_id = "0"
- }
- model.characters
- ),
- Cmd.none
- )
-
- (Event.DebugLoadBattlemapRequest) ->
- (
- model,
- (case (Send.LoadBattlemap.try model) of
- (Just cmd) -> cmd
- Nothing -> Cmd.none
- )
- )
-
- (Event.ServerReplied (Result.Err error)) ->
- (
- (Model.invalidate
- model
- (Error.new Error.Networking (toString error))
- ),
- Cmd.none
- )
-
- (Event.ServerReplied (Result.Ok commands)) ->
- (Model.HandleServerReply.apply_to model commands)
diff --git a/src/battlemap/src/Update/ChangeScale.elm b/src/battlemap/src/Update/ChangeScale.elm
new file mode 100644
index 0000000..139c662
--- /dev/null
+++ b/src/battlemap/src/Update/ChangeScale.elm
@@ -0,0 +1,26 @@
+module Update.ChangeScale exposing (apply_to)
+-- Elm -------------------------------------------------------------------------
+
+-- Battlemap -------------------------------------------------------------------
+import Struct.Model
+import Struct.Event
+import Struct.UI
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+apply_to : (
+ Struct.Model.Type ->
+ Float ->
+ (Struct.Model.Type, (Cmd Struct.Event.Type))
+ )
+apply_to model mod =
+ if (mod == 0.0)
+ then
+ ({model | ui = (Struct.UI.reset_zoom_level model.ui)}, Cmd.none)
+ else
+ ({model | ui = (Struct.UI.mod_zoom_level model.ui mod)}, Cmd.none)
diff --git a/src/battlemap/src/Model/EndTurn.elm b/src/battlemap/src/Update/EndTurn.elm
index fd0ec83..fd0ec83 100644
--- a/src/battlemap/src/Model/EndTurn.elm
+++ b/src/battlemap/src/Update/EndTurn.elm
diff --git a/src/battlemap/src/Model/HandleServerReply.elm b/src/battlemap/src/Update/HandleServerReply.elm
index 572fa0c..13c493c 100644
--- a/src/battlemap/src/Model/HandleServerReply.elm
+++ b/src/battlemap/src/Update/HandleServerReply.elm
@@ -39,8 +39,19 @@ apply_command cmd model =
--------------------------------------------------------------------------------
apply_to : (
Model.Type ->
- (List (List String)) ->
+ (Result Http.Error (List (List String)) ->
(Model.Type, (Cmd Event.Type))
)
-apply_to model serialized_commands =
- ((List.foldl (apply_command) model serialized_commands), Cmd.none)
+apply_to model query_result =
+ case query_result of
+ (Result.Err error) ->
+ (
+ (Model.invalidate
+ model
+ (Error.new Error.Networking (toString error))
+ ),
+ Cmd.none
+ )
+
+ (Result.Ok commands) ->
+ ((List.foldl (apply_command) model serialized_commands), Cmd.none)
diff --git a/src/battlemap/src/Model/HandleServerReply/AddChar.elm b/src/battlemap/src/Update/HandleServerReply/AddChar.elm
index f5f30ba..f5f30ba 100644
--- a/src/battlemap/src/Model/HandleServerReply/AddChar.elm
+++ b/src/battlemap/src/Update/HandleServerReply/AddChar.elm
diff --git a/src/battlemap/src/Model/HandleServerReply/SetMap.elm b/src/battlemap/src/Update/HandleServerReply/SetMap.elm
index e815093..e815093 100644
--- a/src/battlemap/src/Model/HandleServerReply/SetMap.elm
+++ b/src/battlemap/src/Update/HandleServerReply/SetMap.elm
diff --git a/src/battlemap/src/Model/RequestDirection.elm b/src/battlemap/src/Update/RequestDirection.elm
index 4e52897..3d6dfbe 100644
--- a/src/battlemap/src/Model/RequestDirection.elm
+++ b/src/battlemap/src/Update/RequestDirection.elm
@@ -1,32 +1,29 @@
-module Model.RequestDirection exposing (apply_to)
+module Update.RequestDirection exposing (apply_to)
-- Elm -------------------------------------------------------------------------
import Dict
-- Battlemap -------------------------------------------------------------------
-import Battlemap
-import Battlemap.Direction
-
-import Character
-
-import UI
-
-import Model
-import Error
+import Struct.Battlemap
+import Struct.Direction
+import Struct.Character
+import Struct.UI
+import Struct.Model
+import Struct.Error
--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
--------------------------------------------------------------------------------
make_it_so : (
- Model.Type ->
- Character.Ref ->
- Battlemap.Direction.Type ->
- Model.Type
+ Struct.Model.Type ->
+ Struct.Character.Ref ->
+ Struct.Direction.Type ->
+ Struct.Model.Type
)
make_it_so model char_ref dir =
let
new_bmap =
- (Battlemap.try_adding_step_to_navigator
+ (Struct.Battlemap.try_adding_step_to_navigator
model.battlemap
(Dict.values model.characters)
dir
@@ -37,17 +34,17 @@ make_it_so model char_ref dir =
{model |
battlemap = bmap,
ui =
- (UI.set_previous_action
+ (Struct.UI.set_previous_action
model.ui
- (Just UI.UsedManualControls)
+ (Just Struct.UI.UsedManualControls)
)
}
Nothing ->
- (Model.invalidate
+ (Struct.Model.invalidate
model
- (Error.new
- Error.IllegalAction
+ (Struct.Error.new
+ Struct.Error.IllegalAction
"Unreachable/occupied tile."
)
)
@@ -55,17 +52,27 @@ make_it_so model char_ref dir =
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
-apply_to : Model.Type -> Battlemap.Direction.Type -> Model.Type
+apply_to : (
+ Struct.Model.Type ->
+ Struct.Direction.Type ->
+ Struct.Model.Type
+ )
apply_to model dir =
case model.controlled_character of
(Just char_ref) ->
- (make_it_so model char_ref dir)
+ (
+ (make_it_so model char_ref dir),
+ Cmd.none
+ )
_ ->
- (Model.invalidate
- model
- (Error.new
- Error.IllegalAction
- "This can only be done while moving a character."
- )
+ (
+ (Struct.Model.invalidate
+ model
+ (Struct.Error.new
+ Struct.Error.IllegalAction
+ "This can only be done while moving a character."
+ )
+ ),
+ Cmd.none
)
diff --git a/src/battlemap/src/Update/SelectCharacter.elm b/src/battlemap/src/Update/SelectCharacter.elm
new file mode 100644
index 0000000..1535c8c
--- /dev/null
+++ b/src/battlemap/src/Update/SelectCharacter.elm
@@ -0,0 +1,124 @@
+module Update.SelectCharacter exposing (apply_to)
+
+-- Elm -------------------------------------------------------------------------
+import Dict
+
+-- Battlemap -------------------------------------------------------------------
+import Struct.Battlemap
+import Struct.Character
+import Struct.Direction
+import Struct.Error
+import Struct.UI
+import Struct.Model
+
+import Update.RequestDirection
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+autopilot : Struct.Direction.Type -> Struct.Model.Type -> Struct.Model.Type
+autopilot dir model =
+ (Model.RequestDirection.apply_to model dir)
+
+attack_character : (
+ Struct.Model.Type ->
+ Struct.Character.Ref ->
+ Struct.Character.Ref ->
+ Struct.Character.Type ->
+ Struct.Model.Type
+ )
+attack_character model main_char_id target_char_id target_char =
+ {model |
+ targets = [target_char_id],
+ ui = (Struct.UI.set_previous_action model.ui Nothing)
+ }
+
+select_character : (
+ Struct.Model.Type ->
+ Struct.Character.Ref ->
+ Struct.Character.Type ->
+ Struct.Model.Type
+ )
+select_character model target_char_id target_char =
+ if ((Struct.Character.is_enabled target_char))
+ then
+ {model |
+ state = Struct.Model.Default,
+ controlled_character = (Just target_char_id),
+ ui = (Struct.UI.set_previous_action model.ui Nothing),
+ battlemap =
+ (Struct.Battlemap.set_navigator
+ (Struct.Character.get_location target_char)
+ (Struct.Character.get_movement_points target_char)
+ (Struct.Character.get_attack_range target_char)
+ (Dict.values model.characters)
+ model.battlemap
+ )
+ }
+ else
+ {model |
+ ui =
+ (Struct.UI.set_previous_action
+ model.ui
+ (Just (Struct.UI.SelectedCharacter target_char_id))
+ )
+ }
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+apply_to : (
+ Struct.Model.Type ->
+ Struct.Character.Ref ->
+ (Struct.Model.Type, (Cmd Struct.Event.Type))
+ )
+apply_to model target_char_id =
+ if
+ (
+ (Struct.UI.get_previous_action model.ui)
+ ==
+ (Just (Struct.UI.SelectedCharacter target_char_id))
+ )
+ then
+ case (Dict.get target_char_id model.characters) of
+ (Just target_char) ->
+ case model.controlled_character of
+ (Just main_char_id) ->
+ (
+ (attack_character
+ model
+ main_char_id
+ target_char_id
+ target_char
+ ),
+ Cmd.none
+ )
+
+ _ ->
+ (
+ (select_character model target_char_id target_char),
+ Cmd.none
+ )
+
+ Nothing ->
+ (
+ (Struct.Model.invalidate
+ model
+ (Struct.Error.new
+ Struct.Error.Programming
+ "SelectCharacter: Unknown char selected."
+ )
+ ),
+ Cmd.none
+ )
+ else
+ (
+ {model |
+ ui =
+ (Struct.UI.set_previous_action
+ model.ui
+ (Just (Struct.UI.SelectedCharacter target_char_id))
+ )
+ },
+ Cmd.none
+ )
diff --git a/src/battlemap/src/Update/SelectTab.elm b/src/battlemap/src/Update/SelectTab.elm
new file mode 100644
index 0000000..c48b0fc
--- /dev/null
+++ b/src/battlemap/src/Update/SelectTab.elm
@@ -0,0 +1,25 @@
+module Update.SelectTab exposing (apply_to)
+-- Elm -------------------------------------------------------------------------
+
+-- Battlemap -------------------------------------------------------------------
+import Struct.Model
+import Struct.Event
+import Struct.UI
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+apply_to : (
+ Struct.Model.Type ->
+ Struct.UI.Tab ->
+ (Struct.Model.Type, (Cmd Struct.Event.Type))
+ )
+apply_to model tab =
+ (
+ {model | ui = (Struct.UI.set_displayed_tab model.ui tab)},
+ Cmd.none
+ )
diff --git a/src/battlemap/src/Model/SelectTile.elm b/src/battlemap/src/Update/SelectTile.elm
index 5ce3c3c..5ce3c3c 100644
--- a/src/battlemap/src/Model/SelectTile.elm
+++ b/src/battlemap/src/Update/SelectTile.elm
diff --git a/src/battlemap/src/Update/SendLoadBattlemapRequest.elm b/src/battlemap/src/Update/SendLoadBattlemapRequest.elm
new file mode 100644
index 0000000..2ed248d
--- /dev/null
+++ b/src/battlemap/src/Update/SendLoadBattlemapRequest.elm
@@ -0,0 +1,28 @@
+module Update.SendLoadBattlemapRequest exposing (apply_to)
+-- Elm -------------------------------------------------------------------------
+
+-- Battlemap -------------------------------------------------------------------
+import Struct.Model
+import Struct.Event
+import Struct.UI
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+apply_to : (
+ Struct.Model.Type ->
+ (Struct.Model.Type, (Cmd Struct.Event.Type))
+ )
+apply_to model =
+ (
+ model,
+ (case (Send.LoadBattlemap.try model) of
+ (Just cmd) -> cmd
+ Nothing -> Cmd.none
+ )
+ )
+
diff --git a/src/battlemap/src/Update/SwitchTeam.elm b/src/battlemap/src/Update/SwitchTeam.elm
new file mode 100644
index 0000000..f85dd87
--- /dev/null
+++ b/src/battlemap/src/Update/SwitchTeam.elm
@@ -0,0 +1,42 @@
+module Update.SwitchTeam exposing (apply_to)
+-- Elm -------------------------------------------------------------------------
+
+-- Battlemap -------------------------------------------------------------------
+import Struct.Model
+import Struct.Event
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+apply_to : (
+ Struct.Model.Type ->
+ (Struct.Model.Type, (Cmd Struct.Event.Type))
+ )
+apply_to model =
+ if (model.controlled_team == 0)
+ then
+ (
+ (Model.reset
+ {model |
+ controlled_team = 1,
+ player_id = "1"
+ }
+ model.characters
+ ),
+ Cmd.none
+ )
+ else
+ (
+ (Model.reset
+ {model |
+ controlled_team = 0,
+ player_id = "0"
+ }
+ model.characters
+ ),
+ Cmd.none
+ )