From aae3c6c64c7ad0c396029bb2e455ec433efea9d8 Mon Sep 17 00:00:00 2001 From: Askou Date: Thu, 17 Jun 2021 17:13:50 +0200 Subject: [PATCH] add new collision for map --- assets/map/bumper.png | Bin 26301 -> 14210 bytes assets/map/outer_wall.mtl | 12 ++++++++ assets/map/outer_wall.obj | 54 ++++++++++++++++++++++++++++++++++++ assets/map/outer_wall.png | Bin 0 -> 1013 bytes sources/Items/Bonus.cpp | 2 +- sources/Map/Map.cpp | 56 ++++++++++++++++++-------------------- sources/Map/Map.hpp | 4 ++- 7 files changed, 97 insertions(+), 31 deletions(-) create mode 100644 assets/map/outer_wall.mtl create mode 100644 assets/map/outer_wall.obj create mode 100644 assets/map/outer_wall.png diff --git a/assets/map/bumper.png b/assets/map/bumper.png index 63632844a4d7fbee363388dbf6af8090188d29f7..e8502594825aaa95d5d1eaa7e461c8c18a36542b 100644 GIT binary patch literal 14210 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 YADK*>ye5{nJ^%m!07*qoM6N<$f)-S-BLDyZ literal 26301 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

