From 1779fde39716ee9bdbb931b31adafda5fbedc558 Mon Sep 17 00:00:00 2001 From: Jan Mrna Date: Mon, 29 Sep 2025 06:24:22 +0200 Subject: [PATCH] Some more terrain painting --- cpp/resources/player.png | Bin 10415 -> 4007 bytes cpp/src/entities.cpp | 2 +- cpp/src/map.cpp | 21 +++++++++++++++++++-- cpp/src/map.hpp | 1 + cpp/src/pathfindingdemo.cpp | 22 ++++++++++++++++++++-- cpp/src/tile.cpp | 9 +++++---- cpp/src/tile.hpp | 3 ++- 7 files changed, 48 insertions(+), 10 deletions(-) diff --git a/cpp/resources/player.png b/cpp/resources/player.png index d313d399c53ce78359883564b3353dbc95eccd7f..5309a8a0ae8dd98a4884a04b0b8073986838332f 100644 GIT binary patch delta 3944 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 KMNUMnLSTa1I!c@X diff --git a/cpp/src/entities.cpp b/cpp/src/entities.cpp index 0122f12..e3e0f50 100644 --- a/cpp/src/entities.cpp +++ b/cpp/src/entities.cpp @@ -60,7 +60,7 @@ Sprite &Player::GetSprite() { void Player::LoadResources() { m_Sprite = - std::make_unique("resources/player.png", WorldPos{38.0f, 46.0f}); + std::make_unique("resources/player.png", WorldPos{19.0f, 23.0f}); } std::unique_ptr Player::m_Sprite; diff --git a/cpp/src/map.cpp b/cpp/src/map.cpp index a9e5886..aa48775 100644 --- a/cpp/src/map.cpp +++ b/cpp/src/map.cpp @@ -104,12 +104,29 @@ void Map::PaintLine(TilePos start_tile, TilePos stop_tile, double width, TileTyp for (double t = 0; t < line_length; t += 1.0) { for (double ortho_t = 0; ortho_t < width; ortho_t += 0.1) { auto tile_pos = start + step * t + ortho * ortho_t; - size_t row = static_cast(tile_pos.x); - size_t col = static_cast(tile_pos.y); if (IsTilePosValid(tile_pos)) { + size_t row = static_cast(tile_pos.x); + size_t col = static_cast(tile_pos.y); m_Tiles[row][col] = &tile_types.at(tile_type); } } } } + +void Map::PaintRectangle(TilePos first_corner, TilePos second_corner, TileType tile_type) +{ + std::initializer_list xvals = {first_corner.x, second_corner.x}; + std::initializer_list yvals = {first_corner.y, second_corner.y}; + for (int x = std::min(xvals); x < std::max(xvals); x++) { + for (int y = std::min(yvals); y < std::max(yvals); y++) { + TilePos tile_pos{x,y}; + LOG_DEBUG("tile_pos = ", tile_pos); + if (IsTilePosValid(tile_pos)) { + size_t row = static_cast(tile_pos.x); + size_t col = static_cast(tile_pos.y); + m_Tiles[row][col] = &tile_types.at(tile_type); + } + } + } +} diff --git a/cpp/src/map.hpp b/cpp/src/map.hpp index 763ecf8..2be7b64 100644 --- a/cpp/src/map.hpp +++ b/cpp/src/map.hpp @@ -35,6 +35,7 @@ public: // methods for drawing on the map void PaintCircle(TilePos center, unsigned radius, TileType tile_type); void PaintLine(TilePos start, TilePos stop, double width, TileType tile_type); + void PaintRectangle(TilePos first_corner, TilePos second_corner, TileType tile_type); std::vector GetNeighbors(TilePos center) const; float GetCost(TilePos pos) const { return GetTileAt(pos)->cost; } diff --git a/cpp/src/pathfindingdemo.cpp b/cpp/src/pathfindingdemo.cpp index 39fe40e..63d51f2 100644 --- a/cpp/src/pathfindingdemo.cpp +++ b/cpp/src/pathfindingdemo.cpp @@ -29,18 +29,36 @@ void PathFindingDemo::AddEntity(std::shared_ptr e) { } void PathFindingDemo::CreateMap() { - // create the map + // lake m_Map.PaintCircle(TilePos{50, 50}, 10, TileType::WATER); m_Map.PaintCircle(TilePos{75, 100}, 50, TileType::WATER); + // river m_Map.PaintLine(TilePos{0,0}, TilePos{100,100}, 3.0, TileType::WATER); + // road m_Map.PaintLine(TilePos{17,6}, TilePos{100,6}, 5.0, TileType::ROAD); m_Map.PaintLine(TilePos{10,17}, TilePos{10,100}, 5.0, TileType::ROAD); m_Map.PaintLine(TilePos{20,10}, TilePos{10,20}, 5.0, TileType::ROAD); + // bridges + m_Map.PaintLine(TilePos{50,75}, TilePos{70,75}, 5.0, TileType::WOOD); + m_Map.PaintLine(TilePos{95,26}, TilePos{95,60}, 5.0, TileType::WOOD); + // island + m_Map.PaintRectangle(TilePos{70, 60}, TilePos{100,100}, TileType::GRASS); + // walls + m_Map.PaintLine(TilePos{71,60}, TilePos{90,60}, 1.0, TileType::WALL); + m_Map.PaintLine(TilePos{77,67}, TilePos{100,67}, 1.0, TileType::WALL); + m_Map.PaintLine(TilePos{71,60}, TilePos{71,75}, 1.0, TileType::WALL); + m_Map.PaintLine(TilePos{72,73}, TilePos{95,73}, 1.0, TileType::WALL); + m_Map.PaintLine(TilePos{95,73}, TilePos{95,90}, 1.0, TileType::WALL); + m_Map.PaintLine(TilePos{71,81}, TilePos{71,100}, 1.0, TileType::WALL); + m_Map.PaintLine(TilePos{72,81}, TilePos{90,81}, 1.0, TileType::WALL); + m_Map.PaintLine(TilePos{89,87}, TilePos{89,100}, 1.0, TileType::WALL); + m_Map.PaintLine(TilePos{84,81}, TilePos{84,96}, 1.0, TileType::WALL); + m_Map.PaintLine(TilePos{78,87}, TilePos{78,100}, 1.0, TileType::WALL); // add player m_Entities.clear(); m_Player = std::make_shared(); - m_Player->SetPosition(WorldPos{250.0f, 200.0f}); + m_Player->SetPosition(m_Map.TileToWorld(TilePos{25, 20})); m_Entities.push_back(m_Player); } diff --git a/cpp/src/tile.cpp b/cpp/src/tile.cpp index 1a85a1d..e8d5aa0 100644 --- a/cpp/src/tile.cpp +++ b/cpp/src/tile.cpp @@ -6,8 +6,9 @@ // we could use array here, but this is more explicit, // and we don't access tile_types that often, so it should be ok const std::unordered_map tile_types = { - { TileType::GRASS, Tile{1.0, 0, 200, 0, 255}}, - { TileType::MUD, Tile{2.0, 100, 100, 100, 255}}, - { TileType::ROAD, Tile{0.5, 20, 20, 20, 255}}, - { TileType::WATER, Tile{10.0, 0, 50, 200, 255}}, + { TileType::GRASS, Tile{1.0, 0, 200, 0, 255}}, + { TileType::WOOD, Tile{1.0, 132, 68, 0, 255}}, + { TileType::ROAD, Tile{0.5, 20, 20, 20, 255}}, + { TileType::WATER, Tile{10.0, 0, 50, 200, 255}}, + { TileType::WALL, Tile{1000.0, 144, 33, 0, 255}}, }; diff --git a/cpp/src/tile.hpp b/cpp/src/tile.hpp index c7d3535..c80f931 100644 --- a/cpp/src/tile.hpp +++ b/cpp/src/tile.hpp @@ -13,9 +13,10 @@ struct Tile { enum class TileType { GRASS, - MUD, + WOOD, ROAD, WATER, + WALL, }; extern const std::unordered_map tile_types;