コード例 #1
0
    public void displayPanelForAssets(AssetTuple playerAssets, int delta, bool isPositive)
    {
        neededDiscards = delta;
        leftDiscards   = neededDiscards;

        foreach (Text text in assetNumTexts)
        {
            text.text = "0";
        }

        for (int i = 0; i < assetSliders.Length; i++)
        {
            if (isPositive)
            {
                assetSliders [i].maxValue = delta;
            }
            else
            {
                assetSliders [i].maxValue = playerAssets.GetValueAtIndex(i);
            }

            assetSliders [i].minValue = assetSliders [i].value = 0;
        }

        currentTuple  = playerAssets;
        selectionMade = false;
        this.gameObject.SetActive(true);
    }
コード例 #2
0
ファイル: Player.cs プロジェクト: gazcn007/SeattlersOfCatan
 public void spendAssets(AssetTuple assetToSpend)
 {
     this.spendResources(assetToSpend.resources);
     this.spendCommodities(assetToSpend.commodities);
     this.spendFishTokens(assetToSpend.fishTokens);
     this.assets.gold -= assetToSpend.gold;
 }
コード例 #3
0
    public void sendResponseCounter()
    {
        //fill 2 new tuples with values from slider for sending
        AssetTuple getAsset  = new AssetTuple();
        AssetTuple giveAsset = new AssetTuple();

        for (int i = 0; i < getAssetSliders.Length; i++)
        {
            getAsset.SetValueAtIndex(i, (int)getAssetSliders [i].value);
            Debug.Log("GetAssetSliders[" + i + "] = " + getAssetSliders [i].value);
        }
        for (int i = 0; i < giveAssetSliders.Length; i++)
        {
            giveAsset.SetValueAtIndex(i, (int)giveAssetSliders [i].value);
            Debug.Log("GiveAssetSliders[" + i + "] = " + giveAssetSliders [i].value);
        }
        if (CatanManager.instance.players [PhotonNetwork.player.ID - 1].hasAvailableAssets(giveAsset))
        {
            Debug.Log("Calling OnTrade counter now");
            //trade call for player responding to trade
            EventTransferManager.instance.OnTradeWithBank(CatanManager.instance.currentPlayerTurn, true, getAsset);
            EventTransferManager.instance.OnTradeWithBank(CatanManager.instance.currentPlayerTurn, false, giveAsset);

            //trade call for sender
            EventTransferManager.instance.OnTradeWithBank(playerSelection, false, getAsset);
            EventTransferManager.instance.OnTradeWithBank(playerSelection, true, giveAsset);
            //cleanup operations
            EventTransferManager.instance.OnTradeEnd(playerSelection, true);
            EventTransferManager.instance.OnOperationFailure();
        }
    }
コード例 #4
0
ファイル: Player.cs プロジェクト: gazcn007/SeattlersOfCatan
    public AssetTuple getRandomSufficientAsset(int number)
    {
        AssetTuple randomAsset = new AssetTuple();

        if (Random.Range(0.0f, 1.0f) <= 0.5f)
        {
            int randomResourceIndex;
            do
            {
                randomResourceIndex = Random.Range(0, Enum.GetNames(typeof(ResourceType)).Length - 1);
                randomAsset         = GameAsset.getAssetOfIndex(randomResourceIndex, number);
            } while(!hasAvailableAssets(randomAsset));
        }
        else
        {
            int randomCommodityIndex;
            do
            {
                randomCommodityIndex = Random.Range(0, Enum.GetNames(typeof(CommodityType)).Length - 1) + 5;
                randomAsset          = GameAsset.getAssetOfIndex(randomCommodityIndex, number);
            } while(!hasAvailableAssets(randomAsset));
        }

        return(randomAsset);
    }
コード例 #5
0
    public void sendTradeCounter()
    {
        //user cannot do anything after trade is sent
        confirm.onClick.RemoveAllListeners();
        cancel.onClick.RemoveAllListeners();

        confirmtext.gameObject.SetActive(false);
        canceltext.gameObject.SetActive(false);

        //waiting for response visible
        waiting.gameObject.SetActive(true);

        //convert sliders to tuples
        AssetTuple getAsset = new AssetTuple();

        for (int i = 0; i < getAssetSliders.Length; i++)
        {
            getAsset.SetValueAtIndex(i, (int)getAssetSliders [i].value);
        }
        AssetTuple giveAsset = new AssetTuple();

        for (int i = 0; i < giveAssetSliders.Length; i++)
        {
            giveAsset.SetValueAtIndex(i, (int)giveAssetSliders [i].value);
        }

        //rpc for trade sending, redundant check for assets
        if (CatanManager.instance.players [PhotonNetwork.player.ID - 1].hasAvailableAssets(giveAsset))
        {
            waiting.text = "Waiting For Response...";
            EventTransferManager.instance.OnTradeOfferCounter(PhotonNetwork.player.ID - 1, CatanManager.instance.currentPlayerTurn, giveAsset, getAsset);
        }
    }
コード例 #6
0
ファイル: Player.cs プロジェクト: gazcn007/SeattlersOfCatan
    //public void addOwnedUnit(Unit unit) {
    //	ownedUnits [typeof(Unit)].Add (unit);
    //}

    #region Asset Receive/Give Methods

    public void receiveAssets(AssetTuple assetToAdd)
    {
        this.receiveResources(assetToAdd.resources);
        this.receiveCommodities(assetToAdd.commodities);
        this.receiveFishTokens(assetToAdd.fishTokens);
        this.assets.gold += assetToAdd.gold;
    }
