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