summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle/src/Struct/Tile.elm')
-rw-r--r--src/battle/src/Struct/Tile.elm121
1 files changed, 43 insertions, 78 deletions
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)
)
)