@nodots-llc/backgammon-types
Version:
Type definitions for nodots-backgammon
84 lines (72 loc) • 1.77 kB
text/typescript
import { BackgammonPlayer, BackgammonPlayers } from './player'
export type BackgammonCubeValue = undefined | 2 | 4 | 8 | 16 | 32 | 64
export const BackgammonCubeValues: BackgammonCubeValue[] = [
undefined,
2,
4,
8,
16,
32,
64,
]
export type BackgammonCubeStateKind =
| 'initialized'
| 'doubled'
| 'maxxed'
| 'offered'
interface BaseCube {
id: string
owner: BackgammonPlayer | undefined
value: BackgammonCubeValue | undefined
offeredBy?: BackgammonPlayer | undefined
}
interface Cube extends BaseCube {
stateKind: BackgammonCubeStateKind
}
export type BackgammonCubeInitialized = Cube & {
stateKind: 'initialized'
owner: undefined
value: undefined
offeredBy?: undefined
}
export type BackgammonCubeDoubled = Cube & {
stateKind: 'doubled'
owner: BackgammonPlayer
value: BackgammonCubeValue
offeredBy?: undefined
}
export type BackgammonCubeMaxxed = Cube & {
stateKind: 'maxxed'
owner: undefined
value: 64
offeredBy?: undefined
}
export type BackgammonCubeOffered = Cube & {
stateKind: 'offered'
owner: BackgammonPlayer
value: BackgammonCubeValue
offeredBy: BackgammonPlayer
}
export type BackgammonCube =
| BackgammonCubeInitialized
| BackgammonCubeDoubled
| BackgammonCubeMaxxed
| BackgammonCubeOffered
export interface CubeProps {
id?: string
stateKind?: BackgammonCubeStateKind
value?: BackgammonCubeValue
owner?: BackgammonPlayer
}
export interface CubeClass {
id: string
stateKind: BackgammonCubeStateKind
value: BackgammonCubeValue | undefined
owner: BackgammonPlayer | undefined
initialize: (cube?: CubeProps) => Cube
double: (
cube: Cube,
player: BackgammonPlayer,
players: BackgammonPlayers
) => BackgammonCubeDoubled | BackgammonCubeMaxxed
}