64 lines
2.1 KiB
Haskell
64 lines
2.1 KiB
Haskell
|
module Types where
|
||
|
|
||
|
import Cards
|
||
|
|
||
|
data MainCharacter = Shinji | Asuka | Rei | Misato | Ritsuko | Gendo deriving (Show, Eq)
|
||
|
data MainEva = UnitZero | UnitOne | UnitTwo deriving (Show, Eq)
|
||
|
data Angel = Sachiel | Shamshel | Ramiel | Gaghiel | Israfel | Sandalphon | Matariel | Sahaquiel | Ireul | Leliel | Bardiel | Zeruel | Arael | Armisael | Kaworu | Man | Lilith | Adam
|
||
|
data CardSym = S01_Shinji | S02_Asuka | S03_Rei | S04_Misato | S05_Ritsuko | S06_Gendo deriving (Show, Eq)
|
||
|
|
||
|
type CardLib = [(CardSym, CardInfo)]
|
||
|
type Downed = [MainCharacter]
|
||
|
type PutCards = [(Either MainCharacter MainEva, CardSym)]
|
||
|
type CardStack = [(PlayerId, CardSym)]
|
||
|
type NeoTokyo = ([Group], Evas, Angels, PutCards, Downed)
|
||
|
type Evas = [MainEvas]
|
||
|
type Group = [MainCharacter]
|
||
|
type Angels = [Angel]
|
||
|
type BoardState =
|
||
|
{ bsNeoTokyo :: NeoTokyo
|
||
|
, bsPlayerLib :: PlayerLib
|
||
|
, bsActivePlayers :: ActivePlayers
|
||
|
, bsPriorityPlayer :: PriorityPlayer
|
||
|
, bsCardStack :: CardStack
|
||
|
, bsCardLib :: CardLib
|
||
|
}
|
||
|
|
||
|
type PlayerLib = [(PlayerId, PlayerState)]
|
||
|
type ActivePlayers = [PlayerId]
|
||
|
type PriorityPlayer = PlayerId
|
||
|
type PlayerId = Integer
|
||
|
type PlayerState = (PlayerName, Hand, Deck, Discard)
|
||
|
type PlayerName = String
|
||
|
type Hand = [CardSym]
|
||
|
type Deck = [CardSym]
|
||
|
type Discard = [CardSym]
|
||
|
|
||
|
type GameLog = [GameMessage]
|
||
|
type GameMessage = Either GameLine GameError
|
||
|
type GameLine = String
|
||
|
type GameError = String
|
||
|
|
||
|
data Faction = Blue | Red | White | Green | Yellow | Black deriving (Show)
|
||
|
data TypeSym = Character | Eva | Angel | Drama | Put | Intstrumentality deriving (Show, Eq)
|
||
|
data Trait = Other | Reaction | Male | Female | Weapon deriving (Show)
|
||
|
type Traits = [Trait]
|
||
|
data Mark = Circle | Triangle deriving (Show)
|
||
|
type LineMark = (Mark, Faction)
|
||
|
type LineMarks = [LineMark]
|
||
|
|
||
|
data CardInfo = CardInfo
|
||
|
{ ciName :: String
|
||
|
, ciFaction :: Faction
|
||
|
, ciType :: TypeSym
|
||
|
, ciText :: String
|
||
|
, ciTraits :: Traits
|
||
|
, ciLineMarks :: Maybe LineMarks
|
||
|
, ciLine :: Maybe String
|
||
|
, ciDP :: Maybe Integer
|
||
|
, ciStrength :: Maybe Integer
|
||
|
, ciLevel :: Maybe Integer
|
||
|
, ciNextInst :: Maybe CardSym
|
||
|
} deriving (Show)
|
||
|
|