コード例 #7
0
    public static AssetTuple getAsset(CommodityType commodityType, int number)
    {
        AssetTuple returnTuple = new AssetTuple();

        returnTuple.commodities.commodityTuple [commodityType] = number;

        return(returnTuple);
    }
コード例 #8
0
    public static AssetTuple getAsset(ResourceType resourceType, int number)
    {
        AssetTuple returnTuple = new AssetTuple();

        returnTuple.resources.resourceTuple [resourceType] = number;

        return(returnTuple);
    }
コード例 #9
0
 public void OpenRespondCounter(Player sender, AssetTuple give, AssetTuple recieve)
 {
     playerSelection = sender.playerNumber;
     //open response but rebind confirm button
     OpenRespond(sender, give, recieve);
     counter.gameObject.SetActive(false);
     confirm.onClick.RemoveAllListeners();
     confirm.onClick.AddListener(sendResponseCounter);
 }
コード例 #10
0
    public bool canTrade(Player player, int resourceToGiveForOne)
    {
        AssetTuple currentAssets = player.getCurrentAssets();
        bool       canTrade      = false;

        foreach (var pair in currentAssets.resources.resourceTuple)
        {
            if (pair.Value >= resourceToGiveForOne)
            {
                canTrade = true;
            }
        }
        return(canTrade);
    }
コード例 #11
0
    private void playIrrigation()
    {
        CatanManager clientCatanManager = GameObject.FindGameObjectWithTag("CatanManager").GetComponent <CatanManager> ();
        int          count     = clientCatanManager.boardManager.getAdjacentTilesOfType(PhotonNetwork.player.ID - 1, TileType.Fields).Count;
        AssetTuple   tempasset = new AssetTuple();

        tempasset.SetValueAtIndex(1, 2 * count);
        if (clientCatanManager.players [PhotonNetwork.player.ID - 1].canPlayIrrigation)
        {
            clientCatanManager.players [PhotonNetwork.player.ID - 1].canPlayIrrigation = false;
            EventTransferManager.instance.OnTradeWithBank(PhotonNetwork.player.ID - 1, true, tempasset);
        }
        returnCardToStack(ProgressCardColor.Green, ProgressCardType.Irrigation);
    }
コード例 #12
0
    public void sendResponse()
    {
        //fill 2 new tuples with values from slider for sending
        AssetTuple getAsset  = new AssetTuple();
        AssetTuple giveAsset = new AssetTuple();

        for (int i = 0; i < getAssetSliders.Length; i++)
        {
            getAsset.SetValueAtIndex(i, (int)getAssetSliders [i].value);
            Debug.Log("GetAssetSliders[" + i + "] = " + getAssetSliders [i].value);
        }
        for (int i = 0; i < giveAssetSliders.Length; i++)
        {
            giveAsset.SetValueAtIndex(i, (int)giveAssetSliders [i].value);
            Debug.Log("GiveAssetSliders[" + i + "] = " + giveAssetSliders [i].value);
        }
        if (CatanManager.instance.players [PhotonNetwork.player.ID - 1].hasAvailableAssets(giveAsset))
        {
            Debug.Log("Calling OnTrades now");

            //incase unity is moody again and tries reverse trades ??????

            /*if(PhotonNetwork.player.ID - 1==CatanManager.instance.currentPlayerTurn+1){
             *      //trade call for player responding to trade
             *      EventTransferManager.instance.OnTradeWithBank (PhotonNetwork.player.ID - 1, false, getAsset);
             *      EventTransferManager.instance.OnTradeWithBank (PhotonNetwork.player.ID - 1, true, giveAsset);
             *
             *      //trade call for sender
             *      EventTransferManager.instance.OnTradeWithBank (CatanManager.instance.currentPlayerTurn, true, getAsset);
             *      EventTransferManager.instance.OnTradeWithBank (CatanManager.instance.currentPlayerTurn, false, giveAsset);
             *
             *      //cleanup operations
             *      EventTransferManager.instance.OnTradeEnd (CatanManager.instance.currentPlayerTurn,true);
             *      EventTransferManager.instance.OnOperationFailure ();
             * }else{*/
            //trade call for player responding to trade
            EventTransferManager.instance.OnTradeWithBank(PhotonNetwork.player.ID - 1, true, getAsset);
            EventTransferManager.instance.OnTradeWithBank(PhotonNetwork.player.ID - 1, false, giveAsset);

            //trade call for sender
            EventTransferManager.instance.OnTradeWithBank(CatanManager.instance.currentPlayerTurn, false, getAsset);
            EventTransferManager.instance.OnTradeWithBank(CatanManager.instance.currentPlayerTurn, true, giveAsset);

            //cleanup operations
            EventTransferManager.instance.OnTradeEnd(CatanManager.instance.currentPlayerTurn, true);
            EventTransferManager.instance.OnOperationFailure();
            //	}
        }
    }
