| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2018-06-06 15:54:18 +0200 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2018-06-06 15:54:18 +0200 | 
| commit | ee9c2ac044cc77b80f30420c8f0788cad4281084 (patch) | |
| tree | 6ce9c45b6c0f0c556839b6f462f84eab06e26594 /src/battlemap/struct/bm_character.erl | |
| parent | 97f7511e61cebae3676a83aa9c0dc2efb15d8d8c (diff) | |
Figuring out how to organize the src folder(s)...
Diffstat (limited to 'src/battlemap/struct/bm_character.erl')
| -rw-r--r-- | src/battlemap/struct/bm_character.erl | 239 | 
1 files changed, 239 insertions, 0 deletions
diff --git a/src/battlemap/struct/bm_character.erl b/src/battlemap/struct/bm_character.erl new file mode 100644 index 0000000..e797b74 --- /dev/null +++ b/src/battlemap/struct/bm_character.erl @@ -0,0 +1,239 @@ +-module(bm_character). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-type id() :: non_neg_integer(). + +-record +( +   character, +   { +      id :: id(), +      owner_id :: bm_player:id(), +      name :: binary(), +      icon :: binary(), +      portrait :: binary(), +      attributes :: sh_attributes:type(), +      statistics :: bm_statistics:type(), +      weapon_ids :: {bm_weapon:id(), bm_weapon:id()}, +      location :: {non_neg_integer(), non_neg_integer()}, +      current_health :: non_neg_integer(), +      active :: boolean() +   } +). + +-opaque type() :: #character{}. + +-export_type([type/0, id/0]). +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% Accessors +-export +( +   [ +      get_id/1, +      get_owner_id/1, +      get_name/1, +      get_icon/1, +      get_portrait/1, +      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_location/2, +      set_current_health/2, +      set_is_active/2, + +      get_statistics_field/0, +      get_weapons_field/0, +      get_location_field/0, +      get_current_health_field/0, +      get_active_field/0 +   ] +). + +-export +( +   [ +      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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% Accessors +-spec get_id (type()) -> id(). +get_id (Char) -> Char#character.id. + +-spec get_owner_id (type()) -> bm_player:id(). +get_owner_id (Char) -> Char#character.owner_id. + +-spec get_name (type()) -> binary(). +get_name (Char) -> Char#character.name. + +-spec get_icon (type()) -> binary(). +get_icon (Char) -> Char#character.icon. + +-spec get_portrait (type()) -> binary(). +get_portrait (Char) -> Char#character.portrait. + +-spec get_attributes (type()) -> sh_attributes:type(). +get_attributes (Char) -> Char#character.attributes. + +-spec get_weapon_ids (type()) -> {bm_weapon:id(), bm_weapon:id()}. +get_weapon_ids (Char) -> Char#character.weapon_ids. + +-spec get_statistics (type()) -> bm_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 +   ( +      {bm_weapon:id(), bm_weapon:id()}, +      type() +   ) +   -> type(). +set_weapon_ids (WeaponIDs, Char) -> +   Char#character +   { +      weapon_ids = WeaponIDs +   }. + +-spec set_statistics +   ( +      bm_statistics:type(), +      type() +   ) +   -> type(). +set_statistics (Stats, Char) -> +   Char#character +   { +      statistics = Stats +   }. + +%%%% Utils +-spec random +   ( +      non_neg_integer(), +      bm_player:id(), +      non_neg_integer(), +      non_neg_integer(), +      list({non_neg_integer(), non_neg_integer()}) +   ) +   -> type(). +random (ID, OwnerID, BattlemapWidth, BattlemapHeight, ForbiddenLocations) -> +   Location = +      find_random_location(BattlemapWidth, BattlemapHeight, ForbiddenLocations), +   WeaponIDs = {bm_weapon:random_id(), bm_weapon:random_id()}, +   Attributes = sh_attributes:random(), +   Statistics = bm_statistics:new(Attributes, WeaponIDs), +   IDAsListString = integer_to_list(ID), +   IDAsBinaryString = list_to_binary(IDAsListString), + +   #character +   { +      id = ID, +      owner_id = OwnerID, +      name = list_to_binary("Char" ++ IDAsListString), +      icon = IDAsBinaryString, +      portrait = IDAsBinaryString, +      attributes = Attributes, +      weapon_ids = WeaponIDs, +      statistics = Statistics, +      location = Location, +      current_health = bm_statistics:get_health(Statistics), +      active = false +   }. + +-spec get_statistics_field() -> non_neg_integer(). +get_statistics_field () -> #character.statistics. +-spec get_weapons_field() -> non_neg_integer(). +get_weapons_field () -> #character.weapon_ids. +-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_active_field() -> non_neg_integer(). +get_active_field () -> #character.active.  | 


