Good morning,
I have a small problem i can't get solved right now, perhaps it's to early or i am to long awake but anyway. Here the problem:
I want write a Tilemape Editor or better the endresult should be an Editor. Right now i am writing code to read a map file and generate a drawable map from it. For this i need four classes. The map class, the layer class, the tileset class and the tile class.
The layer class generate a vector of tiles from a character source like this one:
1,0 1,0 1,0 1,0 1,1 1,0 1,0 1,0 1,0 1,0
1,0 x,x x,x x,x x,x x,x x,x x,x x,x 1,01,0 x,x x,x x,x 0,0 x,x x,x x,x x,x 1,01,0 1,0 x,x x,x 1,0 x,x 1,1 x,x x,x 1,01,0 x,x x,x x,x 2,0 x,x x,x x,x x,x 1,01,0 x,x x,x x,x 3,0 1,1 0,0 x,x x,x 1,01,0 x,x x,x x,x x,x x,x x,x x,x x,x 1,01,0 x,x x,x x,x x,x x,x x,x x,x x,x 1,01,0 x,x x,x x,x x,x x,x x,x x,x x,x 1,01,0 1,0 1,0 1,0 1,0 1,0 1,0 1,0 1,0 1,0
Each tile is here represented as a multiplicator to calculate the position of each tile in a tileset (x,y).
the case (x,x) says only there is nothing.
Now i have two functions from the layer class:
void Layer::CheckMap(std::string value,sf::Vector2i& globalposition)
{
std::string xx = value.substr(0,value.find(',')); //Find X component of coordinate in the tileset
std::string yy = value.substr(value.find(',')+1); //Find y component of coordinate in the tileset
;//Save global Coordinate per tile
int x,y,i,j;
for(i = 0; i< xx.length();i++)
{
if(!std::isdigit(xx[i]))
break;
}
for(j = 0; j< yy.length();j++)
{
if(!std::isdigit(yy[j]))
break;
}
x = (i == xx.length()) ? std::atoi(xx.c_str()) : -1;
y = (j == yy.length()) ? std::atoi(yy.c_str()) : -1;
//sad try to get the X coordinate
globalposition.x++;
Tile* tmp = new Tile(this->m_Tileset,sf::Vector2i(x,y),globalposition,sf::Vector2i(32,32),0);
this->m_Tiles.push_back(tmp);
}
void Layer::LoadLayer()
{
std::stringstream cstream(this->m_LayerSource);
std::string value;
sf::Vector2i globalposition(0,0);
if(this->m_Tileset == NULL)
{
this->m_Tileset = new graphic::Tileset(this->m_Tilesetpath,32);
}
while(!cstream.eof())
{
while(std::getline(cstream,value,' '))
{
if(value.length() > 0)
{
this->CheckMap(value,globalposition);
}
//Even sader try to get the Y coordinate
globalposition.y++;
}
globalposition.x = 0;
}
}
I'm very sure the solution is in front of me but i only can't see it right now....
What i need is the position on the screen which the user is seeing! But i don't get it managed to read out or calculate correctly the coordinates. Any idea how could i solve this problem?