From 6869f9a8aaab7618dd49cbb47388838fc883ceb9 Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Thu, 2 Aug 2018 20:23:01 +0200 Subject: Getting the map editor up to date... --- src/battle/btl_shim.erl | 6 ++--- src/battle/game-logic/btl_movement.erl | 4 +-- src/battle/reply/btl_set_map.erl | 4 +-- src/battle/struct/btl_battle.erl | 6 ++--- src/battle/struct/btl_map.erl | 18 ++++++------- src/battle/struct/btl_tile.erl | 49 +++++++++++++++++++++++----------- src/battle/struct/btl_tile.erl.m4 | 49 +++++++++++++++++++++++----------- 7 files changed, 85 insertions(+), 51 deletions(-) (limited to 'src/battle') diff --git a/src/battle/btl_shim.erl b/src/battle/btl_shim.erl index e13660c..ec5627a 100644 --- a/src/battle/btl_shim.erl +++ b/src/battle/btl_shim.erl @@ -158,15 +158,15 @@ generate_random_battle () -> UsedTileIDs = array:sparse_foldl ( - fun (_IX, TileID, CurrentTileIDs) -> + fun (_IX, TileInstance, CurrentTileIDs) -> sets:add_element ( - btl_tile:extract_main_class_id(TileID), + btl_tile:extract_main_class_id(TileInstance), CurrentTileIDs ) end, sets:new(), - btl_map:get_tile_ids(Map) + btl_map:get_tile_instances(Map) ), Battle = diff --git a/src/battle/game-logic/btl_movement.erl b/src/battle/game-logic/btl_movement.erl index e19e7f7..ec903e8 100644 --- a/src/battle/game-logic/btl_movement.erl +++ b/src/battle/game-logic/btl_movement.erl @@ -30,8 +30,8 @@ cross (_Map, _ForbiddenLocations, [], Cost, Location) -> {Location, Cost}; cross (Map, ForbiddenLocations, [Step|NextSteps], Cost, Location) -> NextLocation = btl_location:apply_direction(Step, Location), - NextTileID = btl_map:get_tile_id(NextLocation, Map), - NextTileClassID = btl_tile:extract_main_class_id(NextTileID), + NextTileInstance = btl_map:get_tile_instance(NextLocation, Map), + NextTileClassID = btl_tile:extract_main_class_id(NextTileInstance), NextTile = btl_tile:from_class_id(NextTileClassID), NextCost = (Cost + btl_tile:get_cost(NextTile)), IsForbidden = diff --git a/src/battle/reply/btl_set_map.erl b/src/battle/reply/btl_set_map.erl index e7e4f25..c0dd2ca 100644 --- a/src/battle/reply/btl_set_map.erl +++ b/src/battle/reply/btl_set_map.erl @@ -27,8 +27,8 @@ generate (Map) -> <<"t">>, lists:map ( - fun btl_tile:id_to_int_list/1, - array:sparse_to_list(btl_map:get_tile_ids(Map)) + fun btl_tile:instance_to_int_list/1, + array:sparse_to_list(btl_map:get_tile_instances(Map)) ) } ] diff --git a/src/battle/struct/btl_battle.erl b/src/battle/struct/btl_battle.erl index 22c96f6..b7f158a 100644 --- a/src/battle/struct/btl_battle.erl +++ b/src/battle/struct/btl_battle.erl @@ -12,7 +12,7 @@ id :: id(), used_armor_ids :: list(shr_armor:id()), used_weapon_ids :: list(shr_weapon:id()), - used_tile_ids :: list(btl_tile:id()), + used_tile_ids :: list(btl_tile:class_id()), map :: btl_map:type(), characters :: array:array(btl_character:type()), players :: array:array(btl_player:type()), @@ -92,7 +92,7 @@ get_used_weapon_ids (Battle) -> Battle#battle.used_weapon_ids. -spec get_used_armor_ids (type()) -> list(shr_armor:id()). get_used_armor_ids (Battle) -> Battle#battle.used_armor_ids. --spec get_used_tile_ids (type()) -> list(btl_tile:id()). +-spec get_used_tile_ids (type()) -> list(btl_tile:class_id()). get_used_tile_ids (Battle) -> Battle#battle.used_tile_ids. -spec get_map (type()) -> btl_map:type(). @@ -189,7 +189,7 @@ set_current_player_turn (PlayerTurn, Battle) -> list(btl_character:type()), list(shr_weapon:id()), list(shr_armor:id()), - list(btl_tile:id()) + list(btl_tile:class_id()) ) -> type(). new (ID, PlayersAsList, Map, CharactersAsList, UWIDs, UAIDs, UTIDs) -> diff --git a/src/battle/struct/btl_map.erl b/src/battle/struct/btl_map.erl index ce39b19..cfa8c1e 100644 --- a/src/battle/struct/btl_map.erl +++ b/src/battle/struct/btl_map.erl @@ -12,7 +12,7 @@ id :: id(), width :: integer(), height :: integer(), - tile_ids :: array:array(btl_tile:id()) + tile_ids :: array:array(btl_tile:instance()) } ). @@ -30,8 +30,8 @@ get_id/1, get_width/1, get_height/1, - get_tile_ids/1, - get_tile_id/2 + get_tile_instances/1, + get_tile_instance/2 ] ). @@ -72,11 +72,11 @@ get_width (Map) -> Map#map.width. -spec get_height (type()) -> integer(). get_height (Map) -> Map#map.height. --spec get_tile_ids (type()) -> array:array(btl_tile:id()). -get_tile_ids (Map) -> Map#map.tile_ids. +-spec get_tile_instances (type()) -> array:array(btl_tile:instance()). +get_tile_instances (Map) -> Map#map.tile_ids. --spec get_tile_id (btl_location:type(), type()) -> btl_tile:id(). -get_tile_id (Location, Map) -> +-spec get_tile_instance (btl_location:type(), type()) -> btl_tile:instance(). +get_tile_instance (Location, Map) -> TileIX = location_to_array_index(Map#map.width, Location), array:get(TileIX, Map#map.tile_ids). @@ -89,12 +89,12 @@ get_tile_id (Location, Map) -> ) -> type(). from_list (ID, Width, Height, List) -> - TileIDs = lists:map(fun btl_tile:id_from_ints/1, List), + TileInstances = lists:map(fun btl_tile:instance_from_ints/1, List), #map { id = list_to_binary(integer_to_list(ID)), width = Width, height = Height, - tile_ids = array:from_list(TileIDs) + tile_ids = array:from_list(TileInstances) }. diff --git a/src/battle/struct/btl_tile.erl b/src/battle/struct/btl_tile.erl index 60886ca..45e8ad3 100644 --- a/src/battle/struct/btl_tile.erl +++ b/src/battle/struct/btl_tile.erl @@ -14,11 +14,14 @@ ). -opaque class_id() :: non_neg_integer(). --opaque id() :: {class_id(), class_id(), non_neg_integer()}. +-opaque instance() :: ( + {class_id(), class_id(), non_neg_integer()} + | non_neg_integer() +). -opaque type() :: #tile{}. --export_type([type/0, class_id/0, id/0]). +-export_type([type/0, class_id/0, instance/0]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -36,8 +39,8 @@ -export ( [ - id_to_int_list/1, - id_from_ints/1 + instance_to_int_list/1, + instance_from_ints/1 ] ). @@ -58,14 +61,23 @@ %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec extract_main_class_id (id()) -> class_id(). -extract_main_class_id ({M, _, _}) -> M. +-spec extract_main_class_id (instance()) -> class_id(). +extract_main_class_id (M) when is_integer(M) -> + M; +extract_main_class_id ({M, _, _}) -> + M. --spec extract_border_class_id (id()) -> class_id(). -extract_border_class_id ({_, B, _}) -> B. +-spec extract_border_class_id (instance()) -> class_id(). +extract_border_class_id (M) when is_integer(M) -> + M; +extract_border_class_id ({_, B, _}) -> + B. --spec extract_variant_ix (id()) -> class_id(). -extract_variant_ix ({_, _, V}) -> V. +-spec extract_variant_ix (instance()) -> non_neg_integer(). +extract_variant_ix (M) when is_integer(M) -> + 0; +extract_variant_ix ({_, _, V}) -> + V. -spec from_class_id (class_id()) -> type(). @@ -112,11 +124,16 @@ get_cost (Tile) -> Tile#tile.cost. -spec get_name (type()) -> binary(). get_name (Tile) -> Tile#tile.name. --spec id_from_ints +-spec instance_from_ints ( {non_neg_integer(), non_neg_integer(), non_neg_integer()} - ) -> id(). -id_from_ints ({M, B, V}) -> {M, B, V}. - --spec id_to_int_list (id()) -> list(non_neg_integer()). -id_to_int_list ({M, B, V}) -> [M, B, V]. + ) -> instance(). +instance_from_ints ({M, B, V}) -> + case (M == B) of + true -> M; + _ -> {M, B, V} + end. + +-spec instance_to_int_list (instance()) -> list(non_neg_integer()). +instance_to_int_list (M) when is_integer(M) -> [M]; +instance_to_int_list ({M, B, V}) -> [M, B, V]. diff --git a/src/battle/struct/btl_tile.erl.m4 b/src/battle/struct/btl_tile.erl.m4 index 170b855..3b3ee53 100644 --- a/src/battle/struct/btl_tile.erl.m4 +++ b/src/battle/struct/btl_tile.erl.m4 @@ -14,11 +14,14 @@ ). -opaque class_id() :: non_neg_integer(). --opaque id() :: {class_id(), class_id(), non_neg_integer()}. +-opaque instance() :: ( + {class_id(), class_id(), non_neg_integer()} + | non_neg_integer() +). -opaque type() :: #tile{}. --export_type([type/0, class_id/0, id/0]). +-export_type([type/0, class_id/0, instance/0]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -36,8 +39,8 @@ -export ( [ - id_to_int_list/1, - id_from_ints/1 + instance_to_int_list/1, + instance_from_ints/1 ] ). @@ -58,14 +61,23 @@ %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec extract_main_class_id (id()) -> class_id(). -extract_main_class_id ({M, _, _}) -> M. +-spec extract_main_class_id (instance()) -> class_id(). +extract_main_class_id (M) when is_integer(M) -> + M; +extract_main_class_id ({M, _, _}) -> + M. --spec extract_border_class_id (id()) -> class_id(). -extract_border_class_id ({_, B, _}) -> B. +-spec extract_border_class_id (instance()) -> class_id(). +extract_border_class_id (M) when is_integer(M) -> + M; +extract_border_class_id ({_, B, _}) -> + B. --spec extract_variant_ix (id()) -> class_id(). -extract_variant_ix ({_, _, V}) -> V. +-spec extract_variant_ix (instance()) -> non_neg_integer(). +extract_variant_ix (M) when is_integer(M) -> + 0; +extract_variant_ix ({_, _, V}) -> + V. -spec from_class_id (class_id()) -> type(). m4_include(__MAKEFILE_DATA_DIR/tile/global.m4.conf)m4_dnl @@ -86,11 +98,16 @@ get_cost (Tile) -> Tile#tile.cost. -spec get_name (type()) -> binary(). get_name (Tile) -> Tile#tile.name. --spec id_from_ints +-spec instance_from_ints ( {non_neg_integer(), non_neg_integer(), non_neg_integer()} - ) -> id(). -id_from_ints ({M, B, V}) -> {M, B, V}. - --spec id_to_int_list (id()) -> list(non_neg_integer()). -id_to_int_list ({M, B, V}) -> [M, B, V]. + ) -> instance(). +instance_from_ints ({M, B, V}) -> + case (M == B) of + true -> M; + _ -> {M, B, V} + end. + +-spec instance_to_int_list (instance()) -> list(non_neg_integer()). +instance_to_int_list (M) when is_integer(M) -> [M]; +instance_to_int_list ({M, B, V}) -> [M, B, V]. -- cgit v1.2.3-70-g09d2