| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/shared')
3 files changed, 414 insertions, 7 deletions
| diff --git a/src/shared/battle-characters/BattleCharacters/Struct/Equipment.elm b/src/shared/battle-characters/BattleCharacters/Struct/Equipment.elm index 4d0b1fb..0722a96 100644 --- a/src/shared/battle-characters/BattleCharacters/Struct/Equipment.elm +++ b/src/shared/battle-characters/BattleCharacters/Struct/Equipment.elm @@ -8,6 +8,7 @@ module BattleCharacters.Struct.Equipment exposing        get_portrait,        get_glyph_board,        get_glyphs, +      get_skill,        set_primary_weapon,        set_secondary_weapon,        set_armor, @@ -15,6 +16,7 @@ module BattleCharacters.Struct.Equipment exposing        set_glyph_board,        set_glyphs,        set_glyph, +      set_skill,        decoder,        encode,        resolve, @@ -32,11 +34,12 @@ 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 +import BattleCharacters.Struct.Portrait +import BattleCharacters.Struct.Skill +import BattleCharacters.Struct.Weapon  --------------------------------------------------------------------------------  -- TYPES ----------------------------------------------------------------------- @@ -48,7 +51,8 @@ type alias Type =        armor : BattleCharacters.Struct.Armor.Type,        portrait : BattleCharacters.Struct.Portrait.Type,        glyph_board : BattleCharacters.Struct.GlyphBoard.Type, -      glyphs : (Array.Array BattleCharacters.Struct.Glyph.Type) +      glyphs : (Array.Array BattleCharacters.Struct.Glyph.Type), +      skill : BattleCharacters.Struct.Skill.Type     }  type alias Unresolved = @@ -58,7 +62,8 @@ type alias Unresolved =        armor : BattleCharacters.Struct.Armor.Ref,        portrait : BattleCharacters.Struct.Portrait.Ref,        glyph_board : BattleCharacters.Struct.GlyphBoard.Ref, -      glyphs : (Array.Array BattleCharacters.Struct.Glyph.Ref) +      glyphs : (Array.Array BattleCharacters.Struct.Glyph.Ref), +      skill : BattleCharacters.Struct.Skill.Ref     }  -------------------------------------------------------------------------------- @@ -86,6 +91,9 @@ get_glyph_board equipment = equipment.glyph_board  get_glyphs : Type -> (Array.Array BattleCharacters.Struct.Glyph.Type)  get_glyphs equipment = equipment.glyphs +get_skill : Type -> BattleCharacters.Struct.Skill.Type +get_skill equipment = equipment.skill +  set_primary_weapon : BattleCharacters.Struct.Weapon.Type -> Type -> Type  set_primary_weapon wp equipment = { equipment | primary = wp } @@ -116,6 +124,9 @@ set_glyph : Int -> BattleCharacters.Struct.Glyph.Type -> Type -> Type  set_glyph index glyph equipment =     { equipment | glyphs = (Array.set index glyph equipment.glyphs) } +set_skill : BattleCharacters.Struct.Skill.Type -> Type -> Type +set_skill sk equipment = { equipment | skill = sk } +  decoder : (Json.Decode.Decoder Unresolved)  decoder =     (Json.Decode.succeed @@ -130,6 +141,7 @@ decoder =              "gl"              (Json.Decode.array (Json.Decode.string))           ) +      |> (Json.Decode.Pipeline.required "sk" Json.Decode.string)     )  encode : Unresolved -> Json.Encode.Value @@ -166,17 +178,22 @@ resolve : (           BattleCharacters.Struct.Glyph.Ref ->           BattleCharacters.Struct.Glyph.Type        ) -> +      ( +         BattleCharacters.Struct.Skill.Ref -> +         BattleCharacters.Struct.Skill.Type +      ) ->        Unresolved ->        Type     ) -resolve resolve_wp resolve_ar resolve_pt resolve_gb resolve_gl ref = +resolve resolve_wp resolve_ar resolve_pt resolve_gb resolve_gl resolve_sk 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) +      glyphs = (Array.map (resolve_gl) ref.glyphs), +      skill = (resolve_sk ref.skill)     }  to_unresolved : Type -> Unresolved @@ -189,6 +206,7 @@ to_unresolved equipment =        glyph_board =           (BattleCharacters.Struct.GlyphBoard.get_id equipment.glyph_board),        glyphs = -         (Array.map (BattleCharacters.Struct.Glyph.get_id) equipment.glyphs) +         (Array.map (BattleCharacters.Struct.Glyph.get_id) equipment.glyphs), +      skill = (BattleCharacters.Struct.Skill.get_id equipment.skill)     } diff --git a/src/shared/battle-characters/BattleCharacters/Struct/Inventory.elm b/src/shared/battle-characters/BattleCharacters/Struct/Inventory.elm new file mode 100644 index 0000000..9e1347e --- /dev/null +++ b/src/shared/battle-characters/BattleCharacters/Struct/Inventory.elm @@ -0,0 +1,266 @@ +module BattleCharacters.Struct.Inventory exposing +   ( +      Type, +      new, +      is_ready, +      get_weapon, +      add_weapon, +      get_armor, +      add_armor, +      get_portrait, +      add_portrait, +      get_glyph, +      add_glyph, +      get_glyph_board, +      add_glyph_board, +      get_skill, +      add_skill +   ) + +-- Elm ------------------------------------------------------------------------- +import Dict + +-- Battle ---------------------------------------------------------------------- +import BattleCharacters.Struct.Armor +import BattleCharacters.Struct.Glyph +import BattleCharacters.Struct.GlyphBoard +import BattleCharacters.Struct.Portrait +import BattleCharacters.Struct.Skill +import BattleCharacters.Struct.Weapon + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +type alias Type = +   { +      weapons : +         (Dict.Dict +            BattleCharacters.Struct.Weapon.Ref +            BattleCharacters.Struct.Weapon.Type +         ), +      armors : +         (Dict.Dict +            BattleCharacters.Struct.Armor.Ref +            BattleCharacters.Struct.Armor.Type +         ), +      glyphs : +         (Dict.Dict +            BattleCharacters.Struct.Glyph.Ref +            BattleCharacters.Struct.Glyph.Type +         ), +      glyph_boards : +         (Dict.Dict +            BattleCharacters.Struct.GlyphBoard.Ref +            BattleCharacters.Struct.GlyphBoard.Type +         ), +      portraits : +         (Dict.Dict +            BattleCharacters.Struct.Portrait.Ref +            BattleCharacters.Struct.Portrait.Type +         ), +      skills : +         (Dict.Dict +            BattleCharacters.Struct.Skill.Ref +            BattleCharacters.Struct.Skill.Type +         ) +   } + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +new : Type +new = +   { +      weapons : +         (Dict.Dict +            BattleCharacters.Struct.Weapon.Ref +            BattleCharacters.Struct.Weapon.Type +         ), +      armors : +         (Dict.Dict +            BattleCharacters.Struct.Armor.Ref +            BattleCharacters.Struct.Armor.Type +         ), +      glyphs : +         (Dict.Dict +            BattleCharacters.Struct.Glyph.Ref +            BattleCharacters.Struct.Glyph.Type +         ), +      glyph_boards : +         (Dict.Dict +            BattleCharacters.Struct.GlyphBoard.Ref +            BattleCharacters.Struct.GlyphBoard.Type +         ), +      portraits : +         (Dict.Dict +            BattleCharacters.Struct.Portrait.Ref +            BattleCharacters.Struct.Portrait.Type +         ), +      skills : +         (Dict.Dict +            BattleCharacters.Struct.Portrait.Ref +            BattleCharacters.Struct.Portrait.Type +         ), +   } + +is_ready : Type -> Bool +is_ready inventory = +   ( +      (inventory.portraits /= (Dict.empty)) +      && (inventory.weapons /= (Dict.empty)) +      && (inventory.armors /= (Dict.empty)) +      && (inventory.glyph_boards /= (Dict.empty)) +      && (inventory.glyphs /= (Dict.empty)) +      && (inventory.skills /= (Dict.empty)) +   ) + +---- Accessors ----------------------------------------------------------------- + +---------------- +---- Weapon ---- +---------------- +get_weapon : ( +      BattleCharacters.Struct.Weapon.Ref -> +      Type -> +      BattleCharacters.Struct.Weapon.Type +   ) +get_weapon wp_id inventory = +   case (Dict.get wp_id inventory.weapons) of +      (Just wp) -> wp +      Nothing -> BattleCharacters.Struct.Weapon.none + +add_weapon : BattleCharacters.Struct.Weapon.Type -> Type -> Type +add_weapon wp inventory = +   {inventory | +      weapons = +         (Dict.insert +            (BattleCharacters.Struct.Weapon.get_id wp) +            wp +            inventory.weapons +         ) +   } + +--------------- +---- Armor ---- +--------------- +get_armor : ( +      BattleCharacters.Struct.Armor.Ref -> +      Type -> +      BattleCharacters.Struct.Armor.Type +   ) +get_armor ar_id inventory = +   case (Dict.get ar_id inventory.armors) of +      (Just ar) -> ar +      Nothing -> BattleCharacters.Struct.Armor.none + +add_armor : BattleCharacters.Struct.Armor.Type -> Type -> Type +add_armor ar inventory = +   {inventory | +      armors = +         (Dict.insert +            (BattleCharacters.Struct.Armor.get_id ar) +            ar +            inventory.armors +         ) +   } + +------------------ +---- Portrait ---- +------------------ +get_portrait : ( +      BattleCharacters.Struct.Portrait.Ref -> +      Type -> +      BattleCharacters.Struct.Portrait.Type +   ) +get_portrait pt_id inventory = +   case (Dict.get pt_id inventory.portraits) of +      (Just pt) -> pt +      Nothing -> BattleCharacters.Struct.Portrait.none + +add_portrait : BattleCharacters.Struct.Portrait.Type -> Type -> Type +add_portrait pt inventory = +   {inventory | +      portraits = +         (Dict.insert +            (BattleCharacters.Struct.Portrait.get_id pt) +            pt +            inventory.portraits +         ) +   } + +--------------- +---- Glyph ---- +--------------- +get_glyph : ( +      BattleCharacters.Struct.Glyph.Ref -> +      Type -> +      BattleCharacters.Struct.Glyph.Type +   ) +get_glyph gl_id inventory = +   case (Dict.get gl_id inventory.glyphs) of +      (Just gl) -> gl +      Nothing -> BattleCharacters.Struct.Glyph.none + +add_glyph : BattleCharacters.Struct.Glyph.Type -> Type -> Type +add_glyph gl inventory = +   {inventory | +      glyphs = +         (Dict.insert +            (BattleCharacters.Struct.Glyph.get_id gl) +            gl +            inventory.glyphs +         ) +   } + +--------------------- +---- Glyph Board ---- +--------------------- +get_glyph_board : ( +      BattleCharacters.Struct.GlyphBoard.Ref -> +      Type -> +      BattleCharacters.Struct.GlyphBoard.Type +   ) +get_glyph_board gb_id inventory = +   case (Dict.get gb_id inventory.glyph_boards) of +      (Just gb) -> gb +      Nothing -> BattleCharacters.Struct.GlyphBoard.none + +add_glyph_board : BattleCharacters.Struct.GlyphBoard.Type -> Type -> Type +add_glyph_board glb inventory = +   {inventory | +      glyph_boards = +         (Dict.insert +            (BattleCharacters.Struct.GlyphBoard.get_id glb) +            glb +            inventory.glyph_boards +         ) +   } + +--------------- +---- Skill ---- +--------------- +get_skill : ( +      BattleCharacters.Struct.Skill.Ref -> +      Type -> +      BattleCharacters.Struct.Skill.Type +   ) +get_skill sk_id inventory = +   case (Dict.get sk_id inventory.skills) of +      (Just sk) -> sk +      Nothing -> BattleCharacters.Struct.Skill.none + +add_skill : BattleCharacters.Struct.Skill.Type -> Type -> Type +add_skill sk inventory = +   {inventory | +      skills = +         (Dict.insert +            (BattleCharacters.Struct.Skill.get_id sk) +            sk +            inventory.skills +         ) +   } + diff --git a/src/shared/battle-characters/BattleCharacters/Struct/Skill.elm b/src/shared/battle-characters/BattleCharacters/Struct/Skill.elm new file mode 100644 index 0000000..709c17f --- /dev/null +++ b/src/shared/battle-characters/BattleCharacters/Struct/Skill.elm @@ -0,0 +1,123 @@ +module BattleCharacters.Struct.Skill exposing +   ( +      Type, +      Ref, +      find, +      default, +      get_id, +      get_name, +      get_cost, +      get_reserve, +      get_locations, +      get_duration, +      get_uses, +      get_chance, +      get_power, +      get_range, +      decoder +   ) + +-- Elm ------------------------------------------------------------------------- +import Dict + +import Json.Decode +import Json.Decode.Pipeline + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +type alias Type = +   { +      id : String, +      name : String, +      cost : Int, +      reserve : Int, +      targets : Int, +      locations : Int, +      duration : Int, +      uses : Int, +      chance : Int, +      power : Int, +      range : Int +   } + +type alias Ref = String + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +find : (Dict.Dict Ref Type) -> Ref -> Type +find dict ref = +   case (Dict.get ref dict) of +      (Just e) -> e +      Nothing -> default + +default : Type +default = +   { +      id = "", +      name = "Skill Not Found", +      cost = 999, +      reserve = 999, +      targets = -1, +      locations = -1, +      duration = -1, +      uses = -1, +      chance = -1, +      power = -1, +      range = -1 +   } + +get_id : Type -> String +get_id p = p.id + +get_name : Type -> String +get_name p = p.name + +get_cost : Type -> Int +get_cost p = p.cost + +get_reserve : Type -> Int +get_reserve p = p.reserve + +get_targets : Type -> Int +get_targets p = p.targets + +get_locations : Type -> Int +get_locations p = p.locations + +get_duration : Type -> Int +get_duration p = p.duration + +get_uses : Type -> Int +get_uses p = p.uses + +get_chance : Type -> Int +get_chance p = p.chance + +get_power : Type -> Int +get_power p = p.power + +get_range : Type -> Int +get_range p = p.range + +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 "cos" Json.Decode.int) +      |> (Json.Decode.Pipeline.required "res" Json.Decode.int) +      |> (Json.Decode.Pipeline.required "tar" Json.Decode.int) +      |> (Json.Decode.Pipeline.required "loc" Json.Decode.int) +      |> (Json.Decode.Pipeline.required "dur" Json.Decode.int) +      |> (Json.Decode.Pipeline.required "use" Json.Decode.int) +      |> (Json.Decode.Pipeline.required "cha" Json.Decode.int) +      |> (Json.Decode.Pipeline.required "pow" Json.Decode.int) +      |> (Json.Decode.Pipeline.required "ran" Json.Decode.int) +   ) | 


