| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2018-05-11 18:30:39 +0200 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2018-05-11 18:30:39 +0200 | 
| commit | e2813997860edc136142f5d8aeb8f5513f9a57db (patch) | |
| tree | 7ab923b1d7e9150768c96fbc0f7e2a2b2731d613 /src/battlemap | |
| parent | 2bea185eb9191ddaeb406cd7ff3bcef37fbc4343 (diff) | |
Fusing character & character_instances.
Diffstat (limited to 'src/battlemap')
| -rw-r--r-- | src/battlemap/src/game-logic/next_turn.erl | 24 | ||||
| -rw-r--r-- | src/battlemap/src/game-logic/turn_actions.erl | 120 | ||||
| -rw-r--r-- | src/battlemap/src/query/character_turn.erl | 38 | ||||
| -rw-r--r-- | src/battlemap/src/query/load_state.erl | 14 | ||||
| -rw-r--r-- | src/battlemap/src/reply/add_char.erl | 13 | ||||
| -rw-r--r-- | src/battlemap/src/struct/battle.erl | 97 | ||||
| -rw-r--r-- | src/battlemap/src/struct/character.erl | 101 | ||||
| -rw-r--r-- | src/battlemap/src/struct/character_instance.erl | 167 | ||||
| -rw-r--r-- | src/battlemap/src/struct/character_turn_data.erl | 39 | ||||
| -rw-r--r-- | src/battlemap/src/struct/character_turn_request.erl | 14 | ||||
| -rw-r--r-- | src/battlemap/src/struct/turn_result.erl | 32 | 
11 files changed, 254 insertions, 405 deletions
| diff --git a/src/battlemap/src/game-logic/next_turn.erl b/src/battlemap/src/game-logic/next_turn.erl index 03d2cbf..af54d3b 100644 --- a/src/battlemap/src/game-logic/next_turn.erl +++ b/src/battlemap/src/game-logic/next_turn.erl @@ -49,23 +49,21 @@ reset_next_player_timeline (Battle) ->     -> {battle:type(), list(non_neg_integer())}.  activate_next_players_characters (Battle, NextPlayer) ->     NextPlayerID = player:get_id(NextPlayer), -   CharacterInstances = battle:get_character_instances(Battle), +   Characters = battle:get_characters(Battle), -   {UpdatedCharacterInstances, ModifiedIXs} = +   {UpdatedCharacters, ModifiedIXs} =        array_util:mapiff        ( -         fun (CharacterInstance) -> -            Character = character_instance:get_character(CharacterInstance), +         fun (Character) ->              (character:get_owner_id(Character) == NextPlayerID)           end, -         fun (CharacterInstance) -> -            character_instance:set_is_active(true, CharacterInstance) +         fun (Character) -> +            character:set_is_active(true, Character)           end, -         CharacterInstances +         Characters        ), -   UpdatedBattle = -      battle:set_character_instances(UpdatedCharacterInstances, Battle), +   UpdatedBattle = battle:set_characters(UpdatedCharacters, Battle),     {UpdatedBattle, ModifiedIXs}. @@ -92,10 +90,10 @@ update (Update) ->     S0Battle = set_player_turn_to_next(Battle),     {S1Battle, NextPlayer} = reset_next_player_timeline(S0Battle), -   {S2Battle, ActivatedCharacterInstancesIX} = +   {S2Battle, ActivatedCharactersIX} =        activate_next_players_characters(S1Battle, NextPlayer), -   S0Update = add_activation_updates(ActivatedCharacterInstancesIX, Update), +   S0Update = add_activation_updates(ActivatedCharactersIX, Update),     UpdatedData = character_turn_data:set_battle(S2Battle, Data), @@ -105,9 +103,9 @@ update (Update) ->  requires_update (Update) ->     Data = character_turn_update:get_data(Update),     Battle = character_turn_data:get_battle(Data), -   CharacterInstances = battle:get_character_instances(Battle), +   Characters = battle:get_characters(Battle), -   array_util:none(fun character_instance:get_is_active/1, CharacterInstances). +   array_util:none(fun character:get_is_active/1, Characters).  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/src/battlemap/src/game-logic/turn_actions.erl b/src/battlemap/src/game-logic/turn_actions.erl index 29886a1..51c4fb3 100644 --- a/src/battlemap/src/game-logic/turn_actions.erl +++ b/src/battlemap/src/game-logic/turn_actions.erl @@ -25,9 +25,8 @@     -> character_turn_update:type().  handle_switch_weapon (Update) ->     Data = character_turn_update:get_data(Update), -   CharacterInstance = character_turn_data:get_character_instance(Data), -   CharacterInstanceIX = character_turn_data:get_character_instance_ix(Data), -   Character = character_instance:get_character(CharacterInstance), +   Character = character_turn_data:get_character(Data), +   CharacterIX = character_turn_data:get_character_ix(Data),     CharacterAttributes = character:get_attributes(Character),     {PrimaryWeaponID, SecondaryWeaponID} = character:get_weapon_ids(Character), @@ -40,23 +39,16 @@ handle_switch_weapon (Update) ->           UpdatedCharacterStatistics,           character:set_weapon_ids(UpdatedWeaponIDs, Character)        ), -   UpdatedCharacterInstance = -      character_instance:set_character(UpdatedCharacter, CharacterInstance),     % TODO: db update entries... -   % {character_instance, CharacterInstanceIX, wp0, SecondaryWeaponID}, -   % {character_instance, CharacterInstanceIX, wp1, PrimaryWeaponID} +   % {character, CharacterIX, wp0, SecondaryWeaponID}, +   % {character, CharacterIX, wp1, PrimaryWeaponID} -   UpdatedData = -      character_turn_data:set_character_instance -      ( -         UpdatedCharacterInstance, -         Data -      ), +   UpdatedData = character_turn_data:set_character(UpdatedCharacter, Data),     character_turn_update:add_to_timeline     ( -      turn_result:new_character_switched_weapons(CharacterInstanceIX), +      turn_result:new_character_switched_weapons(CharacterIX),        character_turn_update:set_data(UpdatedData, Update)     ). @@ -68,24 +60,24 @@ handle_switch_weapon (Update) ->     )     -> {non_neg_integer(), location:type()}.  get_path_cost_and_destination (Data, Path) -> -   CharacterInstance = character_turn_data:get_character_instance(Data), -   CharacterInstanceIX = character_turn_data:get_character_instance_ix(Data), +   Character = character_turn_data:get_character(Data), +   CharacterIX = character_turn_data:get_character_ix(Data),     Battle = character_turn_data:get_battle(Data),     Battlemap = battle:get_battlemap(Battle),     ForbiddenLocations =        array:foldl        ( -         fun (IX, CharInst, Prev) -> -            IsAlive = character_instance:get_is_alive(CharInst), +         fun (IX, Char, Prev) -> +            IsAlive = character:get_is_alive(Char),              if -               (IX == CharacterInstanceIX) -> Prev; +               (IX == CharacterIX) -> Prev;                 (not IsAlive) -> Prev; -               true -> [character_instance:get_location(CharInst)|Prev] +               true -> [character:get_location(Char)|Prev]              end           end,           [], -         battle:get_character_instances(Battle) +         battle:get_characters(Battle)        ),     {NewLocation, Cost} = @@ -94,7 +86,7 @@ get_path_cost_and_destination (Data, Path) ->           Battlemap,           ForbiddenLocations,           Path, -         character_instance:get_location(CharacterInstance) +         character:get_location(Character)        ),     {Cost, NewLocation}. @@ -106,8 +98,7 @@ get_path_cost_and_destination (Data, Path) ->     )     -> 'ok'.  assert_character_can_move (Data, Cost) -> -   CharacterInstance = character_turn_data:get_character_instance(Data), -   Character = character_instance:get_character(CharacterInstance), +   Character = character_turn_data:get_character(Data),     CharacterStatistics = character:get_statistics(Character),     CharacterMovementPoints =        statistics:get_movement_points(CharacterStatistics), @@ -125,32 +116,21 @@ assert_character_can_move (Data, Cost) ->     -> character_turn_update:type().  commit_move (Update, Path, NewLocation) ->     Data = character_turn_update:get_data(Update), -   CharacterInstance = character_turn_data:get_character_instance(Data), -   CharacterInstanceIX = character_turn_data:get_character_instance_ix(Data), +   Character = character_turn_data:get_character(Data), +   CharacterIX = character_turn_data:get_character_ix(Data), -   UpdatedCharacterInstance = -      character_instance:set_location(NewLocation, CharacterInstance), +   UpdatedCharacter = character:set_location(NewLocation, Character), -   UpdatedData = -      character_turn_data:set_character_instance -      ( -         UpdatedCharacterInstance, -         Data -      ), +   UpdatedData = character_turn_data:set_character(UpdatedCharacter, Data),     S0Update =        character_turn_update:add_to_timeline        ( -         turn_result:new_character_moved -         ( -            CharacterInstanceIX, -            Path, -            NewLocation -         ), +         turn_result:new_character_moved(CharacterIX, Path, NewLocation),           Update        ), -   %[{character_instance, CharacterInstanceIX, loc, NewLocation}], +   %[{character, CharacterIX, loc, NewLocation}],     character_turn_update:set_data(UpdatedData, S0Update). @@ -172,19 +152,17 @@ handle_move (Update, BattleAction) ->  %%%% ATTACKING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  -spec handle_attack_sequence     ( -      character_instance:type(), -      character_instance:type(), +      character:type(), +      character:type(),        list(attack:step())     )     -> {list(attack:type()), non_neg_integer(), non_neg_integer()}.  handle_attack_sequence  ( -   CharacterInstance, -   TargetCharacterInstance, +   Character, +   TargetCharacter,     AttackSequence  ) -> -   Character = character_instance:get_character(CharacterInstance), -   TargetCharacter = character_instance:get_character(TargetCharacterInstance),     CharacterStatistics = character:get_statistics(Character),     TargetCharacterStatistics = character:get_statistics(TargetCharacter), @@ -228,27 +206,24 @@ handle_attack_sequence        end,        {           [], -         character_instance:get_current_health(CharacterInstance), -         character_instance:get_current_health(TargetCharacterInstance) +         character:get_current_health(Character), +         character:get_current_health(TargetCharacter)        },        AttackPlannedEffects     ).  -spec get_attack_sequence     ( -      character_instance:type(), -      character_instance:type() +      character:type(), +      character:type()     )     -> list(attack:step()). -get_attack_sequence (CharacterInstance, TargetCharacterInstance) -> -   Character = character_instance:get_character(CharacterInstance), -   TargetCharacter = character_instance:get_character(TargetCharacterInstance), - +get_attack_sequence (Character, TargetCharacter) ->     Range =        location:dist        ( -         character_instance:get_location(CharacterInstance), -         character_instance:get_location(TargetCharacterInstance) +         character:get_location(Character), +         character:get_location(TargetCharacter)        ),     {AttackingWeaponID, _} = character:get_weapon_ids(Character), @@ -269,46 +244,45 @@ get_attack_sequence (CharacterInstance, TargetCharacterInstance) ->  handle_attack (Update, BattleAction) ->     Data = character_turn_update:get_data(Update),     Battle = character_turn_data:get_battle(Data), -   CharacterInstance = character_turn_data:get_character_instance(Data), -   CharacterInstanceIX = character_turn_data:get_character_instance_ix(Data), +   Character = character_turn_data:get_character(Data), +   CharacterIX = character_turn_data:get_character_ix(Data),     TargetIX = battle_action:get_target_ix(BattleAction), -   TargetCharacterInstance = battle:get_character_instance(TargetIX, Battle), +   TargetCharacter = battle:get_character(TargetIX, Battle), -   AttackSequence = -      get_attack_sequence(CharacterInstance, TargetCharacterInstance), +   AttackSequence = get_attack_sequence(Character, TargetCharacter),     {AttackEffects, RemainingAttackerHealth, RemainingDefenderHealth} =        handle_attack_sequence        ( -         CharacterInstance, -         TargetCharacterInstance, +         Character, +         TargetCharacter,           AttackSequence        ), -   UpdatedCharacterInstance = -      character_instance:set_current_health +   UpdatedCharacter = +      character:set_current_health        (           RemainingAttackerHealth, -         CharacterInstance +         Character        ),     UpdatedBattle = -      battle:set_character_instance +      battle:set_character        (           TargetIX, -         character_instance:set_current_health +         character:set_current_health           (              RemainingDefenderHealth, -            TargetCharacterInstance +            TargetCharacter           ),           Battle        ),     S0Data = character_turn_data:set_battle(UpdatedBattle, Data),     S1Data = -      character_turn_data:set_character_instance +      character_turn_data:set_character        ( -         UpdatedCharacterInstance, +         UpdatedCharacter,           S0Data        ), @@ -317,7 +291,7 @@ handle_attack (Update, BattleAction) ->        (           turn_result:new_character_attacked           ( -            CharacterInstanceIX, +            CharacterIX,              TargetIX,              AttackEffects           ), diff --git a/src/battlemap/src/query/character_turn.erl b/src/battlemap/src/query/character_turn.erl index 0814131..a96f984 100644 --- a/src/battlemap/src/query/character_turn.erl +++ b/src/battlemap/src/query/character_turn.erl @@ -1,5 +1,4 @@  -module(character_turn). -% FIXME: There's still too much of a mess in this module.  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -41,12 +40,12 @@ authenticate_user (Request) ->  fetch_data (Request) ->     PlayerID = character_turn_request:get_player_id(Request),     BattleID = character_turn_request:get_battle_id(Request), -   CharacterInstanceIX = -      character_turn_request:get_character_instance_ix(Request), +   CharacterIX = +      character_turn_request:get_character_ix(Request),     Battle = timed_cache:fetch(battle_db, PlayerID, BattleID), -   character_turn_data:new(Battle, CharacterInstanceIX). +   character_turn_data:new(Battle, CharacterIX).  %%%% ASSERTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  -spec assert_user_is_current_player @@ -72,8 +71,7 @@ assert_user_is_current_player (Data, Request) ->     ) -> 'ok'.  assert_user_owns_played_character (Data, Request) ->     PlayerID = character_turn_request:get_player_id(Request), -   CharacterInstance = character_turn_data:get_character_instance(Data), -   Character = character_instance:get_character(CharacterInstance), +   Character = character_turn_data:get_character(Data),     CharacterOwnerID = character:get_owner_id(Character),     true = (PlayerID == CharacterOwnerID), @@ -82,9 +80,9 @@ assert_user_owns_played_character (Data, Request) ->  -spec assert_character_can_be_played (character_turn_data:type()) -> 'ok'.  assert_character_can_be_played (Data) -> -   CharacterInstance = character_turn_data:get_character_instance(Data), +   Character = character_turn_data:get_character(Data), -   true = character_instance:get_is_active(CharacterInstance), +   true = character:get_is_active(Character),     ok. @@ -101,22 +99,22 @@ assert_user_permissions (Data, Request) ->     ok.  %%%% QUERY LOGIC HANDLING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec finalize_character_instance +-spec finalize_character     (        character_turn_update:type()     )     -> character_turn_update:type(). -finalize_character_instance (Update) -> +finalize_character (Update) ->     Data = character_turn_update:get_data(Update), -   CharacterInstance = character_turn_data:get_character_instance(Data), +   Character = character_turn_data:get_character(Data), -   DisabledCharacterInstance = -      character_instance:set_is_active(false, CharacterInstance), +   DisabledCharacter = +      character:set_is_active(false, Character),     UpdatedData = -      character_turn_data:set_character_instance +      character_turn_data:set_character        ( -         DisabledCharacterInstance, +         DisabledCharacter,           Data        ),     FinalizedData = character_turn_data:clean_battle(UpdatedData), @@ -136,7 +134,7 @@ handle_actions (Data, Request) ->     PostActionsUpdate =        lists:foldl(fun turn_actions:handle/2, EmptyUpdate, Actions), -   finalize_character_instance(PostActionsUpdate). +   finalize_character(PostActionsUpdate).  -spec update_timeline     ( @@ -205,13 +203,7 @@ send_to_cache (Update, Request) ->     Data = character_turn_update:get_data(Update),     Battle = character_turn_data:get_battle(Data), -   timed_cache:update -   ( -      battle_db, -      PlayerID, -      BattleID, -      Battle -   ), +   timed_cache:update(battle_db, PlayerID, BattleID, Battle),     ok. diff --git a/src/battlemap/src/query/load_state.erl b/src/battlemap/src/query/load_state.erl index 37a30cf..f905892 100644 --- a/src/battlemap/src/query/load_state.erl +++ b/src/battlemap/src/query/load_state.erl @@ -53,13 +53,7 @@ fetch_data (Input) ->     PlayerID = Input#input.player_id,     BattleID = Input#input.battle_id, -   Battle = -      timed_cache:fetch -      ( -         battle_db, -         PlayerID, -         BattleID -      ), +   Battle = timed_cache:fetch (battle_db, PlayerID, BattleID),     #query_state     { @@ -81,10 +75,10 @@ generate_reply (QueryState, Input) ->           (              array:map              ( -               fun (IX, CharacterInstance) -> -                  add_char:generate(IX, CharacterInstance, PlayerID) +               fun (IX, Character) -> +                  add_char:generate(IX, Character, PlayerID)                 end, -               battle:get_character_instances(Battle) +               battle:get_characters(Battle)              )           )        ] diff --git a/src/battlemap/src/reply/add_char.erl b/src/battlemap/src/reply/add_char.erl index 7fad9a0..86b1e9c 100644 --- a/src/battlemap/src/reply/add_char.erl +++ b/src/battlemap/src/reply/add_char.erl @@ -35,19 +35,18 @@ attributes_as_json (Attributes) ->  -spec generate     (        non_neg_integer(), -      character_instance:type(), +      character:type(),        player:id()     )     -> {list(any())}. -generate (IX, CharacterInstance, PlayerID) -> -   Character = character_instance:get_character(CharacterInstance), -   IsAlive = character_instance:get_is_alive(CharacterInstance), +generate (IX, Character, PlayerID) -> +   IsAlive = character:get_is_alive(Character),     Attributes = character:get_attributes(Character),     {ActiveWeapon, SecondaryWeapon} = character:get_weapon_ids(Character),     OwnerID = character:get_owner_id(Character),     Location =        case IsAlive of -         true -> character_instance:get_location(CharacterInstance); +         true -> character:get_location(Character);           _ -> location:get_nowhere()        end, @@ -60,14 +59,14 @@ generate (IX, CharacterInstance, PlayerID) ->           {<<"prt">>, character:get_portrait(Character)},           {              <<"hea">>, -            character_instance:get_current_health(CharacterInstance) +            character:get_current_health(Character)           },           {<<"lc">>, location:encode(Location)},           {<<"pla">>, OwnerID},           {              <<"ena">>,              ( -               character_instance:get_is_active(CharacterInstance) +               character:get_is_active(Character)                 and                 (OwnerID == PlayerID)              ) diff --git a/src/battlemap/src/struct/battle.erl b/src/battlemap/src/struct/battle.erl index 259e7f0..59cc581 100644 --- a/src/battlemap/src/struct/battle.erl +++ b/src/battlemap/src/struct/battle.erl @@ -11,7 +11,7 @@     {        id :: id(),        battlemap :: battlemap:type(), -      character_instances :: array:array(character_instance:type()), +      characters :: array:array(character:type()),        players :: array:array(player:type()),        current_player_turn :: player_turn:type()     } @@ -30,16 +30,16 @@     [        get_id/1,        get_battlemap/1, -      get_character_instances/1, -      get_character_instance/2, +      get_characters/1, +      get_character/2,        get_players/1,        get_player/2,        get_current_player_turn/1,        get_encoded_last_turns_effects/1,        set_battlemap/2, -      set_character_instances/2, -      set_character_instance/3, +      set_characters/2, +      set_character/3,        set_players/2,        set_player/3,        set_current_player_turn/2 @@ -80,15 +80,13 @@ get_id (Battle) -> Battle#battle.id.  get_battlemap (Battle) ->     Battle#battle.battlemap. --spec get_character_instances (type()) -> -   array:array(character_instance:type()). -get_character_instances (Battle) -> -   Battle#battle.character_instances. +-spec get_characters (type()) -> array:array(character:type()). +get_characters (Battle) -> +   Battle#battle.characters. --spec get_character_instance (non_neg_integer(), type()) -> -   character_instance:type(). -get_character_instance (IX, Battle) -> -   array:get(IX, Battle#battle.character_instances). +-spec get_character (non_neg_integer(), type()) -> character:type(). +get_character (IX, Battle) -> +   array:get(IX, Battle#battle.characters).  -spec get_players (type()) -> array:array(player:type()).  get_players (Battle) -> @@ -119,56 +117,34 @@ set_battlemap (Battlemap, Battle) ->        battlemap = Battlemap     }. --spec set_character_instances -   ( -      array:array(character_instance:type()), -      type() -   ) -   -> type(). -set_character_instances (CharacterInstances, Battle) -> +-spec set_characters (array:array(character:type()), type()) -> type(). +set_characters (Characters, Battle) ->     Battle#battle     { -      character_instances = CharacterInstances +      characters = Characters     }. --spec set_character_instance -   ( -      non_neg_integer(), -      character_instance:type(), -      type() -   ) -   -> type(). -set_character_instance (IX, CharacterInstance, Battle) -> +-spec set_character (non_neg_integer(), character:type(), type()) -> type(). +set_character (IX, Character, Battle) ->     Battle#battle     { -      character_instances = +      characters =           array:set           (              IX, -            CharacterInstance, -            Battle#battle.character_instances +            Character, +            Battle#battle.characters           )     }. --spec set_players -   ( -      array:array(player:type()), -      type() -   ) -   -> type(). +-spec set_players (array:array(player:type()), type()) -> type().  set_players (Players, Battle) ->     Battle#battle     {        players = Players     }. --spec set_player -   ( -      non_neg_integer(), -      player:type(), -      type() -   ) -   -> type(). +-spec set_player (non_neg_integer(), player:type(), type()) -> type().  set_player (IX, Player, Battle) ->     Battle#battle     { @@ -181,12 +157,7 @@ set_player (IX, Player, Battle) ->           )     }. --spec set_current_player_turn -   ( -      player_turn:type(), -      type() -   ) -   -> type(). +-spec set_current_player_turn (player_turn:type(), type()) -> type().  set_current_player_turn (PlayerTurn, Battle) ->     Battle#battle     { @@ -204,36 +175,36 @@ set_current_player_turn (PlayerTurn, Battle) ->  random (ID, PlayersAsList, Battlemap, Characters) ->     BattlemapWidth = battlemap:get_width(Battlemap),     BattlemapHeight = battlemap:get_height(Battlemap), -   {CharacterInstancesAsList, _ForbiddenLocations} = +   {CharactersAsList, _ForbiddenLocations} =        lists:mapfoldl        (           fun (Character, ForbiddenLocations) ->              CharacterOwner = character:get_owner_id(Character), -            NewCharacterInstance = -               character_instance:random +            NewCharacter = +               character:random                 (                    Character,                    BattlemapWidth,                    BattlemapHeight,                    ForbiddenLocations                 ), -            NewCharacterInstanceActive = +            NewCharacterActive =                 case CharacterOwner of                    <<"0">> -> -                     character_instance:set_is_active +                     character:set_is_active                       (                          true, -                        NewCharacterInstance +                        NewCharacter                       );                    _ -> -                     NewCharacterInstance +                     NewCharacter                 end, -            NewCharacterInstanceLocation = -               character_instance:get_location(NewCharacterInstanceActive), +            NewCharacterLocation = +               character:get_location(NewCharacterActive),              { -               NewCharacterInstanceActive, -               [NewCharacterInstanceLocation|ForbiddenLocations] +               NewCharacterActive, +               [NewCharacterLocation|ForbiddenLocations]              }           end,           [], @@ -244,7 +215,7 @@ random (ID, PlayersAsList, Battlemap, Characters) ->     {        id = ID,        battlemap = Battlemap, -      character_instances = array:from_list(CharacterInstancesAsList), +      characters = array:from_list(CharactersAsList),        players = array:from_list(PlayersAsList),        current_player_turn = player_turn:new(0, 0)     }. diff --git a/src/battlemap/src/struct/character.erl b/src/battlemap/src/struct/character.erl index 34a44a1..930bdc9 100644 --- a/src/battlemap/src/struct/character.erl +++ b/src/battlemap/src/struct/character.erl @@ -16,7 +16,10 @@        portrait :: binary(),        attributes :: attributes:type(),        statistics :: statistics:type(), -      weapon_ids :: {weapon:id(), weapon:id()} +      weapon_ids :: {weapon:id(), weapon:id()}, +      location :: {non_neg_integer(), non_neg_integer()}, +      current_health :: non_neg_integer(), +      active :: boolean()     }  ). @@ -38,22 +41,53 @@        get_attributes/1,        get_statistics/1,        get_weapon_ids/1, +      get_location/1, +      get_current_health/1, +      get_is_alive/1, +      get_is_active/1,        set_weapon_ids/2, -      set_statistics/2 +      set_statistics/2, +      set_location/2, +      set_current_health/2, +      set_is_active/2     ]  ).  -export  (     [ -      random/2 +      random/5     ]  ).  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec find_random_location +   ( +      non_neg_integer(), +      non_neg_integer(), +      list({non_neg_integer(), non_neg_integer()}) +   ) +   -> {non_neg_integer(), non_neg_integer()}. +find_random_location (BattlemapWidth, BattlemapHeight, ForbiddenLocations) -> +   X = roll:between(0, (BattlemapWidth - 1)), +   Y = roll:between(0, (BattlemapHeight - 1)), + +   IsForbidden = lists:member({X, Y}, ForbiddenLocations), + +   case IsForbidden of +      true -> +         find_random_location +         ( +            BattlemapWidth, +            BattlemapHeight, +            ForbiddenLocations +         ); + +      _ -> {X, Y} +   end.  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -83,6 +117,52 @@ get_weapon_ids (Char) -> Char#character.weapon_ids.  -spec get_statistics (type()) -> statistics:type().  get_statistics (Char) -> Char#character.statistics. +-spec get_location (type()) -> {non_neg_integer(), non_neg_integer()}. +get_location (Char) -> +   true = get_is_alive(Char), +   Char#character.location. + +-spec get_current_health (type()) -> non_neg_integer(). +get_current_health (Char) -> Char#character.current_health. + +-spec get_is_alive (type()) -> boolean(). +get_is_alive (Char) -> +   (Char#character.current_health > 0). + +-spec get_is_active (type()) -> boolean(). +get_is_active (Char) -> +   ( +      Char#character.active +      and +      get_is_alive(Char) +   ). + +-spec set_location +   ( +      {non_neg_integer(), non_neg_integer()}, +      type() +   ) +   -> type(). +set_location (Location, Char) -> +   Char#character +   { +      location = Location +   }. + +-spec set_current_health (non_neg_integer(), type()) -> type(). +set_current_health (Health, Char) -> +   Char#character +   { +      current_health = max(0, Health) +   }. + +-spec set_is_active (boolean(), type()) -> type(). +set_is_active (Active, Char) -> +   Char#character +   { +      active = Active +   }. +  -spec set_weapon_ids     (        {weapon:id(), weapon:id()}, @@ -107,13 +187,19 @@ set_statistics (Stats, Char) ->        statistics = Stats     }. +%%%% Utils  -spec random     (        non_neg_integer(), -      player:id() +      player:id(), +      non_neg_integer(), +      non_neg_integer(), +      list({non_neg_integer(), non_neg_integer()})     )     -> type(). -random (ID, OwnerID) -> +random (ID, OwnerID, BattlemapWidth, BattlemapHeight, ForbiddenLocations) -> +   Location = +      find_random_location(BattlemapWidth, BattlemapHeight, ForbiddenLocations),     WeaponIDs = {weapon:random_id(), weapon:random_id()},     Attributes = attributes:random(),     Statistics = statistics:new(Attributes, WeaponIDs), @@ -129,5 +215,8 @@ random (ID, OwnerID) ->        portrait = IDAsBinaryString,        attributes = Attributes,        weapon_ids = WeaponIDs, -      statistics = Statistics +      statistics = Statistics, +      location = Location, +      current_health = statistics:get_health(Statistics), +      active = false     }. diff --git a/src/battlemap/src/struct/character_instance.erl b/src/battlemap/src/struct/character_instance.erl deleted file mode 100644 index 912f2cf..0000000 --- a/src/battlemap/src/struct/character_instance.erl +++ /dev/null @@ -1,167 +0,0 @@ --module(character_instance). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --record -( -   character_instance, -   { -      character :: character:type(), -      location :: {non_neg_integer(), non_neg_integer()}, -      current_health :: non_neg_integer(), -      active :: boolean() -   } -). - --opaque type() :: #character_instance{}. - --export_type([type/0]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export -( -   [ -      new/2, -      random/4 -   ] -). - -%%%% Accessors --export -( -   [ -      get_character/1, -      get_location/1, -      get_current_health/1, -      get_is_alive/1, -      get_is_active/1, - -      set_character/2, -      set_location/2, -      set_current_health/2, -      set_is_active/2 -   ] -). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec find_random_location -   ( -      non_neg_integer(), -      non_neg_integer(), -      list({non_neg_integer(), non_neg_integer()}) -   ) -   -> {non_neg_integer(), non_neg_integer()}. -find_random_location (BattlemapWidth, BattlemapHeight, ForbiddenLocations) -> -   X = roll:between(0, (BattlemapWidth - 1)), -   Y = roll:between(0, (BattlemapHeight - 1)), - -   IsForbidden = lists:member({X, Y}, ForbiddenLocations), - -   case IsForbidden of -      true -> -         find_random_location -         ( -            BattlemapWidth, -            BattlemapHeight, -            ForbiddenLocations -         ); - -      _ -> {X, Y} -   end. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%% Accessors --spec get_character (type()) -> character:type(). -get_character (CharInst) -> CharInst#character_instance.character. - --spec get_location (type()) -> {non_neg_integer(), non_neg_integer()}. -get_location (CharInst) -> -   true = get_is_alive(CharInst), -   CharInst#character_instance.location. - --spec get_current_health (type()) -> non_neg_integer(). -get_current_health (CharInst) -> CharInst#character_instance.current_health. - --spec get_is_alive (type()) -> boolean(). -get_is_alive (CharInst) -> -   (CharInst#character_instance.current_health > 0). - --spec get_is_active (type()) -> boolean(). -get_is_active (CharInst) -> -   ( -      CharInst#character_instance.active -      and -      get_is_alive(CharInst) -   ). - --spec set_character (character:type(), type()) -> type(). -set_character (Char, CharInst) -> -   CharInst#character_instance -   { -      character = Char -   }. - --spec set_location -   ( -      {non_neg_integer(), non_neg_integer()}, -      type() -   ) -   -> type(). -set_location (Location, CharInst) -> -   CharInst#character_instance -   { -      location = Location -   }. - --spec set_current_health (non_neg_integer(), type()) -> type(). -set_current_health (Health, CharInst) -> -   CharInst#character_instance -   { -      current_health = max(0, Health) -   }. - --spec set_is_active (boolean(), type()) -> type(). -set_is_active (Active, CharInst) -> -   CharInst#character_instance -   { -      active = Active -   }. - -%%%% Utils --spec new -   ( -      character:type(), -      {non_neg_integer(), non_neg_integer()} -   ) -   -> type(). -new (Character, Location) -> -   CharacterStatistics = character:get_statistics(Character), -   #character_instance -   { -      character = Character, -      location = Location, -      current_health = statistics:get_health(CharacterStatistics), -      active = false -   }. - --spec random -   ( -      character:type(), -      non_neg_integer(), -      non_neg_integer(), -      list({non_neg_integer(), non_neg_integer()}) -   ) -   -> type(). -random (Character, BattlemapWidth, BattlemapHeight, ForbiddenLocations) -> -   new -   ( -      Character, -      find_random_location(BattlemapWidth, BattlemapHeight, ForbiddenLocations) -   ). diff --git a/src/battlemap/src/struct/character_turn_data.erl b/src/battlemap/src/struct/character_turn_data.erl index ca0954e..6ea744b 100644 --- a/src/battlemap/src/struct/character_turn_data.erl +++ b/src/battlemap/src/struct/character_turn_data.erl @@ -9,8 +9,8 @@     {        dirty :: boolean(),        battle :: battle:type(), -      character_instance :: character_instance:type(), -      character_instance_ix :: non_neg_integer() +      character :: character:type(), +      character_ix :: non_neg_integer()     }  ). @@ -28,11 +28,11 @@        get_battle_is_dirty/1,        get_battle/1, -      get_character_instance/1, -      get_character_instance_ix/1, +      get_character/1, +      get_character_ix/1,        set_battle/2, -      set_character_instance/2 +      set_character/2     ]  ). @@ -51,16 +51,15 @@  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  -spec new (battle:type(), non_neg_integer()) -> type(). -new (Battle, CharacterInstanceIX) -> -   CharacterInstance = -      battle:get_character_instance(CharacterInstanceIX, Battle), +new (Battle, CharacterIX) -> +   Character = battle:get_character(CharacterIX, Battle),     #type     {        dirty = false,        battle = Battle, -      character_instance = CharacterInstance, -      character_instance_ix = CharacterInstanceIX +      character = Character, +      character_ix = CharacterIX     }.  -spec get_battle_is_dirty (type()) -> boolean(). @@ -69,22 +68,22 @@ get_battle_is_dirty (Data) -> Data#type.dirty.  -spec get_battle (type()) -> battle:type().  get_battle (Data) -> Data#type.battle. --spec get_character_instance (type()) -> character_instance:type(). -get_character_instance (Data) -> Data#type.character_instance. +-spec get_character (type()) -> character:type(). +get_character (Data) -> Data#type.character. --spec get_character_instance_ix (type()) -> non_neg_integer(). -get_character_instance_ix (Data) -> Data#type.character_instance_ix. +-spec get_character_ix (type()) -> non_neg_integer(). +get_character_ix (Data) -> Data#type.character_ix.  -spec set_battle (battle:type(), type()) -> type().  set_battle (Battle, Data) ->     Data#type{ battle = Battle }. --spec set_character_instance (character_instance:type(), type()) -> type(). -set_character_instance (CharacterInstance, Data) -> +-spec set_character (character:type(), type()) -> type(). +set_character (Character, Data) ->     Data#type     {        dirty = true, -      character_instance = CharacterInstance +      character = Character     }.  -spec clean_battle (type()) -> type(). @@ -93,10 +92,10 @@ clean_battle (Data) ->     {        dirty = false,        battle = -         battle:set_character_instance +         battle:set_character           ( -            Data#type.character_instance_ix, -            Data#type.character_instance, +            Data#type.character_ix, +            Data#type.character,              Data#type.battle           )     }. diff --git a/src/battlemap/src/struct/character_turn_request.erl b/src/battlemap/src/struct/character_turn_request.erl index 1cfb212..ca8f44f 100644 --- a/src/battlemap/src/struct/character_turn_request.erl +++ b/src/battlemap/src/struct/character_turn_request.erl @@ -3,7 +3,7 @@  -define(PLAYER_ID_FIELD, <<"pid">>).  -define(SESSION_TOKEN_FIELD, <<"stk">>).  -define(BATTLE_ID_FIELD, <<"bid">>). --define(CHAR_INST_IX_FIELD, <<"cix">>). +-define(CHAR_IX_FIELD, <<"cix">>).  -define(ACTIONS_FIELD, <<"act">>).  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -16,7 +16,7 @@        player_id :: player:id(),        session_token :: binary(),        battle_id :: binary(), -      character_instance_ix :: non_neg_integer(), +      character_ix :: non_neg_integer(),        actions :: list(battle_action:type())     }  ). @@ -41,7 +41,7 @@        get_player_id/1,        get_session_token/1,        get_battle_id/1, -      get_character_instance_ix/1, +      get_character_ix/1,        get_actions/1     ]  ). @@ -55,7 +55,7 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  -spec decode (map()) -> type().  decode (Map) -> -   CharacterInstanceIX = binary_to_integer(maps:get(?CHAR_INST_IX_FIELD, Map)), +   CharacterIX = binary_to_integer(maps:get(?CHAR_IX_FIELD, Map)),     EncodedActions = maps:get(?ACTIONS_FIELD, Map),     Actions = lists:map(fun battle_action:decode/1, EncodedActions), @@ -64,7 +64,7 @@ decode (Map) ->        player_id = maps:get(?PLAYER_ID_FIELD, Map),        session_token = maps:get(?SESSION_TOKEN_FIELD, Map),        battle_id = maps:get(?BATTLE_ID_FIELD, Map), -      character_instance_ix = CharacterInstanceIX, +      character_ix = CharacterIX,        actions = Actions     }. @@ -77,8 +77,8 @@ get_session_token (Request) -> Request#type.session_token.  -spec get_battle_id (type()) -> binary().  get_battle_id (Request) -> Request#type.battle_id. --spec get_character_instance_ix (type()) -> non_neg_integer(). -get_character_instance_ix (Request) -> Request#type.character_instance_ix. +-spec get_character_ix (type()) -> non_neg_integer(). +get_character_ix (Request) -> Request#type.character_ix.  -spec get_actions (type()) -> list(battle_action:type()).  get_actions (Request) -> Request#type.actions. diff --git a/src/battlemap/src/struct/turn_result.erl b/src/battlemap/src/struct/turn_result.erl index 53ae94e..42a3a18 100644 --- a/src/battlemap/src/struct/turn_result.erl +++ b/src/battlemap/src/struct/turn_result.erl @@ -8,7 +8,7 @@  (     switched_weapon,     { -      character_instance_ix :: character_instance:id() +      character_ix :: character:id()     }  ). @@ -16,7 +16,7 @@  (     moved,     { -      character_instance_ix :: character_instance:id(), +      character_ix :: character:id(),        path :: list(direction:enum()),        new_location :: location:type()     } @@ -26,8 +26,8 @@  (     attacked,     { -      attacker_ix :: character_instance:id(), -      defender_ix :: character_instance:id(), +      attacker_ix :: character:id(), +      defender_ix :: character:id(),        sequence :: list(attack:type())     }  ). @@ -62,29 +62,29 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec new_character_switched_weapons (character_instance:id()) -> type(). -new_character_switched_weapons (CharacterInstanceIX) -> -   #switched_weapon { character_instance_ix = CharacterInstanceIX }. +-spec new_character_switched_weapons (character:id()) -> type(). +new_character_switched_weapons (CharacterIX) -> +   #switched_weapon { character_ix = CharacterIX }.  -spec new_character_moved     ( -      character_instance:id(), +      character:id(),        list(direction:enum()),        location:type()     )     -> type(). -new_character_moved (CharacterInstanceIX, Path, NewLocation) -> +new_character_moved (CharacterIX, Path, NewLocation) ->     #moved     { -      character_instance_ix = CharacterInstanceIX, +      character_ix = CharacterIX,        path = Path,        new_location = NewLocation     }.  -spec new_character_attacked     ( -      character_instance:id(), -      character_instance:id(), +      character:id(), +      character:id(),        list(attack:type())     )     -> type(). @@ -98,16 +98,16 @@ new_character_attacked (AttackerIX, DefenderIX, AttackSequence) ->  -spec encode (type()) -> {list(any())}.  encode (TurnResult) when is_record(TurnResult, switched_weapon) -> -   CharacterInstanceIX = TurnResult#switched_weapon.character_instance_ix, +   CharacterIX = TurnResult#switched_weapon.character_ix,     {        [           {<<"t">>, <<"swp">>}, -         {<<"ix">>, CharacterInstanceIX} +         {<<"ix">>, CharacterIX}        ]     };  encode (TurnResult) when is_record(TurnResult, moved) -> -   CharacterInstanceIX = TurnResult#moved.character_instance_ix, +   CharacterIX = TurnResult#moved.character_ix,     Path = TurnResult#moved.path,     NewLocation = TurnResult#moved.new_location, @@ -117,7 +117,7 @@ encode (TurnResult) when is_record(TurnResult, moved) ->     {        [           {<<"t">>, <<"mv">>}, -         {<<"ix">>, CharacterInstanceIX}, +         {<<"ix">>, CharacterIX},           {<<"p">>, EncodedPath},           {<<"nlc">>, EncodedNewLocation}        ] | 


