summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2019-10-27 21:14:25 +0100
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2019-10-27 21:14:25 +0100
commit95f112f827ffef5605c384b86a9d718c74e9bbbc (patch)
treee7304271b9226b2981dc8d89b5e4db33efc1fd93 /src/battle/struct/btl_action.erl
parent86147b01bd6a240fa713dbf3368e324987664f7a (diff)
...
Diffstat (limited to 'src/battle/struct/btl_action.erl')
-rw-r--r--src/battle/struct/btl_action.erl132
1 files changed, 64 insertions, 68 deletions
diff --git a/src/battle/struct/btl_action.erl b/src/battle/struct/btl_action.erl
index 7feb986..71a9636 100644
--- a/src/battle/struct/btl_action.erl
+++ b/src/battle/struct/btl_action.erl
@@ -3,6 +3,19 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-define(CATEGORY_FIELD, <<"cat">>).
+-define(CATEGORY_MOVE, <<"mov">>).
+-define(CATEGORY_ATTACK, <<"atk">>).
+-define(CATEGORY_SWITCH_WEAPONS, <<"swp">>).
+-define(CATEGORY_USE_SKILL, <<"skl">>).
+
+-define(MOVE_PATH_FIELD, <<"pat">>).
+
+-define(ATTACK_TARGET_FIELD, <<"tar">>).
+
+-define(USE_SKILL_TARGETS_FIELD, <<"tar">>).
+-define(USE_SKILL_LOCATIONS_FIELD, <<"loc">>).
+
-record
(
move,
@@ -15,7 +28,7 @@
-record
(
- switch_weapon,
+ switch_weapons,
{
actor_ix :: non_neg_integer()
}
@@ -44,7 +57,7 @@
-type category() ::
(
'move'
- | 'switch_weapon'
+ | 'switch_weapons'
| 'attack'
| 'skill'
| 'nothing'
@@ -53,7 +66,7 @@
-opaque type() ::
(
#move{}
- | #switch_weapon{}
+ | #switch_weapons{}
| #attack{}
| #skill{}
).
@@ -67,10 +80,6 @@
(
[
from_map_marker/3,
- maybe_decode_move/2,
- maybe_decode_weapon_switch/2,
- maybe_decode_attack/2,
- maybe_decode_skill/2,
can_follow/2
]
).
@@ -99,79 +108,63 @@
]
).
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-export
+(
+ [
+ decode/2
+ ]
+).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec maybe_decode_move
- (
- non_neg_integer(),
- list(shr_direction:type())
- )
- -> ({ok, type()} | none).
-maybe_decode_move (_CharacterIX, []) -> none;
-maybe_decode_move (CharacterIX, PathInBinary) ->
- Path = lists:map(fun shr_direction:decode/1, PathInBinary),
+-spec decode (binary(), non_neg_integer(), map()) -> type().
+decode (?CATEGORY_MOVE, ActorIX, Map) ->
+ EncodedPath = map:get(?MOVE_PATH_FIELD, Map),
+ Path = lists:map(fun shr_direction:decode/1, EncodedPath),
+ #move
{
- ok,
- #move
- {
- actor_ix = CharacterIX,
- path = Path,
- movement_points = -1
- }
- }.
+ actor_ix = ActorIX,
+ path = Path,
+ movement_points = -1
+ };
+decode (?CATEGORY_ATTACK, ActorIX, Map) ->
+ TargetIX = map:get(?ATTACK_TARGET_FIELD, Map),
--spec maybe_decode_attack
- (
- non_neg_integer(),
- integer()
- )
- -> ({ok, type()} | none).
-maybe_decode_attack (_CharacterIX, TargetIX) when (TargetIX < 0) -> none;
-maybe_decode_attack (CharacterIX, TargetIX) ->
+ #attack
{
- ok,
- #attack
- {
- actor_ix = CharacterIX,
- target_ix = TargetIX,
- is_opportunistic = false
- }
- }.
+ actor_ix = ActorIX,
+ target_ix = TargetIX,
+ is_opportunistic = false
+ };
+decode (?CATEGORY_SWITCH_WEAPONS, ActorIX, _Map) ->
+ #switch_weapons
+ {
+ actor_ix = ActorIX
+ };
+decode (?CATEGORY_USE_SKILL, ActorIX, Map) ->
+ Targets = map:get(?USE_SKILL_TARGETS_FIELD, Map),
+ EncodedLocations = map:get(?USE_SKILL_LOCATIONS_FIELD, Map),
+ Locations = lists:map(fun shr_location:decode/1, EncodedLocations),
--spec maybe_decode_weapon_switch
- (
- non_neg_integer(),
- boolean()
- )
- -> ({ok, type()} | none).
-maybe_decode_weapon_switch (_CharacterIX, false) -> none;
-maybe_decode_weapon_switch (CharacterIX, true) ->
- {ok, #switch_weapon{ actor_ix = CharacterIX }}.
-
--spec maybe_decode_skill (non_neg_integer(), any()) -> ({ok, type()} | none).
-maybe_decode_skill (_CharacterIX, what) -> none;
-maybe_decode_skill (CharacterIX, _) ->
- % TODO
+ #skill
{
- ok,
- #skill
- {
- actor_ix = CharacterIX
- }
+ actor_ix = ActorIX,
+ targets = Targets,
+ locations = Locations
}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec can_follow (category(), category()) -> boolean().
can_follow (nothing, attack) -> true;
-can_follow (nothing, switch_weapon) -> true;
+can_follow (nothing, switch_weapons) -> true;
can_follow (nothing, move) -> true;
can_follow (nothing, skill) -> true;
-can_follow (move, switch_weapon) -> true;
+can_follow (move, switch_weapons) -> true;
can_follow (move, attack) -> true;
can_follow (move, skill) -> true;
can_follow (_, _) -> false.
@@ -206,8 +199,8 @@ get_actor_index (Action) when is_record(Action, attack) ->
Action#attack.actor_ix;
get_actor_index (Action) when is_record(Action, move) ->
Action#move.actor_ix;
-get_actor_index (Action) when is_record(Action, switch_weapon) ->
- Action#switch_weapon.actor_ix;
+get_actor_index (Action) when is_record(Action, switch_weapons) ->
+ Action#switch_weapons.actor_ix;
get_actor_index (Action) when is_record(Action, skill) ->
Action#skill.actor_ix;
get_actor_index (_) ->
@@ -274,9 +267,12 @@ new_skill (ActorIX, Targets, Locations) ->
-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_weapons) -> switch_weapons;
get_category (Action) when is_record(Action, skill) -> skill.
+-spec decode (non_neg_integer(), map()) -> type().
+decode (ActorIX, Map) -> decode(map:get(?CATEGORY_FIELD), ActorIX, Map).
+
-spec from_map_marker
(
non_neg_integer(),