From 0d1fd448105f250fefb6872745a0e0c4c7417486 Mon Sep 17 00:00:00 2001 From: nsensfel Date: Tue, 19 Jun 2018 12:43:28 +0200 Subject: Updates to new Tile system, Simplifications. Also adds an icon for error tiles. --- src/asset/www/svg/tile/-1.svg | 181 +++++++++++++++++++++ src/battlemap/src/Comm/AddArmor.elm | 8 +- src/battlemap/src/Comm/AddChar.elm | 9 +- src/battlemap/src/Comm/AddTile.elm | 5 +- src/battlemap/src/Comm/AddWeapon.elm | 6 +- src/battlemap/src/Comm/Send.elm | 26 ++- src/battlemap/src/Comm/SetMap.elm | 7 +- src/battlemap/src/Struct/Battlemap.elm | 7 +- src/battlemap/src/Struct/Tile.elm | 69 ++++++-- src/battlemap/src/Struct/UI.elm | 1 - src/battlemap/src/Update/HandleServerReply.elm | 3 +- .../src/Update/SendLoadBattlemapRequest.elm | 2 +- 12 files changed, 260 insertions(+), 64 deletions(-) create mode 100644 src/asset/www/svg/tile/-1.svg diff --git a/src/asset/www/svg/tile/-1.svg b/src/asset/www/svg/tile/-1.svg new file mode 100644 index 0000000..ef31ace --- /dev/null +++ b/src/asset/www/svg/tile/-1.svg @@ -0,0 +1,181 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + ERROR + + + + + + + + + + + + + + + + + diff --git a/src/battlemap/src/Comm/AddArmor.elm b/src/battlemap/src/Comm/AddArmor.elm index 7633521..ad9df3e 100644 --- a/src/battlemap/src/Comm/AddArmor.elm +++ b/src/battlemap/src/Comm/AddArmor.elm @@ -5,7 +5,6 @@ import Json.Decode -- Battlemap ------------------------------------------------------------------- import Struct.Armor -import Struct.Model import Struct.ServerReply -------------------------------------------------------------------------------- @@ -16,11 +15,10 @@ import Struct.ServerReply -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- internal_decoder : Struct.Armor.Type -> Struct.ServerReply.Type -internal_decoder wp = (Struct.ServerReply.AddArmor wp) +internal_decoder ar = (Struct.ServerReply.AddArmor ar) -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- -------------------------------------------------------------------------------- -decode : (Struct.Model.Type -> (Json.Decode.Decoder Struct.ServerReply.Type)) -decode model = - (Json.Decode.map (internal_decoder) (Struct.Armor.decoder)) +decode : (Json.Decode.Decoder Struct.ServerReply.Type) +decode = (Json.Decode.map (internal_decoder) (Struct.Armor.decoder)) diff --git a/src/battlemap/src/Comm/AddChar.elm b/src/battlemap/src/Comm/AddChar.elm index 1b5cacd..ebe8656 100644 --- a/src/battlemap/src/Comm/AddChar.elm +++ b/src/battlemap/src/Comm/AddChar.elm @@ -5,7 +5,6 @@ import Json.Decode -- Battlemap ------------------------------------------------------------------- import Struct.Character -import Struct.Model import Struct.ServerReply -------------------------------------------------------------------------------- @@ -25,9 +24,5 @@ internal_decoder char_and_refs = (Struct.ServerReply.AddCharacter char_and_refs) -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- -------------------------------------------------------------------------------- -decode : (Struct.Model.Type -> (Json.Decode.Decoder Struct.ServerReply.Type)) -decode model = - (Json.Decode.map - (internal_decoder) - (Struct.Character.decoder) - ) +decode : (Json.Decode.Decoder Struct.ServerReply.Type) +decode = (Json.Decode.map (internal_decoder) (Struct.Character.decoder)) diff --git a/src/battlemap/src/Comm/AddTile.elm b/src/battlemap/src/Comm/AddTile.elm index ff184fd..d0a3ce8 100644 --- a/src/battlemap/src/Comm/AddTile.elm +++ b/src/battlemap/src/Comm/AddTile.elm @@ -5,7 +5,6 @@ import Json.Decode -- Battlemap ------------------------------------------------------------------- import Struct.Tile -import Struct.Model import Struct.ServerReply -------------------------------------------------------------------------------- @@ -21,5 +20,5 @@ internal_decoder wp = (Struct.ServerReply.AddTile wp) -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- -------------------------------------------------------------------------------- -decode : (Struct.Model.Type -> (Json.Decode.Decoder Struct.ServerReply.Type)) -decode model = (Json.Decode.map (internal_decoder) (Struct.Tile.decoder)) +decode : (Json.Decode.Decoder Struct.ServerReply.Type) +decode = (Json.Decode.map (internal_decoder) (Struct.Tile.decoder)) diff --git a/src/battlemap/src/Comm/AddWeapon.elm b/src/battlemap/src/Comm/AddWeapon.elm index 3a5c1f1..b41c054 100644 --- a/src/battlemap/src/Comm/AddWeapon.elm +++ b/src/battlemap/src/Comm/AddWeapon.elm @@ -5,7 +5,6 @@ import Json.Decode -- Battlemap ------------------------------------------------------------------- import Struct.Weapon -import Struct.Model import Struct.ServerReply -------------------------------------------------------------------------------- @@ -21,6 +20,5 @@ internal_decoder wp = (Struct.ServerReply.AddWeapon wp) -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- -------------------------------------------------------------------------------- -decode : (Struct.Model.Type -> (Json.Decode.Decoder Struct.ServerReply.Type)) -decode model = - (Json.Decode.map (internal_decoder) (Struct.Weapon.decoder)) +decode : (Json.Decode.Decoder Struct.ServerReply.Type) +decode = (Json.Decode.map (internal_decoder) (Struct.Weapon.decoder)) diff --git a/src/battlemap/src/Comm/Send.elm b/src/battlemap/src/Comm/Send.elm index 45be5d0..a6129cd 100644 --- a/src/battlemap/src/Comm/Send.elm +++ b/src/battlemap/src/Comm/Send.elm @@ -26,18 +26,14 @@ import Struct.Model -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- -internal_decoder : ( - Struct.Model.Type -> - String -> - (Json.Decode.Decoder Struct.ServerReply.Type) - ) -internal_decoder model reply_type = +internal_decoder : String -> (Json.Decode.Decoder Struct.ServerReply.Type) +internal_decoder reply_type = case reply_type of - "add_tile" -> (Comm.AddTile.decode model) - "add_armor" -> (Comm.AddArmor.decode model) - "add_char" -> (Comm.AddChar.decode model) - "add_weapon" -> (Comm.AddWeapon.decode model) - "set_map" -> (Comm.SetMap.decode model) + "add_tile" -> (Comm.AddTile.decode) + "add_armor" -> (Comm.AddArmor.decode) + "add_char" -> (Comm.AddChar.decode) + "add_weapon" -> (Comm.AddWeapon.decode) + "set_map" -> (Comm.SetMap.decode) "turn_results" -> (Comm.TurnResults.decode) "set_timeline" -> (Comm.SetTimeline.decode) other -> @@ -49,10 +45,10 @@ internal_decoder model reply_type = ) ) -decode : Struct.Model.Type -> (Json.Decode.Decoder Struct.ServerReply.Type) -decode model = +decode : (Json.Decode.Decoder Struct.ServerReply.Type) +decode = (Json.Decode.field "msg" Json.Decode.string) - |> (Json.Decode.andThen (internal_decoder model)) + |> (Json.Decode.andThen (internal_decoder)) -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- @@ -72,7 +68,7 @@ try_sending model recipient try_encoding_fun = (Http.post recipient (Http.jsonBody serial) - (Json.Decode.list (decode model)) + (Json.Decode.list (decode)) ) ) ) diff --git a/src/battlemap/src/Comm/SetMap.elm b/src/battlemap/src/Comm/SetMap.elm index 84e4b5f..dc499cf 100644 --- a/src/battlemap/src/Comm/SetMap.elm +++ b/src/battlemap/src/Comm/SetMap.elm @@ -5,7 +5,6 @@ import Json.Decode -- Battlemap ------------------------------------------------------------------- import Struct.Battlemap -import Struct.Model import Struct.ServerReply import Struct.Tile @@ -27,7 +26,7 @@ deserialize_tile_instance map_width index id = (Struct.Tile.new_instance (index % map_width) (index // map_width) - (toString id) + id -1 -1 ) @@ -48,8 +47,8 @@ internal_decoder map_data = -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- -------------------------------------------------------------------------------- -decode : (Struct.Model.Type -> (Json.Decode.Decoder Struct.ServerReply.Type)) -decode model = +decode : (Json.Decode.Decoder Struct.ServerReply.Type) +decode = (Json.Decode.map internal_decoder (Json.Decode.map3 MapData diff --git a/src/battlemap/src/Struct/Battlemap.elm b/src/battlemap/src/Struct/Battlemap.elm index 5387039..80de9c3 100644 --- a/src/battlemap/src/Struct/Battlemap.elm +++ b/src/battlemap/src/Struct/Battlemap.elm @@ -14,8 +14,6 @@ module Struct.Battlemap exposing -- Elm ------------------------------------------------------------------------- import Array -import Dict - -- Battlemap ------------------------------------------------------------------- import Struct.Character import Struct.Tile @@ -117,9 +115,8 @@ get_movement_cost_function bmap start_loc char_list loc = else Constants.Movement.cost_when_out_of_bounds -solve_tiles : (Dict.Dict Struct.Tile.Ref Struct.Tile.Type) -> Type -> Type +solve_tiles : (List Struct.Tile.Type) -> Type -> Type solve_tiles tiles bmap = {bmap | - content = - (Array.map (Struct.Tile.solve_tile_instance tiles) bmap.content) + content = (Array.map (Struct.Tile.solve_tile_instance tiles) bmap.content) } diff --git a/src/battlemap/src/Struct/Tile.elm b/src/battlemap/src/Struct/Tile.elm index 3bd2336..405db95 100644 --- a/src/battlemap/src/Struct/Tile.elm +++ b/src/battlemap/src/Struct/Tile.elm @@ -20,7 +20,8 @@ module Struct.Tile exposing ) -- Elm ------------------------------------------------------------------------- -import Dict +import Debug +import List import Json.Decode import Json.Decode.Pipeline @@ -57,7 +58,7 @@ type alias Type = type alias Instance = { location : Struct.Location.Type, - icon_id : String, + icon_id : Int, crossing_cost : Int, type_id : Int } @@ -79,6 +80,25 @@ finish_decoding add_tile = range_maximum = add_tile.rma } +seek_tile_instance_type : Instance -> Type -> (Maybe Type) -> (Maybe Type) +seek_tile_instance_type instance candidate current_sol = + if (current_sol == Nothing) + then + let + icon_id = instance.icon_id + in + if + ( + (icon_id >= candidate.range_minimum) + && (icon_id <= candidate.range_maximum) + ) + then + (Just candidate) + else + current_sol + else + current_sol + -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- -------------------------------------------------------------------------------- @@ -92,7 +112,7 @@ new id name crossing_cost range_minimum range_maximum = range_maximum = range_maximum } -new_instance : Int -> Int -> String -> Int -> Int -> Instance +new_instance : Int -> Int -> Int -> Int -> Int -> Instance new_instance x y icon_id crossing_cost type_id = { location = {x = x, y = y}, @@ -105,7 +125,7 @@ error_tile_instance : Int -> Int -> Instance error_tile_instance x y = { location = {x = x, y = y}, - icon_id = "error", + icon_id = -1, type_id = -1, crossing_cost = Constants.Movement.cost_when_out_of_bounds } @@ -133,7 +153,7 @@ get_location : Instance -> Struct.Location.Type get_location tile_inst = tile_inst.location get_icon_id : Instance -> String -get_icon_id tile_inst = tile_inst.icon_id +get_icon_id tile_inst = (toString tile_inst.icon_id) get_variant_id : Instance -> Int get_variant_id tile_inst = @@ -146,20 +166,33 @@ get_variant_id tile_inst = % Constants.UI.variants_per_tile ) -solve_tile_instance : (Dict.Dict Ref Type) -> Instance -> Instance +solve_tile_instance : (List Type) -> Instance -> Instance solve_tile_instance tiles tile_instance = - case (Dict.get tile_instance.type_id tiles) of - (Just tile) -> - {tile_instance | - type_id = tile.id, - crossing_cost = tile.crossing_cost - } - - Nothing -> - (error_tile_instance - tile_instance.location.x - tile_instance.location.y - ) + let + maybe_type = + (List.foldr (seek_tile_instance_type tile_instance) Nothing tiles) + in + case maybe_type of + (Just tile) -> + {tile_instance | + type_id = tile.id, + crossing_cost = tile.crossing_cost + } + + Nothing -> + (Debug.log + ( + "Couldn't find tile type matching " + ++ (toString tile_instance.icon_id) + ++ " among " + ++ (toString (List.length tiles)) + ++ " candidates." + ) + (error_tile_instance + tile_instance.location.x + tile_instance.location.y + ) + ) decoder : (Json.Decode.Decoder Type) decoder = diff --git a/src/battlemap/src/Struct/UI.elm b/src/battlemap/src/Struct/UI.elm index fe1cfe1..447cfc4 100644 --- a/src/battlemap/src/Struct/UI.elm +++ b/src/battlemap/src/Struct/UI.elm @@ -27,7 +27,6 @@ module Struct.UI exposing ) -- Battlemap ------------------------------------------------------------------- -import Struct.Character import Struct.Location import Struct.Navigator diff --git a/src/battlemap/src/Update/HandleServerReply.elm b/src/battlemap/src/Update/HandleServerReply.elm index 5296f91..27ea1ac 100644 --- a/src/battlemap/src/Update/HandleServerReply.elm +++ b/src/battlemap/src/Update/HandleServerReply.elm @@ -105,7 +105,8 @@ set_map map current_state = (model, _) -> ( {model | - battlemap = (Struct.Battlemap.solve_tiles model.tiles map) + battlemap = + (Struct.Battlemap.solve_tiles (Dict.values model.tiles) map) }, Nothing ) diff --git a/src/battlemap/src/Update/SendLoadBattlemapRequest.elm b/src/battlemap/src/Update/SendLoadBattlemapRequest.elm index e55d60b..bb6ae6b 100644 --- a/src/battlemap/src/Update/SendLoadBattlemapRequest.elm +++ b/src/battlemap/src/Update/SendLoadBattlemapRequest.elm @@ -20,7 +20,7 @@ apply_to : ( ) apply_to model = ( - model, + (Struct.Model.full_debug_reset model), (case (Comm.LoadBattlemap.try model) of (Just cmd) -> cmd Nothing -> Cmd.none -- cgit v1.2.3-70-g09d2