summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle/query/btl_join.erl (renamed from src/battle/query/btl_join.erl.next)75
-rw-r--r--src/battle/reply/btl_add_portrait.erl29
-rw-r--r--src/battle/struct/btl_pending_battle.erl3
-rw-r--r--src/bounty/bnt_generate_player.erl (renamed from src/special/spe_player.erl)8
-rw-r--r--src/bounty/bnt_grant_land.erl (renamed from src/special/spe_map.erl)8
-rw-r--r--src/bounty/bnt_join_battle.erl (renamed from src/special/spe_battle.erl)295
-rw-r--r--src/login/query/lgn_sign_up.erl2
-rw-r--r--src/map/struct/map_map.erl2
-rw-r--r--src/query/qry_shim.erl8
9 files changed, 261 insertions, 169 deletions
diff --git a/src/battle/query/btl_join.erl.next b/src/battle/query/btl_join.erl
index 3ab7be8..a723a8b 100644
--- a/src/battle/query/btl_join.erl.next
+++ b/src/battle/query/btl_join.erl
@@ -16,20 +16,14 @@
mode :: mode(),
size :: non_neg_integer(),
roster_ixs :: list(non_neg_integer()),
- map_id :: string()
+ map_id :: ataxia_id:type()
}
).
--record
-(
- query_state,
- {
- battle :: btl_battle:type()
- }
-).
-type input() :: #input{}.
--type query_state() :: #query_state{}.
+-type defend_query_state() :: 'ok'.
+-type attack_query_state() :: 'ok'.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -48,7 +42,7 @@ parse_input (Req) ->
Mode =
case maps:get(<<"m">>, JSONReqMap) of
<<"a">> -> attack;
- <<"b">> -> defend;
+ <<"d">> -> defend;
V -> {invalid, V}
end,
@@ -87,13 +81,15 @@ authenticate_user (Input) ->
_ -> error
end.
--spec handle_new_attack (input()) -> query_state().
-handle_new_attack (Input) ->
- PlayerID = <<"">>,
+-spec handle_attack (input()) -> 'ok'.
+handle_attack (Input) ->
+ PlayerID = Input#input.player_id,
+ SelectedCharacterIXs = Input#input.roster_ixs,
PlayerDBUser = ataxia_security:user_from_id(PlayerID),
- PartySize = 8,
+ PartySize = length(SelectedCharacterIXs),
- AvailableBattle =
+ % TODO: be less brutal if none is found.
+ {ok, AvailablePendingBattle, _ID} =
ataxia_client:update_and_fetch_any
(
btl_pending,
@@ -125,34 +121,53 @@ handle_new_attack (Input) ->
)
),
- ...
-
+ bnt_join_battle:attempt
+ (
+ PlayerID,
+ SelectedCharacterIXs,
+ AvailablePendingBattle
+ ),
--spec fetch_data (input()) -> query_state().
-fetch_data (Input) ->
+ ok.
+-spec handle_defend (input()) -> 'ok'.
+handle_defend (Input) ->
PlayerID = Input#input.player_id,
- BattleID = Input#input.battle_id,
+ SelectedCharacterIXs = Input#input.roster_ixs,
+ MapID = Input#input.map_id,
- Battle = shr_timed_cache:fetch(battle_db, PlayerID, BattleID),
+ bnt_join_battle:generate(PlayerID, MapID, SelectedCharacterIXs),
- #query_state
- {
- battle = Battle
- }.
+ ok.
+
+-spec fetch_attack_data (input()) -> attack_query_state().
+fetch_attack_data (_Input) -> ok. % TODO
+-spec fetch_defend_data (input()) -> defend_query_state().
+fetch_defend_data (_Input) -> ok. % TODO
--spec generate_reply(query_state(), input()) -> binary().
-generate_reply (QueryState, Input) ->
+-spec authorize_attack (attack_query_state(), input()) -> 'ok'.
+authorize_attack (_QueryState, _Input) -> ok. % TODO
- Output.
+-spec authorize_defend (defend_query_state(), input()) -> 'ok'.
+authorize_defend (_QueryState, _Input) -> ok. % TODO
-spec handle (binary()) -> binary().
handle (Req) ->
Input = parse_input(Req),
case authenticate_user(Input) of
ok ->
- QueryState = fetch_data(Input),
- generate_reply(QueryState, Input);
+ case Input#input.mode of
+ attack ->
+ QueryState = fetch_attack_data(Input),
+ ok = authorize_attack(QueryState, Input),
+ handle_attack(Input);
+
+ defend ->
+ QueryState = fetch_defend_data(Input),
+ ok = authorize_defend(QueryState, Input),
+ handle_defend(Input)
+ end,
+ jiffy:encode([shr_okay:generate()]);
error -> jiffy:encode([shr_disconnected:generate()])
end.
diff --git a/src/battle/reply/btl_add_portrait.erl b/src/battle/reply/btl_add_portrait.erl
new file mode 100644
index 0000000..a634a04
--- /dev/null
+++ b/src/battle/reply/btl_add_portrait.erl
@@ -0,0 +1,29 @@
+-module(btl_add_portrait).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-export([generate/1]).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec generate (shr_portrait:type()) -> {list(any())}.
+generate (Portrait) ->
+ {
+ [
+ {<<"msg">>, <<"add_portrait">>},
+ {<<"id">>, shr_portrait:get_id(Portrait)},
+ {<<"nam">>, shr_portrait:get_name(Portrait)},
+ {<<"bid">>, shr_portrait:get_body_id(Portrait)},
+ {<<"iid">>, shr_portrait:get_icon_id(Portrait)}
+ ]
+ }.
diff --git a/src/battle/struct/btl_pending_battle.erl b/src/battle/struct/btl_pending_battle.erl
index 6e21f79..cecaeb5 100644
--- a/src/battle/struct/btl_pending_battle.erl
+++ b/src/battle/struct/btl_pending_battle.erl
@@ -18,6 +18,9 @@
-opaque type() :: #pending_battle{}.
-export_type([type/0, id/0]).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/src/special/spe_player.erl b/src/bounty/bnt_generate_player.erl
index 00086fd..e02a94b 100644
--- a/src/special/spe_player.erl
+++ b/src/bounty/bnt_generate_player.erl
@@ -1,4 +1,4 @@
--module(spe_player).
+-module(bnt_generate_player).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -7,7 +7,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export([generate/3]).
+-export([attempt/3]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -101,8 +101,8 @@ generate_roster (PlayerID) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec generate (binary(), binary(), binary()) -> shr_player:type().
-generate (Username, Password, Email) ->
+-spec attempt (binary(), binary(), binary()) -> shr_player:type().
+attempt (Username, Password, Email) ->
UsernameLC = string:lowercase(Username),
EmailLC = string:lowercase(Email),
diff --git a/src/special/spe_map.erl b/src/bounty/bnt_grant_land.erl
index afb5647..1a8a62e 100644
--- a/src/special/spe_map.erl
+++ b/src/bounty/bnt_grant_land.erl
@@ -1,4 +1,4 @@
--module(spe_map).
+-module(bnt_grant_land).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -7,7 +7,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export([grant_additional/1]).
+-export([attempt/1]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -16,8 +16,8 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec grant_additional (ataxia_id:type()) -> map_map:type().
-grant_additional (OwnerID) ->
+-spec attempt (ataxia_id:type()) -> map_map:type().
+attempt (OwnerID) ->
Map = map_map:default(OwnerID),
{ok, MapID} =
diff --git a/src/special/spe_battle.erl b/src/bounty/bnt_join_battle.erl
index d907224..1028166 100644
--- a/src/special/spe_battle.erl
+++ b/src/bounty/bnt_join_battle.erl
@@ -1,4 +1,4 @@
--module(spe_battle).
+-module(bnt_join_battle).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -7,7 +7,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export([generate/2, add_to/2]).
+-export([generate/3, attempt/3]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -173,7 +173,7 @@ create_character (PlayerIX, RosterChar, Map, ForbiddenLocations) ->
-spec handle_characters
(
- list({non_neg_integer(), rst_character:type()}),
+ list(rst_character:type()),
non_neg_integer(),
btl_map:type(),
ordsets:ordset(btl_location:type()),
@@ -199,7 +199,7 @@ handle_characters
{Characters, AtaxicUpdates};
handle_characters
(
- [{_, RosterCharacter}|NextRosterCharacters],
+ [RosterCharacter|NextRosterCharacters],
PlayerIX,
Map,
UsedLocations,
@@ -235,143 +235,67 @@ handle_characters
[NewUpdate|AtaxicUpdates]
).
--spec handle_roster
+-spec add_player
(
- rst_roster:type(),
- btl_map:type(),
- ordsets:ordset(btl_location:type()),
+ shr_player:id(),
btl_battle:type()
)
- -> {btl_battle:type(), ataxic:basic()}.
-handle_roster
-(
- Roster,
- Map,
- UsedLocations,
- Battle
-) ->
+ -> {btl_battle:type(), non_neg_integer(), ataxic:basic()}.
+add_player (PlayerID, Battle) ->
Players = btl_battle:get_players(Battle),
- NextPlayerIX = orddict:size(Players),
- NewPlayer = btl_player:new(NextPlayerIX, 0, rst_roster:get_owner(Roster)),
- NewPlayers = orddict:store(NextPlayerIX, NewPlayer, Players),
- Characters = btl_battle:get_characters(Battle),
- {NewCharacters, CharactersUpdates} =
- handle_characters
- (
- orddict:to_list(rst_roster:get_characters(Roster)),
- NextPlayerIX,
- Map,
- UsedLocations,
- orddict:size(Characters),
- Characters,
- []
- ),
+ PlayerIX = orddict:size(Players),
+ NewPlayer = btl_player:new(PlayerIX, 0, PlayerID),
- NewBattle =
- btl_battle:set_characters
- (
- NewCharacters,
- btl_battle:set_players
- (
- NewPlayers,
- Battle
- )
- ),
+ NewPlayers = orddict:store(PlayerIX, NewPlayer, Players),
+ S0Battle = btl_battle:set_players(NewPlayers, Battle),
Update =
- ataxic:sequence
- (
- [
- ataxic:update_field
- (
- btl_battle:get_players_field(),
- ataxic:apply_function
- (
- orddict,
- store,
- [
- ataxic:constant(NextPlayerIX),
- ataxic:constant(NewPlayer),
- ataxic:current_value()
- ]
- )
- ),
- ataxic:update_field
- (
- btl_battle:get_characters_field(),
- ataxic:sequence(CharactersUpdates)
- )
- ]
- ),
-
- {NewBattle, Update}.
-
-%%%% BATTLE CREATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec generate_battle (map_map:type(), rst_roster:type()) -> btl_battle:type().
-generate_battle (Map, Roster) ->
- TileInstances = map_map:get_tile_instances(Map),
- BattleMap =
- btl_map:from_instances_tuple
- (
- map_map:get_width(Map),
- map_map:get_height(Map),
- TileInstances
- ),
-
- Battle = btl_battle:new(BattleMap),
- {S0Battle, _AtaxicUpdate} =
- handle_roster(Roster, BattleMap, ordsets:new(), Battle),
-
- {UsedPortraitIDs, UsedWeaponIDs, UsedArmorIDs} =
- get_equipment_ids(btl_battle:get_characters(S0Battle)),
-
- S1Battle =
- btl_battle:set_used_portrait_ids
+ ataxic:update_field
(
- UsedPortraitIDs,
- btl_battle:set_used_weapon_ids
+ btl_battle:get_players_field(),
+ ataxic:apply_function
(
- UsedWeaponIDs,
- btl_battle:set_used_armor_ids
- (
- UsedArmorIDs,
- S0Battle
- )
+ orddict,
+ store,
+ [
+ ataxic:constant(PlayerIX),
+ ataxic:constant(NewPlayer),
+ ataxic:current_value()
+ ]
)
),
- S1Battle.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec generate (map_map:type(), rst_roster:type()) -> btl_battle:type().
-generate (Map, Roster) ->
- Battle = generate_battle(Map, Roster),
- Battle.
+ {S0Battle, PlayerIX, Update}.
--spec add_to
+-spec add_characters
(
- rst_roster:type(),
+ list(rst_character:type()),
+ non_neg_integer(),
btl_battle:type()
)
-> {btl_battle:type(), ataxic:basic()}.
-add_to (Roster, Battle) ->
- BattleMap = btl_battle:get_map(Battle),
+add_characters (RosterCharacters, PlayerIX, Battle) ->
+ CurrentCharacters = btl_battle:get_characters(Battle),
+ NextCharacterIX = orddict:size(CurrentCharacters),
+ Map = btl_battle:get_map(Battle),
+
ForbiddenLocations = get_forbidden_locations(Battle),
- {S0Battle, AtaxicUpdate} =
- handle_roster
+ {NewCharacters, CharactersUpdates} =
+ handle_characters
(
- Roster,
- BattleMap,
+ RosterCharacters,
+ PlayerIX,
+ Map,
ForbiddenLocations,
- Battle
+ NextCharacterIX,
+ CurrentCharacters,
+ []
),
{UsedPortraitIDs, UsedWeaponIDs, UsedArmorIDs} =
- get_equipment_ids(rst_roster:get_characters(Roster)),
+ get_equipment_ids(RosterCharacters),
OldPortraitIDs = btl_battle:get_used_portrait_ids(Battle),
PortraitIDsUpdate =
@@ -397,6 +321,7 @@ add_to (Roster, Battle) ->
update_ordset(UsedArmorIDs, OldArmorIDs)
),
+ S0Battle = btl_battle:set_characters(NewCharacters, Battle),
S1Battle =
btl_battle:set_used_armor_ids
(
@@ -418,21 +343,141 @@ add_to (Roster, Battle) ->
[
ataxic:update_field
(
- btl_battle:get_used_portrait_ids_field(),
- PortraitIDsUpdate
+ btl_battle:get_characters_field(),
+ ataxic:sequence(CharactersUpdates)
),
+ PortraitIDsUpdate,
+ WeaponIDsUpdate,
+ ArmorIDsUpdate
+ ]
+ ),
+
+ {S1Battle, Update}.
+
+-spec get_roster_characters
+ (
+ shr_player:id(),
+ list(non_neg_integer())
+ )
+ -> list(rst_character:type()).
+get_roster_characters (PlayerID, SelectedRosterCharacterIXs) ->
+ Player = shr_timed_cache:fetch(player_db, ataxia_security:any(), PlayerID),
+ RosterID = shr_player:get_roster_id(Player),
+ Roster =
+ shr_timed_cache:fetch
+ (
+ roster_db,
+ ataxia_security:user_from_id(PlayerID),
+ RosterID
+ ),
+
+ RosterCharacters = rst_roster:get_characters(Roster),
+
+ lists:map
+ (
+ fun (CharIX) ->
+ orddict:fetch(CharIX, RosterCharacters)
+ end,
+ SelectedRosterCharacterIXs
+ ).
+
+%%%% BATTLE CREATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec generate_battle (shr_player:id(), map_map:id()) -> btl_battle:type().
+generate_battle (PlayerID, MapID) ->
+ Map =
+ shr_timed_cache:fetch
+ (
+ map_db,
+ ataxia_security:user_from_id(PlayerID),
+ MapID
+ ),
+ TileInstances = map_map:get_tile_instances(Map),
+ BattleMap =
+ btl_map:from_instances_tuple
+ (
+ map_map:get_width(Map),
+ map_map:get_height(Map),
+ TileInstances
+ ),
+
+ Battle = btl_battle:new(BattleMap),
+
+ Battle.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec generate
+ (
+ shr_player:id(),
+ map_map:id(),
+ list(non_neg_integer())
+ )
+ -> btl_pending_battle:type().
+generate (PlayerID, MapID, SelectedRosterCharacterIXs) ->
+ Battle = generate_battle(PlayerID, MapID),
+ PendingBattle =
+ btl_pending_battle:new
+ (
+ <<"">>,
+ % TODO: More options than 1 vs N.
+ (length(SelectedRosterCharacterIXs) * 2),
+ Battle
+ ),
+
+ attempt(PlayerID, SelectedRosterCharacterIXs, PendingBattle).
+
+-spec attempt
+ (
+ shr_player:id(),
+ list(non_neg_integer()),
+ btl_pending_battle:type()
+ )
+ -> btl_pending_battle:type().
+attempt (PlayerID, SelectedRosterCharacterIXs, PendingBattle) ->
+ Battle = btl_pending_battle:get_battle(PendingBattle),
+ RemainingSlots =
+ (
+ btl_pending_battle:get_free_slots(PendingBattle)
+ - length(SelectedRosterCharacterIXs)
+ ),
+
+ NewCharacters = get_roster_characters(PlayerID, SelectedRosterCharacterIXs),
+ {S0Battle, PlayerIX, BattleUpdate0} = add_player(PlayerID, Battle),
+ {S1Battle, BattleUpdate1} =
+ add_characters(NewCharacters, PlayerIX, S0Battle),
+
+ S0PendingBattle = btl_pending_battle:set_battle(S1Battle, PendingBattle),
+ S1PendingBattle =
+ btl_pending_battle:set_free_slots(RemainingSlots, S0PendingBattle),
+
+ Update =
+ ataxic:sequence
+ (
+ [
ataxic:update_field
(
- btl_battle:get_used_weapon_ids_field(),
- WeaponIDsUpdate
+ btl_pending_battle:get_battle_field(),
+ ataxic:sequence
+ (
+ [
+ BattleUpdate0,
+ BattleUpdate1
+ ]
+ )
),
ataxic:update_field
(
- btl_battle:get_used_armor_ids_field(),
- ArmorIDsUpdate
- ),
- AtaxicUpdate
+ btl_pending_battle:get_free_slots_field(),
+ ataxic:constant(RemainingSlots)
+ )
]
),
- {S1Battle, Update}.
+ {S1PendingBattle, Update},
+
+ S1PendingBattle.
+
+ % TODO:
+ % if RemainingSlots = 0 -> del this, new Battle.
+ % Link either new Battle or current Pending Battle to player account.
diff --git a/src/login/query/lgn_sign_up.erl b/src/login/query/lgn_sign_up.erl
index 0632ac1..0d974ff 100644
--- a/src/login/query/lgn_sign_up.erl
+++ b/src/login/query/lgn_sign_up.erl
@@ -54,7 +54,7 @@ register_user (Input) ->
Password = Input#input.password,
Email = Input#input.email,
- GeneratedPlayer = spe_player:generate(Username, Password, Email),
+ GeneratedPlayer = bnt_generate_player:attempt(Username, Password, Email),
#query_state
{
diff --git a/src/map/struct/map_map.erl b/src/map/struct/map_map.erl
index bfa9e5a..b8d37c9 100644
--- a/src/map/struct/map_map.erl
+++ b/src/map/struct/map_map.erl
@@ -3,7 +3,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--type id() :: binary().
+-type id() :: ataxia_id:type().
-record
(
diff --git a/src/query/qry_shim.erl b/src/query/qry_shim.erl
index 473a14c..3933c73 100644
--- a/src/query/qry_shim.erl
+++ b/src/query/qry_shim.erl
@@ -15,14 +15,14 @@
-spec generate_player_0 () -> shr_player:type().
generate_player_0 () ->
Player =
- spe_player:generate
+ bnt_generate_player:attempt
(
<<"Player1">>,
<<"Kalimer0">>,
<<"Player1@tacticians.online">>
),
- spe_map:grant_additional(shr_player:get_id(Player)),
+ bnt_grant_land:attempt(shr_player:get_id(Player)),
Player.
@@ -30,14 +30,14 @@ generate_player_0 () ->
-spec generate_player_1 () -> shr_player:type().
generate_player_1 () ->
Player =
- spe_player:generate
+ bnt_generate_player:attempt
(
<<"Player2">>,
<<"Kalimer1">>,
<<"Player2@tacticians.online">>
),
- spe_map:grant_additional(shr_player:get_id(Player)),
+ bnt_grant_land:attempt(shr_player:get_id(Player)),
Player.