コード例 #13
0
    public static AssetTuple getRandomAsset(int number)
    {
        AssetTuple randomAsset = new AssetTuple(0, 0, 0, 0, 0, 0, 0, 0);

        if (Random.Range(0.0f, 1.0f) <= 0.5f)
        {
            randomAsset.resources.resourceTuple [(ResourceType)Random.Range(0, Enum.GetNames(typeof(ResourceType)).Length)] = number;
        }
        else
        {
            randomAsset.commodities.commodityTuple [(CommodityType)Random.Range(0, Enum.GetNames(typeof(CommodityType)).Length)] = number;
        }

        return(randomAsset);
    }
コード例 #14
0
    private void playMining()
    {
        int          count = 0;
        CatanManager clientCatanManager = GameObject.FindGameObjectWithTag("CatanManager").GetComponent <CatanManager> ();

        count = clientCatanManager.boardManager.getAdjacentTilesOfType(PhotonNetwork.player.ID - 1, TileType.Mountains).Count;
        AssetTuple tempasset = new AssetTuple();

        Debug.Log("Adjacent tiles: " + count);
        tempasset.SetValueAtIndex(3, 2 * count);
        if (clientCatanManager.players [PhotonNetwork.player.ID - 1].canPlayMining)
        {
            clientCatanManager.players [PhotonNetwork.player.ID - 1].canPlayMining = false;
            EventTransferManager.instance.OnTradeWithBank(PhotonNetwork.player.ID - 1, true, tempasset);
        }
        returnCardToStack(ProgressCardColor.Green, ProgressCardType.Mining);
    }
コード例 #15
0
    public void submitSelection()
    {
        if (leftDiscards == 0)
        {
            selectionMade = true;

            AssetTuple assetsToDiscard = new AssetTuple(0, 0, 0, 0, 0, 0, 0, 0);
            for (int i = 0; i < assetSliders.Length; i++)
            {
                assetsToDiscard.SetValueAtIndex(i, (int)assetSliders [i].value);
            }

            discardTuple = assetsToDiscard;
        }
        else
        {
            Debug.Log("Need to select the correct amount!");
        }
    }
コード例 #16
0
    /*public void tradeGoldDone(){
     *      Debug.Log ("trade ini");
     *      Debug.Log ("gold cnt: " + CatanManager.instance.players [CatanManager.instance.currentPlayerTurn].getGoldCoinsCnt ());
     *      AssetTuple assetsToReceive = GameAsset.getAssetOfIndex (tradePanel.getGoldChoiceInt(), 1);
     *      if (CatanManager.instance.players [CatanManager.instance.currentPlayerTurn].getGoldCoinsCnt() >= 2) {
     *              EventTransferManager.instance.GoldTrade (PhotonNetwork.player.ID - 1);
     *              EventTransferManager.instance.OnTradeWithBank(CatanManager.instance.currentPlayerTurn, true, assetsToReceive);
     *              tradePanel.hideErrorText ();
     *              tradePanel.gameObject.SetActive (false);
     *              EventTransferManager.instance.OnOperationFailure ();
     *      }
     * }*/
    public void tradeDone()
    {
        int tradeRatio = CatanManager.instance.players [CatanManager.instance.currentPlayerTurn].getMinimumTradeValue(tradePanel.getTradeChoiceInt());

        if (tradePanel.getTradeChoiceInt() >= 5 && CatanManager.instance.players [CatanManager.instance.currentPlayerTurn].unlockedTradingHouse())
        {
            tradeRatio = 2;
        }
        if (CatanManager.instance.players [PhotonNetwork.player.ID - 1].playedMerchantFleet && tradePanel.getTradeChoiceInt() == CatanManager.instance.players [PhotonNetwork.player.ID - 1].merchantFleetSelection)
        {
            tradeRatio = 2;
        }
        if (CatanManager.instance.merchantController == PhotonNetwork.player.ID - 1)
        {
            ResourceType typeOfResource = GameAsset.getResourceOfHex(GameObject.FindGameObjectWithTag("Merchant").GetComponent <Merchant> ().occupyingTile.tileType);
            if ((int)typeOfResource == tradePanel.getTradeChoiceInt())
            {
                tradeRatio = 2;
            }
        }
        AssetTuple assetsToSpend   = GameAsset.getAssetOfIndex(tradePanel.getTradeChoiceInt(), tradeRatio);
        AssetTuple assetsToReceive = GameAsset.getAssetOfIndex(tradePanel.getReceiveChoiceInt(), 1);

        if (CatanManager.instance.players [CatanManager.instance.currentPlayerTurn].hasAvailableAssets(assetsToSpend))
        {
            //CatanManager.instance.players [CatanManager.instance.currentPlayerTurn].spendAssets (assetsToSpend);
            //CatanManager.instance.players [CatanManager.instance.currentPlayerTurn].receiveAssets (assetsToReceive);
            EventTransferManager.instance.OnTradeWithBank(CatanManager.instance.currentPlayerTurn, false, assetsToSpend);
            EventTransferManager.instance.OnTradeWithBank(CatanManager.instance.currentPlayerTurn, true, assetsToReceive);

            //print (players [currentPlayerTurn].playerName + " gives 4 " + tradePanel.getTradeChoiceInt ().ToString () + " to the bank and receives 1 " + assetsToReceive.ToString());
            tradePanel.hideErrorText();
            tradePanel.gameObject.SetActive(false);

            EventTransferManager.instance.OnOperationFailure();
        }
        else
        {
            print("Insufficient resources! Please try again...");
            tradePanel.showNotEnoughError(tradePanel.getTradeChoiceInt());
        }
    }
