summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/battle-characters/BattleCharacters/Struct')
-rw-r--r--src/shared/battle-characters/BattleCharacters/Struct/Equipment.elm192
-rw-r--r--src/shared/battle-characters/BattleCharacters/Struct/Glyph.elm66
-rw-r--r--src/shared/battle-characters/BattleCharacters/Struct/GlyphBoard.elm102
3 files changed, 360 insertions, 0 deletions
diff --git a/src/shared/battle-characters/BattleCharacters/Struct/Equipment.elm b/src/shared/battle-characters/BattleCharacters/Struct/Equipment.elm
new file mode 100644
index 0000000..8782397
--- /dev/null
+++ b/src/shared/battle-characters/BattleCharacters/Struct/Equipment.elm
@@ -0,0 +1,192 @@
+module BattleCharacters.Struct.Equipment exposing
+ (
+ get_primary_weapon,
+ get_secondary_weapon,
+ get_armor,
+ get_portrait,
+ get_glyph_board,
+ get_glyphs,
+ set_primary_weapon,
+ set_secondary_weapon,
+ set_armor,
+ set_portrait,
+ set_glyph_board,
+ set_glyphs,
+ set_glyph,
+ ref_decoder,
+ ref_encoder,
+ resolve,
+ to_ref
+ )
+
+-- Elm -------------------------------------------------------------------------
+import Array
+
+import List
+
+import Json.Decode
+import Json.Decode.Pipeline
+
+import Json.Encode
+
+-- Battle ----------------------------------------------------------------------
+import BattleCharacters.Struct.Weapon
+import BattleCharacters.Struct.Armor
+import BattleCharacters.Struct.Portrait
+import BattleCharacters.Struct.Glyph
+import BattleCharacters.Struct.GlyphBoard
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type alias Type =
+ {
+ primary : BattleCharacters.Struct.Weapon.Type,
+ secondary : BattleCharacters.Struct.Weapon.Type,
+ armor : BattleCharacters.Struct.Armor.Type,
+ portrait : BattleCharacters.Struct.Portrait.Type,
+ glyph_board : BattleCharacters.Struct.GlyphBoard.Type,
+ glyphs : (Array.Array BattleCharacters.Struct.Glyph.Type)
+ }
+
+type alias Ref =
+ {
+ primary : BattleCharacters.Struct.Weapon.Ref,
+ secondary : BattleCharacters.Struct.Weapon.Ref,
+ armor : BattleCharacters.Struct.Armor.Ref,
+ portrait : BattleCharacters.Struct.Portrait.Ref,
+ glyph_board : BattleCharacters.Struct.GlyphBoard.Ref,
+ glyphs : (Array.Array BattleCharacters.Struct.Glyph.Ref)
+ }
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+get_primary_weapon : Type -> BattleCharacters.Struct.Weapon.Type
+get_primary_weapon equipment = equipment.primary
+
+get_secondary_weapon : Type -> BattleCharacters.Struct.Weapon.Type
+get_secondary_weapon equipment = equipment.secondary
+
+get_armor : Type -> BattleCharacters.Struct.Armor.Type
+get_armor equipment = equipment.armor
+
+get_portrait : Type -> BattleCharacters.Struct.Portrait.Type
+get_portrait equipment = equipment.portrait
+
+get_glyph_board : Type -> BattleCharacters.Struct.GlyphBoard.Type
+get_glyph_board equipment = equipment.glyph_board
+
+get_glyphs : Type -> (Array.Array BattleCharacters.Struct.Glyph.Type)
+get_glyphs equipment = equipment.glyphs
+
+set_primary_weapon : BattleCharacters.Struct.Weapon.Type -> Type -> Type
+set_primary_weapon wp equipment = { equipment | primary = wp }
+
+set_secondary_weapon : BattleCharacters.Struct.Weapon.Type -> Type -> Type
+set_secondary_weapon wp equipment = { equipment | secondary = wp }
+
+set_armor : BattleCharacters.Struct.Armor.Type -> Type -> Type
+set_armor ar equipment = { equipment | armor = ar }
+
+set_portrait : BattleCharacters.Struct.Portrait.Type -> Type -> Type
+set_portrait pt equipment = { equipment | portrait = pt }
+
+set_glyph_board : BattleCharacters.Struct.GlyphBoard.Type -> Type -> Type
+set_glyph_board gb equipment =
+ {equipment |
+ glyph_board = gb,
+ glyphs =
+ (Array.repeat
+ (List.length (BattleCharacters.Struct.GlyphBoard.get_slots gb))
+ (BattleCharacters.Struct.Glyph.none)
+ )
+ }
+
+set_glyphs : (Array.Array BattleCharacters.Struct.Glyph.Type) -> Type -> Type
+set_glyphs gl equipment = { equipment | glyphs = gl }
+
+set_glyph : Int -> BattleCharacters.Struct.Glyph.Type -> Type -> Type
+set_glyph index glyph equipment =
+ { equipment | glyphs = (Array.set index glyph equipment.glyphs) }
+
+ref_decoder : (Json.Decode.Decoder Type)
+ref_decoder =
+ (Json.Decode.succeed
+ Ref
+ |> (Json.Decode.Pipeline.required "pr" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required "sc" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required "ar" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required "pt" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required "gb" Json.Decode.string)
+ |>
+ (Json.Decode.Pipeline.required
+ "gl"
+ (Json.Decode.array (Json.Decode.string))
+ )
+ )
+
+ref_encoder : Ref -> Json.Encode.Value
+ref_encoder ref =
+ (Json.Encode.object
+ [
+ ("pr", (Json.Encode.string ref.primary)),
+ ("sc", (Json.Encode.string ref.secondary)),
+ ("ar", (Json.Encode.string ref.armor)),
+ ("pt", (Json.Encode.string ref.portrait)),
+ ("gb", (Json.Encode.string ref.glyph_board)),
+ ("gl", (Json.Encode.array (Array.map (Json.Encode.string) ref.gl)))
+ ]
+ )
+
+resolve : (
+ (
+ BattleCharacters.Struct.Weapon.Ref ->
+ BattleCharacters.Struct.Weapon.Type
+ ) ->
+ (
+ BattleCharacters.Struct.Armor.Ref ->
+ BattleCharacters.Struct.Armor.Type
+ ) ->
+ (
+ BattleCharacters.Struct.Portrait.Ref ->
+ BattleCharacters.Struct.Portrait.Type
+ ) ->
+ (
+ BattleCharacters.Struct.GlyphBoard.Ref ->
+ BattleCharacters.Struct.GlyphBoard.Type
+ ) ->
+ (
+ BattleCharacters.Struct.Glyph.Ref ->
+ BattleCharacters.Struct.Glyph.Type
+ ) ->
+ Ref ->
+ Type
+ )
+resolve resolve_wp resolve_ar resolve_pt resolve_gb resolve_gl ref =
+ {
+ primary = (resolve_wp ref.primary),
+ secondary = (resolve_wp ref.secondary),
+ armor = (resolve_ar ref.armor),
+ portrait = (resolve_pt ref.portrait),
+ glyph_board = (resolve_gb ref.glyph_board),
+ glyphs = (Array.map (resolve_gl) ref.glyphs)
+ }
+
+to_ref : Type -> Ref
+to_ref equipment =
+ {
+ primary = (BattleCharacters.Struct.Weapon.get_id equipment.primary),
+ secondary = (BattleCharacters.Struct.Weapon.get_id equipment.secondary),
+ armor = (BattleCharacters.Struct.Armor.get_id equipment.armor),
+ portrait = (BattleCharacters.Struct.Portrait.get_id equipment.portrait),
+ glyph_board =
+ (BattleCharacters.Struct.GlyphBoard.get_id equipment.glyph_board),
+ glyphs =
+ (Array.map (BattleCharacters.Struct.Glyph.get_id) equipment.glyphs)
+ }
+
diff --git a/src/shared/battle-characters/BattleCharacters/Struct/Glyph.elm b/src/shared/battle-characters/BattleCharacters/Struct/Glyph.elm
new file mode 100644
index 0000000..c277b20
--- /dev/null
+++ b/src/shared/battle-characters/BattleCharacters/Struct/Glyph.elm
@@ -0,0 +1,66 @@
+module BattleCharacters.Struct.Glyph exposing
+ (
+ Type,
+ Ref,
+ get_name,
+ get_id,
+ get_omnimods,
+ none,
+ default,
+ decoder
+ )
+
+-- Elm -------------------------------------------------------------------------
+import Json.Decode
+import Json.Decode.Pipeline
+
+-- Battle ----------------------------------------------------------------------
+import Battle.Struct.Omnimods
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type alias Type =
+ {
+ id : String,
+ name : String,
+ omnimods : Battle.Struct.Omnimods.Type
+ }
+
+type alias Ref = String
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+get_id : Type -> String
+get_id g = g.id
+
+get_name : Type -> String
+get_name g = g.name
+
+get_omnimods : Type -> Battle.Struct.Omnimods.Type
+get_omnimods g = g.omnimods
+
+decoder : (Json.Decode.Decoder Type)
+decoder =
+ (Json.Decode.succeed
+ Type
+ |> (Json.Decode.Pipeline.required "id" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required "nam" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required "omni" Battle.Struct.Omnimods.decoder)
+ )
+
+none : Type
+none =
+ {
+ id = "0",
+ name = "Empty",
+ omnimods = (Battle.Struct.Omnimods.none)
+ }
+
+default : Type
+default = (none)
diff --git a/src/shared/battle-characters/BattleCharacters/Struct/GlyphBoard.elm b/src/shared/battle-characters/BattleCharacters/Struct/GlyphBoard.elm
new file mode 100644
index 0000000..7d08ec0
--- /dev/null
+++ b/src/shared/battle-characters/BattleCharacters/Struct/GlyphBoard.elm
@@ -0,0 +1,102 @@
+module BattleCharacters.Struct.GlyphBoard exposing
+ (
+ Type,
+ Ref,
+ get_name,
+ get_id,
+ get_slots,
+ get_omnimods,
+ get_omnimods_with_glyphs,
+ decoder,
+ none,
+ default
+ )
+
+-- Elm -------------------------------------------------------------------------
+import Array
+
+import List
+
+import Json.Decode
+import Json.Decode.Pipeline
+
+-- Battle ----------------------------------------------------------------------
+import Battle.Struct.Omnimods
+
+-- Battle Characters -----------------------------------------------------------
+import BattleCharacters.Struct.Glyph
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type alias Type =
+ {
+ id : String,
+ name : String,
+ slots : (List Int),
+ omnimods : Battle.Struct.Omnimods.Type
+ }
+
+type alias Ref = String
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+get_id : Type -> String
+get_id g = g.id
+
+get_name : Type -> String
+get_name g = g.name
+
+get_slots : Type -> (List Int)
+get_slots g = g.slots
+
+get_omnimods : Type -> Battle.Struct.Omnimods.Type
+get_omnimods g = g.omnimods
+
+get_omnimods_with_glyphs : (
+ (Array.Array BattleCharacters.Struct.Glyph.Type) ->
+ Type ->
+ Battle.Struct.Omnimods.Type
+ )
+get_omnimods_with_glyphs glyphs board =
+ (List.foldl
+ (Battle.Struct.Omnimods.merge)
+ board.omnimods
+ (List.map2
+ (Battle.Struct.Omnimods.scale)
+ (List.map (\e -> ((toFloat e) / 100.0)) board.slots)
+ (List.map
+ (BattleCharacters.Struct.Glyph.get_omnimods) (Array.toList glyphs)
+ )
+ )
+ )
+
+decoder : (Json.Decode.Decoder Type)
+decoder =
+ (Json.Decode.succeed
+ Type
+ |> (Json.Decode.Pipeline.required "id" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required "nam" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required
+ "slot"
+ (Json.Decode.list (Json.Decode.int))
+ )
+ |> (Json.Decode.Pipeline.required "omni" Battle.Struct.Omnimods.decoder)
+ )
+
+none : Type
+none =
+ {
+ id = "",
+ name = "None",
+ slots = [],
+ omnimods = (Battle.Struct.Omnimods.none)
+ }
+
+default : Type
+default = (none)