93 lines
1.7 KiB
C++
93 lines
1.7 KiB
C++
#include "Map.h"
|
|
|
|
rts::Tile::Tile(sf::Sprite *spr, int h) {
|
|
this->img = spr;
|
|
this->height = h;
|
|
}
|
|
|
|
int rts::Tile::getHeight() {
|
|
return height;
|
|
}
|
|
|
|
void rts::Tile::setHeight(int h) {
|
|
this->height = h;
|
|
}
|
|
|
|
sf::Sprite* rts::Tile::getImage() {
|
|
return img;
|
|
}
|
|
|
|
void rts::Tile::setImage(sf::Sprite *nimg) {
|
|
this->img = nimg;
|
|
}
|
|
|
|
rts::Map::Map(int nTiles) {
|
|
this->initMap(nTiles);
|
|
}
|
|
|
|
void rts::Map::initMap(int nTiles) {
|
|
this->tileCount = nTiles;
|
|
|
|
this->tiles = new Tile*[nTiles];
|
|
for(int i = 0; i < nTiles; i++)
|
|
this->tiles[i] = new Tile;
|
|
|
|
static sf::Texture tmp;
|
|
tmp.loadFromFile("grass.png");
|
|
grass.setTexture(tmp);
|
|
|
|
this->viewx = viewy = 0;
|
|
this->w = nTiles * TILE_W;
|
|
this->h = nTiles * TILE_H;
|
|
}
|
|
|
|
rts::Tile rts::Map::getTile(int i, int j) {
|
|
return tiles[i][j];
|
|
}
|
|
|
|
void rts::Map::setTile(int i, int j, Tile t) {
|
|
tiles[i][j] = t;
|
|
}
|
|
|
|
void rts::Map::setTile(int i, int j, sf::Sprite *s, int h) {
|
|
tiles[i][j] = Tile(s, h);
|
|
}
|
|
|
|
void rts::Map::setView(long x, long y) {
|
|
viewx = x;
|
|
viewy = y;
|
|
}
|
|
|
|
void rts::Map::changeView(long x, long y) {
|
|
if(viewx + x >= 0 && viewx + x <= w)
|
|
viewx += x;
|
|
else
|
|
viewx = (viewx+x<0)?0:w;
|
|
|
|
if(viewy + y >= 0 && viewy + y <= h)
|
|
viewy += y;
|
|
else
|
|
viewy = (viewy+y<0)?0:h;
|
|
}
|
|
|
|
void rts::Map::Render(sf::RenderWindow *rw, int offset) {
|
|
//int cw = rw->getSize().x;
|
|
int cw = 400;
|
|
//int ch = rw->getSize().y;
|
|
int ch = 400;
|
|
|
|
for(int y = 0; y < tileCount; y++) {
|
|
for(int x = 0; x < tileCount; x++) {
|
|
|
|
long tx0 = (((w/2)-(TILE_W/2)) + ((TILE_W/2)*x) - ((TILE_W/2)*y)),
|
|
ty0 = ((TILE_H/2)*y+(TILE_H/2)*x),
|
|
tx1 = tx0 + TILE_W,
|
|
ty1 = tx1 + TILE_H;
|
|
|
|
if((ty1-viewy >= 0 && ty0-viewy <= ch) && (tx1-viewx >= 0 && tx0-viewx <= cw)) {
|
|
grass.setPosition(tx0-viewx+offset, ty0-viewy+offset);
|
|
rw->draw(grass);
|
|
}
|
|
}
|
|
}
|
|
} |