コード例 #17
0
    /*void tradeDone() {
     *      bool successful = false;
     *      //int choice = tradePanel.getTradeChoiceInt ();
     *      ResourceTuple resourcesToGiveToBank = new ResourceTuple ();
     *      CommodityTuple commoditiesToGiveToBank = new CommodityTuple ();
     *
     *      Tuple<ResourceType, CommodityType> spending = GameAsset.getProductionAssetsOfIndex (tradePanel.getTradeChoiceInt ());
     *      Tuple<ResourceType, CommodityType> receiving = GameAsset.getProductionAssetsOfIndex (tradePanel.getReceiveChoiceInt ());
     *
     *      if (tradePanel.getTradeChoiceInt() < 5) {
     *              resourcesToGiveToBank.addResourceWithType (spending.first, 4);
     *      } else {
     *              commoditiesToGiveToBank.addCommodityWithType(spending.second, 4);
     *      }
     *
     *      if (players [currentPlayerTurn].hasAvailableResources (resourcesToGiveToBank) && players [currentPlayerTurn].hasAvailableCommodities (commoditiesToGiveToBank)) {
     *              players [currentPlayerTurn].spendResources (resourcesToGiveToBank);
     *              players [currentPlayerTurn].spendCommodities (commoditiesToGiveToBank);
     *
     *              ResourceTuple resourceToReceive = new ResourceTuple ();
     *              CommodityTuple commodityToReceive = new CommodityTuple ();
     *
     *              if (tradePanel.getReceiveChoiceInt () < 5) {
     *                      resourceToReceive.addResourceWithType (receiving.first, 1);
     *              } else {
     *                      commodityToReceive.addCommodityWithType (receiving.second, 1);
     *              }
     *
     *              players [currentPlayerTurn].receiveResources (resourceToReceive);
     *              players [currentPlayerTurn].receiveCommodities (commodityToReceive);
     *
     *              //print (players [currentPlayerTurn].playerName + " gives 4 " + tradePanel.getTradeChoice ().ToString () + " to the bank and receives 1 " + tradePanel.getReceiveChoice ());
     *              print (players [currentPlayerTurn].playerName + " gives 4 " + spending.ToString () + " to the bank and receives 1 " + receiving.ToString());
     *
     *              currentActiveButton = -1;
     *              tradePanel.hideErrorText ();
     *              tradePanel.gameObject.SetActive (false);
     *              waitingForPlayer = false;
     *      } else {
     *              print ("Insufficient resources! Please try again...");
     *              tradePanel.showNotEnoughError (tradePanel.getTradeChoiceInt ());
     *      }
     * }*/

    void tradeDone()
    {
        AssetTuple assetsToSpend   = GameAsset.getAssetOfIndex(tradePanel.getTradeChoiceInt(), 4);
        AssetTuple assetsToReceive = GameAsset.getAssetOfIndex(tradePanel.getReceiveChoiceInt(), 1);

        if (players [currentPlayerTurn].hasAvailableAssets(assetsToSpend))
        {
            players [currentPlayerTurn].spendAssets(assetsToSpend);
            players [currentPlayerTurn].receiveAssets(assetsToReceive);
            //print (players [currentPlayerTurn].playerName + " gives 4 " + tradePanel.getTradeChoiceInt ().ToString () + " to the bank and receives 1 " + assetsToReceive.ToString());

            currentActiveButton = -1;
            tradePanel.hideErrorText();
            tradePanel.gameObject.SetActive(false);
            waitingForPlayer = false;
        }
        else
        {
            print("Insufficient resources! Please try again...");
            tradePanel.showNotEnoughError(tradePanel.getTradeChoiceInt());
        }
    }
コード例 #18
0
    public void OpenPanel(AssetTuple playerAssets)
    {
        for (int i = 0; i < FishTokens.Length; i++)
        {
            FishTokens [i].maxValue = playerAssets.GetValueAtIndex(i + 8);
            FishTokens [i].minValue = FishTokens [i].value = 0;
        }

        //set texts to 0
        for (int i = 0; i < TokensText.Length; i++)
        {
            TokensText [i].text = "0";
        }
        tokensValue = 0;
        //all rewards disabled
        for (int i = 0; i < optionsPanel.Count; i++)
        {
            optionsPanel [i].GetComponent <FishTradePanelButton> ().instance = this;
            optionsPanel [i].gameObject.SetActive(false);
        }
        selectionGlow.gameObject.SetActive(false);
        this.gameObject.SetActive(true);
    }
