-
Notifications
You must be signed in to change notification settings - Fork 1
/
TileGrid.h
106 lines (95 loc) · 2.52 KB
/
TileGrid.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#ifndef _TILEGRID_H_
#define _TILEGRID_H_
#include "tile.h"
class TileGrid {
public:
int width, height;
int pathDist;
Tile startTile, endTile;
Tile map[10][10]; //**update global vars if changed**
TileGrid();
void setMap(int newMap[][10]);
void draw();
void drawTileOutline();
void changeTile(TileType type, Tile *tile);
Tile *getTile(int x, int y);
} grid;
TileGrid::TileGrid()
{
//set map dimensions
height = g.mapHeight;
width = g.mapWidth;
//
//allocate 2d array for map tiles
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++)
map[i][j] = Tile(&grass, i*g.tile_pxSize, j*g.tile_pxSize, grassType);
}
}
void TileGrid::setMap(int newMap[][10])
{
//Nested for loop iterates through 2d array and assigns tiles based on
//integer values in array
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
int row = (width - 1) - j; //start reading vals from "top" of 2d array
switch (newMap[row][i])
{
case 0:
//grass
map[i][j] = Tile(&grass, i*g.tile_pxSize, j*g.tile_pxSize, grassType);
break;
case 1:
//dirt
map[i][j] = Tile(&dirt, i*g.tile_pxSize, j*g.tile_pxSize, dirtType);
break;
case 8:
//start tile
map[i][j] = Tile(&dirt, i*g.tile_pxSize, j*g.tile_pxSize, dirtType);
startTile = map[i][j];
break;
case 9:
//end tile
map[i][j] = Tile(&dirt, i*g.tile_pxSize, j*g.tile_pxSize, endType);
endTile = map[i][j];
break;
default:
break;
}
}
}
}
Tile* TileGrid::getTile(int i, int j)
{
Tile *tile = &map[i][j];
return tile;
}
void TileGrid::draw()
{
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
Tile *t = &map[i][j];
drawQuadTex(*(t->texture), t->x, t->y, t->width, t->height);
}
}
}
void TileGrid::drawTileOutline()
{
int i = g.xMousePos/g.tile_pxSize;
int j = 9-g.yMousePos/g.tile_pxSize;
Tile tile = *grid.getTile(i, j);
int weight = 6; //width of outline is 10 px wide
int offset = tile.width - weight;
if (g.buildState == BUY)
glColor4f(1.0, 1.0, 1.0, 0.50);
else if (g.buildState == SELL)
glColor4f(0, 0, 0, 0.50);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
drawQuad(tile.x, tile.y, weight, tile.height);//left side
drawQuad(tile.x+offset, tile.y, weight, tile.height);//right side
drawQuad(tile.x+weight, tile.y+offset, offset-weight, weight); //top
drawQuad(tile.x+weight, tile.y, offset-weight, weight); //bottom
glDisable(GL_BLEND);
}
#endif //_TILEGRID_H_