| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/battle')
| -rw-r--r-- | src/battle/src/Comm/AddArmor.elm | 30 | ||||
| -rw-r--r-- | src/battle/src/Comm/AddChar.elm | 8 | ||||
| -rw-r--r-- | src/battle/src/Comm/AddPortrait.elm | 33 | ||||
| -rw-r--r-- | src/battle/src/Comm/AddTile.elm | 26 | ||||
| -rw-r--r-- | src/battle/src/Comm/AddWeapon.elm | 33 | ||||
| -rw-r--r-- | src/battle/src/Comm/Send.elm | 30 | ||||
| -rw-r--r-- | src/battle/src/Comm/SetMap.elm | 28 | ||||
| -rw-r--r-- | src/battle/src/Struct/CharacterTurn.elm | 45 | ||||
| -rw-r--r-- | src/battle/src/Struct/Model.elm | 38 | ||||
| -rw-r--r-- | src/battle/src/Struct/Navigator.elm | 3 | ||||
| -rw-r--r-- | src/battle/src/Struct/ServerReply.elm | 6 | ||||
| -rw-r--r-- | src/battle/src/Struct/TurnResult.elm | 34 | ||||
| -rw-r--r-- | src/battle/src/Update/AttackWithoutMoving.elm | 6 | ||||
| -rw-r--r-- | src/battle/src/Update/ChangeScale.elm | 6 | ||||
| -rw-r--r-- | src/battle/src/Update/HandleServerReply.elm | 74 | ||||
| -rw-r--r-- | src/battle/src/Update/RequestDirection.elm | 28 | ||||
| -rw-r--r-- | src/battle/src/Update/SelectCharacter.elm | 11 | ||||
| -rw-r--r-- | src/battle/src/Update/SelectTile.elm | 206 | ||||
| -rw-r--r-- | src/battle/src/Update/SwitchWeapon.elm | 46 | ||||
| -rw-r--r-- | src/battle/src/Update/UndoAction.elm | 10 | 
20 files changed, 330 insertions, 371 deletions
| diff --git a/src/battle/src/Comm/AddArmor.elm b/src/battle/src/Comm/AddArmor.elm deleted file mode 100644 index 5dd7aad..0000000 --- a/src/battle/src/Comm/AddArmor.elm +++ /dev/null @@ -1,30 +0,0 @@ -module Comm.AddArmor exposing (decode) - --- Elm ------------------------------------------------------------------------- -import Json.Decode - --- Battle Characters ----------------------------------------------------------- -import BattleCharacters.Struct.Armor - --- Local Module ---------------------------------------------------------------- -import Struct.ServerReply - --------------------------------------------------------------------------------- --- TYPES ----------------------------------------------------------------------- --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -internal_decoder : BattleCharacters.Struct.Armor.Type -> Struct.ServerReply.Type -internal_decoder ar = (Struct.ServerReply.AddArmor ar) - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -decode : (Json.Decode.Decoder Struct.ServerReply.Type) -decode = -   (Json.Decode.map -      (internal_decoder) -      (BattleCharacters.Struct.Armor.decoder) -   ) diff --git a/src/battle/src/Comm/AddChar.elm b/src/battle/src/Comm/AddChar.elm index 9b63c6f..9137d17 100644 --- a/src/battle/src/Comm/AddChar.elm +++ b/src/battle/src/Comm/AddChar.elm @@ -14,12 +14,8 @@ import Struct.ServerReply  --------------------------------------------------------------------------------  -- LOCAL -----------------------------------------------------------------------  -------------------------------------------------------------------------------- - -internal_decoder : ( -      Struct.Character.TypeAndEquipmentRef -> -      Struct.ServerReply.Type -   ) -internal_decoder char_and_refs = (Struct.ServerReply.AddCharacter char_and_refs) +internal_decoder : Struct.Character.Unresolved -> Struct.ServerReply.Type +internal_decoder ref = (Struct.ServerReply.AddCharacter ref)  --------------------------------------------------------------------------------  -- EXPORTED -------------------------------------------------------------------- diff --git a/src/battle/src/Comm/AddPortrait.elm b/src/battle/src/Comm/AddPortrait.elm deleted file mode 100644 index 8fd29af..0000000 --- a/src/battle/src/Comm/AddPortrait.elm +++ /dev/null @@ -1,33 +0,0 @@ -module Comm.AddPortrait exposing (decode) - --- Elm ------------------------------------------------------------------------- -import Json.Decode - --- Battle Characters ----------------------------------------------------------- -import BattleCharacters.Struct.Portrait - --- Local Module ---------------------------------------------------------------- -import Struct.ServerReply - --------------------------------------------------------------------------------- --- TYPES ----------------------------------------------------------------------- --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -internal_decoder : ( -      BattleCharacters.Struct.Portrait.Type -> -      Struct.ServerReply.Type -   ) -internal_decoder pt = (Struct.ServerReply.AddPortrait pt) - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -decode : (Json.Decode.Decoder Struct.ServerReply.Type) -decode = -   (Json.Decode.map -      (internal_decoder) -      (BattleCharacters.Struct.Portrait.decoder) -   ) diff --git a/src/battle/src/Comm/AddTile.elm b/src/battle/src/Comm/AddTile.elm deleted file mode 100644 index 797731b..0000000 --- a/src/battle/src/Comm/AddTile.elm +++ /dev/null @@ -1,26 +0,0 @@ -module Comm.AddTile exposing (decode) - --- Elm ------------------------------------------------------------------------- -import Json.Decode - --- Battle Map ------------------------------------------------------------------ -import BattleMap.Struct.Tile - --- Local Module ---------------------------------------------------------------- -import Struct.ServerReply - --------------------------------------------------------------------------------- --- TYPES ----------------------------------------------------------------------- --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -internal_decoder : BattleMap.Struct.Tile.Type -> Struct.ServerReply.Type -internal_decoder wp = (Struct.ServerReply.AddTile wp) - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -decode : (Json.Decode.Decoder Struct.ServerReply.Type) -decode = (Json.Decode.map (internal_decoder) (BattleMap.Struct.Tile.decoder)) diff --git a/src/battle/src/Comm/AddWeapon.elm b/src/battle/src/Comm/AddWeapon.elm deleted file mode 100644 index 307dc6a..0000000 --- a/src/battle/src/Comm/AddWeapon.elm +++ /dev/null @@ -1,33 +0,0 @@ -module Comm.AddWeapon exposing (decode) - --- Elm ------------------------------------------------------------------------- -import Json.Decode - --- Battle Characters ----------------------------------------------------------- -import BattleCharacters.Struct.Weapon - --- Local Module ---------------------------------------------------------------- -import Struct.ServerReply - --------------------------------------------------------------------------------- --- TYPES ----------------------------------------------------------------------- --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -internal_decoder : ( -      BattleCharacters.Struct.Weapon.Type -> -      Struct.ServerReply.Type -   ) -internal_decoder wp = (Struct.ServerReply.AddWeapon wp) - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -decode : (Json.Decode.Decoder Struct.ServerReply.Type) -decode = -   (Json.Decode.map -      (internal_decoder) -      (BattleCharacters.Struct.Weapon.decoder) -   ) diff --git a/src/battle/src/Comm/Send.elm b/src/battle/src/Comm/Send.elm index 3394b26..faac297 100644 --- a/src/battle/src/Comm/Send.elm +++ b/src/battle/src/Comm/Send.elm @@ -6,14 +6,20 @@ import Http  import Json.Decode  import Json.Encode +-- Battle Characters ----------------------------------------------------------- +import BattleCharacters.Comm.AddArmor +import BattleCharacters.Comm.AddGlyph +import BattleCharacters.Comm.AddGlyphBoard +import BattleCharacters.Comm.AddPortrait +import BattleCharacters.Comm.AddWeapon + +-- Battle Map ------------------------------------------------------------------ +import BattleMap.Comm.AddTile +import BattleMap.Comm.SetMap +  -- Local Module ---------------------------------------------------------------- -import Comm.AddArmor -import Comm.AddPortrait -import Comm.AddPlayer  import Comm.AddChar -import Comm.AddTile -import Comm.AddWeapon -import Comm.SetMap +import Comm.AddPlayer  import Comm.SetTimeline  import Comm.TurnResults @@ -31,13 +37,15 @@ import Struct.Model  internal_decoder : String -> (Json.Decode.Decoder Struct.ServerReply.Type)  internal_decoder reply_type =     case reply_type of -      "add_tile" -> (Comm.AddTile.decode) -      "add_armor" -> (Comm.AddArmor.decode) +      "add_tile" -> (BattleMap.Comm.AddTile.decode) +      "add_armor" -> (BattleCharacters.Comm.AddArmor.decode)        "add_char" -> (Comm.AddChar.decode) -      "add_portrait" -> (Comm.AddPortrait.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_weapon" -> (Comm.AddWeapon.decode) -      "set_map" -> (Comm.SetMap.decode) +      "add_weapon" -> (BattleCharacters.Comm.AddWeapon.decode) +      "set_map" -> (BattleMap.Comm.SetMap.decode)        "turn_results" -> (Comm.TurnResults.decode)        "set_timeline" -> (Comm.SetTimeline.decode)        "disconnected" -> (Json.Decode.succeed Struct.ServerReply.Disconnected) diff --git a/src/battle/src/Comm/SetMap.elm b/src/battle/src/Comm/SetMap.elm deleted file mode 100644 index 80f6db1..0000000 --- a/src/battle/src/Comm/SetMap.elm +++ /dev/null @@ -1,28 +0,0 @@ -module Comm.SetMap exposing (decode) - --- Elm ------------------------------------------------------------------------- -import Json.Decode - --- Battle Map ------------------------------------------------------------------ -import BattleMap.Struct.Map - --- Local Module ---------------------------------------------------------------- -import Struct.ServerReply - --------------------------------------------------------------------------------- --- TYPES ----------------------------------------------------------------------- --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -decode : (Json.Decode.Decoder Struct.ServerReply.Type) -decode = -   (Json.Decode.map -      (\map -> (Struct.ServerReply.SetMap map)) -      (BattleMap.Struct.Map.decoder) -   ) diff --git a/src/battle/src/Struct/CharacterTurn.elm b/src/battle/src/Struct/CharacterTurn.elm index a017d23..369b851 100644 --- a/src/battle/src/Struct/CharacterTurn.elm +++ b/src/battle/src/Struct/CharacterTurn.elm @@ -110,42 +110,25 @@ get_state ct = ct.state  get_path : Type -> (List BattleMap.Struct.Direction.Type)  get_path ct = ct.path -lock_path : ( -      (BattleMap.Struct.Location.Type -> Battle.Struct.Omnimods.Type) -> -      Type -> -      Type -   ) -lock_path tile_omnimods ct = -   case (ct.navigator, ct.active_character) of -      ((Just old_nav), (Just char)) -> -         let -            current_tile_omnimods = -               (tile_omnimods (Struct.Navigator.get_current_location old_nav)) -         in -            {ct | -               active_character = -                  (Just -                     (Struct.Character.refresh_omnimods -                        (\e -> current_tile_omnimods) -                        char -                     ) -                  ), -               state = MovedCharacter, -               path = (Struct.Navigator.get_path old_nav), -               target = Nothing, -               navigator = (Just (Struct.Navigator.lock_path old_nav)) -            } +lock_path : Type -> Type +lock_path ct = +   case ct.navigator of +      (Just old_nav) -> +         {ct | +            state = MovedCharacter, +            path = (Struct.Navigator.get_path old_nav), +            target = Nothing, +            navigator = (Just (Struct.Navigator.lock_path old_nav)) +         }        (_, _) ->           ct -unlock_path : (BattleMap.Struct.Location.Type -> Battle.Struct.Omnimods.Type) -> Type -> Type -unlock_path tile_omnimods ct = -   case (ct.navigator, ct.active_character) of -      ((Just old_nav), (Just char)) -> +unlock_path : Type -> Type +unlock_path ct = +   case ct.navigator of +      (Just old_nav) ->           {ct | -            active_character = -               (Just (Struct.Character.refresh_omnimods (tile_omnimods) char)),              state = MovedCharacter,              target = Nothing,              navigator = (Just (Struct.Navigator.unlock_path old_nav)) diff --git a/src/battle/src/Struct/Model.elm b/src/battle/src/Struct/Model.elm index b65ffb5..10224db 100644 --- a/src/battle/src/Struct/Model.elm +++ b/src/battle/src/Struct/Model.elm @@ -34,6 +34,8 @@ import Battle.Struct.Omnimods  -- Battle Characters -----------------------------------------------------------  import BattleCharacters.Struct.Armor  import BattleCharacters.Struct.Portrait +import BattleCharacters.Struct.Glyph +import BattleCharacters.Struct.GlyphBoard  import BattleCharacters.Struct.Weapon  -- Battle Map ------------------------------------------------------------------ @@ -79,6 +81,16 @@ type alias Type =              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 +         ),        tiles : (Dict.Dict BattleMap.Struct.Tile.Ref BattleMap.Struct.Tile.Type),        error : (Maybe Struct.Error.Type),        player_id : String, @@ -118,6 +130,8 @@ new flags =              weapons = (Dict.empty),              armors = (Dict.empty),              portraits = (Dict.empty), +            glyph_boards = (Dict.empty), +            glyphs = (Dict.empty),              tiles = (Dict.empty),              players = (Array.empty),              error = Nothing, @@ -190,6 +204,28 @@ add_portrait pt model =           )     } +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_player : Struct.Player.Type -> Type -> Type  add_player pl model =     {model | @@ -233,6 +269,8 @@ full_debug_reset model =        weapons = (Dict.empty),        armors = (Dict.empty),        portraits = (Dict.empty), +      glyph_boards = (Dict.empty), +      glyphs = (Dict.empty),        tiles = (Dict.empty),        error = Nothing,        ui = (Struct.UI.default), diff --git a/src/battle/src/Struct/Navigator.elm b/src/battle/src/Struct/Navigator.elm index f639a06..5bf3c54 100644 --- a/src/battle/src/Struct/Navigator.elm +++ b/src/battle/src/Struct/Navigator.elm @@ -207,7 +207,8 @@ try_adding_step dir navigator =              dir           )        of -         (Just path) -> (Just {navigator | path = path}) +         (Just path) -> +            (Just {navigator | path = path})           Nothing -> Nothing  try_getting_path_to : ( diff --git a/src/battle/src/Struct/ServerReply.elm b/src/battle/src/Struct/ServerReply.elm index f8fdc88..f02f791 100644 --- a/src/battle/src/Struct/ServerReply.elm +++ b/src/battle/src/Struct/ServerReply.elm @@ -2,6 +2,8 @@ module Struct.ServerReply exposing (Type(..))  -- Battle Characters -----------------------------------------------------------  import BattleCharacters.Struct.Armor +import BattleCharacters.Struct.Glyph +import BattleCharacters.Struct.GlyphBoard  import BattleCharacters.Struct.Portrait  import BattleCharacters.Struct.Weapon @@ -22,9 +24,11 @@ type Type =     | Disconnected     | AddArmor BattleCharacters.Struct.Armor.Type     | AddPortrait BattleCharacters.Struct.Portrait.Type +   | AddGlyphBoard BattleCharacters.Struct.GlyphBoard.Type +   | AddGlyph BattleCharacters.Struct.Glyph.Type     | AddPlayer Struct.Player.Type     | AddWeapon BattleCharacters.Struct.Weapon.Type -   | AddCharacter Struct.Character.TypeAndEquipmentRef +   | AddCharacter Struct.Character.Unresolved     | AddTile BattleMap.Struct.Tile.Type     | SetMap BattleMap.Struct.Map.Type     | TurnResults (List Struct.TurnResult.Type) diff --git a/src/battle/src/Struct/TurnResult.elm b/src/battle/src/Struct/TurnResult.elm index a4d3794..7599a7f 100644 --- a/src/battle/src/Struct/TurnResult.elm +++ b/src/battle/src/Struct/TurnResult.elm @@ -32,6 +32,9 @@ import Battle.Struct.Omnimods  import BattleMap.Struct.Location  import BattleMap.Struct.Direction +-- Battle Characters ----------------------------------------------------------- +import BattleCharacters.Struct.Character +  -- Local Module ----------------------------------------------------------------  import Struct.Attack  import Struct.Character @@ -104,7 +107,7 @@ apply_movement_step tile_omnimods movement characters players =           (\char ->              case (List.head movement.path) of                 (Just dir) -> -                  (Struct.Character.set_location +                  (Struct.Character.dirty_set_location                       (BattleMap.Struct.Location.neighbor                          dir                          (Struct.Character.get_location char) @@ -113,7 +116,10 @@ apply_movement_step tile_omnimods movement characters players =                    )                 Nothing -> -                  (Struct.Character.refresh_omnimods (tile_omnimods) char) +                  (Struct.Character.set_location +                     (tile_omnimods (Struct.Character.get_location char)) +                     char +                  )           )           characters        ), @@ -153,7 +159,6 @@ apply_inverse_movement_step tile_omnimods movement characters players =     )  apply_switched_weapon : ( -      (BattleMap.Struct.Location.Type -> Battle.Struct.Omnimods.Type) ->        WeaponSwitch ->        (Array.Array Struct.Character.Type) ->        (Array.Array Struct.Player.Type) -> @@ -162,14 +167,15 @@ apply_switched_weapon : (           (Array.Array Struct.Player.Type)        )     ) -apply_switched_weapon tile_omnimods weapon_switch characters players = +apply_switched_weapon weapon_switch characters players =     (        (Util.Array.update_unsafe           weapon_switch.character_index           (\char -> -            (Struct.Character.refresh_omnimods -               (tile_omnimods) -               (Struct.Character.toggle_is_using_primary char) +            (Struct.Character.set_base_character +               (BattleCharacters.Struct.Character.switch_weapons +                 (Struct.Character.get_base_character char) +               )              )           )           characters @@ -454,12 +460,7 @@ apply_step tile_omnimods turn_result characters players =           (apply_movement_step (tile_omnimods) movement characters players)        (SwitchedWeapon weapon_switch) -> -         (apply_switched_weapon -            (tile_omnimods) -            weapon_switch -            characters -            players -         ) +         (apply_switched_weapon weapon_switch characters players)        (Attacked attack) ->           (apply_attack_step attack characters players) @@ -494,12 +495,7 @@ apply_inverse_step tile_omnimods turn_result characters players =           )        (SwitchedWeapon weapon_switch) -> -         (apply_switched_weapon -            (tile_omnimods) -            weapon_switch -            characters -            players -         ) +         (apply_switched_weapon weapon_switch characters players)        (Attacked attack) ->           (apply_inverse_attack attack characters players) diff --git a/src/battle/src/Update/AttackWithoutMoving.elm b/src/battle/src/Update/AttackWithoutMoving.elm index 7d29a50..3584e69 100644 --- a/src/battle/src/Update/AttackWithoutMoving.elm +++ b/src/battle/src/Update/AttackWithoutMoving.elm @@ -12,11 +12,7 @@ import Struct.Model  make_it_so : Struct.Model.Type -> Struct.Model.Type  make_it_so model =     {model | -      char_turn = -         (Struct.CharacterTurn.lock_path -            (Struct.Model.tile_omnimods_fun model) -            model.char_turn -         ) +      char_turn = (Struct.CharacterTurn.lock_path model.char_turn)     }  -------------------------------------------------------------------------------- diff --git a/src/battle/src/Update/ChangeScale.elm b/src/battle/src/Update/ChangeScale.elm index 80db1d1..bb98e84 100644 --- a/src/battle/src/Update/ChangeScale.elm +++ b/src/battle/src/Update/ChangeScale.elm @@ -19,7 +19,5 @@ apply_to : (     )  apply_to model mod =     if (mod == 0.0) -   then -      ({model | ui = (Struct.UI.reset_zoom_level model.ui)}, Cmd.none) -   else -      ({model | ui = (Struct.UI.mod_zoom_level mod model.ui)}, Cmd.none) +   then ({model | ui = (Struct.UI.reset_zoom_level model.ui)}, Cmd.none) +   else ({model | ui = (Struct.UI.mod_zoom_level mod model.ui)}, Cmd.none) diff --git a/src/battle/src/Update/HandleServerReply.elm b/src/battle/src/Update/HandleServerReply.elm index a17b20d..9d1aa24 100644 --- a/src/battle/src/Update/HandleServerReply.elm +++ b/src/battle/src/Update/HandleServerReply.elm @@ -22,6 +22,9 @@ import Util.Http  -- Battle Characters -----------------------------------------------------------  import BattleCharacters.Struct.Armor +import BattleCharacters.Struct.Equipment +import BattleCharacters.Struct.Glyph +import BattleCharacters.Struct.GlyphBoard  import BattleCharacters.Struct.Portrait  import BattleCharacters.Struct.Weapon @@ -79,6 +82,26 @@ portrait_getter model ref =        (Just w) -> w        Nothing -> BattleCharacters.Struct.Portrait.default +glyph_board_getter : ( +      Struct.Model.Type -> +      BattleCharacters.Struct.GlyphBoard.Ref -> +      BattleCharacters.Struct.GlyphBoard.Type +   ) +glyph_board_getter model ref = +   case (Dict.get ref model.glyph_boards) of +      (Just w) -> w +      Nothing -> BattleCharacters.Struct.GlyphBoard.default + +glyph_getter : ( +      Struct.Model.Type -> +      BattleCharacters.Struct.Glyph.Ref -> +      BattleCharacters.Struct.Glyph.Type +   ) +glyph_getter model ref = +   case (Dict.get ref model.glyphs) of +      (Just w) -> w +      Nothing -> BattleCharacters.Struct.Glyph.default +  -----------  disconnected : ( @@ -124,6 +147,24 @@ add_portrait pt current_state =     let (model, cmds) = current_state in        ((Struct.Model.add_portrait pt model), cmds) +add_glyph_board : ( +      BattleCharacters.Struct.GlyphBoard.Type -> +      (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> +      (Struct.Model.Type, (List (Cmd Struct.Event.Type))) +   ) +add_glyph_board pt current_state = +   let (model, cmds) = current_state in +      ((Struct.Model.add_glyph_board pt model), cmds) + +add_glyph : ( +      BattleCharacters.Struct.Glyph.Type -> +      (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> +      (Struct.Model.Type, (List (Cmd Struct.Event.Type))) +   ) +add_glyph pt current_state = +   let (model, cmds) = current_state in +      ((Struct.Model.add_glyph pt model), cmds) +  add_tile : (        BattleMap.Struct.Tile.Type ->        (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> @@ -152,27 +193,24 @@ add_player pl current_state =        ((Struct.Model.add_player pl model), cmds)  add_character : ( -      Struct.Character.TypeAndEquipmentRef -> +      Struct.Character.Unresolved ->        (Struct.Model.Type, (List (Cmd Struct.Event.Type))) ->        (Struct.Model.Type, (List (Cmd Struct.Event.Type)))     ) -add_character char_and_refs current_state = -   let -      (model, cmds) = current_state -      awp = (weapon_getter model char_and_refs.main_weapon_ref) -      swp = (weapon_getter model char_and_refs.secondary_weapon_ref) -      ar = (armor_getter model char_and_refs.armor_ref) -      pt = (portrait_getter model char_and_refs.portrait_ref) -   in +add_character unresolved_char current_state = +   let (model, cmds) = current_state in        (           (Struct.Model.add_character -            (Struct.Character.fill_missing_equipment_and_omnimods +            (Struct.Character.resolve                 (Struct.Model.tile_omnimods_fun model) -               pt -               awp -               swp -               ar -               char_and_refs.char +               (BattleCharacters.Struct.Equipment.resolve +                  (weapon_getter model) +                  (armor_getter model) +                  (portrait_getter model) +                  (glyph_board_getter model) +                  (glyph_getter model) +               ) +               unresolved_char              )              model           ), @@ -254,6 +292,12 @@ apply_command command current_state =        (Struct.ServerReply.AddPortrait pt) ->           (add_portrait pt current_state) +      (Struct.ServerReply.AddGlyphBoard pt) -> +         (add_glyph_board pt current_state) + +      (Struct.ServerReply.AddGlyph pt) -> +         (add_glyph pt current_state) +        (Struct.ServerReply.AddPlayer pl) ->           (add_player pl current_state) diff --git a/src/battle/src/Update/RequestDirection.elm b/src/battle/src/Update/RequestDirection.elm index 625d8fe..676b54a 100644 --- a/src/battle/src/Update/RequestDirection.elm +++ b/src/battle/src/Update/RequestDirection.elm @@ -3,7 +3,11 @@ module Update.RequestDirection exposing (apply_to)  -- Battle Map ------------------------------------------------------------------  import BattleMap.Struct.Direction +-- Battle Characters ----------------------------------------------------------- +import BattleCharacters.Struct.Character +  -- Local Module ---------------------------------------------------------------- +import Struct.Character  import Struct.CharacterTurn  import Struct.Error  import Struct.Event @@ -16,18 +20,33 @@ import Struct.UI  --------------------------------------------------------------------------------  make_it_so : (        Struct.Model.Type -> +      Struct.Character.Type ->        Struct.Navigator.Type ->        BattleMap.Struct.Direction.Type ->        Struct.Model.Type     ) -make_it_so model navigator dir = +make_it_so model char navigator dir =     case (Struct.Navigator.try_adding_step dir navigator) of        (Just new_navigator) ->           {model |              char_turn =                 (Struct.CharacterTurn.set_navigator                    new_navigator -                  model.char_turn +                  (Struct.CharacterTurn.set_active_character_no_reset +                     (Struct.Character.set_base_character +                        (BattleCharacters.Struct.Character.set_extra_omnimods +                           (Struct.Model.tile_omnimods_fun +                              model +                              (Struct.Navigator.get_current_location +                                 new_navigator +                              ) +                           ) +                           (Struct.Character.get_base_character char) +                        ) +                        char +                     ) +                     model.char_turn +                  )                 ),              ui =                 (Struct.UI.set_previous_action @@ -56,10 +75,11 @@ apply_to : (  apply_to model dir =     case        (Struct.CharacterTurn.try_getting_navigator model.char_turn) +      (Struct.CharacterTurn.try_getting_active_character model.char_turn)     of -      (Just navigator) -> +      ((Just navigator), (Just char)) ->           ( -            (make_it_so model navigator dir), +            (make_it_so model char navigator dir),              Cmd.none           ) diff --git a/src/battle/src/Update/SelectCharacter.elm b/src/battle/src/Update/SelectCharacter.elm index b48f6c8..f26e3b8 100644 --- a/src/battle/src/Update/SelectCharacter.elm +++ b/src/battle/src/Update/SelectCharacter.elm @@ -9,6 +9,7 @@ import Task  import Battle.Struct.Statistics  -- Battle Characters ----------------------------------------------------------- +import BattleCharacters.Struct.Character  import BattleCharacters.Struct.Weapon  -- Battle Map ------------------------------------------------------------------ @@ -36,17 +37,13 @@ get_character_navigator : (     )  get_character_navigator model char =     let -      weapon = -         ( -            if (Struct.Character.get_is_using_primary char) -            then (Struct.Character.get_primary_weapon char) -            else (Struct.Character.get_secondary_weapon char) -         ) +      base_char = (Struct.Character.get_base_character char) +      weapon = (BattleCharacters.Struct.Character.get_active_weapon base_char)     in        (Struct.Navigator.new           (Struct.Character.get_location char)           (Battle.Struct.Statistics.get_movement_points -            (Struct.Character.get_statistics char) +            (BattleCharacters.Struct.Character.get_statistics base_char)           )           (BattleCharacters.Struct.Weapon.get_defense_range weapon)           (BattleCharacters.Struct.Weapon.get_attack_range weapon) diff --git a/src/battle/src/Update/SelectTile.elm b/src/battle/src/Update/SelectTile.elm index 575ac13..11899b5 100644 --- a/src/battle/src/Update/SelectTile.elm +++ b/src/battle/src/Update/SelectTile.elm @@ -4,7 +4,11 @@ module Update.SelectTile exposing (apply_to)  import BattleMap.Struct.Direction  import BattleMap.Struct.Location +-- Battle Characters ------------------------------------------------------------ +import BattleCharacters.Struct.Character +  -- Local Module ---------------------------------------------------------------- +import Struct.Character  import Struct.CharacterTurn  import Struct.Error  import Struct.Event @@ -20,115 +24,134 @@ try_autopiloting : (        (Maybe Struct.Navigator.Type) ->        (Maybe Struct.Navigator.Type)     ) -try_autopiloting dir maybe_nav = -   case maybe_nav of +try_autopiloting dir maybe_navigator = +   case maybe_navigator of        (Just navigator) ->           (Struct.Navigator.try_adding_step dir navigator)        Nothing -> Nothing -go_to_tile : ( +go_to_current_tile : (        Struct.Model.Type -> -      Struct.Navigator.Type ->        BattleMap.Struct.Location.Ref ->        (Struct.Model.Type, (Cmd Struct.Event.Type))     ) -go_to_tile model navigator loc_ref = +go_to_current_tile model loc_ref =     if     ( -      loc_ref +      (Struct.UI.get_previous_action model.ui)        == -      (BattleMap.Struct.Location.get_ref -         (Struct.Navigator.get_current_location navigator) -      ) +      (Just (Struct.UI.SelectedLocation loc_ref))     )     then -      -- We are already there. -      if +      -- And we just clicked on that tile.        ( -         (Struct.UI.get_previous_action model.ui) -         == -         (Just (Struct.UI.SelectedLocation loc_ref)) +         {model | +            char_turn = (Struct.CharacterTurn.lock_path model.char_turn) +         }, +         Cmd.none        ) -      then -         -- And we just clicked on that tile. -         ( -            {model | -               char_turn = -                  (Struct.CharacterTurn.lock_path -                     (Struct.Model.tile_omnimods_fun model) -                     model.char_turn -                  ) -            }, -            Cmd.none -         ) -      else -         -- And we didn't just click on that tile. -         ( -            {model | -               ui = -                  (Struct.UI.reset_displayed_nav -                     (Struct.UI.set_displayed_tab -                        Struct.UI.StatusTab -                        (Struct.UI.set_previous_action -                           (Just (Struct.UI.SelectedLocation loc_ref)) -                           model.ui -                        ) +   else +      -- And we didn't just click on that tile. +      ( +         {model | +            ui = +               (Struct.UI.reset_displayed_nav +                  (Struct.UI.set_displayed_tab +                     Struct.UI.StatusTab +                     (Struct.UI.set_previous_action +                        (Just (Struct.UI.SelectedLocation loc_ref)) +                        model.ui                       )                    ) -            }, -            Cmd.none -         ) -   else -      -- We have to try getting there. -      case -         (Struct.Navigator.try_getting_path_to -            loc_ref -            navigator -         ) -      of -         (Just path) -> -            case -               (List.foldr -                  (try_autopiloting) -                  (Just (Struct.Navigator.clear_path navigator)) -                  path                 ) -            of -               (Just new_navigator) -> -                  ( -                     {model | -                        char_turn = -                           (Struct.CharacterTurn.set_navigator -                              new_navigator -                              model.char_turn -                           ), -                        ui = -                           (Struct.UI.set_displayed_tab -                              Struct.UI.StatusTab -                              (Struct.UI.set_previous_action -                                 (Just (Struct.UI.SelectedLocation loc_ref)) -                                 model.ui +         }, +         Cmd.none +      ) + +go_to_another_tile : ( +      Struct.Model.Type -> +      Struct.Character.Type -> +      Struct.Navigator.Type -> +      BattleMap.Struct.Location.Ref -> +      (Struct.Model.Type, (Cmd Struct.Event.Type)) +   ) +go_to_another_tile model char navigator loc_ref = +   case (Struct.Navigator.try_getting_path_to loc_ref navigator) of +      (Just path) -> +         case +            (List.foldr +               (try_autopiloting) +               (Just (Struct.Navigator.clear_path navigator)) +               path +            ) +         of +            (Just new_navigator) -> +               ( +                  {model | +                     char_turn = +                        (Struct.CharacterTurn.set_navigator +                           new_navigator +                           (Struct.CharacterTurn.set_active_char +                              (Struct.Character.set_base_character +                                 (BattleCharacters.Struct.Character.set_extra_omnimods +                                    (Struct.Model.tile_omnimods_fun +                                       model +                                       (Struct.Navigator.get_current_location +                                          new_navigator +                                       ) +                                    ) +                                    (Struct.Character.get_base_character char) +                                 )                                )                             ) -                     }, -                     Cmd.none -                  ) - -               Nothing -> -                  ( -                     (Struct.Model.invalidate -                        (Struct.Error.new -                           Struct.Error.Programming -                           "SelectTile/Navigator: Could not follow own path." +                           model.char_turn +                        ), +                     ui = +                        (Struct.UI.set_displayed_tab +                           Struct.UI.StatusTab +                           (Struct.UI.set_previous_action +                              (Just (Struct.UI.SelectedLocation loc_ref)) +                              model.ui +                           )                          ) -                        model -                     ), -                     Cmd.none -                  ) +                  }, +                  Cmd.none +               ) + +            Nothing -> +               ( +                  (Struct.Model.invalidate +                     (Struct.Error.new +                        Struct.Error.Programming +                        "SelectTile/Navigator: Could not follow own path." +                     ) +                     model +                  ), +                  Cmd.none +               ) -         Nothing -> -- Clicked outside of the range indicator -            ((Struct.Model.reset model), Cmd.none) +      Nothing -> -- Clicked outside of the range indicator +         ((Struct.Model.reset model), Cmd.none) + +go_to_tile : ( +      Struct.Model.Type -> +      Struct.Character.Type -> +      Struct.Navigator.Type -> +      BattleMap.Struct.Location.Ref -> +      (Struct.Model.Type, (Cmd Struct.Event.Type)) +   ) +go_to_tile model char navigator loc_ref = +   if +   ( +      loc_ref +      == +      (BattleMap.Struct.Location.get_ref +         (Struct.Navigator.get_current_location navigator) +      ) +   ) +   then (go_to_current_tile model loc_ref) +   else (to_to_another_tile model char navigator loc_ref)  --------------------------------------------------------------------------------  -- EXPORTED -------------------------------------------------------------------- @@ -139,9 +162,14 @@ apply_to : (        (Struct.Model.Type, (Cmd Struct.Event.Type))     )  apply_to model loc_ref = -   case (Struct.CharacterTurn.try_getting_navigator model.char_turn) of -      (Just navigator) -> -         (go_to_tile model navigator loc_ref) +   case +      ( +         (Struct.CharacterTurn.try_getting_navigator model.char_turn), +         (Struct.CharacterTurn.try_getting_active_character model.char_turn) +      ) +   of +      ((Just navigator), (Just char)) -> +         (go_to_tile model char navigator loc_ref)        _ ->           ( diff --git a/src/battle/src/Update/SwitchWeapon.elm b/src/battle/src/Update/SwitchWeapon.elm index de72880..881689d 100644 --- a/src/battle/src/Update/SwitchWeapon.elm +++ b/src/battle/src/Update/SwitchWeapon.elm @@ -1,9 +1,8 @@  module Update.SwitchWeapon exposing (apply_to) --- FIXME: switching weapon should make the navigator disappear. -  -- Battle Characters -----------------------------------------------------------  import BattleCharacters.Struct.Weapon +import BattleCharacters.Struct.Character  -- Local module ----------------------------------------------------------------  import Struct.Character @@ -11,37 +10,42 @@ import Struct.CharacterTurn  import Struct.Error  import Struct.Event  import Struct.Model -import Struct.Navigator  --------------------------------------------------------------------------------  -- LOCAL -----------------------------------------------------------------------  --------------------------------------------------------------------------------  make_it_so : Struct.Model.Type -> Struct.Model.Type  make_it_so model = -   case -      ( -         (Struct.CharacterTurn.try_getting_active_character model.char_turn), -         (Struct.CharacterTurn.try_getting_navigator model.char_turn) -      ) -   of +   case (Struct.CharacterTurn.try_getting_active_character model.char_turn) of        ((Just char), (Just nav)) ->           let -            tile_omnimods = (Struct.Model.tile_omnimods_fun model) -            current_tile_omnimods = -               (tile_omnimods (Struct.Navigator.get_current_location nav)) -            new_char = -               (Struct.Character.refresh_omnimods -                  (\e -> current_tile_omnimods) -                  (Struct.Character.toggle_is_using_primary char) +            new_base_character = +               (BattleCharacters.Struct.Character.switch_weapons +                  (Struct.Character.get_base_character char) +               ) +            active_weapon = +               (BattleCharacters.Struct.Character.get_active_weapon +                  new_base_character                 )           in              {model |                 char_turn = -                  (Struct.CharacterTurn.set_has_switched_weapons -                     True -                     (Struct.CharacterTurn.set_active_character_no_reset -                        new_char -                        model.char_turn +                  (Struct.CharacterTurn.show_attack_range_navigator +                     (BattleCharacters.Struct.Weapon.get_defense_range +                        active_weapon +                     ) +                     (BattleCharacters.Struct.Weapon.get_attack_range +                        active_weapon +                     ) +                     (Struct.CharacterTurn.set_has_switched_weapons +                        True +                        (Struct.CharacterTurn.set_active_character_no_reset +                           (Struct.Character.set_base_character +                              new_base_character +                              char +                           ) +                           model.char_turn +                        )                       )                    )              } diff --git a/src/battle/src/Update/UndoAction.elm b/src/battle/src/Update/UndoAction.elm index c30f41b..9d2e710 100644 --- a/src/battle/src/Update/UndoAction.elm +++ b/src/battle/src/Update/UndoAction.elm @@ -29,17 +29,13 @@ get_character_navigator : (     )  get_character_navigator model char =     let -      weapon = -         ( -            if (Struct.Character.get_is_using_primary char) -            then (Struct.Character.get_primary_weapon char) -            else (Struct.Character.get_secondary_weapon char) -         ) +      base_char = (Struct.Character.get_base_character char) +      weapon = (BattleCharacters.Struct.Character.get_active_weapon base_char)     in        (Struct.Navigator.new           (Struct.Character.get_location char)           (Battle.Struct.Statistics.get_movement_points -            (Struct.Character.get_statistics char) +            (BattleCharacters.Struct.Character.get_statistics base_char)           )           (BattleCharacters.Struct.Weapon.get_defense_range weapon)           (BattleCharacters.Struct.Weapon.get_attack_range weapon) | 


