| summaryrefslogtreecommitdiff | 
diff options
| -rw-r--r-- | src/battle/mechanic/turn_action/btl_turn_actions_move.erl | 17 | ||||
| -rw-r--r-- | src/battle/reply/btl_add_tile.erl | 2 | ||||
| -rw-r--r-- | src/battle/struct/btl_pending_battle.erl | 16 | ||||
| -rw-r--r-- | src/bounty/bnt_generate_player.erl | 2 | ||||
| -rw-r--r-- | src/bounty/bnt_join_battle.erl | 215 | ||||
| -rw-r--r-- | src/roster/query/rst_load.erl | 2 | ||||
| -rw-r--r-- | src/roster/query/rst_update.erl | 2 | ||||
| -rw-r--r-- | src/roster/struct/rst_roster.erl | 2 | ||||
| -rw-r--r-- | src/shared/reply/shr_add_weapon.erl | 1 | ||||
| -rw-r--r-- | src/shared/struct/inventory/shr_inventory.erl | 16 | ||||
| -rw-r--r-- | src/shared/struct/inventory/shr_weapon.erl.m4 | 4 | ||||
| -rw-r--r-- | src/shared/struct/shr_character.erl | 46 | ||||
| -rw-r--r-- | src/shared/struct/shr_omnimods.erl | 28 | 
13 files changed, 142 insertions, 211 deletions
| diff --git a/src/battle/mechanic/turn_action/btl_turn_actions_move.erl b/src/battle/mechanic/turn_action/btl_turn_actions_move.erl index da62e8c..a0cd138 100644 --- a/src/battle/mechanic/turn_action/btl_turn_actions_move.erl +++ b/src/battle/mechanic/turn_action/btl_turn_actions_move.erl @@ -107,7 +107,7 @@ get_path_cost_and_destination (Update, Path) ->        btl_character:type(),        non_neg_integer()     ) -   -> 'ok'. +   -> ('ok' | 'error').  assert_character_can_move (Char, Cost) ->     CharacterMovementPoints =        shr_statistics:get_movement_points @@ -118,9 +118,16 @@ assert_character_can_move (Char, Cost) ->           )        ), -   true = (Cost =< CharacterMovementPoints), - -   ok. +   case (Cost =< CharacterMovementPoints) of +      true -> ok; +      false -> +         io:format +         ( +            "~n[E] Character trying to move ~p dist with ~p points.~n", +            [Cost, CharacterMovementPoints] +         ), +         error +   end.  -spec commit_move     ( @@ -184,6 +191,6 @@ handle (BattleAction, Update) ->     {PathCost, NewLocation, S1Update} =        get_path_cost_and_destination(S0Update, Path), -   assert_character_can_move(Character, PathCost), +   ok = assert_character_can_move(Character, PathCost),     commit_move(Character, S1Update, Path, NewLocation). diff --git a/src/battle/reply/btl_add_tile.erl b/src/battle/reply/btl_add_tile.erl index 980628d..90bcbc9 100644 --- a/src/battle/reply/btl_add_tile.erl +++ b/src/battle/reply/btl_add_tile.erl @@ -24,6 +24,8 @@ generate (Tile) ->           {<<"id">>, shr_tile:get_id(Tile)},           {<<"nam">>, shr_tile:get_name(Tile)},           {<<"ct">>, shr_tile:get_cost(Tile)}, +         {<<"de">>, 1}, % TODO: provide actual depth. +         {<<"fa">>, <<"">>}, % TODO: provide actual family.           {<<"omni">>, shr_omnimods:encode(shr_tile:get_omnimods(Tile))}        ]     }. diff --git a/src/battle/struct/btl_pending_battle.erl b/src/battle/struct/btl_pending_battle.erl index 0e46a24..cb8cbfa 100644 --- a/src/battle/struct/btl_pending_battle.erl +++ b/src/battle/struct/btl_pending_battle.erl @@ -46,6 +46,8 @@        push_player_summary_ix/2,        ataxia_set_battle/2, +      ataxia_set_battle/3, +        ataxia_set_free_slots/2,        ataxia_set_battle_id/2,        ataxia_set_player_ids/2, @@ -107,12 +109,22 @@ set_battle (Battle, PBattle) -> PBattle#pending_battle{ battle = Battle }.  -spec ataxia_set_battle (btl_battle:type(), type()) -> {type(), ataxic:basic()}.  ataxia_set_battle (Battle, PBattle) -> +   ataxia_set_battle(Battle, ataxic:constant(Battle), PBattle). + +-spec ataxia_set_battle +   ( +      btl_battle:type(), +      ataxic:basic(), +      type() +   ) +   -> {type(), ataxic:basic()}. +ataxia_set_battle (Battle, BattleAtaxiaUpdate, PBattle) ->     { -      PBattle#pending_battle{ battle = Battle }, +      set_battle(Battle, PBattle),        ataxic:update_field        (           get_battle_field(), -         ataxic:constant(Battle) +         BattleAtaxiaUpdate        )     }. diff --git a/src/bounty/bnt_generate_player.erl b/src/bounty/bnt_generate_player.erl index 9d496c3..17091d5 100644 --- a/src/bounty/bnt_generate_player.erl +++ b/src/bounty/bnt_generate_player.erl @@ -81,7 +81,7 @@ finalize_login (UsernameLC, EmailLC, PlayerID) ->  -spec generate_inventory (shr_player:id()) -> shr_inventory:id().  generate_inventory (PlayerID) -> -   Inventory = shr_inventory:new(PlayerID), +   Inventory = shr_inventory:default(),     {ok, InventoryID} =        ataxia_client:add diff --git a/src/bounty/bnt_join_battle.erl b/src/bounty/bnt_join_battle.erl index 2d4d4e5..7a2bb7c 100644 --- a/src/bounty/bnt_join_battle.erl +++ b/src/bounty/bnt_join_battle.erl @@ -86,16 +86,17 @@ create_character (PlayerIX, RosterChar, Map, ForbiddenLocations) ->     btl_character:to_unresolved(Result). --spec handle_characters +-spec add_characters     (        non_neg_integer(), -      shr_map:type(), -      ordsets:ordset(shr_location:type()),        list(shr_character:unresolved()),        btl_battle:type()     )     -> { btl_battle:type(), ataxic:basic() }. -handle_characters (PlayerIX, Map, UsedLocations, RosterCharacters, Battle) -> +add_characters (PlayerIX, RosterCharacters, Battle) -> +   Map = btl_battle:get_map(Battle), +   ForbiddenLocations = get_forbidden_locations(Battle), +     {_FinalUsedLocations, FinalBattle, FinalBattleAtaxicUpdates} =        lists:foldl        ( @@ -114,122 +115,43 @@ handle_characters (PlayerIX, Map, UsedLocations, RosterCharacters, Battle) ->                    CurrentUsedLocations                 ), -            {_NewCharacterIX, NewBattle, NewBattleAtaxiaUpdate} = +            {_NewCharacterIX, S0Battle, BattleAtaxiaUpdate0} =                 btl_battle:ataxia_add_character(NewCharacterRef, CurrentBattle), +            {UpdatedInventory, InventoryAtaxiaUpdate} = +               shr_inventory:ataxia_add_equipment +               ( +                  shr_character:get_equipment(RosterCharacter), +                  btl_battle:get_related_inventory(S0Battle) +               ), + +            {S1Battle, BattleAtaxiaUpdate1} = +               btl_battle:ataxia_set_related_inventory +               ( +                  UpdatedInventory, +                  InventoryAtaxiaUpdate, +                  S0Battle +               ), +              {                 [                    btl_character:get_location(NewCharacterRef)                    |CurrentUsedLocations                 ], -               NewBattle, -               [NewBattleAtaxiaUpdate|CurrentBattleAtaxicUpdates] +               S1Battle, +               [ +                  BattleAtaxiaUpdate0, +                  BattleAtaxiaUpdate1 +                  |CurrentBattleAtaxicUpdates +               ]              }           end, -         {UsedLocations, Battle, []}, +         {ForbiddenLocations, Battle, []},           RosterCharacters        ),     {FinalBattle, ataxic:optimize(ataxic:sequence(FinalBattleAtaxicUpdates))}. --spec add_player -   ( -      shr_player:id(), -      non_neg_integer(), -      shr_battle_summary:category(), -      btl_battle:type() -   ) -   -> {btl_battle:type(), non_neg_integer(), ataxic:basic()}. -add_player (PlayerID, PlayerSummaryIX, PlayerSummaryCategory, Battle) -> - -   {PlayerIX, Update}. - --spec add_characters -   ( -      list(shr_character:unresolved()), -      non_neg_integer(), -      btl_battle:type() -   ) -   -> {btl_battle:type(), ataxic:basic()}. -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), - -   {NewCharacters, CharactersUpdates} = -      handle_characters -      ( -         RosterCharacters, -         PlayerIX, -         Map, -         ForbiddenLocations, -         NextCharacterIX, -         CurrentCharacters, -         [] -      ), - -   {UsedPortraitIDs, UsedWeaponIDs, UsedArmorIDs} = -      get_equipment_ids(RosterCharacters), - -   OldPortraitIDs = btl_battle:get_used_portrait_ids(Battle), -   PortraitIDsUpdate = -      ataxic:update_field -      ( -         btl_battle:get_used_portrait_ids_field(), -         update_ordset(UsedPortraitIDs, OldPortraitIDs) -      ), - -   OldWeaponIDs = btl_battle:get_used_weapon_ids(Battle), -   WeaponIDsUpdate = -      ataxic:update_field -      ( -         btl_battle:get_used_weapon_ids_field(), -         update_ordset(UsedWeaponIDs, OldWeaponIDs) -      ), - -   OldArmorIDs = btl_battle:get_used_armor_ids(Battle), -   ArmorIDsUpdate = -      ataxic:update_field -      ( -         btl_battle:get_used_armor_ids_field(), -         update_ordset(UsedArmorIDs, OldArmorIDs) -      ), - -   S0Battle = btl_battle:set_characters(NewCharacters, Battle), -   S1Battle = -      btl_battle:set_used_armor_ids -      ( -         ordsets:union(UsedArmorIDs, OldArmorIDs), -         btl_battle:set_used_weapon_ids -         ( -            ordsets:union(UsedWeaponIDs, OldWeaponIDs), -            btl_battle:set_used_portrait_ids -            ( -               ordsets:union(UsedPortraitIDs, OldPortraitIDs), -               S0Battle -            ) -         ) -      ), - -   Update = -      ataxic:sequence -      ( -         [ -            ataxic:update_field -            ( -               btl_battle:get_characters_field(), -               ataxic:sequence(CharactersUpdates) -            ), -            PortraitIDsUpdate, -            WeaponIDsUpdate, -            ArmorIDsUpdate -         ] -      ), - -   {S1Battle, Update}. -  -spec get_roster_characters     (        shr_player:id(), @@ -285,63 +207,47 @@ add_to_pending_battle     NewCharacters = get_roster_characters(PlayerID, SelectedRosterCharacterIXs), -   NewPlayer = -      btl_player:new +   NewPlayer = btl_player:new(0, PlayerID, PlayerSumIX, PlayerSumCategory), + +   {PlayerIX, S0Battle, BattleAtaxiaUpdate0} = +      btl_battle:ataxia_add_player(NewPlayer, Battle), + +   {S1Battle, BattleAtaxiaUpdate1} = +      add_characters(PlayerIX, NewCharacters, S0Battle), + +   {S0PendingBattle, PendingBattleUpdate0} = +      btl_pending_battle:ataxia_set_battle        ( -         0, -         PlayerID, -         PlayerSumIX, -         PlayerSumCategory +         S1Battle, +         ataxic:sequence([BattleAtaxiaUpdate0, BattleAtaxiaUpdate1]), +         PendingBattle        ), -   {PlayerIX, S0Battle, BattleAtaxiaUpdate} = -      btl_battle:add_player(NewPlayer, Battle), +   {S1PendingBattle, PendingBattleUpdate1} = +      btl_pending_battle:ataxia_set_free_slots(RemainingSlots, S0PendingBattle), -   {S1Battle, BattleUpdate1} = -      add_characters(NewCharacters, PlayerIX, S0Battle), +   {S2PendingBattle, PendingBattleUpdate2} = +      btl_pending_battle:ataxia_push_player_id(PlayerID, S1PendingBattle), -   S0PendingBattle = btl_pending_battle:set_battle(S1Battle, PendingBattle), -   S1PendingBattle = -      btl_pending_battle:set_free_slots(RemainingSlots, S0PendingBattle), -   S2PendingBattle = -      btl_pending_battle:push_player_id(PlayerID, S1PendingBattle), -   S3PendingBattle = -      btl_pending_battle:push_player_summary_ix(PlayerIX, S2PendingBattle), +   {S3PendingBattle, PendingBattleUpdate3} = +      btl_pending_battle:ataxia_push_player_summary_ix +      ( +         PlayerIX, +         S2PendingBattle +      ), -   Update = +   { +      S3PendingBattle,        ataxic:sequence        (           [ -            ataxic:update_field -            ( -               btl_pending_battle:get_battle_field(), -               ataxic:sequence -               ( -                  [ -                     BattleUpdate0, -                     BattleUpdate1 -                  ] -               ) -            ), -            ataxic:update_field -            ( -               btl_pending_battle:get_free_slots_field(), -               ataxic:constant(RemainingSlots) -            ), -            ataxic:update_field -            ( -               btl_pending_battle:get_player_ids_field(), -               ataxic:list_cons(ataxic:constant(PlayerID)) -            ), -            ataxic:update_field -            ( -               btl_pending_battle:get_player_summary_ixs_field(), -               ataxic:list_cons(ataxic:constant(PlayerSumIX)) -            ) +            PendingBattleUpdate0, +            PendingBattleUpdate1, +            PendingBattleUpdate2, +            PendingBattleUpdate3           ] -      ), - -   {S3PendingBattle, Update}. +      ) +   }.  %%%% STAGE -1: CREATING THE PENDING BATTLE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  -spec generate_pending_battle @@ -652,7 +558,7 @@ repair_battle_final_link_of_player (BattleID, Player) ->                          ataxic:update_field                          (                             shr_battle_summary:get_is_players_turn_field(), -                           ataxic:constant(btl_player:get_index(Player) == 0) +                           ataxic:constant(false)                          )                       ]                    ), @@ -673,7 +579,6 @@ repair_battle_final_link_of_player (BattleID, Player) ->     ok. -  -spec repair_battle_final_links     (        btl_pending_battle:id(), diff --git a/src/roster/query/rst_load.erl b/src/roster/query/rst_load.erl index 4f7cf64..017772d 100644 --- a/src/roster/query/rst_load.erl +++ b/src/roster/query/rst_load.erl @@ -75,7 +75,7 @@ fetch_data (Player, Input) ->     io:format("[W] Using shim inventory.~n"), -   Inventory = shr_inventory:new(PlayerID), +   Inventory = shr_inventory:default(),     #query_state     { diff --git a/src/roster/query/rst_update.erl b/src/roster/query/rst_update.erl index 933c52c..c11e0a6 100644 --- a/src/roster/query/rst_update.erl +++ b/src/roster/query/rst_update.erl @@ -88,7 +88,7 @@ fetch_data (Player, Input) ->        ),  %   Inventory = shr_timed_cache:fetch(inventory_db, PlayerID, InventoryID), -   Inventory = shr_inventory:new(PlayerID), +   Inventory = shr_inventory:default(),     #query_state     { diff --git a/src/roster/struct/rst_roster.erl b/src/roster/struct/rst_roster.erl index ec28db0..5d4a16f 100644 --- a/src/roster/struct/rst_roster.erl +++ b/src/roster/struct/rst_roster.erl @@ -143,7 +143,7 @@ ataxia_set_character (IX, Character, Roster) ->     -> {type(), ataxic:basic()}.  ataxia_set_character (IX, Character, CharacterAtaxiaUpdate, Roster) ->     { -      ataxia_set_character(IX, Character, Roster), +      set_character(IX, Character, Roster),        ataxic:update_field        (           get_characters_field(), diff --git a/src/shared/reply/shr_add_weapon.erl b/src/shared/reply/shr_add_weapon.erl index 44a83dd..bd8dfb5 100644 --- a/src/shared/reply/shr_add_weapon.erl +++ b/src/shared/reply/shr_add_weapon.erl @@ -25,6 +25,7 @@ generate (Weapon) ->           {<<"nam">>, shr_weapon:get_name(Weapon)},           {<<"rmi">>, shr_weapon:get_minimum_range(Weapon)},           {<<"rma">>, shr_weapon:get_maximum_range(Weapon)}, +         {<<"pri">>, shr_weapon:get_is_primary(Weapon)},           {<<"omni">>, shr_omnimods:encode(shr_weapon:get_omnimods(Weapon))}        ]     }. diff --git a/src/shared/struct/inventory/shr_inventory.erl b/src/shared/struct/inventory/shr_inventory.erl index 884c213..0396b0a 100644 --- a/src/shared/struct/inventory/shr_inventory.erl +++ b/src/shared/struct/inventory/shr_inventory.erl @@ -273,12 +273,7 @@ default () ->        glyphs = EmptySet     }. --spec allows_equipment -   ( -      (shr_equipment:type()|shr_equipment:unresolved()), -      type() -   ) -   -> boolean(). +-spec allows_equipment (shr_equipment:either(), type()) -> boolean().  allows_equipment (Eq, Inv) ->     Weapons = Inv#inventory.weapons,     Glyphs = Inv#inventory.glyphs, @@ -312,12 +307,7 @@ allows_equipment (Eq, Inv) ->        )     ). --spec add_equipment -   ( -      (shr_equipment:type()|shr_equipment:unresolved()), -      type() -   ) -   -> type(). +-spec add_equipment (shr_equipment:either(), type()) -> type().  add_equipment (Eq, Inv) ->     Inv#inventory     { @@ -360,7 +350,7 @@ add_equipment (Eq, Inv) ->  -spec ataxia_add_equipment     ( -      (shr_equipment:type()|shr_equipment:unresolved()), +      shr_equipment:either(),        type()     )     -> {type(), ataxic:basic()}. diff --git a/src/shared/struct/inventory/shr_weapon.erl.m4 b/src/shared/struct/inventory/shr_weapon.erl.m4 index a18c48e..b2c6734 100644 --- a/src/shared/struct/inventory/shr_weapon.erl.m4 +++ b/src/shared/struct/inventory/shr_weapon.erl.m4 @@ -30,6 +30,7 @@  (     [        get_id/1, +      get_is_primary/1,        get_name/1,        get_minimum_range/1,        get_maximum_range/1, @@ -60,6 +61,9 @@ get_id (Wp) -> Wp#weapon.id.  -spec get_name (type()) -> binary().  get_name (Wp) -> Wp#weapon.name. +-spec get_is_primary (type()) -> boolean(). +get_is_primary (Wp) -> Wp#weapon.is_primary. +  -spec get_minimum_range (type()) -> non_neg_integer().  get_minimum_range (Wp) -> Wp#weapon.range_min. diff --git a/src/shared/struct/shr_character.erl b/src/shared/struct/shr_character.erl index ea8e857..68e6cb6 100644 --- a/src/shared/struct/shr_character.erl +++ b/src/shared/struct/shr_character.erl @@ -69,6 +69,7 @@  -export  (     [ +      new/0,        resolve/2,        to_unresolved/1,        encode/1, @@ -107,6 +108,15 @@ get_equipment_but_weapons_omnimods (Equipment) ->  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec new () -> unresolved(). +new () -> +   #shr_char_ref +   { +      name = <<"Unnamed Character">>, +      equipment = shr_equipment:default_unresolved(), +      is_using_secondary = false +   }. +  %%%% Accessors  -spec get_name (either()) -> binary().  get_name (#shr_char{ name = R }) -> R; @@ -346,18 +356,44 @@ set_extra_omnimods (O, Char) ->  -spec resolve (shr_omnimods:type(), unresolved()) -> type().  resolve (LocalOmnimods, CharRef) -> -   Attributes = shr_attributes:default(),     Eq = shr_equipment:resolve(CharRef#shr_char_ref.equipment), +   EquipmentButWeaponsOmnimods = get_equipment_but_weapons_omnimods(Eq), + +   NewOmnimods = +      shr_omnimods:merge +      ( +         shr_omnimods:merge +         ( +            EquipmentButWeaponsOmnimods, +            shr_weapon:get_omnimods(get_active_weapon(CharRef)) +         ), +         LocalOmnimods +      ), + +   NewAttributes = +      shr_omnimods:apply_to_attributes +      ( +         NewOmnimods, +         shr_attributes:default() +      ), + +   NewStatistics = +      shr_omnimods:apply_to_statistics +      ( +         NewOmnimods, +         shr_statistics:new_raw(NewAttributes) +      ), +     #shr_char     {        name = CharRef#shr_char_ref.name, -      equipment_but_weapons_omnimods = get_equipment_but_weapons_omnimods(Eq), +      equipment_but_weapons_omnimods = EquipmentButWeaponsOmnimods,        equipment = Eq,        is_using_secondary = CharRef#shr_char_ref.is_using_secondary, -      statistics = shr_statistics:new_raw(Attributes), -      attributes = Attributes, -      omnimods = shr_omnimods:default(), +      statistics = NewStatistics, +      attributes = NewAttributes, +      omnimods = NewOmnimods,        extra_omnimods = LocalOmnimods     }. diff --git a/src/shared/struct/shr_omnimods.erl b/src/shared/struct/shr_omnimods.erl index 8d82287..081477d 100644 --- a/src/shared/struct/shr_omnimods.erl +++ b/src/shared/struct/shr_omnimods.erl @@ -29,8 +29,7 @@  (     [        default/0, -      new/4, -      new_dirty/4 +      new/4     ]  ). @@ -64,14 +63,6 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec cleanup_entry_list (list(entry())) -> list(entry()). -cleanup_entry_list (ModList) -> -   [First|Rem] = ModList, -   case First of -      {none, _} -> Rem; -      _ -> ModList -   end. -  -spec apply_coefficient_to_mods (float(), mods()) -> mods().  apply_coefficient_to_mods (Coef, Mods) ->     dict:map(fun (_Name, Val) -> shr_math_util:ceil(Coef * Val) end, Mods). @@ -119,23 +110,6 @@ new (AttributeMods, StatisticMods, AttackMods, DefenseMods) ->  -spec default () -> type().  default () -> new([], [], [], []). --spec new_dirty -( -      list(entry()), -      list(entry()), -      list(entry()), -      list(entry()) -   ) -   -> type(). -new_dirty(AttributeMods, StatisticMods, AttackMods, DefenseMods) -> -   new -   ( -      cleanup_entry_list(AttributeMods), -      cleanup_entry_list(StatisticMods), -      cleanup_entry_list(AttackMods), -      cleanup_entry_list(DefenseMods) -   ). -  %%% Modification  -spec merge (type(), type()) -> type().  merge (OmniA, OmniB) -> | 


