From a132188ccc244a6d802bd1c32fbf196d4cb53cbd Mon Sep 17 00:00:00 2001 From: nsensfel Date: Thu, 12 Jul 2018 17:48:41 +0200 Subject: Got it to load the map (full of "error" tiles). --- src/map/struct/map_map.erl | 107 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 src/map/struct/map_map.erl (limited to 'src/map/struct/map_map.erl') diff --git a/src/map/struct/map_map.erl b/src/map/struct/map_map.erl new file mode 100644 index 0000000..d5a2a7c --- /dev/null +++ b/src/map/struct/map_map.erl @@ -0,0 +1,107 @@ +-module(map_map). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-type id() :: binary(). + +-record +( + map, + { + id :: id(), + owner :: binary(), + width :: integer(), + height :: integer(), + tile_class_ids :: array:array(map_tile:class_id()) + } +). + +-opaque type() :: #map{}. + +-export_type([type/0, id/0]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% Accessors +-export +( + [ + get_id/1, + get_owner/1, + get_width/1, + get_height/1, + get_tile_class_ids/1, + get_tile_class_id/2 + ] +). + +-export +( + [ + from_list/5 + ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec location_to_array_index + ( + non_neg_integer(), + map_location:type() + ) + -> ('error' | non_neg_integer()). +location_to_array_index (ArrayWidth, {X, Y}) -> + if + (X < 0) -> error; + (Y < 0) -> error; + (X >= ArrayWidth) -> error; + true -> ((Y * ArrayWidth) + X) + end. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% Accessors +-spec get_id (type()) -> id(). +get_id (Map) -> Map#map.id. + +-spec get_owner (type()) -> binary(). +get_owner (Map) -> Map#map.owner. + +-spec get_width (type()) -> integer(). +get_width (Map) -> Map#map.width. + +-spec get_height (type()) -> integer(). +get_height (Map) -> Map#map.height. + +-spec get_tile_class_ids (type()) -> array:array(map_tile:class_id()). +get_tile_class_ids (Map) -> Map#map.tile_class_ids. + +-spec get_tile_class_id (map_location:type(), type()) -> map_tile:class_id(). +get_tile_class_id (Location, Map) -> + TileIX = location_to_array_index(Map#map.width, Location), + array:get(TileIX, Map#map.tile_class_ids). + +-spec from_list + ( + non_neg_integer(), + binary(), + non_neg_integer(), + non_neg_integer(), + list(non_neg_integer()) + ) + -> type(). +from_list (ID, Owner, Width, Height, List) -> + TileClassIDs = lists:map(fun map_tile:class_id_from_int/1, List), + + #map + { + id = list_to_binary(integer_to_list(ID)), + owner = Owner, + width = Width, + height = Height, + tile_class_ids = array:from_list(TileClassIDs) + }. -- cgit v1.2.3-70-g09d2