public ProgressCard setPg(pgCardType type, int cate) { ProgressCard newCard = new ProgressCard(); newCard.myType = type; newCard.category = (Improvement)Enum.Parse(typeof(Improvement), cate.ToString()); return(newCard); }
// all the function is in this method public void playProgressCard(ProgressCard card) { pgCardType name = card.myType; Player localPlayer = GameObject.Find("Local Player Panel").GetComponent <Player> (); List <Player> l = GameObject.Find("panelPlayers").GetComponent <PlayerList> ()._players; GameBoard board = GameObject.Find("GameBoard").GetComponent <GameBoard> (); if (name == pgCardType.Crane) { localPlayer.isCrane = true; } else if (name == pgCardType.Engineer) { localPlayer.isEnginner = true; } else if (name == pgCardType.Irrigation) { foreach (GameObject h in board.tiles) { if (h.GetComponent <Hex> ().Product() == ResourceType.Grain) { foreach (Vertex v in h.GetComponent <Hex>().adjacentVertices) { if (v != null && v.transform.childCount > 1 && v.transform.GetChild(1).GetComponent <Village> () != null && v.transform.GetChild(1).GetComponent <Village> ().owner == localPlayer) { localPlayer.OnResourcesChanged(ResourceType.Grain, 2); break; } } } } } else if (name == pgCardType.Medicine) { localPlayer.isMedicine = true; } else if (name == pgCardType.Mining) { foreach (GameObject h in board.tiles) { if (h.GetComponent <Hex> ().Product() == ResourceType.Ore) { foreach (Vertex v in h.GetComponent <Hex>().adjacentVertices) { if (v != null && v.transform.childCount > 1 && v.transform.GetChild(1).GetComponent <Village> () != null && v.transform.GetChild(1).GetComponent <Village> ().owner == localPlayer) { localPlayer.OnResourcesChanged(ResourceType.Ore, 2); break; } } } } } else if (name == pgCardType.Printer) { localPlayer.CmdVpChange(1); } else if (name == pgCardType.Road_Building) { localPlayer.roadBuilding = 2; board.RequestPlayRoadBuildingCard(); } else if (name == pgCardType.Smith) { localPlayer.isSmith += 2; } else if (name == pgCardType.Bishop) { board.RequestBishop(); } else if (name == pgCardType.Constitution) { localPlayer.CmdVpChange(1); } else if (name == pgCardType.Deserter) { // too complicated so as Diplomat & Intrigue } else if (name == pgCardType.Saboteur) { for (int i = 0; i < l.Count; i++) { if (l [i] != localPlayer & l [i].vP >= localPlayer.vP) { localPlayer.CmdRequestDiscardResources(i, Mathf.FloorToInt(l [i].resourceSum / 2)); } } } else if (name == pgCardType.Warlord) { localPlayer.isWarLord = localPlayer.knights.Count; foreach (Knight k in localPlayer.knights) { if (!k.isActive) { localPlayer.CmdSetKnightActive(k.vertexIndex, true); // TODO resources } } } else if (name == pgCardType.Wedding) { localPlayer.CmdPlayedWeddingCard(); } else if (name == pgCardType.Master_Merchant) { foreach (Player p in l) { if (p != localPlayer) { if (p.vP > localPlayer.vP) { //to do: ui to make them choose player and which resources to take int num = 0; // THIS SHOULD BE REPLACED ResourceType chosen = 0; p.OnResourcesChanged(chosen, -num); localPlayer.OnResourcesChanged(chosen, num); localPlayer.masterMerchant = true; } } } } else if (name == pgCardType.Resource_Monopoly) { board.panelSelection.GetComponent <SelectionPanel> ().RequestResourceMonopoly(); } else if (name == pgCardType.Trade_Monopoly) { board.panelSelection.GetComponent <SelectionPanel> ().RequestTradeMonopoly(); } else if (name == pgCardType.Merchant_Fleet) { //to do: set the trade ratio to 2 for one turn localPlayer.merchantFleet = true; } else if (name == pgCardType.Commercial_Harbor) { //to do: force other players to trade 1:1 localPlayer.commercialHarbor = true; } else if (name == pgCardType.Spy) { bool hasCardsToTake = false; foreach (Player p in l) { if (p.progressCardSum > 0 && !p.isLocalPlayer) { hasCardsToTake = true; } } if (hasCardsToTake) { board.PlaySpyCard(); } else { board.panelInfo.GetComponent <InfoPanel> ().pushMessage("Other players don't have any progress cards to let you take.", null, null); return; } } else if (name == pgCardType.Merchant) { board.RequestMoveMerchant(); } else if (name == pgCardType.Inventor) { board.RequestInventorChoice(); } else if (name == pgCardType.Alchemist) { board.panelSelection.GetComponent <SelectionPanel> ().RequestDiceSelection(); localPlayer.CmdNotifyHasAlchemist(false); } localPlayer.CmdAnnounce(localPlayer.playerName + " has played a " + card.myType.ToString() + " card!"); cards.Remove(card); localPlayer.CmdDiscardProgressCard((int)card.category, (int)card.myType); }