示例#1
0
bool Escenario::agregarEntidad(Coordenada pos, Entidad* entidad){
	if (!coordEnEscenario(pos))
		throw FueraDeEscenario();
	try {
		pair<int,int> dim = entidad->getTam();
		// Se fija que todos los tiles a ocupar estén vacíos antes de ocuparlos
		for (int j = 0; j < dim.second; j++)
			for (int i = 0; i < dim.first; i++){
				Tile* tile = this->matriz_tiles[pos.x+i][pos.y+j];
				if (!tile->estaLibre())
					throw TileEstaOcupado();
			}
		for (int j = 0; j < dim.second; j++){
			for (int i = 0; i < dim.first; i++){
				Tile* tile = this->matriz_tiles[pos.x+i][pos.y+j];
				if (i==round(dim.first/2.0)-1 && j==round(dim.second/2.0)-1)
					tile->agregarEntidad(entidad, true);
				else tile->agregarEntidad(entidad);
			}
		}
		// Se guardan en posicionesEntidades todas las entidades agregadas al mapa. No se lo limpia TODO
		posicionesEntidades->push_back(entidad);
	} catch ( TileEstaOcupado &e ) {
		Log::imprimirALog(ERR,"Se intentó agregar una entidad en un tile ocupado "+entidad->enc());
		return false;
	}
	return true;
}
示例#2
0
void Escenario::actualizarPosicionParaEntidad(Coordenada c, Entidad* entidad){
	/* Si las coordenadas no son iguales, actualizar la coordenada de cualquier entidad */
	if (entidad->getPosicion() != c) {
		Tile* tile = getTile(entidad->getPosicion());
		try {
			if (tile != NULL)
				tile->eliminarEntidad(entidad);
		} catch ( NoSeRecibio &e ) { Log::imprimirALog(ERR, "No se encontró entidad en posición buscada, se creó una repetida?"); }

		/* agregamos la entidad a su nuevo tile */
		tile = getTile(c.x, c.y);
		if (tile != NULL)
			tile->agregarEntidad(entidad);
		entidad->setPosicion(c);
	}
}