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); }
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); }
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); }
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); }