summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/battle/src/Comm')
-rw-r--r-- | src/battle/src/Comm/AddArmor.elm | 24 | ||||
-rw-r--r-- | src/battle/src/Comm/AddChar.elm | 28 | ||||
-rw-r--r-- | src/battle/src/Comm/AddTile.elm | 24 | ||||
-rw-r--r-- | src/battle/src/Comm/AddWeapon.elm | 24 | ||||
-rw-r--r-- | src/battle/src/Comm/CharacterTurn.elm | 129 | ||||
-rw-r--r-- | src/battle/src/Comm/LoadBattle.elm | 42 | ||||
-rw-r--r-- | src/battle/src/Comm/Send.elm | 76 | ||||
-rw-r--r-- | src/battle/src/Comm/SetMap.elm | 62 | ||||
-rw-r--r-- | src/battle/src/Comm/SetTimeline.elm | 27 | ||||
-rw-r--r-- | src/battle/src/Comm/TurnResults.elm | 28 |
10 files changed, 464 insertions, 0 deletions
diff --git a/src/battle/src/Comm/AddArmor.elm b/src/battle/src/Comm/AddArmor.elm new file mode 100644 index 0000000..480b823 --- /dev/null +++ b/src/battle/src/Comm/AddArmor.elm @@ -0,0 +1,24 @@ +module Comm.AddArmor exposing (decode) + +-- Elm ------------------------------------------------------------------------- +import Json.Decode + +-- Map ------------------------------------------------------------------- +import Struct.Armor +import Struct.ServerReply + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +internal_decoder : 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) (Struct.Armor.decoder)) diff --git a/src/battle/src/Comm/AddChar.elm b/src/battle/src/Comm/AddChar.elm new file mode 100644 index 0000000..32227a8 --- /dev/null +++ b/src/battle/src/Comm/AddChar.elm @@ -0,0 +1,28 @@ +module Comm.AddChar exposing (decode) + +-- Elm ------------------------------------------------------------------------- +import Json.Decode + +-- Map ------------------------------------------------------------------- +import Struct.Character +import Struct.ServerReply + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +internal_decoder : ( + (Struct.Character.Type, Int, Int, Int) -> + Struct.ServerReply.Type + ) +internal_decoder char_and_refs = (Struct.ServerReply.AddCharacter char_and_refs) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +decode : (Json.Decode.Decoder Struct.ServerReply.Type) +decode = (Json.Decode.map (internal_decoder) (Struct.Character.decoder)) diff --git a/src/battle/src/Comm/AddTile.elm b/src/battle/src/Comm/AddTile.elm new file mode 100644 index 0000000..64cf0ea --- /dev/null +++ b/src/battle/src/Comm/AddTile.elm @@ -0,0 +1,24 @@ +module Comm.AddTile exposing (decode) + +-- Elm ------------------------------------------------------------------------- +import Json.Decode + +-- Map ------------------------------------------------------------------- +import Struct.Tile +import Struct.ServerReply + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +internal_decoder : 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) (Struct.Tile.decoder)) diff --git a/src/battle/src/Comm/AddWeapon.elm b/src/battle/src/Comm/AddWeapon.elm new file mode 100644 index 0000000..7061dea --- /dev/null +++ b/src/battle/src/Comm/AddWeapon.elm @@ -0,0 +1,24 @@ +module Comm.AddWeapon exposing (decode) + +-- Elm ------------------------------------------------------------------------- +import Json.Decode + +-- Map ------------------------------------------------------------------- +import Struct.Weapon +import Struct.ServerReply + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +internal_decoder : 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) (Struct.Weapon.decoder)) diff --git a/src/battle/src/Comm/CharacterTurn.elm b/src/battle/src/Comm/CharacterTurn.elm new file mode 100644 index 0000000..36dfd96 --- /dev/null +++ b/src/battle/src/Comm/CharacterTurn.elm @@ -0,0 +1,129 @@ +module Comm.CharacterTurn exposing (try) + +-- Elm ------------------------------------------------------------------------- +import Json.Encode + +-- Map ------------------------------------------------------------------- +import Constants.IO + +import Comm.Send + +import Struct.Character +import Struct.CharacterTurn +import Struct.Direction +import Struct.Event +import Struct.Model + +-------------------------------------------------------------------------------- +-- TYPES ------------------------------------------------------------------------ +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +encode_move : Struct.Model.Type -> (Maybe Json.Encode.Value) +encode_move model = + case (Struct.CharacterTurn.get_path model.char_turn) of + [] -> Nothing + path -> + (Just + (Json.Encode.object + [ + ("t", (Json.Encode.string "mov")), + ( + "p", + (Json.Encode.list + (List.map + ( + (Json.Encode.string) + << + (Struct.Direction.to_string) + ) + (List.reverse path) + ) + ) + ) + ] + ) + ) + +encode_weapon_switch : Struct.Model.Type -> (Maybe Json.Encode.Value) +encode_weapon_switch model = + if (Struct.CharacterTurn.has_switched_weapons model.char_turn) + then + (Just + (Json.Encode.object + [ + ("t", (Json.Encode.string "swp")) + ] + ) + ) + else + Nothing + +encode_attack : Struct.Model.Type -> (Maybe Json.Encode.Value) +encode_attack model = + case (Struct.CharacterTurn.try_getting_target model.char_turn) of + Nothing -> Nothing + + (Just ix) -> + (Just + (Json.Encode.object + [ + ("t", (Json.Encode.string "atk")), + ("tix", (Json.Encode.int ix)) + ] + ) + ) + +encode_actions : Struct.Model.Type -> (List Json.Encode.Value) +encode_actions model = + case + ( + (encode_move model), + (encode_weapon_switch model), + (encode_attack model) + ) + of + ((Just move), Nothing, Nothing) -> [move] + ((Just move), Nothing, (Just attack)) -> [move, attack] + (Nothing, (Just switch_weapon), Nothing) -> [switch_weapon] + (Nothing, (Just switch_weapon), (Just attack)) -> [switch_weapon, attack] + (Nothing, Nothing, (Just attack)) -> [attack] + _ -> [] + +try_encoding : Struct.Model.Type -> (Maybe Json.Encode.Value) +try_encoding model = + case (Struct.CharacterTurn.try_getting_active_character model.char_turn) of + (Just char) -> + (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)), + ( + "cix", + (Json.Encode.int (Struct.Character.get_index char)) + ), + ( + "act", + (Json.Encode.list (encode_actions model)) + ) + ] + ) + ) + + _ -> + Nothing + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +try : Struct.Model.Type -> (Maybe (Cmd Struct.Event.Type)) +try model = + (Comm.Send.try_sending + model + Constants.IO.character_turn_handler + try_encoding + ) diff --git a/src/battle/src/Comm/LoadBattle.elm b/src/battle/src/Comm/LoadBattle.elm new file mode 100644 index 0000000..df4e9dd --- /dev/null +++ b/src/battle/src/Comm/LoadBattle.elm @@ -0,0 +1,42 @@ +module Comm.LoadBattle exposing (try) + +-- Elm ------------------------------------------------------------------------- +import Json.Encode + +-- Map ------------------------------------------------------------------- +import Comm.Send + +import Constants.IO + +import Struct.Event +import Struct.Model + +-------------------------------------------------------------------------------- +-- TYPES ------------------------------------------------------------------------ +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +try_encoding : Struct.Model.Type -> (Maybe Json.Encode.Value) +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)) + ] + ) + ) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +try : Struct.Model.Type -> (Maybe (Cmd Struct.Event.Type)) +try model = + (Comm.Send.try_sending + model + Constants.IO.map_loading_handler + try_encoding + ) diff --git a/src/battle/src/Comm/Send.elm b/src/battle/src/Comm/Send.elm new file mode 100644 index 0000000..98e3ba4 --- /dev/null +++ b/src/battle/src/Comm/Send.elm @@ -0,0 +1,76 @@ +module Comm.Send exposing (try_sending) + +-- Elm ------------------------------------------------------------------------- +import Http + +import Json.Decode +import Json.Encode + +-- Map ------------------------------------------------------------------- +import Comm.AddArmor +import Comm.AddChar +import Comm.AddTile +import Comm.AddWeapon +import Comm.SetMap +import Comm.SetTimeline +import Comm.TurnResults + +import Struct.Event +import Struct.ServerReply +import Struct.Model + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +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_char" -> (Comm.AddChar.decode) + "add_weapon" -> (Comm.AddWeapon.decode) + "set_map" -> (Comm.SetMap.decode) + "turn_results" -> (Comm.TurnResults.decode) + "set_timeline" -> (Comm.SetTimeline.decode) + other -> + (Json.Decode.fail + ( + "Unknown server command \"" + ++ other + ++ "\"" + ) + ) + +decode : (Json.Decode.Decoder Struct.ServerReply.Type) +decode = + (Json.Decode.field "msg" Json.Decode.string) + |> (Json.Decode.andThen (internal_decoder)) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +try_sending : ( + Struct.Model.Type -> + String -> + (Struct.Model.Type -> (Maybe Json.Encode.Value)) -> + (Maybe (Cmd Struct.Event.Type)) + ) +try_sending model recipient try_encoding_fun = + case (try_encoding_fun model) of + (Just serial) -> + (Just + (Http.send + Struct.Event.ServerReplied + (Http.post + recipient + (Http.jsonBody serial) + (Json.Decode.list (decode)) + ) + ) + ) + + Nothing -> Nothing diff --git a/src/battle/src/Comm/SetMap.elm b/src/battle/src/Comm/SetMap.elm new file mode 100644 index 0000000..7bfd56f --- /dev/null +++ b/src/battle/src/Comm/SetMap.elm @@ -0,0 +1,62 @@ +module Comm.SetMap exposing (decode) + +-- Elm ------------------------------------------------------------------------- +import Json.Decode + +-- Map ------------------------------------------------------------------- +import Struct.Map +import Struct.ServerReply +import Struct.Tile + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +type alias MapData = + { + w : Int, + h : Int, + t : (List Int) + } + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +deserialize_tile_instance : Int -> Int -> Int -> Struct.Tile.Instance +deserialize_tile_instance map_width index id = + (Struct.Tile.new_instance + (index % map_width) + (index // map_width) + id + -1 + -1 + ) + +internal_decoder : MapData -> Struct.ServerReply.Type +internal_decoder map_data = + (Struct.ServerReply.SetMap + (Struct.Map.new + map_data.w + map_data.h + (List.indexedMap + (deserialize_tile_instance map_data.w) + map_data.t + ) + ) + ) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +decode : (Json.Decode.Decoder Struct.ServerReply.Type) +decode = + (Json.Decode.map + internal_decoder + (Json.Decode.map3 MapData + (Json.Decode.field "w" Json.Decode.int) + (Json.Decode.field "h" Json.Decode.int) + (Json.Decode.field + "t" + (Json.Decode.list Json.Decode.int) + ) + ) + ) diff --git a/src/battle/src/Comm/SetTimeline.elm b/src/battle/src/Comm/SetTimeline.elm new file mode 100644 index 0000000..3956ec3 --- /dev/null +++ b/src/battle/src/Comm/SetTimeline.elm @@ -0,0 +1,27 @@ +module Comm.SetTimeline exposing (decode) + +-- Elm ------------------------------------------------------------------------- +import Json.Decode + +-- Map ------------------------------------------------------------------- +import Struct.ServerReply +import Struct.TurnResult + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +internal_decoder : (List Struct.TurnResult.Type) -> Struct.ServerReply.Type +internal_decoder trl = (Struct.ServerReply.SetTimeline trl) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +decode : (Json.Decode.Decoder Struct.ServerReply.Type) +decode = + (Json.Decode.map + (internal_decoder) + (Json.Decode.field "cnt" (Json.Decode.list Struct.TurnResult.decoder)) + ) diff --git a/src/battle/src/Comm/TurnResults.elm b/src/battle/src/Comm/TurnResults.elm new file mode 100644 index 0000000..f8727e1 --- /dev/null +++ b/src/battle/src/Comm/TurnResults.elm @@ -0,0 +1,28 @@ +module Comm.TurnResults exposing (decode) + +-- Elm ------------------------------------------------------------------------- +import Json.Decode + +-- Map ------------------------------------------------------------------- +import Struct.ServerReply +import Struct.TurnResult + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +internal_decoder : (List Struct.TurnResult.Type) -> Struct.ServerReply.Type +internal_decoder trl = (Struct.ServerReply.TurnResults trl) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +decode : (Json.Decode.Decoder Struct.ServerReply.Type) +decode = + (Json.Decode.map + (internal_decoder) + (Json.Decode.field "cnt" (Json.Decode.list Struct.TurnResult.decoder)) + ) |