game/src/Character.hs

77 lines
1.6 KiB
Haskell

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedLists #-}
module Character (
Character(..)
, Key
, dex
, new
) where
import Data.Aeson (ToJSONKey(..), FromJSONKey(..), ToJSON(..), FromJSON(..), genericToEncoding, genericParseJSON, defaultOptions)
import Data.Map (Map)
import Data.Vector (Vector)
import GHC.Generics (Generic)
import qualified Item (Group)
import Pokemon (Pokemon)
import Tool.Array (Array, malloc)
data Badge =
Earth
| Fire
| Water
| Plant
| Electricity
| Psy
| Normal
deriving (Generic)
instance ToJSON Badge where
toEncoding = genericToEncoding defaultOptions
instance FromJSON Badge
data Pocket =
Items
| Rare
| Techniques
| Special
deriving (Eq, Generic, Ord)
instance ToJSON Pocket where
toEncoding = genericToEncoding defaultOptions
instance FromJSON Pocket
instance ToJSONKey Pocket
instance FromJSONKey Pocket
data Character = Character {
items :: Map Pocket (Array Item.Group)
, badges :: Array Badge
, pokemons :: Array Pokemon
} deriving (Generic)
instance ToJSON Character where
toEncoding = genericToEncoding defaultOptions
instance FromJSON Character where
parseJSON = genericParseJSON defaultOptions
newtype Key = Key Int deriving (Generic)
instance ToJSON Key where
toEncoding = genericToEncoding defaultOptions
instance FromJSON Key where
parseJSON = genericParseJSON defaultOptions
new :: Character
new = Character {
items = [
(Items, malloc 30)
, (Rare, malloc 10)
, (Techniques, malloc 50)
, (Special, malloc 5)
]
, badges = malloc 8
, pokemons = malloc 6
}
dex :: Vector Character
dex = []