diff --git a/data/map/01.map b/data/map/01.map index fb09aba..d475932 100644 --- a/data/map/01.map +++ b/data/map/01.map @@ -7,5 +7,5 @@ room_left=0 room_right=0 [tilemap] -01.tmx +01_8.tmx [tilemap-end] \ No newline at end of file diff --git a/data/map/01_8.tmx b/data/map/01_8.tmx new file mode 100644 index 0000000..af00e86 --- /dev/null +++ b/data/map/01_8.tmx @@ -0,0 +1,34 @@ + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,263,264,0,0,0,0,0,0,0,0,257,258,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,295,296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,263,264,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,295,296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,263,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,263,0,0,0,0, +0,0,0,0,239,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,257,258,257,258,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,93,94,0,0,0,0,0,0,263,0,0,0,0,0,0, +0,0,0,289,290,289,290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,126,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,157,158,0,0,0,0,263,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,189,190,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,193,194,0,0,0,0,0,0,0,0,0,0,0,0,0,281,282,277,278,279,280,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,225,226,0,0,0,0,0,0,0,0,281,275,275,275,275,313,314,309,310,311,312,0,0,0,0,0,0,0,0,0,0,0,0, +263,264,263,264,263,264,263,264,263,264,263,264,263,264,263,264,263,264,263,266,266,266,283,284,266,265,266,264,263,264,263,264,263,264,263,264,263,264,263,264, +295,296,295,296,295,296,295,296,295,296,295,296,295,296,295,296,295,296,295,296,295,296,315,316,298,297,298,296,295,296,295,296,295,296,295,296,295,296,295,296 + + + diff --git a/source/map.cpp b/source/map.cpp index eea786c..39146da 100644 --- a/source/map.cpp +++ b/source/map.cpp @@ -23,9 +23,9 @@ Map::Map(std::string file, SDL_Renderer *renderer, Asset *asset) fillMapTexture(); // Inicializa variables - tile_width = 16; - map_width = 20; - map_height = 13; + tile_width = 16/2; + map_width = 20*2; + map_height = 13*2; } // Destructor @@ -194,10 +194,10 @@ void Map::fillMapTexture() texture_bg->render(renderer, 0, 0, &clip); // Dibuja el mapeado de tiles - const int tile_size = 16; - const int tileset_width_in_tiles = 16; - const int map_width_in_tiles = 20; - const int map_height_in_tiles = 13; + const int tile_size = 16/2; + const int tileset_width_in_tiles = 16*2; + const int map_width_in_tiles = 20*2; + const int map_height_in_tiles = 13*2; clip = {0, 0, tile_size, tile_size}; @@ -240,13 +240,13 @@ void Map::render() t_tile_map Map::getTile(SDL_Point p) { const int tile = tilemap[((p.y / tile_width) * map_width) + (p.x / tile_width)]; - const int png_width = 16; + const int png_width = 16*2; - if (tile >= 0 && tile < 4 * png_width) + if (tile >= 0 && tile < 4*2 * png_width) { return nothing; } - else if (tile >= (4 * png_width) && tile < 8 * png_width) + else if (tile >= (4*2 * png_width) && tile < 8*2 * png_width) { return wall; } diff --git a/source/player.cpp b/source/player.cpp index 4cb7f40..89d0f11 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -43,8 +43,8 @@ Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map) coins = 0; key.insert(key.end(), {0, 0, 0, 0, 0, 0}); const SDL_Point p = {0, 0}; - collider.insert(collider.end(), {p, p, p, p, p, p}); - underFeet.insert(underFeet.end(), {p, p}); + collider.insert(collider.end(), {p, p, p, p, p, p, p, p, p, p, p, p}); + underFeet.insert(underFeet.end(), {p, p, p}); } // Destructor @@ -139,15 +139,33 @@ void Player::updateColliders() { const SDL_Point p = {(int)x, (int)y}; + // Lado izquierdo collider[0] = p; - collider[1] = {p.x, p.y + 12}; - collider[2] = {p.x, p.y + 23}; - collider[3] = {p.x + 15, p.y}; - collider[4] = {p.x + 15, p.y + 12}; - collider[5] = {p.x + 15, p.y + 23}; + collider[1] = {p.x, p.y + 7}; + collider[2] = {p.x, p.y + 12}; + collider[3] = {p.x, p.y + 18}; + collider[4] = {p.x, p.y + 23}; + + // Lado derecho + collider[5] = {p.x + 15, p.y}; + collider[6] = {p.x + 15, p.y + 7}; + collider[7] = {p.x + 15, p.y + 12}; + collider[8] = {p.x + 15, p.y + 18}; + collider[9] = {p.x + 15, p.y + 23}; + + // Centro + collider[10] = {p.x + 7, p.y}; + collider[11] = {p.x + 7, p.y + 23}; +} + +// Actualiza los puntos de los pies +void Player::updateFeet() +{ + const SDL_Point p = {(int)x, (int)y}; underFeet[0] = {p.x, p.y + 24}; - underFeet[1] = {p.x + 15, p.y + 24}; + underFeet[1] = {p.x + 7, p.y + 24}; + underFeet[2] = {p.x + 15, p.y + 24}; } // Compruena las colisiones con el mapa @@ -224,7 +242,7 @@ void Player::animate() } else { - if (abs(vx) < 1.00f) + if (abs(vx) < 0.50f) { sprite->setCurrentAnimation("stand"); } @@ -242,7 +260,7 @@ bool Player::isOnFloor() { bool onFloor = false; - updateColliders(); + updateFeet(); for (auto f : underFeet) { diff --git a/source/player.h b/source/player.h index 89fc19c..6be18be 100644 --- a/source/player.h +++ b/source/player.h @@ -57,6 +57,9 @@ public: // Actualiza los puntos de colisión void updateColliders(); + // Actualiza los puntos de los pies + void updateFeet(); + // Compruena las colisiones con el mapa bool checkMapCollisions(); diff --git a/source/prog.cpp b/source/prog.cpp index f244870..f57859c 100644 --- a/source/prog.cpp +++ b/source/prog.cpp @@ -139,6 +139,7 @@ bool Prog::setFileList() // Ficheros binarios asset->add("/data/map/01.map", data); asset->add("/data/map/01.tmx", data); + asset->add("/data/map/01_8.tmx", data); asset->add("/data/config.bin", data, false); asset->add("/data/gamecontrollerdb.txt", data); asset->add("/data/animations/player.ani", data);