summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/battlemap')
-rw-r--r-- | src/battlemap/game-logic/bm_turn_actions.erl | 2 | ||||
-rw-r--r-- | src/battlemap/game-logic/bm_victory.erl | 10 | ||||
-rw-r--r-- | src/battlemap/reply/bm_add_char.erl | 4 | ||||
-rw-r--r-- | src/battlemap/struct/bm_character.erl | 33 |
4 files changed, 35 insertions, 14 deletions
diff --git a/src/battlemap/game-logic/bm_turn_actions.erl b/src/battlemap/game-logic/bm_turn_actions.erl index 4bb6d0b..c3e091a 100644 --- a/src/battlemap/game-logic/bm_turn_actions.erl +++ b/src/battlemap/game-logic/bm_turn_actions.erl @@ -278,6 +278,8 @@ handle_attack (BattleAction, Update) -> TargetIX = bm_battle_action:get_target_ix(BattleAction), TargetCharacter = bm_battle:get_character(TargetIX, Battle), + true = bm_character:get_is_alive(TargetCharacter), + AttackSequence = get_attack_sequence(Character, TargetCharacter), {AttackEffects, RemainingAttackerHealth, RemainingDefenderHealth} = diff --git a/src/battlemap/game-logic/bm_victory.erl b/src/battlemap/game-logic/bm_victory.erl index 59be66b..3531739 100644 --- a/src/battlemap/game-logic/bm_victory.erl +++ b/src/battlemap/game-logic/bm_victory.erl @@ -29,7 +29,7 @@ mark_players_characters_as_defeated (PlayerIX, Characters) -> (bm_character:get_player_index(Character) == PlayerIX) end, fun (Character) -> - bm_character:set_rank(defeated, Character) + bm_character:set_is_defeated(true, Character) end, Characters ). @@ -50,8 +50,8 @@ add_db_query_to_mark_character_as_defeated (IX, Update) -> [ sh_db_query:set_field ( - bm_character:get_rank_field(), - defeated + bm_character:get_is_defeated_field(), + true ) ] ), @@ -175,7 +175,5 @@ handle_character_lost_health (CharIX, _Health, Update) -> case StillHasAliveChar of true -> Update; _ -> handle_player_defeat(CharacterPlayerIX, Update) - end; - - defeated -> Update + end end. diff --git a/src/battlemap/reply/bm_add_char.erl b/src/battlemap/reply/bm_add_char.erl index a8d905f..4dab700 100644 --- a/src/battlemap/reply/bm_add_char.erl +++ b/src/battlemap/reply/bm_add_char.erl @@ -17,8 +17,7 @@ rank_to_string (Rank) -> case Rank of optional -> <<"o">>; target -> <<"t">>; - commander -> <<"c">>; - defeated -> <<"d">> + commander -> <<"c">> end. -spec attributes_as_json @@ -75,6 +74,7 @@ generate (IX, Character, PlayerIX) -> and (CharacterPlayerIX == PlayerIX) ) }, + {<<"dea">>, bm_character:get_is_defeated(Character)}, {<<"att">>, attributes_as_json(Attributes)}, {<<"awp">>, ActiveWeapon}, {<<"swp">>, SecondaryWeapon}, diff --git a/src/battlemap/struct/bm_character.erl b/src/battlemap/struct/bm_character.erl index 7dec927..b0e19ed 100644 --- a/src/battlemap/struct/bm_character.erl +++ b/src/battlemap/struct/bm_character.erl @@ -4,7 +4,7 @@ %% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -type id() :: non_neg_integer(). --type rank() :: ('optional' | 'target' | 'commander' | 'defeated'). +-type rank() :: ('optional' | 'target' | 'commander'). -record ( @@ -22,7 +22,8 @@ armor_id :: sh_armor:id(), location :: {non_neg_integer(), non_neg_integer()}, current_health :: integer(), %% Negative integers let us reverse attacks. - is_active :: boolean() + is_active :: boolean(), + is_defeated :: boolean() } ). @@ -50,6 +51,7 @@ get_current_health/1, get_is_alive/1, get_is_active/1, + get_is_defeated/1, set_rank/2, set_weapon_ids/2, @@ -58,13 +60,15 @@ set_location/2, set_current_health/2, set_is_active/2, + set_is_defeated/2, get_rank_field/0, get_statistics_field/0, get_weapons_field/0, get_location_field/0, get_current_health_field/0, - get_is_active_field/0 + get_is_active_field/0, + get_is_defeated_field/0 ] ). @@ -145,16 +149,22 @@ get_current_health (Char) -> Char#character.current_health. -spec get_is_alive (type()) -> boolean(). get_is_alive (Char) -> - (Char#character.current_health > 0). + ( + (not Char#character.is_defeated) + and (Char#character.current_health > 0) + ). -spec get_is_active (type()) -> boolean(). get_is_active (Char) -> ( - (Char#character.rank /= defeated) + (not Char#character.is_defeated) and Char#character.is_active and get_is_alive(Char) ). +-spec get_is_defeated (type()) -> boolean(). +get_is_defeated (Char) -> Char#character.is_defeated. + -spec set_rank (rank(), type()) -> type(). set_rank (Rank, Char) -> Char#character @@ -188,6 +198,13 @@ set_is_active (Active, Char) -> is_active = Active }. +-spec set_is_defeated (boolean(), type()) -> type(). +set_is_defeated (Defeated, Char) -> + Char#character + { + is_defeated = Defeated + }. + -spec set_armor_id (sh_armor:id(), type()) -> type(). set_armor_id (ArmorID, Char) -> Char#character @@ -242,6 +259,7 @@ random (ID, PlayerIX, BattlemapWidth, BattlemapHeight, ForbiddenLocations) -> rank = if ((ID rem 8) == 0) -> commander; + ((ID rem 3) == 0) -> target; true -> optional end, icon = IDAsBinaryString, @@ -252,7 +270,8 @@ random (ID, PlayerIX, BattlemapWidth, BattlemapHeight, ForbiddenLocations) -> statistics = Statistics, location = Location, current_health = sh_statistics:get_health(Statistics), - is_active = false + is_active = false, + is_defeated = false }. -spec get_rank_field() -> non_neg_integer(). @@ -267,3 +286,5 @@ get_location_field () -> #character.location. get_current_health_field () -> #character.current_health. -spec get_is_active_field() -> non_neg_integer(). get_is_active_field () -> #character.is_active. +-spec get_is_defeated_field() -> non_neg_integer(). +get_is_defeated_field () -> #character.is_defeated. |