// Upgrade a development chart in the specified field public bool upgradeDevChart(Enums.DevChartType dev, int[] commodities, List <GamePiece> pieces, int[] devChart, bool server) { // Check if the knight can be upgraded if (!ma.canUpgradeDevChart(dev, commodities, pieces, devChart)) { return(false); } Player current = GameManager.instance.getCurrentPlayer(); Enums.CommodityType com = (CommodityType)((int)dev); int level = devChart[(int)dev]; int newLevel = level + 1; // Spend the correct resources current.changeCommodity(com, -level); Bank.instance.depositCommodity(com, level, current.isServer); current.upgradeDevChart(dev); if (newLevel == 3) { if (dev == Enums.DevChartType.TRADE) { for (int i = 0; i < 3; i++) { current.updateCommodityRatio(com, 2); } } else if (dev == Enums.DevChartType.SCIENCE) { current.makeAqueduct(); } } // Metropolis return(true); }
// return true upon success, false upon failure // give the given player a metropolis on the chosen city // remove it from another player if another player controlled it public bool giveMetropolis(int player, Enums.DevChartType met, Vertex city) { GamePiece p = city.getOccupyingPiece(); if (Object.ReferenceEquals(p, null)) { return(false); } else if (p.getPieceType() != Enums.PieceType.CITY) { return(false); } Vertex current = metropolises[met]; if (!Object.ReferenceEquals(current, null)) { GamePiece opponent = current.getOccupyingPiece(); if (Object.ReferenceEquals(opponent, null)) { return(false); } else if (opponent.getPieceType() != Enums.PieceType.CITY) { return(false); } else { ((City)opponent).removeMetropolis(); Enums.Color opColor = opponent.getColor(); Player op = getPlayer(opColor); op.changeVictoryPoints(-2); } } ((City)p).makeMetropolis(); getPlayer(player).changeVictoryPoints(2); return(true); }
// Check if the development chart can be upgraded for a specific development type public bool canUpgradeDevChart(Enums.DevChartType dev, int[] commodities, List <GamePiece> pieces, int[] devChart) { // Make sure there is a city on the board bool cityOnBoard = false; foreach (GamePiece p in pieces) { if (p.getPieceType() != Enums.PieceType.CITY) { continue; } else { if (p.isOnBoard()) { cityOnBoard = true; break; } } } if (!cityOnBoard) { return(false); } // Make sure there are enough resources for the upgrade // Or that the chart is not at maximum capacity int level, coms; if (dev == Enums.DevChartType.TRADE) { level = devChart[(int)Enums.DevChartType.TRADE]; coms = commodities[(int)Enums.CommodityType.CLOTH]; if (coms < level) { return(false); } else if (level >= 5) { return(false); } } else if (dev == Enums.DevChartType.POLITICS) { level = devChart[(int)Enums.DevChartType.POLITICS]; coms = commodities[(int)Enums.CommodityType.COIN]; if (coms < level) { return(false); } else if (level >= 5) { return(false); } } else if (dev == Enums.DevChartType.SCIENCE) { level = devChart[(int)Enums.DevChartType.SCIENCE]; coms = commodities[(int)Enums.CommodityType.PAPER]; if (coms < level) { return(false); } else if (level >= 5) { return(false); } } return(true); }
public void RpcUpgradeDevChart(Enums.DevChartType devChartType) { int devPosition = (int)devChartType; this.devFlipChart[devPosition]++; }
public void CmdUpgradeDevChart(Enums.DevChartType devChartType) { RpcUpgradeDevChart(devChartType); }
public void upgradeDevChart(Enums.DevChartType devChartType) { CmdUpgradeDevChart(devChartType); }