Пример #1
0
Coordenada SpriteUnidad::getPosPies(){
	switch (estadoSprite){
	case CAMINANDO : return Coordenada( posicion.x + (posicion.w / 2), posicion.y + posicion.h );
	case ATACANDO : return Coordenada( posicion.x + (posicion.w / 2), posicion.y + posicion.h * 0.75 );
	case QUIETO : return Coordenada(posicion.x + (posicion.w / 3), posicion.y + posicion.h);
	default : return Coordenada( posicion.x + (posicion.w / 2), posicion.y + posicion.h );
	}
}
Пример #2
0
int main(){
	Octoedro o(Coordenada(1,1,1), Coordenada(3,3,3));
	std::cout << "Volumen: " << o.obtieneVolumen() << std::endl;
	std::cout << "Area: " << o.obtieneArea() << std::endl;
	std::vector<Coordenada> verts = o.obtieneVertices();
	std::cout << "Las coordenadas son: " << std::endl;
	for(int i = 0; i < verts.size(); i++){
		std::cout << "\t(" << verts[i].X() << ", "<< verts[i].Y() << ", "<< verts[i].Z() << ")"<< std::endl;
	}
	return 0;
}
Пример #3
0
	void move(Coordenada passo) {
		double xFactor = largura * passo.getX() / 100.0;
		double yFactor = altura * passo.getY() / 100.0;

		_centro += Coordenada(xFactor, yFactor);

	}
