summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/special')
-rw-r--r-- | src/special/spe_battle.erl | 97 |
1 files changed, 48 insertions, 49 deletions
diff --git a/src/special/spe_battle.erl b/src/special/spe_battle.erl index fe18da1..edc18df 100644 --- a/src/special/spe_battle.erl +++ b/src/special/spe_battle.erl @@ -7,7 +7,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export([generate/2]). +-export([generate/2, add_to/2]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -29,7 +29,7 @@ commit (_Battle) -> ( list(btl_character:type()) ) - -> {sets:set(binary()), sets:set(binary())}. + -> {ordsets:ordset(binary()), ordsets:ordset(binary())}. get_equipment_ids (Characters) -> {UsedWeaponIDs, UsedArmorIDs} = lists:foldl @@ -38,29 +38,33 @@ get_equipment_ids (Characters) -> {MWpID, SWpID} = btl_character:get_weapon_ids(Character), AID = btl_character:get_armor_id(Character), { - sets:add_element(MWpID, sets:add_element(SWpID, UWIDs)), - sets:add_element(AID, UAIDs) + ordsets:add_element(MWpID, ordsets:add_element(SWpID, UWIDs)), + ordsets:add_element(AID, UAIDs) } end, - {sets:new(), sets:new()}, + {ordsets:new(), ordsets:new()}, Characters ), {UsedWeaponIDs, UsedArmorIDs}. --spec get_tile_ids (array:array(shr_tile:instance())) -> sets:set(binary()). +-spec get_tile_ids + ( + array:array(shr_tile:instance()) + ) + -> ordsets:ordset(binary()). get_tile_ids (TileInstances) -> UsedTileIDs = array:sparse_foldl ( fun (_IX, TileInstance, CurrentTileIDs) -> - sets:add_element + ordsets:add_element ( shr_tile:extract_main_class_id(TileInstance), CurrentTileIDs ) end, - sets:new(), + ordsets:new(), TileInstances ), @@ -70,7 +74,7 @@ get_tile_ids (TileInstances) -> -spec find_random_location ( btl_map:type(), - list({non_neg_integer(), non_neg_integer()}) + ordsets:ordset({non_neg_integer(), non_neg_integer()}) ) -> {{non_neg_integer(), non_neg_integer()}, shr_tile:type()}. find_random_location (Map, ForbiddenLocations) -> @@ -83,7 +87,7 @@ find_random_location (Map, ForbiddenLocations) -> shr_roll:between(0, (MapHeight - 1)) }, - IsForbidden = lists:member(Candidate, ForbiddenLocations), + IsForbidden = ordsets:is_element(Candidate, ForbiddenLocations), case IsForbidden of true -> find_random_location(Map, ForbiddenLocations); @@ -121,7 +125,7 @@ get_glyphs_omnimods (RosterChar) -> non_neg_integer(), rst_character:type(), btl_map:type(), - list(btl_location:type()) + ordsets:ordset(btl_location:type()) ) -> btl_character:type(). create_character (PlayerIX, RosterChar, Map, ForbiddenLocations) -> @@ -151,11 +155,11 @@ create_character (PlayerIX, RosterChar, Map, ForbiddenLocations) -> non_neg_integer(), list(btl_character:type()), btl_map:type(), - list(btl_location:type()) + ordsets:ordset(btl_location:type()) ) - -> {list(btl_character:type()), list(btl_location:type())}. -handle_characters ([], _PlayerIX, Characters, _Map, UsedLocations) -> - {Characters, UsedLocations}; + -> list(btl_character:type()). +handle_characters ([], _PlayerIX, Characters, _Map, _UsedLocations) -> + Characters; handle_characters ( [RosterCharacter|NextRosterCharacters], @@ -176,47 +180,33 @@ handle_characters [btl_character:get_location(NewCharacter)|UsedLocations] ). --spec handle_rosters +-spec handle_roster ( - list(rst_roster:type()), - list(btl_character:type()), - list(btl_player:type()), + rst_roster:type(), non_neg_integer(), btl_map:type(), - list(btl_location:type()) + ordsets:ordset(btl_location:type()) ) - -> {list(btl_character:type()), list(btl_player:type())}. -handle_rosters ([], Characters, Players, _PlayersCount, _Map, _UsedLocations) -> - {Characters, lists:reverse(Players)}; -handle_rosters + -> {list(btl_character:type()), btl_player:type()}. +handle_roster ( - [Roster|NextRosters], - Characters, - Players, + Roster, PlayersCount, Map, UsedLocations ) -> NewPlayer = btl_player:new(PlayersCount, 0, rst_roster:get_owner(Roster)), - {NextCharacters, NextUsedLocations} = + NewCharacters = handle_characters ( array:to_list(rst_roster:get_characters(Roster)), PlayersCount, - Characters, + [], Map, UsedLocations ), - handle_rosters - ( - NextRosters, - NextCharacters, - [NewPlayer|Players], - (PlayersCount + 1), - Map, - NextUsedLocations - ). + {NewCharacters, NewPlayer}. %%%% BATTLE CREATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -224,10 +214,10 @@ handle_rosters ( binary(), map_map:type(), - list(rst_roster:type()) + rst_roster:type() ) -> btl_battle:type(). -generate_battle (ID, Map, Rosters) -> +generate_battle (ID, Map, Roster) -> TileInstances = map_map:get_tile_instances(Map), BattleMap = btl_map:from_array @@ -236,8 +226,8 @@ generate_battle (ID, Map, Rosters) -> map_map:get_height(Map), TileInstances ), - {Characters, PlayersAsList} = - handle_rosters(Rosters, [], [], 0, BattleMap, []), + {Characters, FirstPlayer} = + handle_roster(Roster, 0, BattleMap, ordsets:new()), {UsedWeaponIDs, UsedArmorIDs} = get_equipment_ids(Characters), UsedTileIDs = get_tile_ids(TileInstances), @@ -246,12 +236,12 @@ generate_battle (ID, Map, Rosters) -> btl_battle:new ( ID, - PlayersAsList, + [FirstPlayer], BattleMap, Characters, - sets:to_list(UsedWeaponIDs), - sets:to_list(UsedArmorIDs), - sets:to_list(UsedTileIDs) + UsedWeaponIDs, + UsedArmorIDs, + UsedTileIDs ), Battle. @@ -262,11 +252,20 @@ generate_battle (ID, Map, Rosters) -> -spec generate ( map_map:type(), - list(rst_roster:type()) + rst_roster:type() ) -> btl_battle:type(). -generate (Map, Rosters) -> +generate (Map, Roster) -> ID = reserve_id(), - Battle = generate_battle(ID, Map, Rosters), + Battle = generate_battle(ID, Map, Roster), ok = commit(Battle), Battle. + +-spec add_to + ( + rst_roster:type(), + btl_battle:type() + ) + -> btl_battle:type(). +add_to (_Roster, Battle) -> + Battle. |