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); }
public void spendAssets(AssetTuple assetToSpend) { this.spendResources(assetToSpend.resources); this.spendCommodities(assetToSpend.commodities); this.spendFishTokens(assetToSpend.fishTokens); this.assets.gold -= assetToSpend.gold; }
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(); } }
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); }
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); } }
//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; }
public static AssetTuple getAsset(CommodityType commodityType, int number) { AssetTuple returnTuple = new AssetTuple(); returnTuple.commodities.commodityTuple [commodityType] = number; return(returnTuple); }
public static AssetTuple getAsset(ResourceType resourceType, int number) { AssetTuple returnTuple = new AssetTuple(); returnTuple.resources.resourceTuple [resourceType] = number; return(returnTuple); }
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); }
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); }
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); }
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(); // } } }
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); }
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); }
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!"); } }
/*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()); } }
/*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()); } }
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); }
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); } }
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"; } }
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); }
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; }
private static int TimeComparer(AssetTuple x, AssetTuple y) { return(x.timesAccess - y.timesAccess); }
public bool hasAvailableAssets(AssetTuple assetsNeeded) { return(hasAvailableResources(assetsNeeded.resources) && hasAvailableCommodities(assetsNeeded.commodities) && hasAvailableFishTokens(assetsNeeded.fishTokens) && assets.gold >= assetsNeeded.gold); }
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); }
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); }
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(); } }