summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2018-12-21 17:23:56 +0100
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2018-12-21 17:23:56 +0100
commita81ff643a823dde57ebd0ed5da8a91fb75d32267 (patch)
treedc7dd9e17bb380d05d446b10e7630db340c5998e /src/battle/struct
parentc69fe90821bba84c70b020a2504fe4ed63072158 (diff)
Removes any use of arrays.
Diffstat (limited to 'src/battle/struct')
-rw-r--r--src/battle/struct/btl_battle.erl156
-rw-r--r--src/battle/struct/btl_character.erl6
-rw-r--r--src/battle/struct/btl_map.erl43
-rw-r--r--src/battle/struct/btl_player_turn.erl13
4 files changed, 155 insertions, 63 deletions
diff --git a/src/battle/struct/btl_battle.erl b/src/battle/struct/btl_battle.erl
index 5cc7bc3..b2bd4f1 100644
--- a/src/battle/struct/btl_battle.erl
+++ b/src/battle/struct/btl_battle.erl
@@ -3,7 +3,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--type id() :: binary().
+-type id() :: ataxia_id:type().
-record
(
@@ -12,10 +12,11 @@
id :: id(),
used_armor_ids :: ordsets:ordset(shr_armor:id()),
used_weapon_ids :: ordsets:ordset(shr_weapon:id()),
+ used_portrait_ids :: ordsets:ordset(shr_portrait:id()),
used_tile_ids :: ordsets:ordset(shr_tile:class_id()),
map :: btl_map:type(),
- characters :: array:array(btl_character:type()),
- players :: array:array(btl_player:type()),
+ characters :: orddict:orddict(non_neg_integer(), btl_character:type()),
+ players :: orddict:orddict(non_neg_integer(), btl_player:type()),
current_player_turn :: btl_player_turn:type()
}
).
@@ -32,6 +33,7 @@
(
[
get_id/1,
+ get_used_portrait_ids/1,
get_used_weapon_ids/1,
get_used_armor_ids/1,
get_used_tile_ids/1,
@@ -43,13 +45,21 @@
get_current_player_turn/1,
get_encoded_last_turns_effects/1,
+ set_id/2,
set_map/2,
+ set_used_portrait_ids/2,
+ set_used_weapon_ids/2,
+ set_used_armor_ids/2,
set_characters/2,
set_character/3,
set_players/2,
set_player/3,
set_current_player_turn/2,
+ get_id_field/0,
+ get_used_armor_ids_field/0,
+ get_used_weapon_ids_field/0,
+ get_used_portrait_ids_field/0,
get_characters_field/0,
get_players_field/0,
get_current_player_turn_field/0
@@ -59,7 +69,7 @@
-export
(
[
- new/7
+ new/1
]
).
@@ -67,7 +77,7 @@
%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
get_all_timelines (Result, CurrentIndex, EndPoint, ArraySize, Players) ->
- Player = array:get(CurrentIndex, Players),
+ Player = orddict:fetch(CurrentIndex, Players),
Timeline = btl_player:get_timeline(Player),
NextIndex = ((CurrentIndex + 1) rem ArraySize),
NextResult = (Timeline ++ Result),
@@ -79,6 +89,7 @@ get_all_timelines (Result, CurrentIndex, EndPoint, ArraySize, Players) ->
get_all_timelines(NextResult, NextIndex, EndPoint, ArraySize, Players)
end.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -86,6 +97,9 @@ get_all_timelines (Result, CurrentIndex, EndPoint, ArraySize, Players) ->
-spec get_id (type()) -> id().
get_id (Battle) -> Battle#battle.id.
+-spec get_used_portrait_ids (type()) -> ordsets:ordset(shr_portrait:id()).
+get_used_portrait_ids (Battle) -> Battle#battle.used_portrait_ids.
+
-spec get_used_weapon_ids (type()) -> ordsets:ordset(shr_weapon:id()).
get_used_weapon_ids (Battle) -> Battle#battle.used_weapon_ids.
@@ -98,20 +112,28 @@ get_used_tile_ids (Battle) -> Battle#battle.used_tile_ids.
-spec get_map (type()) -> btl_map:type().
get_map (Battle) -> Battle#battle.map.
--spec get_characters (type()) -> array:array(btl_character:type()).
+-spec get_characters
+ (
+ type()
+ )
+ -> orddict:orddict(non_neg_integer(), btl_character:type()).
get_characters (Battle) -> Battle#battle.characters.
-spec get_character (non_neg_integer(), type()) -> btl_character:type().
get_character (IX, Battle) ->
- array:get(IX, Battle#battle.characters).
+ orddict:fetch(IX, Battle#battle.characters).
--spec get_players (type()) -> array:array(btl_player:type()).
+-spec get_players
+ (
+ type()
+ )
+ -> orddict:orddict(non_neg_integer(), btl_player:type()).
get_players (Battle) ->
Battle#battle.players.
-spec get_player (non_neg_integer(), type()) -> btl_player:type().
get_player (IX, Battle) ->
- array:get(IX, Battle#battle.players).
+ orddict:fetch(IX, Battle#battle.players).
-spec get_current_player_turn (type()) -> btl_player_turn:type().
get_current_player_turn (Battle) ->
@@ -123,10 +145,17 @@ get_encoded_last_turns_effects (Battle) ->
Players = Battle#battle.players,
CurrentPlayerIX = btl_player_turn:get_player_ix(CurrentPlayerTurn),
- PlayersCount = array:size(Players),
+ PlayersCount = orddict:size(Players),
StartingPoint = ((CurrentPlayerIX + 1) rem PlayersCount),
get_all_timelines([], StartingPoint, CurrentPlayerIX, PlayersCount, Players).
+-spec set_id (id(), type()) -> type().
+set_id (ID, Battle) ->
+ Battle#battle
+ {
+ id = ID
+ }.
+
-spec set_map (btl_map:type(), type()) -> type().
set_map (Map, Battle) ->
Battle#battle
@@ -134,7 +163,12 @@ set_map (Map, Battle) ->
map = Map
}.
--spec set_characters (array:array(btl_character:type()), type()) -> type().
+-spec set_characters
+ (
+ orddict:orddict(non_neg_integer(), btl_character:type()),
+ type()
+ )
+ -> type().
set_characters (Characters, Battle) ->
Battle#battle
{
@@ -145,33 +179,62 @@ set_characters (Characters, Battle) ->
set_character (IX, Character, Battle) ->
Battle#battle
{
- characters =
- array:set
- (
- IX,
- Character,
- Battle#battle.characters
- )
+ characters = orddict:store(IX, Character, Battle#battle.characters)
}.
--spec set_players (array:array(btl_player:type()), type()) -> type().
+-spec set_players
+ (
+ orddict:orddict(non_neg_integer(), btl_player:type()),
+ type()
+ )
+ -> type().
set_players (Players, Battle) ->
Battle#battle
{
players = Players
}.
+-spec set_used_portrait_ids
+ (
+ ordsets:ordset(shr_portrait:id()),
+ type()
+ )
+ -> type().
+set_used_portrait_ids (UPIDs, Battle) ->
+ Battle#battle
+ {
+ used_portrait_ids = UPIDs
+ }.
+
+-spec set_used_weapon_ids
+ (
+ ordsets:ordset(shr_weapon:id()),
+ type()
+ )
+ -> type().
+set_used_weapon_ids (UPIDs, Battle) ->
+ Battle#battle
+ {
+ used_weapon_ids = UPIDs
+ }.
+
+-spec set_used_armor_ids
+ (
+ ordsets:ordset(shr_armor:id()),
+ type()
+ )
+ -> type().
+set_used_armor_ids (UPIDs, Battle) ->
+ Battle#battle
+ {
+ used_armor_ids = UPIDs
+ }.
+
-spec set_player (non_neg_integer(), btl_player:type(), type()) -> type().
set_player (IX, Player, Battle) ->
Battle#battle
{
- players =
- array:set
- (
- IX,
- Player,
- Battle#battle.players
- )
+ players = orddict:store(IX, Player, Battle#battle.players)
}.
-spec set_current_player_turn (btl_player_turn:type(), type()) -> type().
@@ -181,34 +244,39 @@ set_current_player_turn (PlayerTurn, Battle) ->
current_player_turn = PlayerTurn
}.
--spec new
- (
- id(),
- list(btl_player:type()),
- btl_map:type(),
- list(btl_character:type()),
- ordsets:ordset(shr_weapon:id()),
- ordsets:ordset(shr_armor:id()),
- ordsets:ordset(shr_tile:class_id())
- )
- -> type().
-new (ID, PlayersAsList, Map, CharactersAsList, UWIDs, UAIDs, UTIDs) ->
+-spec new (btl_map:type()) -> type().
+new (Map) ->
+ EmptySet = ordsets:new(),
+ EmptyDict = orddict:new(),
+
#battle
{
- id = ID,
- used_weapon_ids = UWIDs,
- used_armor_ids = UAIDs,
- used_tile_ids = UTIDs,
+ id = ataxia_id:null(),
+ used_portrait_ids = EmptySet,
+ used_weapon_ids = EmptySet,
+ used_armor_ids = EmptySet,
+ used_tile_ids = btl_map:get_used_tile_ids(Map),
map = Map,
- characters = array:from_list(CharactersAsList),
- players = array:from_list(PlayersAsList),
+ characters = EmptyDict,
+ players = EmptyDict,
current_player_turn = btl_player_turn:new(0, 0)
}.
+-spec get_id_field () -> non_neg_integer().
+get_id_field () -> #battle.characters.
-spec get_characters_field () -> non_neg_integer().
get_characters_field () -> #battle.characters.
+-spec get_used_portrait_ids_field () -> non_neg_integer().
+get_used_portrait_ids_field () -> #battle.used_portrait_ids.
+
+-spec get_used_weapon_ids_field () -> non_neg_integer().
+get_used_weapon_ids_field () -> #battle.used_weapon_ids.
+
+-spec get_used_armor_ids_field () -> non_neg_integer().
+get_used_armor_ids_field () -> #battle.used_armor_ids.
+
-spec get_players_field () -> non_neg_integer().
get_players_field () -> #battle.players.
diff --git a/src/battle/struct/btl_character.erl b/src/battle/struct/btl_character.erl
index 8c04cd8..84eecfb 100644
--- a/src/battle/struct/btl_character.erl
+++ b/src/battle/struct/btl_character.erl
@@ -56,7 +56,7 @@
get_rank_field/0,
get_weapons_field/0,
- get_locatiupdate_field/0,
+ get_location_field/0,
get_current_health_field/0,
get_is_active_field/0,
get_is_defeated_field/0
@@ -255,8 +255,8 @@ new
get_rank_field () -> #character.rank.
-spec get_weapons_field() -> non_neg_integer().
get_weapons_field () -> #character.weapon_ids.
--spec get_locatiupdate_field() -> non_neg_integer().
-get_locatiupdate_field () -> #character.location.
+-spec get_location_field() -> non_neg_integer().
+get_location_field () -> #character.location.
-spec get_current_health_field() -> non_neg_integer().
get_current_health_field () -> #character.current_health.
-spec get_is_active_field() -> non_neg_integer().
diff --git a/src/battle/struct/btl_map.erl b/src/battle/struct/btl_map.erl
index e4aa88b..17a272b 100644
--- a/src/battle/struct/btl_map.erl
+++ b/src/battle/struct/btl_map.erl
@@ -9,7 +9,7 @@
{
width :: integer(),
height :: integer(),
- tile_ids :: array:array(shr_tile:instance())
+ tile_ids :: shr_tile:instances_tuple()
}
).
@@ -27,7 +27,8 @@
get_width/1,
get_height/1,
get_tile_instances/1,
- get_tile_instance/2
+ get_tile_instance/2,
+ get_used_tile_ids/1
]
).
@@ -35,20 +36,20 @@
(
[
from_list/3,
- from_array/3
+ from_instances_tuple/3
]
).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec location_to_array_index
+-spec location_to_index
(
non_neg_integer(),
btl_location:type()
)
-> ('error' | non_neg_integer()).
-location_to_array_index (ArrayWidth, {X, Y}) ->
+location_to_index (ArrayWidth, {X, Y}) ->
if
(X < 0) -> error;
(Y < 0) -> error;
@@ -66,13 +67,13 @@ get_width (Map) -> Map#map.width.
-spec get_height (type()) -> integer().
get_height (Map) -> Map#map.height.
--spec get_tile_instances (type()) -> array:array(shr_tile:instance()).
+-spec get_tile_instances (type()) -> shr_tile:instances_tuple().
get_tile_instances (Map) -> Map#map.tile_ids.
-spec get_tile_instance (btl_location:type(), type()) -> shr_tile:instance().
get_tile_instance (Location, Map) ->
- TileIX = location_to_array_index(Map#map.width, Location),
- array:get(TileIX, Map#map.tile_ids).
+ TileIX = location_to_index(Map#map.width, Location),
+ element((TileIX + 1), Map#map.tile_ids).
-spec from_list
(
@@ -88,20 +89,38 @@ from_list (Width, Height, List) ->
{
width = Width,
height = Height,
- tile_ids = array:from_list(TileInstances)
+ tile_ids = list_to_tuple(TileInstances)
}.
--spec from_array
+-spec from_instances_tuple
(
non_neg_integer(),
non_neg_integer(),
- array:array(shr_tile:instance())
+ shr_tile:instances_tuple()
)
-> type().
-from_array (Width, Height, TileInstances) ->
+from_instances_tuple (Width, Height, TileInstances) ->
#map
{
width = Width,
height = Height,
tile_ids = TileInstances
}.
+
+-spec get_used_tile_ids (type()) -> ordsets:ordset(shr_tile:class_id()).
+get_used_tile_ids (Map) ->
+ UsedTileIDs =
+ lists:foldl
+ (
+ fun (TileInstance, CurrentTileIDs) ->
+ ordsets:add_element
+ (
+ shr_tile:extract_main_class_id(TileInstance),
+ CurrentTileIDs
+ )
+ end,
+ ordsets:new(),
+ tuple_to_list(Map#map.tile_ids)
+ ),
+
+ UsedTileIDs.
diff --git a/src/battle/struct/btl_player_turn.erl b/src/battle/struct/btl_player_turn.erl
index e0665f4..6bd823f 100644
--- a/src/battle/struct/btl_player_turn.erl
+++ b/src/battle/struct/btl_player_turn.erl
@@ -43,14 +43,14 @@
-spec next_valid_player
(
non_neg_integer(),
- array:array(btl_player:type()),
+ orddict:orddict(non_neg_integer(), btl_player:type()),
non_neg_integer(),
non_neg_integer()
) -> non_neg_integer().
next_valid_player (StartingPoint, _Players, _PlayersCount, StartingPoint) ->
StartingPoint;
next_valid_player (CandidateIX, Players, PlayersCount, StartingPoint) ->
- Candidate = array:get(CandidateIX, Players),
+ Candidate = orddict:fetch(CandidateIX, Players),
case btl_player:get_is_active(Candidate) of
true -> CandidateIX;
@@ -82,11 +82,16 @@ get_number (PlayerTurn) -> PlayerTurn#player_turn.number.
-spec get_player_ix (type()) -> non_neg_integer().
get_player_ix (PlayerTurn) -> PlayerTurn#player_turn.player_ix.
--spec next (array:array(btl_player:type()), type()) -> type().
+-spec next
+ (
+ orddict:orddict(non_neg_integer(), btl_player:type()),
+ type()
+ )
+ -> type().
next (Players, CurrentPlayerTurn) ->
CurrentPlayerIX = CurrentPlayerTurn#player_turn.player_ix,
CurrentTurnNumber = CurrentPlayerTurn#player_turn.number,
- PlayersCount = array:size(Players),
+ PlayersCount = orddict:size(Players),
NextPlayerIX =
next_valid_player