summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle')
-rw-r--r--src/battle/src/Comm/SetMap.elm39
-rw-r--r--src/battle/src/Constants/UI.elm4
-rw-r--r--src/battle/src/Struct/Map.elm4
-rw-r--r--src/battle/src/Struct/Tile.elm121
-rw-r--r--src/battle/src/Update/HandleServerReply.elm2
-rw-r--r--src/battle/src/View/Map/Tile.elm2
-rw-r--r--src/battle/src/View/SubMenu/Status/TileInfo.elm2
-rw-r--r--src/battle/www/style.css2
8 files changed, 79 insertions, 97 deletions
diff --git a/src/battle/src/Comm/SetMap.elm b/src/battle/src/Comm/SetMap.elm
index 7bfd56f..8c58ab3 100644
--- a/src/battle/src/Comm/SetMap.elm
+++ b/src/battle/src/Comm/SetMap.elm
@@ -3,7 +3,9 @@ module Comm.SetMap exposing (decode)
-- Elm -------------------------------------------------------------------------
import Json.Decode
--- Map -------------------------------------------------------------------
+-- Map -------------------------------------------------------------------------
+import Constants.Movement
+
import Struct.Map
import Struct.ServerReply
import Struct.Tile
@@ -15,21 +17,34 @@ type alias MapData =
{
w : Int,
h : Int,
- t : (List Int)
+ t : (List (List Int))
}
--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
--------------------------------------------------------------------------------
-deserialize_tile_instance : Int -> Int -> Int -> Struct.Tile.Instance
-deserialize_tile_instance map_width index id =
- (Struct.Tile.new_instance
- (index % map_width)
- (index // map_width)
- id
- -1
- -1
- )
+deserialize_tile_instance : Int -> Int -> (List Int) -> Struct.Tile.Instance
+deserialize_tile_instance map_width index t =
+ case t of
+ [type_id, border_id, variant_ix] ->
+ (Struct.Tile.new_instance
+ (index % map_width)
+ (index // map_width)
+ type_id
+ border_id
+ variant_ix
+ Constants.Movement.cost_when_out_of_bounds
+ )
+
+ _ ->
+ (Struct.Tile.new_instance
+ (index % map_width)
+ (index // map_width)
+ 0
+ 0
+ 0
+ Constants.Movement.cost_when_out_of_bounds
+ )
internal_decoder : MapData -> Struct.ServerReply.Type
internal_decoder map_data =
@@ -56,7 +71,7 @@ decode =
(Json.Decode.field "h" Json.Decode.int)
(Json.Decode.field
"t"
- (Json.Decode.list Json.Decode.int)
+ (Json.Decode.list (Json.Decode.list Json.Decode.int))
)
)
)
diff --git a/src/battle/src/Constants/UI.elm b/src/battle/src/Constants/UI.elm
index 642d94c..6a0b948 100644
--- a/src/battle/src/Constants/UI.elm
+++ b/src/battle/src/Constants/UI.elm
@@ -3,8 +3,8 @@ module Constants.UI exposing (..)
tile_size : Int
tile_size = 32
-variants_per_tile : Int
-variants_per_tile = 16
+local_variants_per_tile : Int
+local_variants_per_tile = 16
viewer_html_id : String
viewer_html_id = "map_viewer"
diff --git a/src/battle/src/Struct/Map.elm b/src/battle/src/Struct/Map.elm
index 9944b72..a2ddeb3 100644
--- a/src/battle/src/Struct/Map.elm
+++ b/src/battle/src/Struct/Map.elm
@@ -14,6 +14,8 @@ module Struct.Map exposing
-- Elm -------------------------------------------------------------------------
import Array
+import Dict
+
-- Map -------------------------------------------------------------------
import Struct.Character
import Struct.Tile
@@ -116,7 +118,7 @@ get_movement_cost_function bmap start_loc char_list loc =
else
Constants.Movement.cost_when_out_of_bounds
-solve_tiles : (List Struct.Tile.Type) -> Type -> Type
+solve_tiles : (Dict.Dict Int Struct.Tile.Type) -> Type -> Type
solve_tiles tiles bmap =
{bmap |
content = (Array.map (Struct.Tile.solve_tile_instance tiles) bmap.content)
diff --git a/src/battle/src/Struct/Tile.elm b/src/battle/src/Struct/Tile.elm
index 550169b..0077e7f 100644
--- a/src/battle/src/Struct/Tile.elm
+++ b/src/battle/src/Struct/Tile.elm
@@ -8,20 +8,18 @@ module Struct.Tile exposing
error_tile_instance,
get_id,
get_name,
- get_range_minimum,
- get_range_maximum,
get_cost,
get_instance_cost,
get_location,
get_icon_id,
get_type_id,
- get_variant_id,
+ get_local_variant_ix,
solve_tile_instance,
decoder
)
-- Elm -------------------------------------------------------------------------
-import List
+import Dict
import Json.Decode
import Json.Decode.Pipeline
@@ -41,26 +39,23 @@ type alias PartiallyDecoded =
{
id : Int,
nam : String,
- ct : Int,
- rmi : Int,
- rma : Int
+ ct : Int
}
type alias Type =
{
id : Int,
name : String,
- crossing_cost : Int,
- range_minimum : Int,
- range_maximum : Int
+ crossing_cost : Int
}
type alias Instance =
{
location : Struct.Location.Type,
- icon_id : Int,
- crossing_cost : Int,
- type_id : Int
+ type_id : Int,
+ border_id : Int,
+ variant_ix : Int,
+ crossing_cost : Int
}
--------------------------------------------------------------------------------
@@ -75,62 +70,40 @@ finish_decoding add_tile =
{
id = add_tile.id,
name = add_tile.nam,
- crossing_cost = add_tile.ct,
- range_minimum = add_tile.rmi,
- range_maximum = add_tile.rma
+ crossing_cost = add_tile.ct
}
-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 --------------------------------------------------------------------
--------------------------------------------------------------------------------
-new : Int -> String -> Int -> Int -> Int -> Type
-new id name crossing_cost range_minimum range_maximum =
+new : Int -> String -> Int -> Type
+new id name crossing_cost =
{
id = id,
name = name,
- crossing_cost = crossing_cost,
- range_minimum = range_minimum,
- range_maximum = range_maximum
+ crossing_cost = crossing_cost
}
-new_instance : Int -> Int -> Int -> Int -> Int -> Instance
-new_instance x y icon_id crossing_cost type_id =
+new_instance : Int -> Int -> Int -> Int -> Int -> Int -> Instance
+new_instance x y type_id border_id variant_ix crossing_cost =
{
location = {x = x, y = y},
- icon_id = icon_id,
- crossing_cost = crossing_cost,
- type_id = type_id
+ type_id = type_id,
+ border_id = border_id,
+ variant_ix = variant_ix,
+ crossing_cost = crossing_cost
}
error_tile_instance : Int -> Int -> Instance
error_tile_instance x y =
{
location = {x = x, y = y},
- icon_id = -1,
- type_id = -1,
+ type_id = 0,
+ border_id = 0,
+ variant_ix = 0,
crossing_cost = Constants.Movement.cost_when_out_of_bounds
}
-
get_id : Type -> Int
get_id tile = tile.id
@@ -143,50 +116,44 @@ get_instance_cost tile_inst = tile_inst.crossing_cost
get_name : Type -> String
get_name tile = tile.name
-get_range_minimum : Type -> Int
-get_range_minimum tile = tile.range_minimum
-
-get_range_maximum : Type -> Int
-get_range_maximum tile = tile.range_maximum
-
get_location : Instance -> Struct.Location.Type
get_location tile_inst = tile_inst.location
get_icon_id : Instance -> String
-get_icon_id tile_inst = (toString tile_inst.icon_id)
+get_icon_id tile_inst =
+ (
+ (toString tile_inst.type_id)
+ ++ "-"
+ ++ (toString tile_inst.border_id)
+ ++ "-"
+ ++ (toString tile_inst.variant_ix)
+ )
-get_type_id: Instance -> Int
+get_type_id : Instance -> Int
get_type_id tile_inst = tile_inst.type_id
-get_variant_id : Instance -> Int
-get_variant_id tile_inst =
+get_local_variant_ix : Instance -> Int
+get_local_variant_ix tile_inst =
(
(noise_function
tile_inst.location.x
tile_inst.location.y
tile_inst.crossing_cost
)
- % Constants.UI.variants_per_tile
+ % Constants.UI.local_variants_per_tile
)
-solve_tile_instance : (List Type) -> Instance -> Instance
+solve_tile_instance : (Dict.Dict Int Type) -> Instance -> Instance
solve_tile_instance tiles tile_instance =
- 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 ->
- (error_tile_instance
- tile_instance.location.x
- tile_instance.location.y
- )
+ case (Dict.get tile_instance.type_id tiles) of
+ (Just tile) ->
+ {tile_instance | crossing_cost = tile.crossing_cost}
+
+ Nothing ->
+ (error_tile_instance
+ tile_instance.location.x
+ tile_instance.location.y
+ )
decoder : (Json.Decode.Decoder Type)
decoder =
@@ -197,7 +164,5 @@ decoder =
|> (Json.Decode.Pipeline.required "id" Json.Decode.int)
|> (Json.Decode.Pipeline.required "nam" Json.Decode.string)
|> (Json.Decode.Pipeline.required "ct" Json.Decode.int)
- |> (Json.Decode.Pipeline.required "rmi" Json.Decode.int)
- |> (Json.Decode.Pipeline.required "rma" Json.Decode.int)
)
)
diff --git a/src/battle/src/Update/HandleServerReply.elm b/src/battle/src/Update/HandleServerReply.elm
index 2352f67..ff6cc67 100644
--- a/src/battle/src/Update/HandleServerReply.elm
+++ b/src/battle/src/Update/HandleServerReply.elm
@@ -111,7 +111,7 @@ set_map map current_state =
(
{model |
map =
- (Struct.Map.solve_tiles (Dict.values model.tiles) map)
+ (Struct.Map.solve_tiles model.tiles map)
},
Nothing
)
diff --git a/src/battle/src/View/Map/Tile.elm b/src/battle/src/View/Map/Tile.elm
index 600e26d..844a277 100644
--- a/src/battle/src/View/Map/Tile.elm
+++ b/src/battle/src/View/Map/Tile.elm
@@ -35,7 +35,7 @@ get_html tile =
(Html.Attributes.class
(
"battle-tile-variant-"
- ++ (toString (Struct.Tile.get_variant_id tile))
+ ++ (toString (Struct.Tile.get_local_variant_ix tile))
)
),
(Html.Attributes.class "clickable"),
diff --git a/src/battle/src/View/SubMenu/Status/TileInfo.elm b/src/battle/src/View/SubMenu/Status/TileInfo.elm
index 7448247..2cd0a6f 100644
--- a/src/battle/src/View/SubMenu/Status/TileInfo.elm
+++ b/src/battle/src/View/SubMenu/Status/TileInfo.elm
@@ -28,7 +28,7 @@ get_icon tile =
(Html.Attributes.class
(
"battle-tile-variant-"
- ++ (toString (Struct.Tile.get_variant_id tile))
+ ++ (toString (Struct.Tile.get_local_variant_ix tile))
)
),
(Html.Attributes.style
diff --git a/src/battle/www/style.css b/src/battle/www/style.css
index 1e537b3..2a2147a 100644
--- a/src/battle/www/style.css
+++ b/src/battle/www/style.css
@@ -606,7 +606,7 @@
.battle-tile-variant-14 {background-position: 200% 300%;}
.battle-tile-variant-15 {background-position: 300% 300%;}
-.battle-tile-icon {z-index: 0; position: absolute; background-size: 300%;}
+.battle-tile-icon {z-index: 0; position: absolute; background-size: 400%;}
.battle-path-icon-below-markers {z-index: 1;}
.battle-marker-icon {z-index: 2;}
.battle-path-icon-above-markers {z-index: 3;}