9yJ72F91@7NU3e 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 Ef=c^C2><{9 diff --git a/assets/map/outer_wall.mtl b/assets/map/outer_wall.mtl new file mode 100644 index 00000000..678256c4 --- /dev/null +++ b/assets/map/outer_wall.mtl @@ -0,0 +1,12 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl cube +Ns 225.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 diff --git a/assets/map/outer_wall.obj b/assets/map/outer_wall.obj new file mode 100644 index 00000000..5152d0f2 --- /dev/null +++ b/assets/map/outer_wall.obj @@ -0,0 +1,54 @@ +# Blender v2.92.0 OBJ File: '' +# www.blender.org +mtllib unbreakable_wall.mtl +o cube +v -0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 0.500000 +v -0.500000 0.500000 0.500000 +v 0.500000 0.500000 0.500000 +v -0.500000 0.500000 -0.500000 +v 0.500000 0.500000 -0.500000 +v -0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 -0.500000 +vt 0.000000 0.000000 +vt 0.333333 0.000000 +vt 0.000000 0.500000 +vt 0.333333 0.500000 +vt 0.666666 1.000000 +vt 1.000000 1.000000 +vt 0.666666 0.500000 +vt 1.000000 0.500000 +vt 0.000000 1.000000 +vt 0.333333 1.000000 +vt 0.000000 0.500000 +vt 0.333333 0.500000 +vt 0.666666 0.000000 +vt 1.000000 0.000000 +vt 0.666666 0.500000 +vt 1.000000 0.500000 +vt 0.666666 0.500000 +vt 0.666666 1.000000 +vt 0.333333 0.000000 +vt 0.666666 0.000000 +vt 0.333333 0.500000 +vt 0.666666 0.500000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -1.0000 -0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +usemtl cube +s 1 +f 1/1/1 2/2/1 3/3/1 +f 3/3/1 2/2/1 4/4/1 +f 3/5/2 4/6/2 5/7/2 +f 5/7/2 4/6/2 6/8/2 +f 5/9/3 6/10/3 7/11/3 +f 7/11/3 6/10/3 8/12/3 +f 7/13/4 8/14/4 1/15/4 +f 1/15/4 8/14/4 2/16/4 +f 2/17/5 8/12/5 4/18/5 +f 4/18/5 8/12/5 6/10/5 +f 7/19/6 1/20/6 5/21/6 +f 5/21/6 1/20/6 3/22/6 diff --git a/assets/map/outer_wall.png b/assets/map/outer_wall.png new file mode 100644 index 0000000000000000000000000000000000000000..e25f5252797d24a019d046d9127d4844551007e2 GIT binary patch literal 1013 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaeirbZlh+ zL~m?xXlZUBQ)6;vWo~n5Z*-~;4HN(X03mcmSad^jWnpw_Z*Cw|X>DZyGB7bVIxsgn zFgYMGG&(gnIx{hi>D4d*00TKmL_t(oN0pZgdYmu}guyJmWslSQ^nBR>)h~OzgBOx? z`Y9McG^3G8+xhRG-$yCSwC~#_Y}+<1%aY@9ZJtXTRUGr4Pxd8Z>&}lHMxOZN*p676 zV{p{>%mzVEFu=+G7jNXBEtgV;kV3TpB8{p3P7wHz5Rt zNPRk#L?mA(HLyR=e4HI^fj`K8Bd+J&r_b!5g_Skb{#G4e7vG=^fIxfLDH% zG=ZBD+N=G_A@nTU3K2?6=;henXZNmVKE j#8+_FoS3mspeed >= 0.4) return; - controllable->speed = 0.025f; + controllable->speed += 0.025f; const_cast(bonus).scheduleDeletion(); } diff --git a/sources/Map/Map.cpp b/sources/Map/Map.cpp index 305e94dd..d1d70223 100644 --- a/sources/Map/Map.cpp +++ b/sources/Map/Map.cpp @@ -29,7 +29,7 @@ namespace BBM if (!movable || !bumperTimer) return; if (!bumperTimer->_isReseting) { - movable->_velocity.y = 1.5; + movable->_velocity.y = 2; bumperTimer->_isReseting = true; } } @@ -113,6 +113,7 @@ namespace BBM const std::string MapGenerator::imageExtension = ".png"; const std::string MapGenerator::objExtension = ".obj"; const std::string MapGenerator::breakableWallPath = MapGenerator::wallAssetsPath + "breakable_wall"; + const std::string MapGenerator::outerWallPath = MapGenerator::wallAssetsPath + "outer_wall"; const std::string MapGenerator::unbreakableWallPath = MapGenerator::wallAssetsPath + "unbreakable_wall"; const std::string MapGenerator::floorPath = MapGenerator::wallAssetsPath + "floor"; const std::string MapGenerator::secondFloorPath = MapGenerator::wallAssetsPath + "upper_floor"; @@ -145,58 +146,55 @@ namespace BBM void MapGenerator::generateWall(int width, int height, std::shared_ptr scene) { - static const std::string unbreakableObj = unbreakableWallPath + objExtension; - static const std::string unbreakablePnj = unbreakableWallPath + imageExtension; + static const std::string outerWallObj = unbreakableWallPath + objExtension; + static const std::string outerWallPnj = unbreakableWallPath + imageExtension; - for (int i = 0; i < height + 1; i++) { + for (int i = -1; i < height + 2; i++) { scene->addEntity("Bomb stopper") .addComponent(-1, 0, i) - .addComponent>(); + .addComponent>() + .addComponent(outerWallObj, false, + std::make_pair(MAP_DIFFUSE, outerWallPnj)); scene->addEntity("Bomb stopper") .addComponent(width + 1, 0, i) - .addComponent>(); + .addComponent>() + .addComponent(outerWallObj, false, + std::make_pair(MAP_DIFFUSE, outerWallPnj)); } for (int i = 0; i < width + 1; i++) { scene->addEntity("Bomb stopper") .addComponent(i, 0, -1) - .addComponent>(); + .addComponent>() + .addComponent(outerWallObj, false, + std::make_pair(MAP_DIFFUSE, outerWallPnj)); scene->addEntity("Bomb stopper") .addComponent(i, 0, height + 1) - .addComponent>(); + .addComponent>() + .addComponent(outerWallObj, false, + std::make_pair(MAP_DIFFUSE, outerWallPnj)); } scene->addEntity("Bottom Wall") .addComponent(Vector3f((width + 1) / 2, 0, -1)) .addComponent( WAL::Callback(), - &MapGenerator::wallCollision, Vector3f(-(width + 1) / 2 , 0.25, 0.25), Vector3f(width + 1, 2, 0.75)) - .addComponent(unbreakableObj, false, - std::make_pair(MAP_DIFFUSE, unbreakablePnj), - RAY::Vector3(width + 3, 1, 1)); + &MapGenerator::wallCollision, Vector3f(-(width + 1) / 2 , 0.25, 0.25), Vector3f(width + 1, 2, 0.75)); scene->addEntity("Upper Wall") .addComponent(Vector3f((width + 1) / 2, 0, height + 1)) .addComponent( WAL::Callback(), - &MapGenerator::wallCollision, Vector3f(-(width + 1) / 2 , 0.25, 0.25), Vector3f(width + 1, 2, 0.75)) - .addComponent(unbreakableObj, false, - std::make_pair(MAP_DIFFUSE, unbreakablePnj), - RAY::Vector3(width + 3, 1, 1)); + &MapGenerator::wallCollision, Vector3f(-(width + 1) / 2 , 0.25, 0.25), Vector3f(width + 1, 2, 0.75)); scene->addEntity("Left Wall") .addComponent(Vector3f(width + 1, 0, height / 2)) .addComponent( WAL::Callback(), - &MapGenerator::wallCollision, Vector3f(0.25, 0.25, -(height + 1) / 2 ), Vector3f(0.75, 2, height + 1)) - .addComponent(unbreakableObj, false, - std::make_pair(MAP_DIFFUSE, unbreakablePnj), - RAY::Vector3(1, 1, height + 1)); + &MapGenerator::wallCollision, Vector3f(0.25, 0.25, -(height + 1) / 2 ), Vector3f(0.75, 2, height + 1)); scene->addEntity("Right Wall") .addComponent(Vector3f(-1, 0, height / 2)) .addComponent( WAL::Callback(), - &MapGenerator::wallCollision, Vector3f(0.25, 0.25, -(height + 1) / 2 ), Vector3f(0.75, 2, height + 1)) - .addComponent(unbreakableObj, false, - std::make_pair(MAP_DIFFUSE, unbreakablePnj), - RAY::Vector3(1, 1, height + 1)); + &MapGenerator::wallCollision, Vector3f(0.25, 0.25, -(height + 1) / 2 ), Vector3f(0.75, 2, height + 1)); + } void MapGenerator::generateFloor(MapBlock map, int width, int height, std::shared_ptr scene) @@ -331,13 +329,13 @@ namespace BBM map[std::make_tuple(x, y, z - 1)] == blockType); } - MapGenerator::BlockType MapGenerator::getRandomBlockType() + MapGenerator::BlockType MapGenerator::getRandomBlockType(bool hasHeight) { double rnd = static_cast(std::rand()) / RAND_MAX; - if (rnd > 0.98) + if (rnd > 0.98 && !hasHeight) return HOLE; - if (rnd > 0.25) + if ((!hasHeight && rnd > 0.25) || rnd > 0.7) return BREAKABLE; return NOTHING; } @@ -446,7 +444,7 @@ namespace BBM if (isCloseToBlockType(map, i, 0, j, SPAWNER)) { map[std::make_tuple(i, isNotClassic ? -1 : 0, j)] = isNotClassic ? BUMPER : NOTHING; } else { - map[std::make_tuple(i, 0, j)] = getRandomBlockType(); + map[std::make_tuple(i, 0, j)] = getRandomBlockType(isHeight); } if (map[std::make_tuple(i, 0, j)] == UNBREAKABLE && isCloseToBlockType(map, i, 0, j, UNBREAKABLE)) map[std::make_tuple(i, 0, j)] = BREAKABLE; @@ -501,7 +499,7 @@ namespace BBM .addComponent(Vector3f(width / 2 - width / 4, 0, height / 2 - height / 4)) .addComponent( WAL::Callback(), - &MapGenerator::wallCollided, Vector3f(0.25, 0.25, 0.25),Vector3f(width, 0.75, height / 2 + height / 4)); + &MapGenerator::wallCollided, Vector3f(0.25, 0.25, 0.25),Vector3f(width / 2 + width / 4, 0.75, height / 2 + height / 4)); } void MapGenerator::loadMap(int width, int height, MapBlock map, const std::shared_ptr &scene) diff --git a/sources/Map/Map.hpp b/sources/Map/Map.hpp index ff7b712e..0606cb54 100644 --- a/sources/Map/Map.hpp +++ b/sources/Map/Map.hpp @@ -49,7 +49,7 @@ namespace BBM using MapBlock = std::map, BlockType>; //! @brief Generate random block type - static BlockType getRandomBlockType(); + static BlockType getRandomBlockType(bool = false); //! @param map ASCII map //! @param x x index on the block @@ -160,6 +160,8 @@ namespace BBM static const std::string unbreakableWallPath; + static const std::string outerWallPath; + static const std::string breakableWallPath; static const std::string floorPath;