コード例 #19
0
    public void upgradeScience()
    {
        CityImprovementType science = CityImprovementType.Science;

        if (CatanManager.instance.currentPlayerTurn == PhotonNetwork.player.ID - 1 && CatanManager.instance.players [CatanManager.instance.currentPlayerTurn].canUpgrade(science))
        {
            AssetTuple upgradeCost = CatanManager.instance.players [CatanManager.instance.currentPlayerTurn].cityImprovements.nextImprovementCost(science);
            if (CatanManager.instance.players [CatanManager.instance.currentPlayerTurn].playedCrane)
            {
                upgradeCost.SetValueAtIndex(5, upgradeCost.GetValueAtIndex(5) - 1);
                CatanManager.instance.players [CatanManager.instance.currentPlayerTurn].playedCrane = false;
            }

            EventTransferManager.instance.OnTradeWithBank(CatanManager.instance.currentPlayerTurn, false, upgradeCost);
            EventTransferManager.instance.OnUpgradeCity(CatanManager.instance.currentPlayerTurn, (int)science);

            int scienceLevel  = CatanManager.instance.players [CatanManager.instance.currentPlayerTurn].cityImprovements.cityImprovements [CityImprovementType.Science];
            int politicsLevel = CatanManager.instance.players [CatanManager.instance.currentPlayerTurn].cityImprovements.cityImprovements [CityImprovementType.Politics];
            int tradeLevel    = CatanManager.instance.players [CatanManager.instance.currentPlayerTurn].cityImprovements.cityImprovements [CityImprovementType.Trade];

            openPanel(tradeLevel, politicsLevel, scienceLevel);
        }
    }
コード例 #20
0
    private IEnumerator playMedicine()
    {
        CatanManager clientCatanManager = GameObject.FindGameObjectWithTag("CatanManager").GetComponent <CatanManager> ();
        AssetTuple   tempasset          = new AssetTuple();

        //set the cost tuple = 2 ore and 1 grain
        tempasset.SetValueAtIndex(1, 1);
        tempasset.SetValueAtIndex(3, 2);
        //check if player has the assets required
        if (clientCatanManager.players [PhotonNetwork.player.ID - 1].hasAvailableAssets(tempasset) && clientCatanManager.players [PhotonNetwork.player.ID - 1].getOwnedUnitsOfType(UnitType.Settlement).Count > 0)
        {
            tempasset.SetValueAtIndex(1, 1);
            tempasset.SetValueAtIndex(3, 1);
            yield return(StartCoroutine(EventTransferManager.instance.ClientUpgradeSettlement(PhotonNetwork.player.ID - 1)));

            EventTransferManager.instance.OnTradeWithBank(PhotonNetwork.player.ID - 1, true, tempasset);
            returnCardToStack(ProgressCardColor.Green, ProgressCardType.Medicine);
        }
        else
        {
            clientCatanManager.uiManager.notificationpanel.gameObject.SetActive(true);
            clientCatanManager.uiManager.notificationtext.text = "Insufficient resources to play this card or no settlements to upgrade";
        }
    }
コード例 #21
0
    public void OpenPanel(List <Player> opponents, AssetTuple playerAssets)
    {
        this.gameObject.SetActive(true);

        //setting texts
        confirmtext.text = "Send Offer";
        canceltext.text  = "Cancel";
        playertext.text  = "Player Selection";
        waiting.text     = "Waiting For Response...";

        //texts start out disabled
        confirmtext.gameObject.SetActive(false);
        canceltext.gameObject.SetActive(false);
        waiting.gameObject.SetActive(false);

        //confirm map to sending
        confirm.onClick.AddListener(sendTrade);

        //counter not possible
        counter.gameObject.SetActive(false);

        //cancel button mapped to close panel
        cancel.onClick.AddListener(Cancel);
        //there is no selection to start with
        selectionGlow.gameObject.SetActive(false);


        for (int i = 0; i < 3; i++)
        {
            if ((i + 1) > opponents.Count)
            {
                optionsPanel [i].gameObject.SetActive(false);
            }
            else
            {
                optionsPanel [i].gameObject.SetActive(true);
                optionsPanel [i].enabled     = true;
                optionsPanel [i].image.color = opponents [i].playerColor;

                TradePlayerPanelButton current = optionsPanel [i].GetComponentInChildren <TradePlayerPanelButton>();

                //set values for the buttons
                current.instance      = this;
                current.playernumber  = opponents [i].playerNumber - 1;
                current.avatar.sprite = opponents [i].avatar;
            }
        }
        //set texts to 0
        for (int i = 0; i < 8; i++)
        {
            giveAssetNumTexts [i].text = "0";
            getAssetNumTexts [i].text  = "0";
        }

        for (int i = 0; i < giveAssetSliders.Length; i++)
        {
            //make sure all sliders are enabled
            giveAssetSliders [i].enabled = true;
            getAssetSliders [i].enabled  = true;

            //give should be set to the max value of what player has, get set to 10
            giveAssetSliders [i].maxValue = 10;
            giveAssetSliders [i].minValue = giveAssetSliders [i].value = 0;

            getAssetSliders [i].maxValue = 10;
            getAssetSliders [i].minValue = giveAssetSliders [i].value = 0;
        }
        //the tuple for player assets
        currentTuple = playerAssets;


        //default selection
        playerSelection = opponents [0].playerNumber - 1;
        //put glow on the selection;
        selectionMade = true;
        ahack         = optionsPanel[0].GetComponentInChildren <TradePlayerPanelButton>();
        //selection not made make this panel active
        this.gameObject.SetActive(true);
    }
