Skip to content

Commit 6f8a8bc

Browse files
committed
Merge branch 'master' into renderCornerPieces
2 parents b57cd46 + 9f71eda commit 6f8a8bc

File tree

5 files changed

+55
-22
lines changed

5 files changed

+55
-22
lines changed

resources/catan_sprite_sheet.bmp

6 MB
Binary file not shown.

resources/tiles.bmp

-12 MB
Binary file not shown.

resources/tiles.xcf

-3.61 MB
Binary file not shown.

src/GameView.cpp

Lines changed: 54 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -117,42 +117,75 @@ void DrawingGameVisitor::visit(Player& player) {
117117

118118
}
119119

120+
void drawTexturedCircle(std::pair<float, float> texCenter, float texRadius, std::pair<float, float> screenCenter, float screenRadius, int articulation = 20) {
121+
glBegin(GL_TRIANGLE_FAN);
122+
texCoordPair(texCenter);
123+
glVertex2f(screenCenter.first, screenCenter.second);
124+
for(int i = 0; i < articulation + 1; i++) {
125+
double angle = ((double) i) * (2. * M_PI) / (double)articulation;
126+
double tangle = ((double) -i) * (2. * M_PI) / (double)articulation;
127+
texCoordPair({texCenter.first + texRadius * std::cos(tangle), texCenter.second + texRadius * std::sin(tangle)});
128+
glVertex2d(screenCenter.first + (screenRadius * std::cos(angle)), screenCenter.second + (screenRadius * std::sin(angle)));
129+
}
130+
glEnd();
131+
}
132+
120133
void DrawingGameVisitor::visit(ResourceTile& tile) {
121134
Coordinate coord = tile.getLocation();
122-
static GLuint tileTextures = loadImageAsTexture("resources/tiles.bmp");
135+
static const GLuint tileTextures = loadImageAsTexture("resources/catan_sprite_sheet.bmp");
123136
glBindTexture(GL_TEXTURE_2D, tileTextures);
124-
typedef std::vector<pair<float, float> > texCoordList;
125-
static const std::map<resourceType, texCoordList> resourceTexCoords = {
126-
make_pair(WHEAT, texCoordList { make_pair(377, 73), make_pair(500, 285),
127-
make_pair(380, 502), make_pair(136, 503), make_pair(10, 288), make_pair(134, 74)}),
128-
make_pair(SHEEP, texCoordList { make_pair(959, 75), make_pair(1076, 288),
129-
make_pair(955, 503), make_pair(712, 501), make_pair(586, 289), make_pair(708, 73)}),
130-
make_pair(WOOD, texCoordList { make_pair(1491, 60), make_pair(1618, 269),
131-
make_pair(1479, 490), make_pair(1260, 493), make_pair(1126, 283), make_pair(1246, 65)}),
132-
make_pair(STONE, texCoordList { make_pair(382, 689), make_pair(506, 898),
133-
make_pair(386, 1118), make_pair(142, 1120), make_pair(17, 905), make_pair(138, 691)}),
134-
make_pair(BRICK, texCoordList { make_pair(1496, 690), make_pair(1617, 908),
135-
make_pair(1490, 1120), make_pair(1248, 1118), make_pair(1124, 898), make_pair(1250, 688)}),
136-
make_pair(DESERT, texCoordList { make_pair(1496, 690), make_pair(1617, 908),
137-
make_pair(1490, 1120), make_pair(1248, 1118), make_pair(1124, 898), make_pair(1250, 688)}),
137+
static const std::map<resourceType, pair<float, float>> topRightPoints = {
138+
make_pair(WOOD, make_pair(260.f, 17.f)),
139+
make_pair(BRICK, make_pair(629.f, 17.f)),
140+
make_pair(STONE, make_pair(262.f, 282.f)),
141+
make_pair(SHEEP, make_pair(621.f, 286.f)),
142+
make_pair(WHEAT, make_pair(267.f, 554.f)),
143+
make_pair(DESERT, make_pair(620.f, 555.f))
138144
};
145+
static const std::vector<pair<float, float>> resourceTexOffsets = {
146+
make_pair(0.f, 0.f),
147+
make_pair(87.f, 130.f),
148+
make_pair(0.f, 261.f),
149+
make_pair(-174.f, 261.f),
150+
make_pair(-260.f, 130.f),
151+
make_pair(-175, -1)
152+
};
153+
static const std::map<int, pair<float, float>> numberTexPoints = {
154+
make_pair(2, make_pair(1238.5f, 70.5f)),
155+
make_pair(3, make_pair(1365.5f, 70.5f)),
156+
make_pair(4, make_pair(1238.5f, 178.5f)),
157+
make_pair(5, make_pair(1365.5f, 178.5f)),
158+
make_pair(6, make_pair(1238.5f, 286.5f)),
159+
make_pair(8, make_pair(1365.5f, 286.5f)),
160+
make_pair(9, make_pair(1238.5f, 404.5f)),
161+
make_pair(10, make_pair(1365.5f, 404.5f)),
162+
make_pair(11, make_pair(1238.5f, 515.5f)),
163+
make_pair(12, make_pair(1365.5f, 515.5f))
164+
};
165+
static const float radius = 59.5f;
139166
static Coordinate adjacentCoordDiffs[] = {Coordinate(0, 1), Coordinate(1, 0), Coordinate(1, -1), Coordinate(0, -1), Coordinate(-1, 0), Coordinate(-1, 1)};
140-
if(resourceTexCoords.find(tile.resource) == resourceTexCoords.end()) {
167+
auto topRightPoint = topRightPoints.find(tile.getType());
168+
if(topRightPoint == topRightPoints.end()) {
141169
throw runtime_error("Cannot draw this tile; it is invalid.");
142170
}
143-
const texCoordList& texCoords = resourceTexCoords.find(tile.resource)->second;
144171
glColor3d(1.0, 1.0, 1.0);
172+
145173
glBegin(GL_TRIANGLE_FAN);
146-
texCoordPair(averagePoint(texCoords));
174+
auto average = averagePoint(resourceTexOffsets);
175+
texCoordPair({average.first + topRightPoint->second.first, average.second + topRightPoint->second.second});
147176
vertexPair(coord);
148-
for(unsigned int i = 0; i < texCoords.size(); i++) {
149-
texCoordPair(texCoords[i]);
177+
for(unsigned int i = 0; i < resourceTexOffsets.size(); i++) {
178+
texCoordPair(std::make_pair(resourceTexOffsets[i].first + topRightPoint->second.first, resourceTexOffsets[i].second + topRightPoint->second.second));
150179
Coordinate diff = adjacentCoordDiffs[i];
151180
vertexPair(Coordinate(coord.first + diff.first, coord.second + diff.second));
152181
}
153-
texCoordPair(texCoords[0]);
182+
texCoordPair(topRightPoint->second);
154183
vertexPair(Coordinate(coord.first + adjacentCoordDiffs[0].first, coord.second + adjacentCoordDiffs[0].second));
155184
glEnd();
185+
186+
if(tile.getDiceValue() != 0) {
187+
drawTexturedCircle(numberTexPoints.find(tile.getDiceValue())->second, radius, coordToScreen(coord), 0.04);
188+
}
156189
glBindTexture(GL_TEXTURE_2D, 0);
157190
}
158191

src/Renderer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ void vertexPair(const Coordinate& coord) {
6060
}
6161

6262
void texCoordPair(const pair<float, float>& p) {
63-
glTexCoord2f(p.first / 2048., p.second / 2048.);
63+
glTexCoord2f(p.first / 2048., p.second / 1024.);
6464
}
6565

6666
pair<float, float> averagePoint(const std::vector<pair<float, float>>& points) {

0 commit comments

Comments
 (0)