1
0

Compare commits

...

2 Commits

3 changed files with 983 additions and 722 deletions

View File

@ -120,11 +120,11 @@ const Hand: React.FC<HandProps> = ({ buildActive, setBuildActive, setCardActive
} }
return B.turn - A.turn; /* Put playable cards on top */ return B.turn - A.turn; /* Put playable cards on top */
}) })
.map((card: any) => ( .map((card: any, idx: number) => (
<Development <Development
onClick={() => cardClicked(card)} onClick={() => cardClicked(card)}
card={card} card={card}
key={`${type}-${card.card}`} key={`${type}-${card.card}-${card.turn ?? "t"}-${idx}`}
type={`${type}-${card.card}`} type={`${type}-${card.card}`}
/> />
)); ));

File diff suppressed because it is too large Load Diff

View File

@ -20,11 +20,15 @@ export interface Player {
cities: number; cities: number;
longestRoad: number; longestRoad: number;
mustDiscard?: number; mustDiscard?: number;
/* Resources */
sheep: number; sheep: number;
wheat: number; wheat: number;
stone: number; stone: number;
brick: number; brick: number;
wood: number; wood: number;
desert: number; /* Not used -- for Typescript compliance */
bank: number; /* Not used -- for Typescript compliance */
/* End Resources */
army: number; army: number;
points: number; points: number;
ports: number; ports: number;
@ -38,6 +42,11 @@ export interface Player {
turnStart: number; turnStart: number;
totalTime: number; totalTime: number;
banks: ResourceType[]; banks: ResourceType[];
/* Offer */
gives: OfferItem[];
gets: OfferItem[];
offerRejected: Record<PlayerColor, boolean>;
/* End Offer */
} }
export type CornerType = "settlement" | "city" | "none"; export type CornerType = "settlement" | "city" | "none";
@ -72,20 +81,21 @@ export interface Turn {
limits?: any; limits?: any;
roll?: number; roll?: number;
volcano?: number | null | undefined; volcano?: number | null | undefined;
free?: boolean; free: boolean;
freeRoads?: number; freeRoads: number;
select?: Record<string, number>; select?: Record<string, number>;
active?: string; active: "volcano" | "robber" | "road-building" | "offer" | null;
robberInAction?: boolean; robberInAction: boolean;
placedRobber?: number; placedRobber: boolean;
offer?: Offer; developmentPurchased: boolean;
offer: Offer | null;
[key: string]: any; [key: string]: any;
} }
export interface DevelopmentCard { export interface DevelopmentCard {
card?: number | string; card?: number | string;
type?: string; type?: string;
[key: string]: any; turn?: number;
} }
// Import from schema for DRY compliance // Import from schema for DRY compliance
@ -105,8 +115,8 @@ export interface PersistentSessionData {
resources?: number; resources?: number;
} }
export type PlayerColor = "R" | "B" | "O" | "W" | "robber" | "unassigned"; export type PlayerColor = "R" | "B" | "O" | "W" | "robber" | "bank" | "unassigned";
export const PLAYER_COLORS: PlayerColor[] = ["R", "B", "O", "W", "robber", "unassigned"]; export const PLAYER_COLORS: PlayerColor[] = ["R", "B", "O", "W", "robber", "bank", "unassigned"];
/** /**
* Runtime Session type = Persistent + Transient * Runtime Session type = Persistent + Transient
@ -115,14 +125,15 @@ export const PLAYER_COLORS: PlayerColor[] = ["R", "B", "O", "W", "robber", "unas
export type Session = PersistentSessionData & TransientSessionState; export type Session = PersistentSessionData & TransientSessionState;
export interface OfferItem { export interface OfferItem {
type: string; // 'bank' or resource key or other type: ResourceType; // 'bank' or resource key or other
count: number; count: number;
} }
export interface Offer { export interface Offer {
gets: OfferItem[]; gets: OfferItem[];
gives: OfferItem[]; gives: OfferItem[];
[key: string]: any; name: string;
color: PlayerColor; // Omit for bank trades
} }
export type ResourceType = "wood" | "brick" | "sheep" | "wheat" | "stone" | "desert" | "bank"; export type ResourceType = "wood" | "brick" | "sheep" | "wheat" | "stone" | "desert" | "bank";