Пример #4
0
Coordenada Calculador::calcularPosicionInversa(Coordenada coord_pixel, Coordenada coord_ceros_pixel, Escenario *escenario){
	int tiles_x = escenario->getDimension().first;
	int tiles_y = escenario->getDimension().second;

	int tileX, tileY;
	bool salir = false;
	int x_relativo;
	int y_relativo;
	int cero_relativo_x = coord_ceros_pixel.x;
	int cero_relativo_y = coord_ceros_pixel.y;
	for (int i = 0; i < tiles_x && !salir; i++){
		x_relativo = cero_relativo_x;
		y_relativo = cero_relativo_y;
		for(int j = 0; j < tiles_y && !salir; j++){
			if (((coord_pixel.x > x_relativo) && (coord_pixel.x < x_relativo + ANCHO_PIXEL_PASTO)) && ((coord_pixel.y > y_relativo) && (coord_pixel.y < y_relativo + ALTO_PIXEL_PASTO))){
				tileX = i;
				tileY = j;
				salir = true;
			}
			x_relativo += DISTANCIA_ENTRE_X;
			y_relativo += DISTANCIA_ENTRE_Y;
		}
		cero_relativo_x -= DISTANCIA_ENTRE_X;
		cero_relativo_y += DISTANCIA_ENTRE_Y;

	}
	return Coordenada(tileX,tileY);
}
Пример #5
0
// Atrapar FueraDeEscenario.
Coordenada Calculador::pixelCentralDeTile(Coordenada coord_tile, Coordenada coord_ceros) {
	if (coord_tile.x < 0 || coord_tile.y < 0)// || tile_x >= this->tiles_x || tile_y >= this->tiles_y)
		throw FueraDeEscenario();
	int pix_x = coord_ceros.x + 	(coord_tile.x - coord_tile.y) * DISTANCIA_ENTRE_X;
	int pix_y = coord_ceros.y + (1 + coord_tile.x + coord_tile.y) * DISTANCIA_ENTRE_Y;
	return Coordenada(pix_x, pix_y);
}
Пример #6
0
Coordenada Escenario::generarCoordenadaRandom(int size_x_final, int size_x_inicial, int size_y_final, int size_y_inicial, int seed = 0) {
	int x_rand, y_rand;
	srand(((int)time(0)) * SDL_GetTicks());
	x_rand = (rand() % (size_x_final - size_x_inicial)) + size_x_inicial;
	y_rand = (rand() % (size_y_final - size_y_inicial)) + size_y_inicial;

	return Coordenada(x_rand,y_rand);
}
Пример #7
0
// No lanza FueraDeEscenario.
Coordenada Calculador::tileParaCualquierPixel(Coordenada coord_pixel, Coordenada coord_ceros) {
	int px =  coord_pixel.x - coord_ceros.x;
	int py = (coord_pixel.y - coord_ceros.y) * (ANCHO_PIXEL_PASTO / ALTO_PIXEL_PASTO);
	int tile_x = floor( 1.0*(px+py) / ANCHO_PIXEL_PASTO );
	int tile_y = floor( 1.0*(py-px) / ANCHO_PIXEL_PASTO );

	return Coordenada(tile_x,tile_y);
}
Пример #8
0
Coordenada Calculador::generarPosRandom(int size_x_final, int size_x_inicial, int size_y_final, int size_y_inicial){
	random_device rd_gen;
	mt19937 gen(rd_gen());				 		// hardcodeo de tamaño
	uniform_int_distribution<int> distribucionX(size_x_inicial, size_x_final-1), distribucionY(size_y_inicial, size_y_final-1);
	int x_rand = (distribucionX(gen));// % (size_x_final - size_x_inicial)) + size_x_inicial;
	int y_rand = (distribucionY(gen));// % (size_y_final - size_y_inicial)) + size_y_inicial;

	return Coordenada(x_rand,y_rand);
}
Пример #9
0
// Calculado con el píxel (0;0) en la esquina superior del tile (0;0). Atrapar FueraDeEscenario.
Coordenada Calculador::tileParaPixel(Coordenada coord_pixel, Coordenada coord_ceros) {
	int px =  coord_pixel.x - coord_ceros.x;
	int py = (coord_pixel.y - coord_ceros.y) * (ANCHO_PIXEL_PASTO / ALTO_PIXEL_PASTO);
	int tile_x = floor( 1.0*(px+py) / ANCHO_PIXEL_PASTO );
	int tile_y = floor( 1.0*(py-px) / ANCHO_PIXEL_PASTO );

	if (tile_x < 0 || tile_y < 0)//|| tile_x >= this->tiles_x || tile_y >= this->tiles_y)
		throw FueraDeEscenario();
	return Coordenada(tile_x,tile_y);
}
Пример #10
0
	Objeto* reta_clippada(Objeto obj){
		ListaEnc<Coordenada>* pontos = obj.pontos();
		Coordenada ponto_A = *pontos->posicaoMem(0);
		Coordenada ponto_B = *pontos->posicaoMem(1);
		int codeA = rcCode(ponto_A);
		int codeB = rcCode(ponto_B);
		while(true){
			if((codeA | codeB) ==0){
				Objeto* novo = new Objeto(obj.nome(), obj.getTipo(), obj.isPreenchido());
				novo->adiciona(ponto_A);
				novo->adiciona(ponto_B);
				return novo;
			}
			else if(codeA & codeB){
				return 0;
			}
			else{
				double novo_x, novo_y;
				int rcFora = codeA ? codeA : codeB;
				if (rcFora & 8) {           // point is above the clip rectangle
					novo_x = ponto_A.getX() + (ponto_B.getX() - ponto_A.getX()) * (1 - ponto_A.getY()) / (ponto_B.getY() - ponto_A.getY());
					novo_y = 1;
				} else if (rcFora & 4) { // point is below the clip rectangle
					novo_x = ponto_A.getX() + (ponto_B.getX() - ponto_A.getX()) * (-1 - ponto_A.getY()) / (ponto_B.getY() - ponto_A.getY());
					novo_y = -1;
				} else if (rcFora & 2) {  // point is to the right of clip rectangle
					novo_y = ponto_A.getY() + (ponto_B.getY() - ponto_A.getY()) * (1 - ponto_A.getX()) / (ponto_B.getX() - ponto_A.getX());
					novo_x = 1;
				} else if (rcFora & 1) {   // point is to the left of clip rectangle
					novo_y = ponto_A.getY() + (ponto_B.getY() - ponto_A.getY()) * (-1 - ponto_A.getX()) / (ponto_B.getX() - ponto_A.getX());
					novo_x = -1;
				}

				if (rcFora == codeA) {
					ponto_A = Coordenada(novo_x, novo_y, 1);
					codeA = rcCode(ponto_A);
				} else {
					ponto_B = Coordenada(novo_x, novo_y, 1);
					codeB = rcCode(ponto_B);
				}
			}
		}
	}
