Exemplo n.º 1
0
Wall_Entity Light_Manager::Add_Wall(sf::Vector2f pt1,sf::Vector2f pt2)
{
    for(int i=0;i<(int)m_wall.size();i++)
        if((pt1.y-pt2.y)/(pt1.x-pt2.y)==(m_wall[i].pt1.y-m_wall[i].pt2.y)/(m_wall[i].pt1.x-m_wall[i].pt2.y))
            if(pt1==m_wall[i].pt1 || pt2==m_wall[i].pt1 || pt1==m_wall[i].pt2 || pt2==m_wall[i].pt2)
            {
                sf::Vector2f min=pt1,max=pt2;

                if(pt2.x<min.x)
                    min.x=pt2.x;
                if(pt1.x>max.x)
                    max.x=pt2.x;

                if(m_wall[i].pt1.x<min.x)
                    min.x=m_wall[i].pt1.x;
                if(m_wall[i].pt2.x<min.x)
                    min.x=m_wall[i].pt2.x;

                if(m_wall[i].pt1.x>max.x)
                    max.x=m_wall[i].pt1.x;
                if(m_wall[i].pt2.x>max.x)
                    max.x=m_wall[i].pt2.x;


                if(pt2.y<min.y)
                    min.y=pt2.y;
                if(pt1.y>max.y)
                    max.y=pt2.y;

                if(m_wall[i].pt1.y<min.y)
                    min.y=m_wall[i].pt1.y;
                if(m_wall[i].pt2.y<min.y)
                    min.y=m_wall[i].pt2.y;

                if(m_wall[i].pt1.y>max.y)
                    max.y=m_wall[i].pt1.y;
                if(m_wall[i].pt2.y>max.y)
                    max.y=m_wall[i].pt2.y;

                m_wall[i].pt1=min;
                m_wall[i].pt2=max;

                return Wall_Entity(i);

            }

    m_wall.push_back(Wall (pt1,pt2));
    return Wall_Entity(m_wall.size()-1);
}
Exemplo n.º 2
0
Wall_Entity Light_Manager::Add_Wall(sf::Vector2f pt1,sf::Vector2f pt2,int hauteur)
{
    /* if(pt2.x<pt1.x)
     {
         sf::Vector2f buffer=pt1;
         pt1=pt2,pt2=buffer;
     }

     for(int i=0;i<(int)m_wall.size();i++)
       //  if(hauteur==m_wall[i].hauteur)
             if((pt1.x+2>=(int)m_wall[i].pt1.x && pt1.x-2<=(int)m_wall[i].pt1.x && pt1.y+2>=(int)m_wall[i].pt1.y && pt1.y-2<=(int)m_wall[i].pt1.y)
              ||(pt1.x+2>=(int)m_wall[i].pt2.x && pt1.x-2<=(int)m_wall[i].pt2.x && pt1.y+2>=(int)m_wall[i].pt2.y && pt1.y-2<=(int)m_wall[i].pt2.y)
              ||(pt2.x+2>=(int)m_wall[i].pt1.x && pt2.x-2<=(int)m_wall[i].pt1.x && pt2.y+2>=(int)m_wall[i].pt1.y && pt2.y-2<=(int)m_wall[i].pt1.y)
              ||(pt2.x+2>=(int)m_wall[i].pt2.x && pt2.x-2<=(int)m_wall[i].pt2.x && pt2.y+2>=(int)m_wall[i].pt2.y && pt2.y-2<=(int)m_wall[i].pt2.y))
              {
                 if(((pt1.y-pt2.y)/(pt1.x-pt2.y))==((m_wall[i].pt1.y-m_wall[i].pt2.y)/(m_wall[i].pt1.x-m_wall[i].pt2.y)))
                 {
                     sf::Vector2f min=pt1,max=pt2;

                     if(pt2.x<min.x)
                         min=pt2;
                     if(m_wall[i].pt1.x<min.x)
                         min=m_wall[i].pt1;
                     if(m_wall[i].pt2.x<min.x)
                         min=m_wall[i].pt2;

                     if(pt1.x>max.x)
                         max=pt1;
                     if(m_wall[i].pt1.x>max.x)
                         max=m_wall[i].pt1;
                     if(m_wall[i].pt2.x>max.x)
                         max=m_wall[i].pt2;

                     m_wall[i].pt1=min;
                     m_wall[i].pt2=max;

                     return Wall_Entity(i);
                 }
              }*/
    m_wall.push_back(Wall (pt1,pt2,hauteur));

    return Wall_Entity(m_wall.size()-1);
}
Exemplo n.º 3
0
Wall_Entity Light_Manager::Add_Wall(sf::Vector2f pt1,sf::Vector2f pt2)
{
    for (int i=0;i<(int)m_wall.size();i++)
        if ((pt1.y-pt2.y)/(pt1.x-pt2.y)==(m_wall[i].pt1.y-m_wall[i].pt2.y)/(m_wall[i].pt1.x-m_wall[i].pt2.y))
            if (pt1==m_wall[i].pt1 || pt2==m_wall[i].pt1 || pt1==m_wall[i].pt2 || pt2==m_wall[i].pt2)
            {
                sf::Vector2f min=pt1,max=pt2;

                if (pt2.x<min.x)
                    min.x=pt2.x;
                if (pt1.x>max.x)
                    max.x=pt2.x;

                if (m_wall[i].pt1.x<min.x)
                    min.x=m_wall[i].pt1.x;
                if (m_wall[i].pt2.x<min.x)
                    min.x=m_wall[i].pt2.x;

                if (m_wall[i].pt1.x>max.x)
                    max.x=m_wall[i].pt1.x;
                if (m_wall[i].pt2.x>max.x)
                    max.x=m_wall[i].pt2.x;


                if (pt2.y<min.y)
                    min.y=pt2.y;
                if (pt1.y>max.y)
                    max.y=pt2.y;

                if (m_wall[i].pt1.y<min.y)
                    min.y=m_wall[i].pt1.y;
                if (m_wall[i].pt2.y<min.y)
                    min.y=m_wall[i].pt2.y;

                if (m_wall[i].pt1.y>max.y)
                    max.y=m_wall[i].pt1.y;
                if (m_wall[i].pt2.y>max.y)
                    max.y=m_wall[i].pt2.y;

                m_wall[i].pt1=min;
                m_wall[i].pt2=max;

                return Wall_Entity(i);

            }


    sf::Vector2f min=pt1,max=pt2;

    if (pt2.x<min.x)
        min.x=pt2.x;
    if (pt1.x>max.x)
        max.x=pt2.x;
    if (pt2.y<min.y)
        min.y=pt2.y;
    if (pt1.y>max.y)
        max.y=pt2.y;

    pt1=min;
    pt2=max;

    m_wall.push_back(Wall (pt1,pt2));

    if(pt1.y + m_origin_sector.y * SECTOR_SIZE >= m_sectors.size() * SECTOR_SIZE)
        m_sectors.resize(pt1.y/SECTOR_SIZE + m_origin_sector.y + 1, std::vector< std::vector<int> > ());

    while(pt1.y + m_origin_sector.y * SECTOR_SIZE < 0)
    {
        m_sectors.insert(m_sectors.begin(), std::vector< std::vector<int> > ());
        m_origin_sector.y++;
    }

    if(pt1.x + m_origin_sector.x * SECTOR_SIZE >= m_sectors[pt1.y/SECTOR_SIZE + m_origin_sector.y].size() * SECTOR_SIZE)
        m_sectors[pt1.y/SECTOR_SIZE + m_origin_sector.y].resize(pt1.x/SECTOR_SIZE + m_origin_sector.x + 1, std::vector<int> ());


    while(pt1.x + m_origin_sector.x * SECTOR_SIZE < 0)
    {
        for(unsigned i = 0 ; i  < m_sectors.size() ; ++i)
            m_sectors[i].insert(m_sectors[i].begin(), std::vector<int> ());
        m_origin_sector.x++;
    }

    m_sectors[pt1.y/SECTOR_SIZE + m_origin_sector.y][pt1.x/SECTOR_SIZE + m_origin_sector.x].push_back(m_wall.size()-1);

    return Wall_Entity(m_wall.size()-1);
}
Exemplo n.º 4
0
Wall_Entity Light_Manager::Add_Wall(sf::Vector2f pt1,sf::Vector2f pt2,int hauteur)
{
    m_wall.push_back(Wall (pt1,pt2,hauteur));

    if(pt1.y + m_origin_sector.y * SECTOR_SIZE >= m_sectors.size() * SECTOR_SIZE)
        m_sectors.resize(pt1.y/SECTOR_SIZE + m_origin_sector.y + 1, std::vector< std::vector<int> > ());

    while(pt1.y + m_origin_sector.y * SECTOR_SIZE < 0)
    {
        m_sectors.insert(m_sectors.begin(), std::vector< std::vector<int> > ());
        m_origin_sector.y++;
    }

    if(pt1.x + m_origin_sector.x * SECTOR_SIZE >= m_sectors[pt1.y/SECTOR_SIZE + m_origin_sector.y].size() * SECTOR_SIZE)
        m_sectors[pt1.y/SECTOR_SIZE + m_origin_sector.y].resize(pt1.x/SECTOR_SIZE + m_origin_sector.x + 1, std::vector<int> ());


    while(pt1.x + m_origin_sector.x * SECTOR_SIZE < 0)
    {
        for(unsigned i = 0 ; i  < m_sectors.size() ; ++i)
            m_sectors[i].insert(m_sectors[i].begin(), std::vector<int> ());
        m_origin_sector.x++;
    }

    int x = pt1.x/SECTOR_SIZE + m_origin_sector.x;
    int y = pt1.y/SECTOR_SIZE + m_origin_sector.y;

    m_sectors[y][x].push_back(m_wall.size()-1);

    for(int w = 0 ; w < (int)m_sectors[y][x].size() ; ++w)
    {
        if(fabs(m_wall[m_sectors[y][x][w]].pt1.x - m_wall.back().pt1.x) < 5
        && fabs(m_wall[m_sectors[y][x][w]].pt1.y - m_wall.back().pt1.y) < 5)
        {
            int m = m_wall.back().hauteur1 + m_wall[m_sectors[y][x][w]].hauteur1;
            m_wall.back().hauteur1 = m/2;
            m_wall[m_sectors[y][x][w]].hauteur1 = m/2;
            m_wall[m_sectors[y][x][w]].pt1 = m_wall.back().pt1;
        }
        if(fabs(m_wall[m_sectors[y][x][w]].pt1.x - m_wall.back().pt2.x) < 5
        && fabs(m_wall[m_sectors[y][x][w]].pt1.y - m_wall.back().pt2.y) < 5)
        {
            int m = m_wall.back().hauteur2 + m_wall[m_sectors[y][x][w]].hauteur1;
            m_wall.back().hauteur2 = m/2;
            m_wall[m_sectors[y][x][w]].hauteur1 = m/2;
            m_wall[m_sectors[y][x][w]].pt1 = m_wall.back().pt2;
        }
        if(fabs(m_wall[m_sectors[y][x][w]].pt2.x - m_wall.back().pt1.x) < 5
        && fabs(m_wall[m_sectors[y][x][w]].pt2.y - m_wall.back().pt1.y) < 5)
        {
            int m = m_wall.back().hauteur1 + m_wall[m_sectors[y][x][w]].hauteur2;
            m_wall.back().hauteur1 = m/2;
            m_wall[m_sectors[y][x][w]].hauteur2 = m/2;
            m_wall[m_sectors[y][x][w]].pt2 = m_wall.back().pt1;
        }
        if(fabs(m_wall[m_sectors[y][x][w]].pt2.x - m_wall.back().pt2.x) < 5
        && fabs(m_wall[m_sectors[y][x][w]].pt2.y - m_wall.back().pt2.y) < 5)
        {
            int m = m_wall.back().hauteur2 + m_wall[m_sectors[y][x][w]].hauteur2;
            m_wall.back().hauteur2 = m/2;
            m_wall[m_sectors[y][x][w]].hauteur2 = m/2;
            m_wall[m_sectors[y][x][w]].pt2 = m_wall.back().pt2;
        }
    }

    return Wall_Entity(m_wall.size()-1);
}