summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2018-07-12 16:50:35 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2018-07-12 16:50:35 +0200
commit73bea4600f5bb3ad748d9bfa65ef6cd14e6bbd55 (patch)
tree14c6448e2fc0ff8714c51caaed273ffeb6bd5b59 /src/map/struct/map_tile.erl
parentb6e8cc8606b288970d7cdf577c6dd36950adac91 (diff)
Starting work on the Map handler...
Diffstat (limited to 'src/map/struct/map_tile.erl')
-rw-r--r--src/map/struct/map_tile.erl124
1 files changed, 124 insertions, 0 deletions
diff --git a/src/map/struct/map_tile.erl b/src/map/struct/map_tile.erl
new file mode 100644
index 0000000..16e671b
--- /dev/null
+++ b/src/map/struct/map_tile.erl
@@ -0,0 +1,124 @@
+-module(btl_tile).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-record
+(
+ tile,
+ {
+ id :: id(),
+ name :: binary(),
+ cost :: non_neg_integer(),
+ class_range_min :: non_neg_integer(),
+ class_range_max :: non_neg_integer()
+ }
+).
+
+-opaque id() :: non_neg_integer().
+-opaque class_id() :: non_neg_integer().
+-opaque type() :: #tile{}.
+
+-export_type([type/0, class_id/0, id/0]).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-export
+(
+ [
+ get_id/1,
+ get_name/1,
+ get_cost/1,
+ get_range_minimum/1,
+ get_range_maximum/1,
+ from_id/1,
+ cost_when_oob/0
+ ]
+).
+
+-export
+(
+ [
+ class_id_to_type_id/1,
+ class_id_from_int/1
+ ]
+).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+-spec class_id_to_type_id (class_id()) -> id().
+class_id_to_type_id (ClassID) ->
+ case ClassID of
+ 0 -> 0;
+ 1 -> 1;
+ 2 -> 2;
+ N when ((N >= 3) and (N =< 17)) -> 3
+ end.
+
+-spec from_id (id()) -> type().
+from_id (0) ->
+ #tile
+ {
+ id = 0,
+ name = <<"[Grassland] Grass">>,
+ cost = 6,
+ class_range_min = 0,
+ class_range_max = 0
+ };
+from_id (1) ->
+ #tile
+ {
+ id = 1,
+ name = <<"[Grassland] Mushroom Infestation">>,
+ cost = 12,
+ class_range_min = 1,
+ class_range_max = 1
+ };
+from_id (2) ->
+ #tile
+ {
+ id = 2,
+ name = <<"[Grassland] Tree Remains">>,
+ cost = 24,
+ class_range_min = 2,
+ class_range_max = 2
+ };
+from_id (3) ->
+ #tile
+ {
+ id = 3,
+ name = <<"[Grassland] Clear Water">>,
+ cost = cost_when_occupied(),
+ class_range_min = 3,
+ class_range_max = 17
+ }.
+
+-spec cost_when_oob () -> non_neg_integer().
+cost_when_oob () -> 255.
+
+-spec cost_when_occupied () -> non_neg_integer().
+cost_when_occupied () -> 201.
+
+-spec get_id (type()) -> non_neg_integer().
+get_id (Tile) -> Tile#tile.id.
+
+-spec get_cost (type()) -> non_neg_integer().
+get_cost (Tile) -> Tile#tile.cost.
+
+-spec get_name (type()) -> binary().
+get_name (Tile) -> Tile#tile.name.
+
+-spec get_range_minimum (type()) -> non_neg_integer().
+get_range_minimum (Tile) -> Tile#tile.class_range_min.
+
+-spec get_range_maximum (type()) -> non_neg_integer().
+get_range_maximum (Tile) -> Tile#tile.class_range_max.
+
+-spec class_id_from_int (non_neg_integer()) -> id().
+class_id_from_int (I) -> I.