Пример #11
0
void GameProyecto:: update()
{
	int asteroidePeque;
	int asteroideGrande;
	for(int  i=0; i < asteroides.size(); i++) {
		Coordenada centro = asteroides[i].obtenCentro();
		if((centro.obtenerX()>650 || centro.obtenerX() <-50) || (centro.obtenerY()>850 || centro.obtenerY() <-50))
		{
			centro = Coordenada(((double)600+rand()%50),(double)800+ rand()%50);
			if(((int)(centro.obtenerX()))%2==0) centro = Coordenada(-centro.obtenerX()+600,centro.obtenerY());
			if(((int)(centro.obtenerY()))%2==0) centro = Coordenada(centro.obtenerX(),-centro.obtenerY()+800);
			asteroides[i].desplazamiento = Vector2D((float)rand(),(float)rand());
			if(((int)asteroides[i].desplazamiento.getX())%3==0)	asteroides[i].desplazamiento.setX(-asteroides[i].desplazamiento.getX());
			if(((int)asteroides[i].desplazamiento.getY())%3==0)	asteroides[i].desplazamiento.setY(-asteroides[i].desplazamiento.getY());
			asteroides[i].desplazamiento.normaliza();
		}
		asteroides[i].posicionaCentro(Coordenada(centro.obtenerX()+ 1000/asteroides[i].calcArea()*asteroides[i].desplazamiento.getX(), centro.obtenerY() + 1000/asteroides[i].calcArea()*asteroides[i].desplazamiento.getY()));
		asteroides[i].rota(1000/asteroides[i].calcArea());
		for(int j = 0 ; j<i ; j++)
		{
			centro = asteroides[j].obtenCentro();
			if((centro.obtenerX()>600 || centro.obtenerX() <0) || (centro.obtenerY()>800 || centro.obtenerY() <0))
				continue;	
			if(asteroides[i].choca(&asteroides[j]))
			{
				if(asteroides[j].calcArea()>asteroides[i].calcArea())
				{
					asteroidePeque = i;
					asteroideGrande = j;
				}	
				else 
				{
					asteroidePeque = j;
					asteroideGrande = i;
				}						
				asteroides[asteroideGrande].desplazamiento = Vector2D(asteroides[asteroideGrande].desplazamiento.getX() + asteroides[asteroidePeque].desplazamiento.getX()*2, asteroides[asteroideGrande].desplazamiento.getY()+ asteroides[asteroidePeque].desplazamiento.getY()*2);
				asteroides[asteroideGrande].desplazamiento.normaliza();
				centro = Coordenada(((double)600+rand()%50),(double)800+ rand()%50);
				if(((int)(centro.obtenerX()))%2==0) centro = Coordenada(-centro.obtenerX()+600,centro.obtenerY());
				if(((int)(centro.obtenerY()))%2==0) centro = Coordenada(centro.obtenerX(),-centro.obtenerY()+800);				
				asteroides[asteroidePeque].desplazamiento = Vector2D((float)rand(),(float)rand());
				if(((int)asteroides[asteroidePeque].desplazamiento.getX())%3==0)	asteroides[asteroidePeque].desplazamiento.setX(-asteroides[asteroidePeque].desplazamiento.getX());
				if(((int)asteroides[asteroidePeque].desplazamiento.getY())%3==0)	asteroides[asteroidePeque].desplazamiento.setY(-asteroides[asteroidePeque].desplazamiento.getY());
				asteroides[asteroidePeque].desplazamiento.normaliza();
				asteroides[asteroidePeque].posicionaCentro(Coordenada(centro.obtenerX()+ 1000/asteroides[asteroidePeque].calcArea()*asteroides[asteroidePeque].desplazamiento.getX(), centro.obtenerY() + 1000/asteroides[asteroidePeque].calcArea()*asteroides[asteroidePeque].desplazamiento.getY()));
			}
		}
	}
}
Пример #12
0
Coordenada Calculador::calcularPosicionRelativa(Coordenada coord_tile, Coordenada coord_ceros_pixel){
	int x_nuevo, y_nuevo;

	//Posicionamiento en el eje y relativo
	x_nuevo = coord_ceros_pixel.x - coord_tile.y * DISTANCIA_ENTRE_X;
	y_nuevo = coord_ceros_pixel.y + coord_tile.y * DISTANCIA_ENTRE_Y;

	//posicionamiento en el eje x relativo
	x_nuevo = x_nuevo + coord_tile.x * DISTANCIA_ENTRE_X;
	y_nuevo = y_nuevo + coord_tile.x * DISTANCIA_ENTRE_Y;

	return Coordenada(x_nuevo,y_nuevo);
}
Пример #13
0
void ConfiguracionMapa::crearCeldas(){
	double incrementoLongitud = (longitudDerecha - longitudIzquierda) / ancho;
	double incrementoLatitud = (latitudSuperior - latitudInferior) / alto;
	for (int alto = this->alto - 1; alto >= 0; alto--){
		double latitudCentro = latitudInferior + incrementoLatitud * alto +
				(incrementoLatitud / 2);
		for (int ancho = 0; ancho < this->ancho; ancho++){
			double longitudCentro = longitudIzquierda +
					incrementoLongitud * ancho + (incrementoLongitud / 2);
			celdas.push_back(new Celda(
					Coordenada(longitudCentro, latitudCentro), &calle));
		}
	}
}
Пример #14
0
	Matriz matrizTransformacaoCanvas() {
		double radianos = vupVector.angleWith(Coordenada(0, 1, 0));


		double angulo = radianos / PI * 180.0;

		// gambi do joão pra fazer funcionar a rotação total e não só meia lua :v
		if (vupVector._x < 0) {
			angulo = 360 - angulo;
		}

		// move pro centro
		Matriz matrizTranslacaoNeg = MatrizUtil::matrizTranslacao3D(_centro.negativa());
		// rotaciona novamente pra vertical
		Matriz matrizRotacao = MatrizUtil::matrizRotacao3DZ(angulo);
		Matriz matrizTranslacao = MatrizUtil::matrizTranslacao3D(_centro);

		return  matrizTranslacaoNeg *  matrizRotacao * matrizTranslacao;
	}
