Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
    // 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);
    }