summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/asset/www/data/tile_patterns.json.m48
-rw-r--r--src/map-editor/src/Comm/AddTilePattern.elm24
-rw-r--r--src/map-editor/src/Comm/LoadTilePatterns.elm31
-rw-r--r--src/map-editor/src/Comm/Send.elm2
-rw-r--r--src/map-editor/src/Constants/IO.elm.m43
-rw-r--r--src/map-editor/src/ElmModule/Init.elm5
-rw-r--r--src/map-editor/src/ElmModule/Update.elm6
-rw-r--r--src/map-editor/src/Struct/Event.elm1
-rw-r--r--src/map-editor/src/Struct/Location.elm13
-rw-r--r--src/map-editor/src/Struct/Model.elm36
-rw-r--r--src/map-editor/src/Struct/ServerReply.elm2
-rw-r--r--src/map-editor/src/Struct/TilePattern.elm4
-rw-r--r--src/map-editor/src/Update/HandleServerReply.elm14
-rw-r--r--src/map-editor/src/Update/PrettifySelectedTiles.elm49
-rw-r--r--src/map-editor/src/View/Toolbox.elm4
15 files changed, 169 insertions, 33 deletions
diff --git a/src/asset/www/data/tile_patterns.json.m4 b/src/asset/www/data/tile_patterns.json.m4
new file mode 100644
index 0000000..9d52da4
--- /dev/null
+++ b/src/asset/www/data/tile_patterns.json.m4
@@ -0,0 +1,8 @@
+[
+m4_include(__MAKEFILE_DATA_DIR/tile/pattern/global.m4.conf)m4_dnl
+__TILE_PATTERN_USE_JSON_STYLE
+m4_include(__MAKEFILE_DATA_DIR/tile/pattern/grassland.m4d)m4_dnl
+ {
+ "msg": "okay"
+ }
+]
diff --git a/src/map-editor/src/Comm/AddTilePattern.elm b/src/map-editor/src/Comm/AddTilePattern.elm
new file mode 100644
index 0000000..bf9b15d
--- /dev/null
+++ b/src/map-editor/src/Comm/AddTilePattern.elm
@@ -0,0 +1,24 @@
+module Comm.AddTilePattern exposing (decode)
+
+-- Elm -------------------------------------------------------------------------
+import Json.Decode
+
+-- Battlemap -------------------------------------------------------------------
+import Struct.TilePattern
+import Struct.ServerReply
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+internal_decoder : Struct.TilePattern.Type -> Struct.ServerReply.Type
+internal_decoder tp = (Struct.ServerReply.AddTilePattern tp)
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+decode : (Json.Decode.Decoder Struct.ServerReply.Type)
+decode = (Json.Decode.map (internal_decoder) (Struct.TilePattern.decoder))
diff --git a/src/map-editor/src/Comm/LoadTilePatterns.elm b/src/map-editor/src/Comm/LoadTilePatterns.elm
new file mode 100644
index 0000000..b730642
--- /dev/null
+++ b/src/map-editor/src/Comm/LoadTilePatterns.elm
@@ -0,0 +1,31 @@
+module Comm.LoadTilePatterns exposing (try)
+
+-- Elm -------------------------------------------------------------------------
+
+-- Battlemap -------------------------------------------------------------------
+import Comm.Send
+
+import Constants.IO
+
+import Struct.Event
+import Struct.Model
+
+--------------------------------------------------------------------------------
+-- TYPES ------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+try : Struct.Model.Type -> (Maybe (Cmd Struct.Event.Type))
+try model =
+ (Just
+ (Comm.Send.empty_request
+ model
+ Constants.IO.tile_patterns_data_url
+ )
+ )
diff --git a/src/map-editor/src/Comm/Send.elm b/src/map-editor/src/Comm/Send.elm
index f620f68..d70fc13 100644
--- a/src/map-editor/src/Comm/Send.elm
+++ b/src/map-editor/src/Comm/Send.elm
@@ -8,6 +8,7 @@ import Json.Encode
-- Battlemap -------------------------------------------------------------------
import Comm.AddTile
+import Comm.AddTilePattern
import Comm.Okay
import Comm.SetMap
@@ -26,6 +27,7 @@ internal_decoder : String -> (Json.Decode.Decoder Struct.ServerReply.Type)
internal_decoder reply_type =
case reply_type of
"add_tile" -> (Comm.AddTile.decode)
+ "add_tile_pattern" -> (Comm.AddTilePattern.decode)
"set_map" -> (Comm.SetMap.decode)
"okay" -> (Comm.Okay.decode)
other ->
diff --git a/src/map-editor/src/Constants/IO.elm.m4 b/src/map-editor/src/Constants/IO.elm.m4
index 397efaa..4ee92bc 100644
--- a/src/map-editor/src/Constants/IO.elm.m4
+++ b/src/map-editor/src/Constants/IO.elm.m4
@@ -9,6 +9,9 @@ data_url = (base_url ++ "/asset/data/")
tiles_data_url : String
tiles_data_url = (base_url ++ "/asset/data/tiles.json")
+tile_patterns_data_url : String
+tile_patterns_data_url = (base_url ++ "/asset/data/tile_patterns.json")
+
map_editor_handler_url : String
map_editor_handler_url = (base_url ++ "/handler/map-editor")
diff --git a/src/map-editor/src/ElmModule/Init.elm b/src/map-editor/src/ElmModule/Init.elm
index 09034dc..40e49b3 100644
--- a/src/map-editor/src/ElmModule/Init.elm
+++ b/src/map-editor/src/ElmModule/Init.elm
@@ -3,6 +3,7 @@ module ElmModule.Init exposing (init)
-- Elm -------------------------------------------------------------------------
-- Battlemap -------------------------------------------------------------------
+import Comm.LoadTilePatterns
import Comm.LoadTiles
import Comm.LoadMap
@@ -31,6 +32,10 @@ init flags =
(case (Comm.LoadMap.try model) of
(Just cmd) -> cmd
Nothing -> Cmd.none
+ ),
+ (case (Comm.LoadTilePatterns.try model) of
+ (Just cmd) -> cmd
+ Nothing -> Cmd.none
)
]
)
diff --git a/src/map-editor/src/ElmModule/Update.elm b/src/map-editor/src/ElmModule/Update.elm
index 76ee2e1..8ae27f4 100644
--- a/src/map-editor/src/ElmModule/Update.elm
+++ b/src/map-editor/src/ElmModule/Update.elm
@@ -7,14 +7,15 @@ import Struct.Event
import Struct.Model
import Update.ChangeScale
+import Update.ClearToolboxSelection
import Update.HandleServerReply
+import Update.PrettifySelectedTiles
import Update.SelectTab
import Update.SelectTile
import Update.SetRequestedHelp
import Update.SetToolboxMode
import Update.SetToolboxShape
import Update.SetToolboxTemplate
-import Update.ClearToolboxSelection
--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
--------------------------------------------------------------------------------
@@ -67,3 +68,6 @@ update event model =
Struct.Event.ClearSelectionRequested ->
(Update.ClearToolboxSelection.apply_to new_model)
+
+ Struct.Event.PrettifySelectionRequested ->
+ (Update.PrettifySelectedTiles.apply_to new_model)
diff --git a/src/map-editor/src/Struct/Event.elm b/src/map-editor/src/Struct/Event.elm
index 498fbab..b8fac70 100644
--- a/src/map-editor/src/Struct/Event.elm
+++ b/src/map-editor/src/Struct/Event.elm
@@ -27,6 +27,7 @@ type Type =
| ShapeRequested Struct.Toolbox.Shape
| ClearSelectionRequested
| TemplateRequested Int
+ | PrettifySelectionRequested
attempted : (Result.Result err val) -> Type
attempted act =
diff --git a/src/map-editor/src/Struct/Location.elm b/src/map-editor/src/Struct/Location.elm
index d107bdd..0b373cb 100644
--- a/src/map-editor/src/Struct/Location.elm
+++ b/src/map-editor/src/Struct/Location.elm
@@ -50,6 +50,19 @@ neighbors loc =
{loc | y = (loc.y + 1)}
]
+get_full_neighborhood : Type -> (List Type)
+get_full_neighborhood loc =
+ [
+ {loc | x = (loc.x - 1), y = (loc.y - 1)},
+ {loc | y = (loc.y - 1)},
+ {loc | x = (loc.x + 1), y = (loc.y - 1)},
+ {loc | x = (loc.x - 1)},
+ {loc | x = (loc.x + 1)},
+ {loc | x = (loc.x - 1), y = (loc.y + 1)},
+ {loc | y = (loc.y + 1)},
+ {loc | x = (loc.x + 1), y = (loc.y + 1)}
+ ]
+
get_ref : Type -> Ref
get_ref l =
(l.x, l.y)
diff --git a/src/map-editor/src/Struct/Model.elm b/src/map-editor/src/Struct/Model.elm
index ffa413f..df7d5cc 100644
--- a/src/map-editor/src/Struct/Model.elm
+++ b/src/map-editor/src/Struct/Model.elm
@@ -4,6 +4,8 @@ module Struct.Model exposing
new,
add_tile,
add_tile_pattern,
+ get_tile_patterns_for,
+ get_wild_tile_patterns,
invalidate,
reset,
clear_error
@@ -34,7 +36,8 @@ type alias Type =
toolbox: Struct.Toolbox.Type,
help_request: Struct.HelpRequest.Type,
map: Struct.Map.Type,
- tile_patterns: (Dict.Dict (Maybe Int) (List Struct.TilePattern.Type)),
+ wild_tile_patterns: (List Struct.TilePattern.Type),
+ tile_patterns: (Dict.Dict Int (List Struct.TilePattern.Type)),
tiles: (Dict.Dict Struct.Tile.Ref Struct.Tile.Type),
error: (Maybe Struct.Error.Type),
player_id: String,
@@ -60,7 +63,8 @@ new flags =
help_request = Struct.HelpRequest.None,
map = (Struct.Map.empty),
tiles = (Dict.empty),
- tile_patterns = [],
+ wild_tile_patterns = [],
+ tile_patterns = (Dict.empty),
error = Nothing,
map_id = "",
player_id =
@@ -100,44 +104,32 @@ add_tile_pattern : Struct.TilePattern.Type -> Type -> Type
add_tile_pattern tp model =
case (Struct.TilePattern.get_source_pattern tp) of
(Struct.TilePattern.Exactly i) ->
- case (Dict.get (Just i) model.tile_patterns) of
+ case (Dict.get i model.tile_patterns) of
Nothing ->
{model |
tile_patterns =
- (Dict.insert (Just i) [tp] model.tile_patterns)
+ (Dict.insert i [tp] model.tile_patterns)
}
(Just l) ->
{model |
tile_patterns =
- (Dict.insert (Just i) (tp :: l) model.tile_patterns)
+ (Dict.insert i (tp :: l) model.tile_patterns)
}
_ ->
- case (Dict.get Nothing model.tile_patterns) of
- Nothing ->
- {model |
- tile_patterns =
- (Dict.insert Nothing [tp] model.tile_patterns)
- }
-
- (Just l) ->
- {model |
- tile_patterns =
- (Dict.insert Nothing (tp :: l) model.tile_patterns)
- }
+ {model |
+ wild_tile_patterns = (tp :: model.wild_tile_patterns)
+ }
get_tile_patterns_for : Int -> Type -> (List Struct.TilePattern.Type)
get_tile_patterns_for i model =
- case (Dict.get (Just i) model.tile_patterns) of
+ case (Dict.get i model.tile_patterns) of
Nothing -> []
(Just r) -> r
get_wild_tile_patterns : Type -> (List Struct.TilePattern.Type)
-get_wild_tile_patterns model =
- case (Dict.get Nothing model.tile_patterns) of
- Nothing -> []
- (Just r) -> r
+get_wild_tile_patterns model = model.wild_tile_patterns
reset : Type -> Type
reset model =
diff --git a/src/map-editor/src/Struct/ServerReply.elm b/src/map-editor/src/Struct/ServerReply.elm
index 6f2da71..177950b 100644
--- a/src/map-editor/src/Struct/ServerReply.elm
+++ b/src/map-editor/src/Struct/ServerReply.elm
@@ -5,6 +5,7 @@ module Struct.ServerReply exposing (Type(..))
-- Battlemap -------------------------------------------------------------------
import Struct.Map
import Struct.Tile
+import Struct.TilePattern
--------------------------------------------------------------------------------
-- TYPES -----------------------------------------------------------------------
@@ -13,6 +14,7 @@ import Struct.Tile
type Type =
Okay
| AddTile Struct.Tile.Type
+ | AddTilePattern Struct.TilePattern.Type
| SetMap Struct.Map.Type
--------------------------------------------------------------------------------
diff --git a/src/map-editor/src/Struct/TilePattern.elm b/src/map-editor/src/Struct/TilePattern.elm
index 3a4c752..ea3a6d1 100644
--- a/src/map-editor/src/Struct/TilePattern.elm
+++ b/src/map-editor/src/Struct/TilePattern.elm
@@ -107,5 +107,5 @@ decoder =
get_target : Type -> Int
get_target tile_pattern = tile_pattern.t
-get_source_pattern : Type -> Int
-get_source_pattern tile_pattern = tile_pattern.t
+get_source_pattern : Type -> PatternElement
+get_source_pattern tile_pattern = tile_pattern.s
diff --git a/src/map-editor/src/Update/HandleServerReply.elm b/src/map-editor/src/Update/HandleServerReply.elm
index e110603..e4a178b 100644
--- a/src/map-editor/src/Update/HandleServerReply.elm
+++ b/src/map-editor/src/Update/HandleServerReply.elm
@@ -18,6 +18,7 @@ import Struct.Event
import Struct.Model
import Struct.ServerReply
import Struct.Tile
+import Struct.TilePattern
import Struct.UI
--------------------------------------------------------------------------------
@@ -37,6 +38,16 @@ add_tile tl current_state =
(_, (Just _)) -> current_state
(model, _) -> ((Struct.Model.add_tile tl model), Nothing)
+add_tile_pattern : (
+ Struct.TilePattern.Type ->
+ (Struct.Model.Type, (Maybe Struct.Error.Type)) ->
+ (Struct.Model.Type, (Maybe Struct.Error.Type))
+ )
+add_tile_pattern tp current_state =
+ case current_state of
+ (_, (Just _)) -> current_state
+ (model, _) -> ((Struct.Model.add_tile_pattern tp model), Nothing)
+
set_map : (
Struct.Map.Type ->
(Struct.Model.Type, (Maybe Struct.Error.Type)) ->
@@ -79,6 +90,9 @@ apply_command command current_state =
(Struct.ServerReply.AddTile tl) ->
(add_tile tl current_state)
+ (Struct.ServerReply.AddTilePattern tp) ->
+ (add_tile_pattern tp current_state)
+
(Struct.ServerReply.SetMap map) ->
(set_map map current_state)
diff --git a/src/map-editor/src/Update/PrettifySelectedTiles.elm b/src/map-editor/src/Update/PrettifySelectedTiles.elm
index f6a23ce..caee831 100644
--- a/src/map-editor/src/Update/PrettifySelectedTiles.elm
+++ b/src/map-editor/src/Update/PrettifySelectedTiles.elm
@@ -1,23 +1,45 @@
module Update.PrettifySelectedTiles exposing (apply_to)
+
-- Elm -------------------------------------------------------------------------
+import Dict
-- Battlemap -------------------------------------------------------------------
import Struct.Event
-import Struct.Toolbox
+import Struct.Location
import Struct.Map
+import Struct.Model
import Struct.Tile
import Struct.TilePattern
-import Struct.Model
+import Struct.Toolbox
+
+import Util.List
--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
--------------------------------------------------------------------------------
+set_tile_to : (
+ Struct.Model.Type ->
+ Struct.Location.Type ->
+ Int ->
+ Struct.Map.Type ->
+ Struct.Map.Type
+ )
+set_tile_to model loc id map =
+ (Struct.Map.set_tile_to
+ loc
+ (Struct.Tile.solve_tile_instance
+ (Dict.values model.tiles)
+ (Struct.Tile.error_tile_instance id loc.x loc.y)
+ )
+ map
+ )
+
apply_to_location : (
(List Struct.TilePattern.Type) ->
Struct.Model.Type ->
Struct.Location.Type ->
Struct.Map.Type ->
- Struct.Map.Type ->
+ Struct.Map.Type
)
apply_to_location wild_patterns model loc map =
case (Struct.Map.try_getting_tile_at loc map) of
@@ -28,11 +50,11 @@ apply_to_location wild_patterns model loc map =
full_neighborhood_class_ids =
(List.map
(\e ->
- case (Struct.Map.try_getting_tile_at \e map) of
+ case (Struct.Map.try_getting_tile_at e map) of
Nothing -> -1
- (Just e) -> (Struct.Tile.get_type_id e)
+ (Just t) -> (Struct.Tile.get_type_id t)
)
- (Struct.Map.try_getting_tile_at loc map)
+ (Struct.Location.get_full_neighborhood loc)
)
in
case
@@ -45,6 +67,12 @@ apply_to_location wild_patterns model loc map =
)
of
(Just pattern) -> -- TODO
+ (set_tile_to
+ model
+ loc
+ (Struct.TilePattern.get_target pattern)
+ map
+ )
Nothing ->
case
@@ -57,6 +85,12 @@ apply_to_location wild_patterns model loc map =
)
of
(Just pattern) -> -- TODO
+ (set_tile_to
+ model
+ loc
+ (Struct.TilePattern.get_target pattern)
+ map
+ )
Nothing -> map
@@ -79,7 +113,6 @@ apply_to model =
model.map
(Struct.Toolbox.get_selection model.toolbox)
)
- }
- {model | toolbox = (Struct.Toolbox.set_mode mode model.toolbox)},
+ },
Cmd.none
)
diff --git a/src/map-editor/src/View/Toolbox.elm b/src/map-editor/src/View/Toolbox.elm
index 5dacb13..4054c4d 100644
--- a/src/map-editor/src/View/Toolbox.elm
+++ b/src/map-editor/src/View/Toolbox.elm
@@ -117,6 +117,10 @@ get_others_menu_html =
(Html.button
[(Html.Events.onClick Struct.Event.ClearSelectionRequested)]
[(Html.text "Clear Selection")]
+ ),
+ (Html.button
+ [(Html.Events.onClick Struct.Event.PrettifySelectionRequested)]
+ [(Html.text "Prettify Selection")]
)
]
)