summaryrefslogtreecommitdiff |
diff options
author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-05-21 16:39:12 +0200 |
---|---|---|
committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-05-21 16:39:12 +0200 |
commit | 0157365585c1201c53aa29cac84cd977de7434a1 (patch) | |
tree | 44c301187f2809be974dbe8afcbc1032002ec1e8 /src/battle/struct/btl_action.erl | |
parent | fb4159dbfb49f71d23c2616e7b8c9be453953883 (diff) |
Working on Attacks of Opportunity.
Diffstat (limited to 'src/battle/struct/btl_action.erl')
-rw-r--r-- | src/battle/struct/btl_action.erl | 92 |
1 files changed, 87 insertions, 5 deletions
diff --git a/src/battle/struct/btl_action.erl b/src/battle/struct/btl_action.erl index 34dd46e..52f41d8 100644 --- a/src/battle/struct/btl_action.erl +++ b/src/battle/struct/btl_action.erl @@ -13,6 +13,15 @@ -record ( + interrupted_move, + { + path :: list(shr_direction:enum()), + movement_points :: non_neg_integer() + } +). + +-record +( switch_weapon, { } @@ -26,8 +35,32 @@ } ). --type category() :: ('move' | 'switch_weapon' | 'attack' | 'nothing'). --opaque type() :: (#move{} | #switch_weapon{} | #attack{}). +-record +( + defend, + { + target_ix :: non_neg_integer() + } +). + + +-type category() :: + ( + 'move' + | 'interrupted_move' + | 'switch_weapon' + | 'attack' + | 'defend' + | 'nothing' + ). +-opaque type() :: + ( + #move{} + | #interrupted_move{} + | #switch_weapon{} + | #attack{} + | #defend{} + ). -export_type([category/0, type/0]). @@ -37,6 +70,7 @@ -export ( [ + from_map_marker/2, maybe_decode_move/1, maybe_decode_weapon_switch/1, maybe_decode_attack/1, @@ -47,7 +81,15 @@ -export ( [ + new_interrupted_move/2 + ] +). + +-export +( + [ get_path/1, + get_movement_points/1, get_target_ix/1, get_category/1 ] @@ -86,17 +128,57 @@ can_follow (_, _) -> false. -spec get_path (type()) -> list(shr_direction:type()). get_path (Action) when is_record(Action, move) -> Action#move.path; +get_path (Action) when is_record(Action, interrupted_move) -> + Action#interrupted_move.path; get_path (_) -> []. +-spec get_movement_points (type()) -> non_neg_integer(). +get_movement_points (Action) when is_record(Action, interrupted_move) -> + Action#interrupted_move.movement_points; +get_movement_points (_) -> 0. + -spec get_target_ix (type()) -> non_neg_integer(). get_target_ix (Action) when is_record(Action, attack) -> Action#attack.target_ix; +get_target_ix (Action) when is_record(Action, defend) -> + Action#defend.target_ix; get_target_ix (_) -> - []. + 0. + +-spec new_interrupted_move + ( + list(shr_direction:type()), + non_neg_integer() + ) + -> type(). +new_interrupted_move (Path, MovementPoints) -> + #interrupted_move{ path = Path, movement_points = MovementPoints }. -spec get_category (type()) -> category(). get_category (Action) when is_record(Action, attack) -> attack; get_category (Action) when is_record(Action, move) -> move; -get_category (Action) when is_record(Action, switch_weapon) -> switch_weapon. - +get_category (Action) when is_record(Action, switch_weapon) -> switch_weapon; +get_category (Action) when is_record(Action, interrupted_move) -> + interrupted_move; +get_category (Action) when is_record(Action, defend) -> + defend. + +-spec from_map_marker + ( + btl_character:type(), + shr_map_marker:type() + ) + -> list(type()). +from_map_marker (_Character, Marker) -> + case shr_map_marker:get_category(Marker) of + matk -> + [ + #defend + { + target_ix = shr_map_marker:get_character_index(Marker) + } + ]; + + _ -> [] + end. |