summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/shared/battle-characters/BattleCharacters/Struct/Inventory.elm')
-rw-r--r-- | src/shared/battle-characters/BattleCharacters/Struct/Inventory.elm | 266 |
1 files changed, 266 insertions, 0 deletions
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 + ) + } + |