コード例 #22
0
    IEnumerator moveRobberForCurrentPlayer()
    {
        waitingForPlayer = true;

        yield return(StartCoroutine(players [currentPlayerTurn].makeGameTileSelection(boardGenerator.landTiles)));

        gameBoard.MoveRobber(players [currentPlayerTurn].lastGameTileSelection.id);

        List <IntersectionUnit> opponentUnits = new List <IntersectionUnit> ();

        foreach (Intersection intersection in players[currentPlayerTurn].lastGameTileSelection.getIntersections())
        {
            if (intersection.occupier != null && intersection.occupier.owner != players [currentPlayerTurn])
            {
                opponentUnits.Add(intersection.occupier);
            }
        }

        List <Player> stealableOpponents = new List <Player> ();

        foreach (IntersectionUnit opponentUnit in opponentUnits)
        {
            if (!stealableOpponents.Contains(opponentUnit.owner) && !opponentUnit.owner.hasZeroAssets())
            {
                stealableOpponents.Add(opponentUnit.owner);
            }
        }

        if (stealableOpponents.Count == 1)
        {
            // If you steal 2 things if you have a city, then the argument here would be 2 etc.
            AssetTuple randomStolenAsset = stealableOpponents [0].getRandomSufficientAsset(1);
            stealableOpponents [0].spendAssets(randomStolenAsset);
            players [currentPlayerTurn].receiveAssets(randomStolenAsset);
        }
        else if (stealableOpponents.Count > 1)
        {
            robberStealPanel.displayPanelForChoices(stealableOpponents);
            bool selectionMade = false;

            while (!selectionMade)
            {
                if (!robberStealPanel.selectionMade)
                {
                    yield return(StartCoroutine(robberStealPanel.waitUntilButtonDown()));
                }

                if (robberStealPanel.selectionMade)
                {
                    selectionMade = true;
                }
            }

            AssetTuple randomStolenAsset = stealableOpponents [robberStealPanel.getSelection()].getRandomSufficientAsset(1);
            stealableOpponents [robberStealPanel.getSelection()].spendAssets(randomStolenAsset);
            players [currentPlayerTurn].receiveAssets(randomStolenAsset);

            robberStealPanel.gameObject.SetActive(false);
        }
        // STEAL CARDS FROM OTHERS (RANDOM?)
        // Something along the lines of forall intersections at selected tile, if occupied && occupier.owner != plyaer[currentturn]
        // then steal 1 random resource (generate random num from 0 to resourceTypes.range - 1 (excluding null)
        // while victimPlayer.resourcetuple[randomNum] == 0 then subtract 1 and add 1 to the player

        waitingForPlayer = false;
    }
コード例 #23
0
 private static int TimeComparer(AssetTuple x, AssetTuple y)
 {
     return(x.timesAccess - y.timesAccess);
 }
コード例 #24
0
ファイル: Player.cs プロジェクト: gazcn007/SeattlersOfCatan
 public bool hasAvailableAssets(AssetTuple assetsNeeded)
 {
     return(hasAvailableResources(assetsNeeded.resources) && hasAvailableCommodities(assetsNeeded.commodities) &&
            hasAvailableFishTokens(assetsNeeded.fishTokens) && assets.gold >= assetsNeeded.gold);
 }
コード例 #25
0
    private IEnumerator playMasterMerchant()
    {
        CatanManager clientCatanManager = GameObject.FindGameObjectWithTag("CatanManager").GetComponent <CatanManager> ();
        //first get possible players
        List <Player> possibleplayer = new List <Player>();

        for (int i = 0; i < PhotonNetwork.playerList.Length; i++)
        {
            if (PhotonNetwork.player.ID - 1 != i && clientCatanManager.players [i].getVpPoints() >= clientCatanManager.players [PhotonNetwork.player.ID].getVpPoints())
            {
                possibleplayer.Add(clientCatanManager.players [i]);
            }
        }
        //make user select 1 of the players
        clientCatanManager.uiManager.robberStealPanel.displayPanelForChoices(possibleplayer);
        bool selectionMade = false;

        //get the selection
        while (!selectionMade)
        {
            if (!CatanManager.instance.uiManager.robberStealPanel.selectionMade)
            {
                yield return(StartCoroutine(CatanManager.instance.uiManager.robberStealPanel.waitUntilButtonDown()));
            }
            if (CatanManager.instance.uiManager.robberStealPanel.selectionMade)
            {
                selectionMade = true;
            }
        }
        //get player selection
        int selection = clientCatanManager.uiManager.robberStealPanel.selection;

        Debug.Log("selection: " + selection);
        //take off robber steal panel
        clientCatanManager.uiManager.robberStealPanel.selectionMade = false;
        clientCatanManager.uiManager.robberStealPanel.gameObject.SetActive(false);
        //now show resource selection
        clientCatanManager.uiManager.discardPanel.title.text = "Select 2 resources to take";
        clientCatanManager.uiManager.discardPanel.displayPanelMasterMerchant(clientCatanManager.players [selection].assets, 2);

        selectionMade = false;

        while (!selectionMade)
        {
            if (!CatanManager.instance.uiManager.discardPanel.selectionMade)
            {
                yield return(StartCoroutine(CatanManager.instance.uiManager.discardPanel.waitUntilButtonDown()));
            }
            if (CatanManager.instance.uiManager.discardPanel.selectionMade)
            {
                selectionMade = true;
            }
        }
        AssetTuple temptuple = clientCatanManager.uiManager.discardPanel.discardTuple;

        clientCatanManager.uiManager.discardPanel.selectionMade = false;
        clientCatanManager.uiManager.discardPanel.gameObject.SetActive(false);
        clientCatanManager.uiManager.discardPanel.title.text = "Discard:";

        EventTransferManager.instance.OnTradeWithBank(selection, false, temptuple);
        EventTransferManager.instance.OnTradeWithBank(PhotonNetwork.player.ID - 1, true, temptuple);
        //build notification message
        string message = clientCatanManager.players [PhotonNetwork.player.ID - 1].playerName + " has played the Master Merchant card.and forced you to give: ";

        for (int i = 0; i < 8; i++)
        {
            if (temptuple.GetValueAtIndex(i) > 0)
            {
                if (i < 5)
                {
                    message = message + temptuple.GetValueAtIndex(i) + " " + ((ResourceType)i).ToString() + " and ";
                }
                else
                {
                    message = message + temptuple.GetValueAtIndex(i) + " " + ((CommodityType)(i - 5)).ToString() + " and ";
                }
            }
        }
        message = message.Substring(0, message.Length - 4);
        EventTransferManager.instance.sendNotification(message, selection);
        returnCardToStack(ProgressCardColor.Yellow, ProgressCardType.MasterMerchant);
    }
