@@ -24,6 +24,7 @@ GameController::GameController(GameBoard& model, GameView& view) : model(model),
2424 view.addElement (makeViewButtonText (std::bind (&GameController::handleRoadButtonEvent, this , _1), {{0 , 0 }, {0.1 , 0.10 }}, font, fontSize, " Road |" ));
2525 view.addElement (makeViewButtonText (std::bind (&GameController::handleCityButtonEvent, this , _1), {{0.10 , 0.0 }, {0.20 , 0.1 }}, font, fontSize, " City |" ));
2626 view.addElement (makeViewButtonText (std::bind (&GameController::handleSettlementButtonEvent, this , _1), {{0.20 , 0.0 }, {0.33 , 0.1 }}, font, fontSize, " Settlement" ));
27+ view.addElement (makeViewButtonText (std::bind (&GameController::handleWonderButtonEvent, this , _1), {{0.55 , 0.0 }, {0.65 , 0.1 }}, font, fontSize, " |Wonder" ));
2728 view.addElement (makeViewButtonText (std::bind (&GameController::nextTurn, this , _1), {{0 , 0.3 }, {0.1 , 0.4 }}, font, fontSize, " End Turn" ));
2829
2930 auto playerTopY = 0.82 ;
@@ -43,15 +44,16 @@ GameController::GameController(GameBoard& model, GameView& view) : model(model),
4344 view.addElement (makeViewButtonText (std::bind (&GameController::handleYearOfPlentyCardButtonEvent, this , _1), {{0.85 , 0.10 }, {0.97 , 0.15 }}, font, fontSize, " Year of Plenty " ));
4445 view.addElement (makeViewButtonText (std::bind (&GameController::handleMonopolyCardButtonEvent, this , _1), {{0.85 , 0.15 }, {0.97 , 0.20 }}, font, fontSize, " Monopoly " ));
4546 view.addElement (makeViewButtonText (std::bind (&GameController::handleVictoryPointCardButtonEvent, this , _1), {{0.85 , 0.20 }, {0.97 , 0.25 }}, font, fontSize, " Victory Point " ));
46-
47- view.addElement (makeViewButtonText (std::bind (&GameController::handleWoodButtonEvent, this , _1), {{.85 , .35 }, {.97 , .40 }}, font, fontSize, " Wood " ));
48- view.addElement (makeViewButtonText (std::bind (&GameController::handleSheepButtonEvent, this , _1), {{.85 , .40 }, {.97 , .45 }}, font, fontSize, " Sheep " ));
49- view.addElement (makeViewButtonText (std::bind (&GameController::handleOreButtonEvent, this , _1), {{.85 , .45 }, {.97 , .50 }}, font, fontSize, " Ore " ));
50- view.addElement (makeViewButtonText (std::bind (&GameController::handleBrickButtonEvent, this , _1), {{.85 , .50 }, {.97 , .55 }}, font, fontSize, " Brick " ));
51- view.addElement (makeViewButtonText (std::bind (&GameController::handleWheatButtonEvent, this , _1), {{.85 , .55 }, {.97 , .60 }}, font, fontSize, " Wheat " ));
5247
48+ view.addElement (makeViewButtonText (std::bind (&GameController::handleWoodButtonEvent, this , _1), {{.85 , .30 }, {.97 , .35 }}, font, fontSize, " Wood " ));
49+ view.addElement (makeViewButtonText (std::bind (&GameController::handleSheepButtonEvent, this , _1), {{.85 , .35 }, {.97 , .40 }}, font, fontSize, " Sheep " ));
50+ view.addElement (makeViewButtonText (std::bind (&GameController::handleOreButtonEvent, this , _1), {{.85 , .40 }, {.97 , .45 }}, font, fontSize, " Ore " ));
51+ view.addElement (makeViewButtonText (std::bind (&GameController::handleBrickButtonEvent, this , _1), {{.85 , .45 }, {.97 , .50 }}, font, fontSize, " Brick " ));
52+ view.addElement (makeViewButtonText (std::bind (&GameController::handleWheatButtonEvent, this , _1), {{.85 , .50 }, {.97 , .55 }}, font, fontSize, " Wheat " ));
53+
54+ view.addElement (makeViewButtonText (std::bind (&GameController::viewCardTotals, this , _1), {{.85 , .55 }, {.97 , .60 }}, font, fontSize, " Show Totals" ));
55+
5356 view.addElement (100 , makeViewButton (std::bind (&GameController::handleBoardEvent, this , _1), {{0 , 0 }, {1 , 1 }}));
54-
5557 stateStack.push_back (BASESTATE);
5658}
5759
@@ -109,7 +111,7 @@ Coordinate GameController::getLastClick(){
109111 * Gets a click from param clicks ago
110112 * @ param an integer
111113 */
112- Coordinate GameController::getPastClick (int howLongAgo){
114+ Coordinate GameController::getPastClick (unsigned int howLongAgo){
113115 if (howLongAgo < clickHistory.size ()){
114116 return clickHistory[clickHistory.size () - 1 - howLongAgo];
115117 }
@@ -138,20 +140,27 @@ int GameController::getClickHistorySize(){
138140 return clickHistory.size ();
139141}
140142
141- void printPlayerInfo (const Player& player) {
143+ /* *
144+ * Now that the GUI has this information implemented, I am returning before this function prints. To use this function again simply remove the return
145+ */
146+ void printPlayerInfo (const Player& player)
147+ {
148+ return ;
142149 auto color = player.getColor ();
143150 std::cout << player.getName () << " 's turn. (" << std::get<0 >(color) << " , " << std::get<1 >(color) << " , " << std::get<2 >(color) <<" )" << std::endl;
144151 std::cout << " Wood: " << player.getWood () << " , Brick: " << player.getBrick () << " , Ore: " << player.getOre () << " , Wheat: " << player.getWheat () << " , Wool: " << player.getWool () << std::endl;
145152}
146153
147154/* *
148- * calls a function to advance turn, check for victory and roll dice
155+ * calls a function to advance turn, hide resource and development cards, check for victory, and roll dice
149156 */
150157bool GameController::nextTurn (ScreenCoordinate) {
151158 if (getState () != BASESTATE){
152159 return false ;
153160 }
154-
161+
162+ view.showTotals = false ;
163+
155164 model.endTurn ();
156165 if (model.getDice ().getFirst () + model.getDice ().getSecond () == 7 )
157166 {
@@ -223,6 +232,11 @@ bool GameController::handleBoardEvent(ScreenCoordinate screenCoord) {
223232 model.buyUpgradeOnSettlement (coord, model.getCurrentPlayer ());
224233 handleCancelButtonEvent (screenCoord);
225234 break ;
235+ case BUILDWONDER:
236+ std::cout << " attempting to build a wonder" << std::endl;
237+ model.buyUpgradeOnWonder (coord, model.getCurrentPlayer ());
238+ handleCancelButtonEvent (screenCoord);
239+ break ;
226240 default :
227241 break ;
228242 }
@@ -312,6 +326,21 @@ bool GameController::handleCityButtonEvent(ScreenCoordinate coord) {
312326 return true ;
313327}
314328
329+ /* *
330+ * Handles a click on the "create wonder" button. Changes the internal state to indicate the user is going to be upgrading settlements/cities on the board.
331+ * @param coord The place the user clicked on screen.
332+ * @return Whether this event was handled by this element. Always true.
333+ */
334+ bool GameController::handleWonderButtonEvent (ScreenCoordinate coord) {
335+ if (getState () != BASESTATE) {
336+ return false ;
337+ }
338+
339+ view.setControlStateText (" Click on a settlement/city to upgrade to wonder. (5 of ea rsc)" );
340+ pushState (BUILDWONDER);
341+ return true ;
342+ }
343+
315344
316345/* *
317346 * Handles a click on the road Building Card button. This changes the control state to indicate the user is going to be building roads on the board.
@@ -413,6 +442,19 @@ bool GameController::handleVictoryPointCardButtonEvent(ScreenCoordinate coord){
413442 return true ;
414443}
415444
445+ /* *
446+ * Makes the development and resource card totals visible
447+ */
448+ bool GameController::viewCardTotals (ScreenCoordinate coord)
449+ {
450+ auto font = getGraphicsConfig ()[" font.path" ];
451+ auto fontSize = getGraphicsConfig ()[" font.size" ];
452+ view.showTotals = !view.showTotals ;
453+ view.drawCardCount (font, fontSize);
454+ view.drawResourceCount (font, fontSize);
455+ return true ;
456+ }
457+
416458
417459template <int size>
418460auto negativeArr (std::array<int , size> arr) -> std::array<int, size> {
@@ -473,7 +515,7 @@ bool GameController::handlePlayerClick(ScreenCoordinate coord, Player& player) {
473515 return handleCancelButtonEvent (coord);
474516 }
475517 }
476-
518+ return true ;
477519}
478520
479521/* *
@@ -521,10 +563,10 @@ bool GameController::handleTradeOffer(ScreenCoordinate coord, Player& initiating
521563 std::array<int , 5 > splitOffer;
522564 std::array<int , 5 > splitDemand;
523565 for (int i = 0 ; i < 5 ; i++) {
524- splitOffer[i] = counterOffer[i] < 0 ? 0 : -counterOffer[i];
566+ splitOffer[i] = counterOffer[i] > 0 ? 0 : -counterOffer[i];
525567 splitDemand[i] = counterOffer[i] < 0 ? 0 : counterOffer[i];
526568 }
527- initiating.acceptOffer (receiving, splitOffer, splitDemand );
569+ initiating.acceptOffer (receiving, splitDemand, splitOffer );
528570 } else {
529571 // std::function<bool(std::array<int, 5>, ScreenCoordinate)> tradeFunction(std::bind(&GameController::handleTradeOffer, this, _2, std::ref(initiating), _1, std::ref(receiving)));
530572 std::function<bool (std::array<int , 5 >, ScreenCoordinate)> tradeFunction ([this , &initiating, &receiving, counterOffer](std::array<int , 5 > offer, ScreenCoordinate coord) {
0 commit comments