@@ -147,6 +147,8 @@ void DrawingGameVisitor::visit(GameBoard& model) {
147147
148148}
149149
150+
151+
150152/* *
151153 * Draw a road.
152154 * @param road The road to draw.
@@ -265,17 +267,112 @@ void drawTexturedCircle(std::pair<float, float> texCenter, float texRadius, std:
265267 double tangle = ((double ) -i) * (2 . * M_PI) / (double )articulation;
266268 texCoordPair ({texCenter.first + texRadius * std::cos (tangle), texCenter.second + texRadius * std::sin (tangle)});
267269 glVertex2d (screenCenter.first + (screenRadius * std::cos (angle)), screenCenter.second + (screenRadius * std::sin (angle)));
270+
268271 }
269272 glEnd ();
270273}
271274
275+ void drawTexturedRectangle (std::pair<float , float > texTopLeft, float sideLength, std::pair<float , float > screenTopLeft, float screenSideLength) {
276+
277+
278+
279+ glBegin (GL_QUADS);
280+
281+
282+
283+
284+ texCoordPair ({texTopLeft.first + 0 .0f , texTopLeft.second + 0 .0f });
285+ glVertex2d (screenTopLeft.first + 0 .0f , screenTopLeft.second + 0 .0f );
286+
287+ texCoordPair ({texTopLeft.first + sideLength, texTopLeft.second + 0 .0f });
288+ glVertex2d (screenTopLeft.first + screenSideLength, screenTopLeft.second + 0 .0f );
289+
290+
291+ texCoordPair ({texTopLeft.first + sideLength, texTopLeft.second + sideLength});
292+ glVertex2d (screenTopLeft.first + screenSideLength, screenTopLeft.second + screenSideLength);
293+
294+ texCoordPair ({texTopLeft.first + 0 .0f , texTopLeft.second + sideLength});
295+ glVertex2d (screenTopLeft.first + 0 .0f , screenTopLeft.second + screenSideLength);
296+
297+ /*
298+ //redraw the image for reasons
299+ texCoordPair({texTopLeft.first + sideLength, texTopLeft.second + sideLength});
300+ glVertex2d(screenTopLeft.first + screenSideLength, screenTopLeft.second + screenSideLength);
301+
302+ texCoordPair({texTopLeft.first + 0.0f, texTopLeft.second + sideLength});
303+ glVertex2d(screenTopLeft.first + 0.0f, screenTopLeft.second + screenSideLength);
304+
305+ texCoordPair({texTopLeft.first + sideLength, texTopLeft.second + 0.0f});
306+ glVertex2d(screenTopLeft.first + screenSideLength, screenTopLeft.second + 0.0f);
307+
308+ texCoordPair({texTopLeft.first + 0.0f, texTopLeft.second + 0.0f});
309+ glVertex2d(screenTopLeft.first + 0.0f, screenTopLeft.second + 0.0f);
310+
311+ */
312+
313+
314+
315+ glEnd ();
316+
317+
318+
319+
320+
321+
322+ }
323+
324+ void DrawingGameVisitor::visit (GameDice& dice) {
325+
326+ static const GLuint diceTextures = loadImageAsTexture (" resources/catan_dice_new.bmp" );
327+ glBindTexture (GL_TEXTURE_2D, diceTextures);
328+
329+ glColor3d (1.0 , 1.0 , 1.0 );
330+ static const std::map<int , std::pair<float , float >> topLeftOffset = {
331+ make_pair (1 , make_pair (9 .f , 3 .f )),
332+ make_pair (2 , make_pair (134 .f , 3 .f )),
333+ make_pair (3 , make_pair (259 .f , 3 .f )),
334+ make_pair (4 , make_pair (9 .f , 142 .f )),
335+ make_pair (5 , make_pair (134 .f , 142 .f )),
336+ make_pair (6 , make_pair (259 .f , 142 .f ))
337+ };
338+
339+ drawTexturedRectangle (topLeftOffset.find (dice.getFirst ())->second , 95 .f ,
340+ make_pair (.7f , .9f ), 0.06 );
341+
342+
343+ drawTexturedRectangle (topLeftOffset.find (dice.getSecond ())->second , 95 .f ,
344+ make_pair (.78f , .9f ), 0.06 );
345+
346+
347+
348+ // render all dice
349+ // drawTexturedRectangle(make_pair(9.f, 3.f), 95.f, make_pair(.6f, .9f), 0.06);
350+ // drawTexturedRectangle(make_pair(8.f, 4.f), 96.f, make_pair(.67f, .95f), 0.06);
351+ // drawTexturedRectangle(make_pair(16.f, 8.f), 96.f, make_pair(.74f, .95f), 0.06);
352+ // drawTexturedRectangle(make_pair(2.f, 8.f), 96.f, make_pair(.6f, .95f), 0.06);
353+ // drawTexturedRectangle(make_pair(2.f, 8.f), 96.f, make_pair(.6f, .95f), 0.06);
354+ // drawTexturedRectangle(make_pair(2.f, 8.f), 96.f, make_pair(.6f, .95f), 0.06);
355+
356+ glBindTexture (GL_TEXTURE_2D, 0 );
357+ // hardcoded 2 die for testing
358+ // drawTexturedRectangle(make_pair(4.f, 8.f), 96.f, make_pair(.7f, .9f), 0.03);
359+
360+
361+
362+
363+
364+ // std::cout << dice.getFirst() << "\n";
365+
366+ }
367+
272368/* *
273369 * Draw a resource tile.
274370 * @param tile The tile to draw.
275371 */
276372void DrawingGameVisitor::visit (ResourceTile& tile) {
277373 Coordinate coord = tile.getLocation ();
278374 static const GLuint tileTextures = loadImageAsTexture (" resources/catan_sprite_sheet.bmp" );
375+
279376 glBindTexture (GL_TEXTURE_2D, tileTextures);
280377 static const std::map<resourceType, pair<float , float >> topRightPoints = {
281378 make_pair (WOOD, make_pair (260 .f , 17 .f )),
@@ -330,6 +427,11 @@ void DrawingGameVisitor::visit(ResourceTile& tile) {
330427 drawTexturedCircle (numberTexPoints.find (tile.getDiceValue ())->second , radius, coordToScreen (coord), 0.04 );
331428 }
332429 glBindTexture (GL_TEXTURE_2D, 0 );
430+
431+
432+
433+
434+
333435}
334436
335437/* *
0 commit comments