コード例 #26
0
    public void OpenRespond(Player sender, AssetTuple give, AssetTuple recieve)
    {
        this.gameObject.SetActive(true);
        selectionGlow.gameObject.SetActive(false);

        //setting texts
        confirmtext.text = "Accept Offer";
        canceltext.text  = "Reject Offer";
        playertext.text  = "Offer From";
        waiting.text     = "Waiting For Response...";

        confirm.onClick.RemoveAllListeners();
        cancel.onClick.RemoveAllListeners();

        //texts start out disabled
        confirmtext.gameObject.SetActive(false);
        canceltext.gameObject.SetActive(false);
        waiting.gameObject.SetActive(false);

        //confirm is now accept trade
        confirm.onClick.AddListener(sendResponse);

        //activate counter button and add listener
        counter.onClick.AddListener(Counter);
        counter.gameObject.SetActive(true);

        //change cancel to reject
        cancel.onClick.AddListener(Reject);

        selectionGlow.gameObject.SetActive(false);

        //fill assets in reverse and disable changing them
        for (int i = 0; i < giveAssetSliders.Length; i++)
        {
            giveAssetSliders [i].maxValue = 10;
            getAssetSliders [i].maxValue  = 10;
            giveAssetSliders [i].value    = recieve.GetValueAtIndex(i);
            getAssetSliders [i].value     = give.GetValueAtIndex(i);
            giveAssetSliders [i].enabled  = false;
            getAssetSliders [i].enabled   = false;
        }

        //only 1 player display is needed
        optionsPanel [0].gameObject.SetActive(true);
        optionsPanel [1].gameObject.SetActive(false);
        optionsPanel [2].gameObject.SetActive(false);

        //1st player panel is enabled but changing it is not possible
        optionsPanel [0].enabled = false;

        //set the color and avatar of the panel
        optionsPanel [0].image.color = sender.playerColor;
        TradePlayerPanelButton current = optionsPanel [0].GetComponentInChildren <TradePlayerPanelButton>();

        //set values for the buttons
        current.instance = this;
        //no offset this is correct
        current.playernumber  = sender.playerNumber - 1;
        current.avatar.sprite = sender.avatar;
        selectionMade         = true;
        ahack = current;
        //set button glow
        current.UpdateSelection();
        this.gameObject.SetActive(false);
        this.gameObject.SetActive(true);
    }