Пример #15
0
void GameProyecto:: init(char* titulo ="Hola Mundo",int xpos = 0, int ypos = 0 , int alto = 100, int ancho = 100 , int banderas = 0, int cantAsteroides=100
	)
{
	
	if (SDL_Init(SDL_INIT_EVERYTHING) != 0){
		std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl;
		m_bRunning =  false;
	}

	m_pWindow = SDL_CreateWindow(titulo, xpos, ypos, alto, ancho, banderas);
	if (m_pWindow == nullptr){
		std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl;
		m_bRunning =  false;
	}

	m_pRenderer = SDL_CreateRenderer(m_pWindow, -1, SDL_RENDERER_ACCELERATED |
		SDL_RENDERER_PRESENTVSYNC);
	if (m_pRenderer == nullptr){
		std::cout << "SDL_CreateRenderer Error: " << SDL_GetError() << std::endl;
		m_bRunning =  false;
	}
	bmp = SDL_LoadBMP("./hello.bmp");
	if (bmp == nullptr){
		std::cout << "SDL_LoadBMP Error: " << SDL_GetError() << std::endl;
		m_bRunning= false;
	}
	tex = SDL_CreateTextureFromSurface(m_pRenderer, bmp);
	SDL_FreeSurface(bmp);
	if (tex == nullptr){
		std::cout << "SDL_CreateTextureFromSurface Error: " << SDL_GetError() << std::endl;
		m_bRunning = false;
	}
	for(int i = 0 ; i<cantAsteroides ; i++)
	{
		srand (i);
		int lados = (rand()%10 + rand()%15)%10 + 10;
		long double radio  = rand()%15 + rand()%25 +10;
		asteroides.push_back(Asteroide(lados,radio));
		asteroides.back().posicionaCentro(Coordenada((rand()%600),rand()%800));
	}
}
Пример #16
0
Coordenada Calculador::obtenerCoordenadaLibreCercaDeEdificio(Edificio* edificio,Escenario* escenario){
	Coordenada c_edificio = edificio->getPosicion();
	pair<int,int> tam = edificio->getTam();
	int max_distancia = 3;
	int x_ini = c_edificio.x - max_distancia;
	int y_ini = c_edificio.y - max_distancia;
	int x_fin = c_edificio.x+tam.first+max_distancia;
	int y_fin = c_edificio.y+tam.second+max_distancia;
	Coordenada c_inicial(x_ini, y_ini);
	Coordenada c_final(x_fin, y_fin);
	for (Coordenada c1 = c_inicial; c1.y <= c_final.y; c1.y++){
		for (Coordenada c2 = c1; c2.x <= c_final.x; c2.x++){
			if (puntoContenidoEnEscenario(c2,escenario)){
				Tile* tile = escenario->getTile(c2);
				if (tile->estaLibre())
					return c2;
			}
		}
	}

	return Coordenada(-1,-1);
}
Пример #17
0
void SpriteUnidad::update(int vel_personaje, Mix_Chunk* sonido_caminar){
	verificarEstadoEntidadConImagen();
	switch (entidad->getEstado()){
		case MURIENDO :
						if (indexSpriteActual+1 == FRAMES_MUERTE)
							entidad->cambioEstado(MUERTO);
						break;

		//default : //break;
		case CAMINANDO:
			if (this->quedaCaminoPorRecorrer()) {

				// Activo sonido del movimiento:
				Mix_PlayChannel(1, sonido_caminar, 0);
				/*	- calcular distancia al sig punto
				 *  - si es mayor a 1, seguir moviendo la posicion
				 *    sino cambiar al siguiente punto del camino (analizando la dirección)
				 *  - si ya no quedan camino a recorrer, cambiar estado de activar movimiento y acomodar
				 * */
				Coordenada c_prox_pixel = this->getCaminoARecorrer()[0];

				c_prox_pixel.x -= this->getPosicion().w / 2;
				c_prox_pixel.y -= this->getPosicion().h;

				float distancia = Calculador::calcularDistanciaEntrePixeles(Coordenada(this->regPos.posX_player, this->regPos.posY_player), c_prox_pixel);

				if (distancia > 1){
					if (this->regPos.posX_player != c_prox_pixel.x) {
						float x_result = (this->regPos.posX_player - ((this->regPos.posX_player - c_prox_pixel.x) / distancia) * vel_personaje  * 0.05);
						this->setPosX(int(x_result));
						this->regPos.posX_player = x_result;
					}
					if (this->regPos.posY_player != c_prox_pixel.y) {
						float y_result = (this->regPos.posY_player - ((this->regPos.posY_player - c_prox_pixel.y) / distancia) * vel_personaje * 0.05);
						this->setPosY(int(y_result));
						this->regPos.posY_player = y_result;
					}
				} else {

					/* guardar última coordenada para desocuparla y cambiar a la próxima */
					Coordenada c_ult_punto = this->getCaminoARecorrer()[0];
					this->quitarPrimeraCoordenada();

					/* Seteamos la dirección para el siguiente punto. */
					if (this->getCaminoARecorrer().size() > 0){
						try {
							//this->escenario->desocuparTile(Calculador::tileParaPixel(c_ult_punto, coord_ceros));
							if (this->revisarCamino(c_ult_punto)) {
								Coordenada c_prox_punto = this->getCaminoARecorrer()[0];
								c_prox_punto.x -= this->getPosicion().w / 2;
								c_prox_punto.y -= this->getPosicion().h / 2;
								Coordenada c_tile_actual = Calculador::tileParaCualquierPixel(coordPixelSprite(),coord_ceros);
								Coordenada c_tile_prox = Calculador::tileParaCualquierPixel(c_prox_punto,coord_ceros);
								if (c_tile_actual != c_tile_prox){
									Direccion direccion = Calculador::calcularDireccionEntrePuntosAdyacentes(c_tile_actual,c_tile_prox);
									this->setDireccion(direccion);
								}
								//Direccion direccion = Calculador::calcularDireccion(c_prox_punto, coordPixelSprite());
								//this->setDireccion(direccion);
							}
						} catch ( FueraDeEscenario &e ) { setearNuevoCamino(Camino(), coord_ceros); }
					} else // Se acaba de terminar el camino, que es de un solo paso.
						throw PasoCompletado(entidad->getIDJug());
				}

			} else {
				/* Cuando se deja de mover, se debería quedar en
				 * una posición firme correspondiente a su dirección. */
				 this->activarMovimiento(false);
				 entidad->cambioEstado(QUIETO);
				 // Paro el sonido:
				 Mix_HaltChannel(1);
			}
		   break;

		default: break;//
	}
/*
	if (estadoSprite != QUIETO){
		if (currentTime() > (1000/getFps())){
			efectuarMovimiento();
		}
	}
*/

           // bool hayColision = DetectorDeColisiones::verificarColisiones(this,juego->getSpritesEntidades());
           // if (hayColision) this->activarMovimiento(false);
}
Пример #18
0
// No lanza FueraDeEscenario.
Coordenada Calculador::pixelCentralDeCualquierTile(Coordenada coord_tile, Coordenada coord_ceros) {
	int pix_x = coord_ceros.x + 	(coord_tile.x - coord_tile.y) * DISTANCIA_ENTRE_X;
	int pix_y = coord_ceros.y + (1 + coord_tile.x + coord_tile.y) * DISTANCIA_ENTRE_Y;
	return Coordenada(pix_x, pix_y);
}
Пример #19
0
	void clip_Poligono(Objeto obj, DisplayFile* virt_clip){
		//CHANCE DE DAR MERDA EM TUDO POR COMPARAR IGUALDADE ENTRE DOUBLES
		//Inicializando as 3 listas
		ListaEnc<Coordenada> pontos_obj;
		ListaEnc<Coordenada> pontos_obj_ori;//usado para percorrer os pontos do objeto. pontos_obj será modificado.
		ListaEnc<Coordenada> pontos_window;
		ListaEnc<Coordenada> pontos_window_ori;
		ListaEnc<Coordenada> entrantes;

		ListaEnc<Coordenada>* pontos_obj_ = obj.pontos();
		for(int i =0; i<pontos_obj_->getSize();i++){
			pontos_obj.adiciona(*pontos_obj_->posicaoMem(i));
			pontos_obj_ori.adiciona(*pontos_obj_->posicaoMem(i));
		}
		pontos_window.adiciona(Coordenada(-1,-1,1));
		pontos_window.adiciona(Coordenada(-1,1,1));
		pontos_window.adiciona(Coordenada(1,1,1));
		pontos_window.adiciona(Coordenada(1,-1,1));

		pontos_window_ori.adiciona(Coordenada(-1,-1,1));
		pontos_window_ori.adiciona(Coordenada(-1,1,1));
		pontos_window_ori.adiciona(Coordenada(1,1,1));
		pontos_window_ori.adiciona(Coordenada(1,-1,1));

		bool gambiarraTudoDentro = true;

		//percorrendo os segmentos de reta do polígono e montando as 3 listas
		Elemento<Coordenada>* it_objeto = pontos_obj_ori.getHead();
		for(int i =0; i<pontos_obj_ori.getSize();i++){
			Coordenada pontoA = *pontos_obj_ori.posicaoMem(i);
			Coordenada pontoB = *pontos_obj_ori.posicaoMem((i+1) % (pontos_obj_ori.getSize()));
			it_objeto = it_objeto->_next;

			if(rcCode(pontoA)==0){ // A dentro;
				if(rcCode(pontoB)!=0){ //pontoB fora;

					//caso dentro-fora
					Objeto reta(" ", Reta, false);
					reta.adiciona(pontoA);
					reta.adiciona(pontoB);
					Objeto *nova_reta = reta_clippada(reta);
					ListaEnc<Coordenada>* pontos_reta = nova_reta->pontos();
					Coordenada novoB = *pontos_reta->posicaoMem(1);//pode dar problema de índice;
					insereNaWindow(&pontos_window, novoB);
					insereNoObjeto(&pontos_obj, pontoA, novoB);

					gambiarraTudoDentro = false;

				}else{
//					cout << "dentro dentro" << endl;
				}
			}
			else{
				gambiarraTudoDentro = false;
				Objeto reta(" ", Reta, false);
				reta.adiciona(pontoA);
				reta.adiciona(pontoB);
				Objeto *nova_reta = reta_clippada(reta);

				if(rcCode(pontoB)==0){ //pontoB dentro;
					//caso fora-dentro;
					ListaEnc<Coordenada>* pontos_reta = nova_reta->pontos();
					Coordenada novoA = *pontos_reta->posicaoMem(0);//pode dar problema de índice;
					insereNaWindow(&pontos_window, novoA);
					insereNoObjeto(&pontos_obj, pontoA, novoA);
					entrantes.adiciona(novoA);
				}
				else{
					//caso fora-fora
					if(nova_reta==0){
						continue;
					}
					//cortando 2 pontos da window:
					ListaEnc<Coordenada>* pontos_reta = nova_reta->pontos();
					Coordenada novoA = *pontos_reta->posicaoMem(0);//pode dar problema de índice;
					Coordenada novoB = *pontos_reta->posicaoMem(1);//pode dar problema de índice;
					insereNaWindow(&pontos_window, novoA);
					insereNaWindow(&pontos_window, novoB);
					insereNoObjeto(&pontos_obj, pontoA, novoA, novoB);
					entrantes.adiciona(novoA);
				}
			}
		}

		while(!entrantes.listaVazia()){
			Objeto* novo = new Objeto(obj.nome(), obj.getTipo(), obj.isPreenchido());
			Coordenada inicial = entrantes.retiraDoInicio();
			Coordenada atual = inicial;

			novo->adiciona(atual);
			Coordenada* it_pontos_obj = pontos_obj.posicaoMem(0);
			Coordenada* it_pontos_window = pontos_window.posicaoMem(0);

			//ajustando iteradores para as posićões corretas.
			bool varreWindow =false;
			int fuck1=0, fuck2=0;
			do{
				if(varreWindow){

					while(!igual(it_pontos_window->getX(), atual.getX()) || !igual(it_pontos_window->getY(),atual.getY())){
						it_pontos_window = pontos_window.posicaoMem(fuck1);
						fuck1 = (fuck1+1) % pontos_window.getSize();
					}

					it_pontos_window = pontos_window.posicaoMem(fuck1);
					fuck1 = (fuck1+1) % pontos_window.getSize();
					atual = *it_pontos_window;
//					cout << "adicionou" << endl;
					cout<< atual.getX() << ", " << atual.getY() << endl;
					novo->adiciona(atual);


					if(gambs_pontoPertence(pontos_window_ori, atual)){
						continue;
					}
					varreWindow = false;
				}
				else{

					while(!igual(it_pontos_obj->getX(), atual.getX()) || !igual(it_pontos_obj->getY(),atual.getY())){
						it_pontos_obj = pontos_obj.posicaoMem(fuck2);
						fuck2 = (fuck2+1) % pontos_obj.getSize();

					}


					it_pontos_obj = pontos_obj.posicaoMem(fuck2);
					fuck2 = (fuck2+1) % pontos_obj.getSize();
					atual = *it_pontos_obj;
					novo->adiciona(atual);

					if(gambs_pontoPertence(pontos_window, atual)){
						varreWindow = true;
						continue;
					}
					if(gambs_pontoPertence(pontos_obj_ori, atual)){

						continue;
					}
					varreWindow = true;
				}
			}while(!igual(atual.getX(), inicial.getX()) || !igual(atual.getY(), inicial.getY()));//atual!=inicial
			virt_clip->adiciona(novo);
		}
		if(gambiarraTudoDentro){
			ListaEnc<Coordenada>* pontos_obj_ = obj.pontos();
			Objeto* novo = new Objeto(obj.nome(), obj.getTipo(), obj.isPreenchido());
			for(int i =0; i<pontos_obj_->getSize();i++){
				novo->adiciona(*pontos_obj_->posicaoMem(i));
			}
			virt_clip->adiciona(novo);
		}
	}
Пример #20
0
Tile* Escenario::getTile(int x, int y){
	if (!coordEnEscenario(Coordenada(x,y)))
		return NULL;
	return this->matriz_tiles[x][y];
}
Пример #21
0
Coordenada Calculador::generarPosRandomDentroDeEscenarioConLimites(int size_x, int x_max, int x_min, int size_y, int y_max, int y_min) {
	Coordenada c = generarPosRandom(x_max, x_min, y_max, y_min);
	return Coordenada(ChequeoDeBorde(size_x, c.x), ChequeoDeBorde(size_y, c.y));
}