Sign in to follow this  
exOfde

TileMap Coordinate Problem

Recommended Posts

exOfde    838

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?

Edited by exOfde

Share this post


Link to post
Share on other sites
haegarr    7372

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).

Share this post


Link to post
Share on other sites
exOfde    838

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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this