コード例 #27
0
    IEnumerator spendFishTokenResults()
    {
        int        numTokensNeeded = 0;
        bool       success         = false;
        AssetTuple assetsToRemove  = new AssetTuple();

        switch (rewardSelection)
        {
        case 0:
            //move robber
            numTokensNeeded = 2;

            Robber robber = GameObject.FindObjectOfType <Robber> ();
            Pirate pirate = GameObject.FindObjectOfType <Pirate> ();
            if (robber != null && pirate != null)
            {
                CatanManager.instance.uiManager.robberPiratePanel.gameObject.SetActive(true);
                bool selected = false;

                while (!selected)
                {
                    if (!CatanManager.instance.uiManager.robberPiratePanel.selectionMade)
                    {
                        yield return(StartCoroutine(CatanManager.instance.uiManager.robberPiratePanel.waitUntilButtonDown()));
                    }

                    if (CatanManager.instance.uiManager.robberPiratePanel.selectionMade)
                    {
                        selected = true;
                    }
                }

                CatanManager.instance.uiManager.robberPiratePanel.gameObject.SetActive(false);
                CatanManager.instance.uiManager.robberPiratePanel.selectionMade = false;

                StartCoroutine(CatanManager.instance.moveGamePieceForCurrentPlayer(CatanManager.instance.uiManager.robberPiratePanel.selection, true, false));
            }
            else if (robber != null)
            {
                StartCoroutine(CatanManager.instance.moveGamePieceForCurrentPlayer(0, true, false));
            }
            else if (pirate != null)
            {
                StartCoroutine(CatanManager.instance.moveGamePieceForCurrentPlayer(1, true, false));
            }
            for (int i = 0; i < FishTokens.Length; i++)
            {
                Debug.Log("Set index " + (i + 8) + " of assetToRemove to = " + (int)FishTokens [i].value);
                assetsToRemove.SetValueAtIndex(i + 8, (int)FishTokens [i].value);
            }
            success = true;
            break;

        case 1:
            //steal random resource
            numTokensNeeded = 3;

            List <Player> stealableOpponents = new List <Player> ();
            for (int i = 0; i < PhotonNetwork.playerList.Length; i++)
            {
                stealableOpponents.Add(CatanManager.instance.players[i]);
            }
            stealableOpponents.Remove(CatanManager.instance.players [CatanManager.instance.currentPlayerTurn]);

            if (stealableOpponents.Count != 0)
            {
                yield return(StartCoroutine(CatanManager.instance.stealRandomResource(stealableOpponents)));

                this.gameObject.SetActive(false);

                for (int i = 0; i < FishTokens.Length; i++)
                {
                    Debug.Log("Set index " + (i + 8) + " of assetToRemove to = " + (int)FishTokens [i].value);
                    assetsToRemove.SetValueAtIndex(i + 8, (int)FishTokens [i].value);
                }
                success = true;
            }
            break;

        case 2:
            //take resource of choice
            numTokensNeeded = 4;

            CatanManager.instance.uiManager.fishResourceSelection();
            bool selectionMade = false;
            this.transform.localScale = Vector3.zero;
            CatanManager.instance.uiManager.fishresourcepanel.gameObject.SetActive(true);

            while (!selectionMade)
            {
                if (!CatanManager.instance.uiManager.fishresourcepanel.selectionMade)
                {
                    yield return(StartCoroutine(CatanManager.instance.uiManager.fishresourcepanel.waitUntilButtonDown()));
                }
                if (CatanManager.instance.uiManager.fishresourcepanel.selectionMade)
                {
                    selectionMade = true;
                }
            }

            CatanManager.instance.uiManager.fishresourcepanel.gameObject.SetActive(false);
            CatanManager.instance.uiManager.fishresourcepanel.selectionMade = false;
            this.transform.localScale = scale;
            this.gameObject.SetActive(false);

            AssetTuple assetsToGain = GameAsset.getAssetOfIndex(CatanManager.instance.uiManager.fishresourcepanel.getSelection(), 1);
            EventTransferManager.instance.OnTradeWithBank(CatanManager.instance.currentPlayerTurn, true, assetsToGain);

            for (int i = 0; i < FishTokens.Length; i++)
            {
                Debug.Log("Set index " + (i + 8) + " of assetToRemove to = " + (int)FishTokens [i].value);
                assetsToRemove.SetValueAtIndex(i + 8, (int)FishTokens [i].value);
            }
            success = true;
            break;

        case 3:
            //build road
            numTokensNeeded = 5;

            int numRoadsInitial = CatanManager.instance.players [CatanManager.instance.currentPlayerTurn].getOwnedUnitsOfType(UnitType.Road).Count;
            this.transform.localScale = Vector3.zero;

            yield return(StartCoroutine(CatanManager.instance.unitManager.buildRoad(false)));

            int numRoadsFinal = CatanManager.instance.players [CatanManager.instance.currentPlayerTurn].getOwnedUnitsOfType(UnitType.Road).Count;

            this.transform.localScale = scale;
            this.gameObject.SetActive(false);

            if (numRoadsInitial + 1 != numRoadsFinal)
            {
                this.gameObject.SetActive(true);
            }
            else
            {
                for (int i = 0; i < FishTokens.Length; i++)
                {
                    Debug.Log("Set index " + (i + 8) + " of assetToRemove to = " + (int)FishTokens [i].value);
                    assetsToRemove.SetValueAtIndex(i + 8, (int)FishTokens [i].value);
                }
                success = true;
            }
            break;

        case 4:
            numTokensNeeded = 7;
            CatanManager.instance.uiManager.cardSelectPanel.gameObject.SetActive(true);
            for (int i = 0; i < FishTokens.Length; i++)
            {
                Debug.Log("Set index " + (i + 8) + " of assetToRemove to = " + (int)FishTokens [i].value);
                assetsToRemove.SetValueAtIndex(i + 8, (int)FishTokens [i].value);
            }
            success = true;
            break;
        }

        if (assetsToRemove.fishTokens.numTotalTokens() == 0)
        {
            success = false;
        }

        if (success)
        {
            int numTokens    = assetsToRemove.fishTokens.numTotalTokens();
            int indexRemoved = 0;

            while (numTokens >= numTokensNeeded)
            {
                int nextLargestIndex = assetsToRemove.fishTokens.nextAvailableLargestIndex();

                if (assetsToRemove.fishTokens.fishTuple.ContainsKey((FishTokenType)nextLargestIndex))
                {
                    assetsToRemove.fishTokens.fishTuple [(FishTokenType)nextLargestIndex]--;
                    indexRemoved = nextLargestIndex;
                }
                else
                {
                    break;
                }

                numTokens = assetsToRemove.fishTokens.numTotalTokens();
            }

            assetsToRemove.fishTokens.fishTuple [(FishTokenType)indexRemoved]++;

            //CatanManager.instance.players [CatanManager.instance.currentPlayerTurn].spendAssets (assetsToRemove);
            EventTransferManager.instance.OnTradeWithBank(CatanManager.instance.currentPlayerTurn, false, assetsToRemove);
            rewardSelection = -1;
            selectionGlow.gameObject.SetActive(false);
            this.gameObject.SetActive(false);
            StopAllCoroutines();
            EventTransferManager.instance.OnOperationFailure();
        }
    }