Advertisement

TileMap Coordinate Problem

Started by October 17, 2013 03:06 AM
1 comment, last by exOfde 11 years, 4 months ago

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,0
1,0 x,x x,x x,x 0,0 x,x x,x x,x x,x 1,0
1,0 1,0 x,x x,x 1,0 x,x 1,1 x,x x,x 1,0
1,0 x,x x,x x,x 2,0 x,x x,x x,x x,x 1,0
1,0 x,x x,x x,x 3,0 1,1 0,0 x,x x,x 1,0
1,0 x,x x,x x,x x,x x,x x,x x,x x,x 1,0
1,0 x,x x,x x,x x,x x,x x,x x,x x,x 1,0
1,0 x,x x,x x,x x,x x,x x,x x,x x,x 1,0
1,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?

At least there is no iteration over the co-ordinate tuples in a line: Layer::LoadLayer iterates the file line by line, and Layer::CheckMap iterates not at all (letting the number checks aside).

Advertisement

Oh... You are right. What's missing is theoretically a check if the line are over to set X again to zero. So that i can iterate in the line.

At the moment i don't stop to increment x, so obvious... How stupid from me... that's happend without sleep, sad.

This topic is closed to new replies.

Advertisement