| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2018-06-06 15:54:18 +0200 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2018-06-06 15:54:18 +0200 | 
| commit | ee9c2ac044cc77b80f30420c8f0788cad4281084 (patch) | |
| tree | 6ce9c45b6c0f0c556839b6f462f84eab06e26594 /src/battlemap/struct/bm_battlemap.erl | |
| parent | 97f7511e61cebae3676a83aa9c0dc2efb15d8d8c (diff) | |
Figuring out how to organize the src folder(s)...
Diffstat (limited to 'src/battlemap/struct/bm_battlemap.erl')
| -rw-r--r-- | src/battlemap/struct/bm_battlemap.erl | 121 | 
1 files changed, 121 insertions, 0 deletions
| diff --git a/src/battlemap/struct/bm_battlemap.erl b/src/battlemap/struct/bm_battlemap.erl new file mode 100644 index 0000000..c3eabb0 --- /dev/null +++ b/src/battlemap/struct/bm_battlemap.erl @@ -0,0 +1,121 @@ +-module(bm_battlemap). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-type id() :: binary(). + +-record +( +   battlemap, +   { +      id :: id(), +      width :: integer(), +      height :: integer(), +      tile_ids :: array:array(bm_tile:id()) +   } +). + +-opaque type() :: #battlemap{}. + +-export_type([type/0, id/0]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% Accessors +-export +( +   [ +      get_id/1, +      get_width/1, +      get_height/1, +      get_tile_ids/1, +      get_tile_id/2 +   ] +). + +-export +( +   [ +      random/3 +   ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec generate_random_tile_ids +   ( +      bm_tile:id(), +      list(bm_tile:id()), +      non_neg_integer(), +      non_neg_integer(), +      non_neg_integer() +   ) +   -> list(bm_tile:id()). +generate_random_tile_ids (_PreviousTileID, Result, _X, 0, _Width) -> +   Result; +generate_random_tile_ids (PreviousTileID, Result, 0, Y, Width) -> +   generate_random_tile_ids(PreviousTileID, Result, Width, (Y - 1), Width); +generate_random_tile_ids (PreviousTileID, Result, X, Y, Width) -> +   NewTile = +      case sh_roll:percentage() of +         N when (N >= 10) -> PreviousTileID; +         _ -> bm_tile:random_id() +      end, +   generate_random_tile_ids(NewTile, [NewTile|Result], (X - 1), Y, Width). + +-spec location_to_array_index +   ( +      non_neg_integer(), +      bm_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 (Battlemap) -> Battlemap#battlemap.id. + +-spec get_width (type()) -> integer(). +get_width (Battlemap) -> Battlemap#battlemap.width. + +-spec get_height (type()) -> integer(). +get_height (Battlemap) -> Battlemap#battlemap.height. + +-spec get_tile_ids (type()) -> array:array(bm_tile:id()). +get_tile_ids (Battlemap) -> Battlemap#battlemap.tile_ids. + +-spec get_tile_id (bm_location:type(), type()) -> bm_tile:id(). +get_tile_id (Location, Battlemap) -> +   TileIX = location_to_array_index(Battlemap#battlemap.width, Location), +   array:get(TileIX, Battlemap#battlemap.tile_ids). + +-spec random +   ( +      non_neg_integer(), +      non_neg_integer(), +      non_neg_integer() +   ) +   -> type(). +random (ID, Width, Height) -> +   InitialTile = bm_tile:random_id(), +   TileIDs = generate_random_tile_ids(InitialTile, [], Width, Height, Width), + +   #battlemap +   { +      id = list_to_binary(integer_to_list(ID)), +      width = Width, +      height = Height, +      tile_ids = array:from_list(TileIDs) +   }. | 


