summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/battle')
-rw-r--r-- | src/battle/src/Comm/CharacterTurn.elm | 25 | ||||
-rw-r--r-- | src/battle/src/Comm/LoadBattle.elm | 25 | ||||
-rw-r--r-- | src/battle/src/Comm/Send.elm | 17 | ||||
-rw-r--r-- | src/battle/src/Struct/Model.elm | 391 | ||||
-rw-r--r-- | src/battle/src/Struct/ServerReply.elm | 2 | ||||
-rw-r--r-- | src/battle/src/Struct/TurnResultAnimator.elm | 68 | ||||
-rw-r--r-- | src/battle/src/View/Character.elm | 13 | ||||
-rw-r--r-- | src/battle/src/View/Map/Character.elm | 14 | ||||
-rw-r--r-- | src/battle/src/View/SubMenu.elm | 13 |
9 files changed, 174 insertions, 394 deletions
diff --git a/src/battle/src/Comm/CharacterTurn.elm b/src/battle/src/Comm/CharacterTurn.elm index 6e3612f..9fd77d1 100644 --- a/src/battle/src/Comm/CharacterTurn.elm +++ b/src/battle/src/Comm/CharacterTurn.elm @@ -3,11 +3,15 @@ module Comm.CharacterTurn exposing (try) -- Elm ------------------------------------------------------------------------- import Json.Encode +-- Shared ---------------------------------------------------------------------- +import Struct.Flags + -- Local Module ---------------------------------------------------------------- import Constants.IO import Comm.Send +import Struct.Battle import Struct.Character import Struct.CharacterTurn import Struct.Event @@ -27,9 +31,24 @@ try_encoding model = (Just (Json.Encode.object [ - ("stk", (Json.Encode.string model.session_token)), - ("pid", (Json.Encode.string model.player_id)), - ("bid", (Json.Encode.string model.battle_id)), + ( + "stk", + (Json.Encode.string + (Struct.Flags.get_session_token model.flags) + ) + ), + ( + "pid", + (Json.Encode.string + (Struct.Flags.get_user_id model.flags) + ) + ), + ( + "bid", + (Json.Encode.string + (Struct.Battle.get_id model.battle) + ) + ), ( "cix", (Json.Encode.int (Struct.Character.get_index char)) diff --git a/src/battle/src/Comm/LoadBattle.elm b/src/battle/src/Comm/LoadBattle.elm index 78a337f..9099f1e 100644 --- a/src/battle/src/Comm/LoadBattle.elm +++ b/src/battle/src/Comm/LoadBattle.elm @@ -3,11 +3,15 @@ module Comm.LoadBattle exposing (try) -- Elm ------------------------------------------------------------------------- import Json.Encode +-- Shared ---------------------------------------------------------------------- +import Struct.Flags + -- Local Module ---------------------------------------------------------------- import Comm.Send import Constants.IO +import Struct.Battle import Struct.Event import Struct.Model @@ -23,9 +27,24 @@ try_encoding model = (Just (Json.Encode.object [ - ("stk", (Json.Encode.string model.session_token)), - ("pid", (Json.Encode.string model.player_id)), - ("bid", (Json.Encode.string model.battle_id)) + ( + "stk", + (Json.Encode.string + (Struct.Flags.get_session_token model.flags) + ) + ), + ( + "pid", + (Json.Encode.string + (Struct.Flags.get_user_id model.flags) + ) + ), + ( + "bid", + (Json.Encode.string + (Struct.Battle.get_id model.battle) + ) + ) ] ) ) diff --git a/src/battle/src/Comm/Send.elm b/src/battle/src/Comm/Send.elm index faac297..009b57e 100644 --- a/src/battle/src/Comm/Send.elm +++ b/src/battle/src/Comm/Send.elm @@ -11,6 +11,7 @@ import BattleCharacters.Comm.AddArmor import BattleCharacters.Comm.AddGlyph import BattleCharacters.Comm.AddGlyphBoard import BattleCharacters.Comm.AddPortrait +import BattleCharacters.Comm.AddSkill import BattleCharacters.Comm.AddWeapon -- Battle Map ------------------------------------------------------------------ @@ -38,16 +39,20 @@ internal_decoder : String -> (Json.Decode.Decoder Struct.ServerReply.Type) internal_decoder reply_type = case reply_type of "add_tile" -> (BattleMap.Comm.AddTile.decode) + "set_map" -> (BattleMap.Comm.SetMap.decode) + "add_armor" -> (BattleCharacters.Comm.AddArmor.decode) - "add_char" -> (Comm.AddChar.decode) - "add_portrait" -> (BattleCharacters.Comm.AddPortrait.decode) - "add_glyph_board" -> (BattleCharacters.Comm.AddGlyphBoard.decode) "add_glyph" -> (BattleCharacters.Comm.AddGlyph.decode) - "add_player" -> (Comm.AddPlayer.decode) + "add_glyph_board" -> (BattleCharacters.Comm.AddGlyphBoard.decode) + "add_portrait" -> (BattleCharacters.Comm.AddPortrait.decode) + "add_skill" -> (BattleCharacters.Comm.AddSkill.decode) "add_weapon" -> (BattleCharacters.Comm.AddWeapon.decode) - "set_map" -> (BattleMap.Comm.SetMap.decode) - "turn_results" -> (Comm.TurnResults.decode) + + "add_char" -> (Comm.AddChar.decode) + "add_player" -> (Comm.AddPlayer.decode) "set_timeline" -> (Comm.SetTimeline.decode) + "turn_results" -> (Comm.TurnResults.decode) + "disconnected" -> (Json.Decode.succeed Struct.ServerReply.Disconnected) "okay" -> (Json.Decode.succeed Struct.ServerReply.Okay) diff --git a/src/battle/src/Struct/Model.elm b/src/battle/src/Struct/Model.elm index 314a7a5..e23cd9e 100644 --- a/src/battle/src/Struct/Model.elm +++ b/src/battle/src/Struct/Model.elm @@ -2,67 +2,28 @@ module Struct.Model exposing ( Type, new, - add_character, - update_character, - update_character_fun, - add_weapon, - add_armor, - add_portrait, - add_glyph_board, - add_glyph, - add_skill, - add_player, - add_tile, invalidate, - initialize_animator, - apply_animator_step, - move_animator_to_next_step, - reset, - full_debug_reset, - clear_error, - tile_omnimods_fun + clear, + clear_error ) --- Elm ------------------------------------------------------------------------- -import Array - -import Dict - -import Set - -- Shared ---------------------------------------------------------------------- import Struct.Flags --- Battle ---------------------------------------------------------------------- -import Battle.Struct.Omnimods - -- Battle Characters ----------------------------------------------------------- -import BattleCharacters.Struct.Armor -import BattleCharacters.Struct.Character -import BattleCharacters.Struct.Glyph -import BattleCharacters.Struct.GlyphBoard -import BattleCharacters.Struct.Portrait -import BattleCharacters.Struct.Skill -import BattleCharacters.Struct.Weapon +import BattleCharacters.Struct.DataSet -- Battle Map ------------------------------------------------------------------ -import BattleMap.Struct.Location -import BattleMap.Struct.Map -import BattleMap.Struct.Marker -import BattleMap.Struct.Tile +import BattleMap.Struct.DataSet -- Local Module ---------------------------------------------------------------- -import Struct.Character import Struct.CharacterTurn import Struct.Error import Struct.HelpRequest import Struct.TurnResult import Struct.TurnResultAnimator -import Struct.Player import Struct.UI -import Util.Array - -------------------------------------------------------------------------------- -- TYPES ----------------------------------------------------------------------- -------------------------------------------------------------------------------- @@ -71,142 +32,40 @@ type alias Type = flags : Struct.Flags.Type, help_request : Struct.HelpRequest.Type, animator : (Maybe Struct.TurnResultAnimator.Type), - map : BattleMap.Struct.Map.Type, - characters : (Array.Array Struct.Character.Type), - players : (Array.Array Struct.Player.Type), - weapons : - (Dict.Dict - BattleCharacters.Struct.Weapon.Ref - BattleCharacters.Struct.Weapon.Type - ), - armors : - (Dict.Dict - BattleCharacters.Struct.Armor.Ref - BattleCharacters.Struct.Armor.Type - ), - portraits : - (Dict.Dict - BattleCharacters.Struct.Portrait.Ref - BattleCharacters.Struct.Portrait.Type - ), - glyph_boards : - (Dict.Dict - BattleCharacters.Struct.GlyphBoard.Ref - BattleCharacters.Struct.GlyphBoard.Type - ), - glyphs : - (Dict.Dict - BattleCharacters.Struct.Glyph.Ref - BattleCharacters.Struct.Glyph.Type - ), - skills : - (Dict.Dict - BattleCharacters.Struct.Skill.Ref - BattleCharacters.Struct.Skill.Type - ), - tiles : (Dict.Dict BattleMap.Struct.Tile.Ref BattleMap.Struct.Tile.Type), - error : (Maybe Struct.Error.Type), - player_id : String, - battle_id : String, - session_token : String, - player_ix : Int, ui : Struct.UI.Type, char_turn : Struct.CharacterTurn.Type, - timeline : (Array.Array Struct.TurnResult.Type) + error : (Maybe Struct.Error.Type), + + battle : Struct.Battle.Type, + + -- Data Sets ------------------------------------------------------------- + characters_data_set : BattleCharacters.Struct.DataSet.Type, + map_data_set : BattleMap.Struct.DataSet.Type } -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- -regenerate_attack_of_opportunity_markers_of_char : ( - Int -> - Struct.Character.Type -> - Type -> - Type - ) -regenerate_attack_of_opportunity_markers_of_char char_ix char model = - if ((Struct.Character.get_player_index char) == model.player_ix) - then model - else - let - marker_name = ("matk_c" ++ (String.fromInt char_ix)) - map_without_this_marker = - (BattleMap.Struct.Map.remove_marker marker_name model.map) - in - case (Struct.Character.get_melee_attack_range char) of - 0 -> {model | map = map_without_this_marker} - attack_range -> - {model | - map = - (BattleMap.Struct.Map.add_marker - marker_name - (BattleMap.Struct.Marker.new_melee_attack - char_ix - (BattleMap.Struct.Location.add_neighborhood_to_set - (BattleMap.Struct.Map.get_width - map_without_this_marker - ) - (BattleMap.Struct.Map.get_height - map_without_this_marker - ) - attack_range - (Struct.Character.get_location char) - (Set.empty) - ) - ) - map_without_this_marker - ) - } - -regenerate_attack_of_opportunity_markers : Int -> Type -> Type -regenerate_attack_of_opportunity_markers char_ix model = - case (Array.get char_ix model.characters) of - Nothing -> model - (Just char) -> - (regenerate_attack_of_opportunity_markers_of_char char_ix char model) -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- -------------------------------------------------------------------------------- -tile_omnimods_fun : ( - Type -> - (BattleMap.Struct.Location.Type -> Battle.Struct.Omnimods.Type) - ) -tile_omnimods_fun model = - (\loc -> (BattleMap.Struct.Map.get_omnimods_at loc model.tiles model.map)) - new : Struct.Flags.Type -> Type new flags = - let - maybe_battle_id = (Struct.Flags.maybe_get_param "id" flags) + let maybe_battle_id = model = { flags = flags, help_request = Struct.HelpRequest.None, animator = Nothing, - map = (BattleMap.Struct.Map.empty), - characters = (Array.empty), - weapons = (Dict.empty), - armors = (Dict.empty), - portraits = (Dict.empty), - glyph_boards = (Dict.empty), - glyphs = (Dict.empty), - skills = (Dict.empty), - tiles = (Dict.empty), - players = (Array.empty), - error = Nothing, - battle_id = "", - player_id = - ( - if (flags.user_id == "") - then "0" - else flags.user_id - ), - session_token = flags.token, - player_ix = 0, ui = (Struct.UI.default), char_turn = (Struct.CharacterTurn.new), - timeline = (Array.empty) + error = Nothing, + + characters_data_set = (BattleCharacters.Struct.DataSet.new), + map_data_set = (BattleMap.Struct.DataSet.new), + + battle = (Struct.Battle.new) } in case maybe_battle_id of @@ -219,110 +78,13 @@ new flags = model ) - (Just id) -> {model | battle_id = id} - -add_character : Struct.Character.Type -> Type -> Type -add_character char model = - let characters = model.characters in - (regenerate_attack_of_opportunity_markers_of_char - (Array.length characters) - char - {model | characters = (Array.push char characters)} - ) - -add_weapon : BattleCharacters.Struct.Weapon.Type -> Type -> Type -add_weapon wp model = - {model | - weapons = - (Dict.insert - (BattleCharacters.Struct.Weapon.get_id wp) - wp - model.weapons - ) - } + (Just id) -> + {model | + battle = (Struct.Battle.set_battle_id id model.battle) + } -add_armor : BattleCharacters.Struct.Armor.Type -> Type -> Type -add_armor ar model = - {model | - armors = - (Dict.insert - (BattleCharacters.Struct.Armor.get_id ar) - ar - model.armors - ) - } - -add_portrait : BattleCharacters.Struct.Portrait.Type -> Type -> Type -add_portrait pt model = - {model | - portraits = - (Dict.insert - (BattleCharacters.Struct.Portrait.get_id pt) - pt - model.portraits - ) - } - -add_glyph_board : BattleCharacters.Struct.GlyphBoard.Type -> Type -> Type -add_glyph_board pt model = - {model | - glyph_boards = - (Dict.insert - (BattleCharacters.Struct.GlyphBoard.get_id pt) - pt - model.glyph_boards - ) - } - -add_glyph : BattleCharacters.Struct.Glyph.Type -> Type -> Type -add_glyph pt model = - {model | - glyphs = - (Dict.insert - (BattleCharacters.Struct.Glyph.get_id pt) - pt - model.glyphs - ) - } - -add_skill : BattleCharacters.Struct.Skill.Type -> Type -> Type -add_skill sk model = - {model | - skills = - (Dict.insert - (BattleCharacters.Struct.Skill.get_id sk) - sk - model.skills - ) - } - -add_player : Struct.Player.Type -> Type -> Type -add_player pl model = - {model | - players = - (Array.push - pl - model.players - ), - player_ix = - if ((Struct.Player.get_id pl) == model.player_id) - then (Struct.Player.get_index pl) - else model.player_ix - } - -add_tile : BattleMap.Struct.Tile.Type -> Type -> Type -add_tile tl model = - {model | - tiles = - (Dict.insert - (BattleMap.Struct.Tile.get_id tl) - tl - model.tiles - ) - } - -reset : Type -> Type -reset model = +clear : Type -> Type +clear model = {model | help_request = Struct.HelpRequest.None, error = Nothing, @@ -333,111 +95,6 @@ reset model = char_turn = (Struct.CharacterTurn.new) } -full_debug_reset : Type -> Type -full_debug_reset model = - {model | - help_request = Struct.HelpRequest.None, - animator = Nothing, - map = (BattleMap.Struct.Map.empty), - characters = (Array.empty), - weapons = (Dict.empty), - armors = (Dict.empty), - portraits = (Dict.empty), - glyph_boards = (Dict.empty), - glyphs = (Dict.empty), - skills = (Dict.empty), - tiles = (Dict.empty), - error = Nothing, - ui = (Struct.UI.default), - char_turn = (Struct.CharacterTurn.new), - timeline = (Array.empty) - } - -initialize_animator : Type -> Type -initialize_animator model = - let - timeline_list = (Array.toList model.timeline) - (characters, players) = - (List.foldr - (\event (pcharacters, pplayers) -> - (Struct.TurnResult.apply_inverse_step - (tile_omnimods_fun model) - event - pcharacters - pplayers - ) - ) - (model.characters, model.players) - timeline_list - ) - in - {model | - animator = - (Struct.TurnResultAnimator.maybe_new - (List.reverse timeline_list) - True - ), - ui = (Struct.UI.default), - characters = characters, - players = players - } - -move_animator_to_next_step : Type -> Type -move_animator_to_next_step model = - case model.animator of - Nothing -> model - (Just animator) -> - case (Struct.TurnResultAnimator.maybe_trigger_next_step animator) of - Nothing -> - (Set.foldl - (regenerate_attack_of_opportunity_markers) - {model | animator = Nothing } - (Struct.TurnResultAnimator.get_animated_character_indices - animator - ) - ) - - just_next_animator -> {model | animator = just_next_animator } - -apply_animator_step : Type -> Type -apply_animator_step model = - case model.animator of - Nothing -> model - (Just animator) -> - case (Struct.TurnResultAnimator.get_current_animation animator) of - (Struct.TurnResultAnimator.TurnResult turn_result) -> - let - (characters, players) = - (Struct.TurnResult.apply_step - (tile_omnimods_fun model) - turn_result - model.characters - model.players - ) - in - {model | - characters = characters, - players = players - } - _ -> model - -update_character : Int -> Struct.Character.Type -> Type -> Type -update_character ix new_val model = - {model | - characters = (Array.set ix new_val model.characters) - } - -update_character_fun : ( - Int -> - ((Maybe Struct.Character.Type) -> (Maybe Struct.Character.Type)) -> - Type -> - Type - ) -update_character_fun ix fun model = - {model | - characters = (Util.Array.update ix (fun) model.characters) - } - invalidate : Struct.Error.Type -> Type -> Type invalidate err model = {model | diff --git a/src/battle/src/Struct/ServerReply.elm b/src/battle/src/Struct/ServerReply.elm index f02f791..d059c17 100644 --- a/src/battle/src/Struct/ServerReply.elm +++ b/src/battle/src/Struct/ServerReply.elm @@ -5,6 +5,7 @@ import BattleCharacters.Struct.Armor import BattleCharacters.Struct.Glyph import BattleCharacters.Struct.GlyphBoard import BattleCharacters.Struct.Portrait +import BattleCharacters.Struct.Skill import BattleCharacters.Struct.Weapon -- Battle Map ------------------------------------------------------------------ @@ -26,6 +27,7 @@ type Type = | AddPortrait BattleCharacters.Struct.Portrait.Type | AddGlyphBoard BattleCharacters.Struct.GlyphBoard.Type | AddGlyph BattleCharacters.Struct.Glyph.Type + | AddSkill BattleCharacters.Struct.Skill.Type | AddPlayer Struct.Player.Type | AddWeapon BattleCharacters.Struct.Weapon.Type | AddCharacter Struct.Character.Unresolved diff --git a/src/battle/src/Struct/TurnResultAnimator.elm b/src/battle/src/Struct/TurnResultAnimator.elm index d4445f7..9736c72 100644 --- a/src/battle/src/Struct/TurnResultAnimator.elm +++ b/src/battle/src/Struct/TurnResultAnimator.elm @@ -98,6 +98,74 @@ maybe_go_to_next_animation tra = (_, _) -> Nothing +initialize_animator : Type -> Type +initialize_animator model = + let + timeline_list = (Array.toList model.timeline) + (characters, players) = + (List.foldr + (\event (pcharacters, pplayers) -> + (Struct.TurnResult.apply_inverse_step + (tile_omnimods_fun model) + event + pcharacters + pplayers + ) + ) + (model.characters, model.players) + timeline_list + ) + in + {model | + animator = + (Struct.TurnResultAnimator.maybe_new + (List.reverse timeline_list) + True + ), + ui = (Struct.UI.default), + characters = characters, + players = players + } + +move_animator_to_next_step : Type -> Type +move_animator_to_next_step model = + case model.animator of + Nothing -> model + (Just animator) -> + case (Struct.TurnResultAnimator.maybe_trigger_next_step animator) of + Nothing -> + (Set.foldl + (regenerate_attack_of_opportunity_markers) + {model | animator = Nothing } + (Struct.TurnResultAnimator.get_animated_character_indices + animator + ) + ) + + just_next_animator -> {model | animator = just_next_animator } + +apply_animator_step : Type -> Type +apply_animator_step model = + case model.animator of + Nothing -> model + (Just animator) -> + case (Struct.TurnResultAnimator.get_current_animation animator) of + (Struct.TurnResultAnimator.TurnResult turn_result) -> + let + (characters, players) = + (Struct.TurnResult.apply_step + (tile_omnimods_fun model) + turn_result + model.characters + model.players + ) + in + {model | + characters = characters, + players = players + } + _ -> model + -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- -------------------------------------------------------------------------------- diff --git a/src/battle/src/View/Character.elm b/src/battle/src/View/Character.elm index c5082c9..dc256c6 100644 --- a/src/battle/src/View/Character.elm +++ b/src/battle/src/View/Character.elm @@ -48,11 +48,14 @@ get_alliance_class : ( (Html.Attribute Struct.Event.Type) ) get_alliance_class model char = - if ((Struct.Character.get_player_index char) == model.player_ix) - then - (Html.Attributes.class "character-ally") - else - (Html.Attributes.class "character-enemy") + if + ( + (Struct.Character.get_player_index char) == model.player_i + == + (Struct.Battle.get_own_player_index model.battle) + ) + then (Html.Attributes.class "character-ally") + else (Html.Attributes.class "character-enemy") get_position_style : ( Struct.Character.Type -> diff --git a/src/battle/src/View/Map/Character.elm b/src/battle/src/View/Map/Character.elm index 4b69ebc..b20c29a 100644 --- a/src/battle/src/View/Map/Character.elm +++ b/src/battle/src/View/Map/Character.elm @@ -16,6 +16,7 @@ import BattleCharacters.Struct.Equipment -- Local Module ---------------------------------------------------------------- import Constants.UI +import Struct.Battle import Struct.Character import Struct.CharacterTurn import Struct.Event @@ -80,11 +81,14 @@ get_alliance_class : ( (Html.Attribute Struct.Event.Type) ) get_alliance_class model char = - if ((Struct.Character.get_player_index char) == model.player_ix) - then - (Html.Attributes.class "character-ally") - else - (Html.Attributes.class "character-enemy") + if + ( + (Struct.Character.get_player_index char) + == + (Struct.Battle.get_own_player_index model.battle) + ) + then (Html.Attributes.class "character-ally") + else (Html.Attributes.class "character-enemy") get_position_style : ( Struct.Character.Type -> diff --git a/src/battle/src/View/SubMenu.elm b/src/battle/src/View/SubMenu.elm index 60a1c7d..dea0a86 100644 --- a/src/battle/src/View/SubMenu.elm +++ b/src/battle/src/View/SubMenu.elm @@ -11,6 +11,7 @@ import Html.Lazy import Util.Html -- Local Module ---------------------------------------------------------------- +import Struct.Battle import Struct.CharacterTurn import Struct.Event import Struct.Model @@ -37,10 +38,9 @@ get_inner_html model tab = (View.SubMenu.Status.get_html model) Struct.UI.CharactersTab -> - (Html.Lazy.lazy2 + (Html.Lazy.lazy (View.SubMenu.Characters.get_html) - model.characters - model.player_ix + model.battle ) Struct.UI.SettingsTab -> @@ -71,9 +71,12 @@ get_html model = [ (Html.text "Targeting:"), (Html.Lazy.lazy3 - (View.Controlled.CharacterCard.get_summary_html) + (View.Controlled.CharacterCard.get_summary_html + (Struct.Battle.get_own_player_index + model.battle + ) + ) model.char_turn - model.player_ix char ) ] |